• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

引用符altimetriche

Martina Webber

Guest
buonasera a tutti,
sono martina una disegnatrice tecnica ed utilizzo autocad 2017, ho cercato ovunque e non ho trovato una soluzione al mio problema (mi sembra una cosa banale ma non riesco a capire dove mettere le mani) vi spiego.
ho un lisp che fissando un punto di riferimento riesce ad aggiornare tutti i blocchi selezionati chiamati "quota_altimetrica". non ci sono problemi fino a quando non cambio la visibilità del blocco (per visualizzare il simbolo della falda acquifera), se provo ad attualizzare la quota non si seleziona, come se il blocco fosse un'altro.
l'unico modo per risolvere la situazione è ripristinare il blocco, aggiornare la quota e poi selezionare la visibilità desiderata, ma non è pratico.

non so dove sbattere la testa, pensavo di fare due blocchi diversi e due lisp diversi ma non sono combatibili, cioè ho carico uno o carico l'altro, non li usa in parallelo.

allego un file dwg con il blocco in questione e il lisp (purtroppo è in tedesco).
View attachment Quote.dwg, View attachment Quota altimetrica.lsp

n.b.: l'attributo nelle due visibilità è lo stesso, l'unica differenza è la presenza delle lineette sotto la quota.
 
ciao.
se ti accontenti un programma senza blocchi di offro il mio.
devi memorizzarlo in file chiamato quotav.lsp
lo inserisci in una directory di ricerca (ad esempio autocad 2017-support)
parte col comando (load "quotav") provalo.
se non dovesse bastarti ti indico un sito dove ho visto texitaliano64 che ha messo a disposizione un programma analogo, penso fatto con blocchi.
ciao

http://bar-ingegneria.forumfree.it/?t=74986967#newpost

;quotav.lsp calcola e inserisce quote verticali
;autocad 2012 25-11-2011
(prompt "\n ")
(setq n (getvar "useri1"))
(cond
((= n 0);unità cm
(setq um "cm" dec 0)
)
((= n 1);unità mm
(setq um "mm" dec 0)
)
((= n 2);unità m
(setq um "m" dec 2)
)
);cond

(if ht nil (setq ht 2)) ;imposta altezza testo
(if qb nil (setq qb 0)) ;imposta quota base
(setq sc (getvar "dimscale")
pb (getpoint "\npunto quota base : ")
a (strcat "\nimmetti valore quota base <" (rtos qb) "> :")
qb1 (getreal a)
a (strcat "\nimmetti altezza testo ht = mm <" (rtos ht) "> :")
ht1 (getreal a) ;chiede altezza
)
(if (/= ht1 nil) (setq ht ht1)) ;imposta altezza testo
(if (/= qb1 nil) (setq qb qb1)) ;imposta quota base
(setq dl (* 0.125 ht sc))
(command "_setvar" "textsize" (* ht (getvar "dimscale") 0.1))
(command "_color" 3)
(command "_linetype" "_s" "continuous" "")


(while (= 1 1)
(setq os (getvar "osmode"))
(setq p (getpoint "\nimmetti punto quota : ")
dh (- (cadr p) (cadr pb))
dh (+ dh qb)
a (rtos dh 2 dec)
)
(if (= dh 0) (setq a (strcat "%%p" a)))
(if (> dh 0) (setq a (strcat "+" a)))
(setq p1 (list (- (car p) dl) (+ (cadr p) dl))
p1 (list (- (car p) dl) (+ (cadr p) dl))
p2 (list (car p) (+ (cadr p) dl))
p3 (list (+ (car p) dl) (+ (cadr p) dl))
)
(command "_osmode" 0)
(command "_pline" p3 p p1 p3 "")
(command "_solid" p2 p3 p "" "")
(command "_text" "_c" (list (car p) (+ (cadr p) (* 0.2 ht sc))) "" 0 a)
(command "_osmode" os)
);while
 
buongiorno,
grazie [MENTION=22561]betoniera[/MENTION] per la dritta, ho già provato questo lisp e la comodità del blocco e del lisp in mio possesso è che le quote si possono aggiornare anche in un secondo momento, e se devo spostarle o cambiare il tipo di quota dovrebbe essere più veloce, è da un paio di mesi che ci lavoro, ma il lisp non l'ho scritto io e non riesco a metterci mano data la mia ignoranza della programmazione, sono riuscita a capire che quello che influisce sulla selezione del blocco è

(ssget ...

ma non riesco a capire come poter inserire oltre al blocco "quota_altimetrica" la possibilitá di scelta di un secondo elemento (un blocco ad esembio per la falda acquifera), dovrebe essere

(ssadd ...

nel momento che riuscissi a risolvere il problema lo metterei a disposizione di tutti (dopo aver tradotto le indicazioni dal tedesco all'italiano, sono dell'alto adige per questo le indicazioni sono in tedesco)
 
il problema, secondo me martina, è che quando cambi la visibilità di un blocco dinamico, autocad lo "rinomina" in *u<numero> (come fosse un blocco anonimo) e quindi il lisp non lo vede più
 
grazie tristan, immaginavo succedesse una cosa simile, quindi sarebbe meglio creare due blocchi ma non riesco a capire come scrivere nel lisp che oltre a prendere "quote_altimetriche" si può selezionare anche "quote_altimetriche_falda". fino adesso ho capito che questo si deve specificare nella stringa

(setq liste (ssget '((0 . "insert") (2 . "quota_altimetrica")) ))
(setq anzahl (sslength liste))
(setq nr 0)
(while (< nr anzahl) (setq element (ssname liste nr))


ma non capisco come devo inserire

(ssadd

e soprattutto dove

se preferite traduco il lisp in italiano, non è un problema
 
il problema nasce dal comando ssget che cerca il blocco con nome "quota_altimetrica", i blocchi dinamici vengono rappresentati con nome *u.. ma tramite la funzione (vlax-get-property (vlax-ename->vla-object n) 'effectivename) è possibile avere il nome originale.
nel file lisp ho aggiunto la funzione che opera tale operazione, la trovi in fondo al file, aggiunto il codice che crea la lista filtrando tutti i blocchi con il nome effettivo.

ciao
 

Attachments

mitichissimo rpor66, mi hai risolto il problema :finger::finger::4406:

pensate che sia utile metterlo a disposizione di tutti su una discussione a parte oppure può andare bene così? l'avrei tradotto in italiano e con l'aggiunta della correzione potrei mettere a disposizione il blocco completo con il lisp in italiano.
 
ecco fatto, ora ho tradotto il lisp con le indicazioni in italiano (mi scuso per l'inconveniente).
allego insieme al lisp in italiano anche il file dwg che contiene il blocco completo (oltre alla falda cè il tipo di quota per l'esistente secondo la normativa vigente).

grazie ancora immensamente dell'aiuto e spero che la prossima volta non dovrò chiedere aiuto ma caricherò qualcosa di utile a tutti...
 

Attachments

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top