-
.
Presento una mia recente applicazione per inserire ed aggiornare le quote altimetriche in AutoCAD.
Io utilizzo AutoCAD per lavoro a partire dalla versione 12 per DOS, ebbene dopo tanti anni non mi risulta sia ancora stata inserita come standard la quotatura altimetrica di viste o sezioni, (presumo sia presente nella versione potenziata architectural, mechanical, o simiari).
Probabile che nel web o nei vostri cassetti ci sia già un tool similare, ma io non sono stato in grado di trovarne uno libero che facesse al caso mio.
Link per il download:
https://app.box.com/s/vldguwjosodo1nczrkbks6k059af7xgx
Il file di menu customizzato che descrive le funzioni implementate in autoLISP è il seguente:
File "AcadQElev.mnu"
***POP14
ID_QuoteElevazioni [QuoteE&levazioni]
ID_InserisciQElev [&inserisci quote]^c^cInsQElev;
ID_AggiornaQElev [&aggiorna quote]^c^cAggQElev;
[--]
ID_ScalaQElev [&scala blocchi quote elevazioni]^c^cScQElev;
ID_PrecisioneQElev [&precisione quote elevazioni]^c^cprecQElev;
ID_MoltiplicatoreQElev [&moltiplicatore quote elevazioni]^c^cmulQElev;
ID_AggiungiZeriQElev [a&ggiungi zeri alle quote elevazioni]^c^czeriQElev;
Naturalmente sarà possibile creare oltre al menù a tendina anche una toolbar equivalente più pratica.
Descrizione sommaria:
InsQElev serve ad inserire il blocco q_elev con all'interno l'attributo quota nei punti specificati dall'utente.
AggQElev serve ad aggiornare tutti i blocchi di quota selezionati utilizzando come livello base la quota definita in un blocco quota specificato (sensibile all' UCS impostato).
ScQElev serve a definire la scala di inserimento dei blocchi quota q_elev
precQElev serve a definire il numero di decimali dopo la virgola, di default equivale a quello delle quote in uso
mulQElev serve a definire un fattore di moltiplicazione alle quote, di default equivale a quello delle quote in uso
zeriQElev serve a definire se riempire con zeri i decimali vuoti dopo la virgola.
Edited by texitaliano64 - 14/11/2020, 17:16Attached Image. -
.
Dove possiamo scaricare il file? . -
Betoniera.
User deleted
Ciao Afazio, ciao a tutti
Avevo fatto un programma analogo di cui vi mando il listato
parte col comando (load "quota-qu").
Da anni lo uso. Però va provato perchè potrebbe esserci qualche impostazione di variabile del file di Autocad che lo manda in errore (ad esempio sui testi).
Se da qualche errore lo sistemiamo.
Ciao
;Quota-qu.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. -
.
@afazio, caricherò i files nel cloud ed inserirò il link dopo la descrizione più dettagliata dell'applicazione.
@betoniera, complimenti, vedo che anche te hai sviluppato un comando simile per certi versi, ma che manca della funzione di aggiornamento automatico delle quote inserite senza l'onere di reinserirle daccapo, od editarle manualmente.
ScQElev
serve a definire la scala di inserimento dei blocchi quota q_elev, il parametro viene salvato nella variabile utente del disegno "USERR4" e di default vale 100.00
precQElev
serve a definire il numero di decimali dopo la virgola, di default equivale a quello delle quote in uso, il parametro viene salvato nella variabile utente del disegno "USERI4" e di default vale il valore della variabile di sistema "DIMDEC".
mulQElev
serve a definire un fattore di moltiplicazione alle quote, di default equivale a quello delle quote in uso, il parametro viene salvato nella variabile utente del disegno "USERR5" e di default vale il valore della variabile di sistema "DIMLFAC".
Questo comando lo trovo particolarmente utile qualora si debbano inserire quote altimetriche espresse in metri su disegni quotati in millimetri o centimetri.
zeriQElev
serve a definire se riempire con zeri i posti decimali vuoti dopo la virgola, questo parametro è influenzato dal numero di decimali della quotatura, il parametro viene salvato nella variabile utente del disegno "USERI5" e di default vale 0, può assumere i valori 0=False, 1=True
InsQElev
serve ad inserire il blocco q_elev con all'interno l'attributo quota nei punti specificati dall'utente.
Il blocco q_elev io lo utilizzo in scala unitaria, ma può essere di qualsiasi scalatura, il programma è flessibile.
Accanto alle quote altimetriche tra parentesi tonda può essere inserita una nota a piacere che verrà mantenuta anche con l'aggiornamento quote automatico, valori validi "+0.20(pf)" "+2.56(pensilina)" ecc. ecc.
AggQElev
serve ad aggiornare tutti i blocchi di quota selezionati utilizzando come livello base la quota definita in un blocco quota specificato (sensibile all' UCS impostato).
LINK:
https://app.box.com/s/vldguwjosodo1nczrkbks6k059af7xgx
Edited by texitaliano64 - 25/10/2017, 18:05. -
.
Il programma 'Quote altimetriche' lo sto usando regolarmente da alcuni mesi. Lo ho testato su Autocad2007 USA, Autocad2007 ITA, ed Autocad2012 USA. Ritengo che possa funzionare su tutte le versioni di Autocad anche localizzate a partire dalla R12 per MSDOS, comprese le versioni di autocad per Machintosh. . -
.
Dovrò provarlo su progecad: quello di betoniera ha funzionato senza problemi perché non ricorreva al visual lisp. . -
.
Installazione in AutoCAD:
1) Scaricare il file AcadQElev.arj dal link precedentemente postato
2) Scompattarlo col decompressore preferito, ed otteniamo i quattro files AcadQElev.mnu, AcadQElev.cuix, QElevazione.fas, q_elev.dwg
4) Carichiamo il file lisp "QElevazione.fas" con appload o tramite menù a tendina, per renderlo persistente ad ogni avvio di autoCAD, o apertura di nuovo file dwg, caricarlo nel contenitore a forma di busta
5) Spostiamo il file "q_elev.dwg" nella cartella dei blocchi predefinita, o dei blocchi personali customizzata da noi, di percorso noto ad autoCAD
6) Possiamo caricare con il comando menuload il menù parziale "AcadQElev.mnu", in alternativa avendo a disposizione una versione di AutoCAD v2012 o superiore caricare con cuiload la toolbar e menù personalizzato "AcadQElev.cuix"
Note:
Il blocco q_elev.dwg è stato salvato in formato Acad2007, se possedete versioni più datate di autoCAD convertitelo in un formato compatibile.. -
.Ciao Afazio, ciao a tutti
Avevo fatto un programma analogo di cui vi mando il listato
parte col comando (load "quota-qu").
Da anni lo uso. Però va provato perchè potrebbe esserci qualche impostazione di variabile del file di Autocad che lo manda in errore (ad esempio sui testi).
Se da qualche errore lo sistemiamo.
Ciao
;Quota-qu.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
ciao Betoniera
Mi sono permesso di trasformare la tua utility Auto-Lisp.
Si salva un file di testo come <betoqu.lsp>.
Si carica il lisp in autocad. Si lancia da riga di comando scrivendo <betoqu>
Grazie.
Accetto correzioni perché il poco Auto-LISP che conoscevo l'ho ormai dimenticato e non ho più il Visual-LispCODICE(defun c:betoqu()
;By betoniera https://bar-ingegneria.forumfree.it/?t=74986967#entry614527907 Inviato il 23/10/2017, 13:30
;Si carica il lisp-file betoqu.lsp e si lancia da riga di comando scrivendo <betoqu>.
;
(prompt "\ndefun c:betoqu() Avvio utility di Betoniera per inserire quote verticali come nelle sezioni \n")
(alert " la defun c:betoqu() permette di quotare livelli con autolisp by <betoniera> del bar-ingegneria - customized quattropassi feb 2020")
(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" "")
; in rete trovo questa soluzione per ripetere il ciclo finché premo un punto
; ed esce se premo invio o spazio (perché così si restituisce <nil>)
(while (setq PtProsegue (getpoint "\nInsertion point [Enter/space when done]: ")) ;Se premi Invio o spazio al prompt, (getpoint) restituirà zero e il ciclo (while) finirà, e passerà a tutto ciò che verrà dopo.
(setq os (getvar "osmode"))
(setq p PtProsegue ;Attribuisco a <p> il punto memorizzato in <PtProsegue> NB SETQ accetta n coppie di operandi ed assegna a ogni primo elemento di una coppia il valore del secondo elemento corrispondente
dh (- (cadr p) (cadr pb))
dh (+ dh qb)
a (rtos dh 2 dec)
); chiudo questo setq
(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)
);Chiudo il While
(princ)
); fine defun c:betoqu()
; In generale (princ)
; E' un piccolo strataggemma che consente di terminare il
; comando in modo "pulito": sulla riga di comando non viene piu'
; stampato"NIL".. -
.
ciao Afazio, ho Autocad 2024 e il lisp non funziona...hai un aggiornamento? . -
.
ciao Afazio, ho Autocad 2024 e il lisp non funziona...hai un aggiornamento? . -
.ciao Afazio, ho Autocad 2024 e il lisp non funziona...hai un aggiornamento?
Io non ho mai scritto un lisp.
Controlla bene chi lo ha scritto e chiedi a lui.