Il Bar dell'Ingegneria

Quote altimetriche

« Older   Newer »
 
  Share  
.
  1.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    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:16
    Attached Image
    quote_altim

     
    Top
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    Dove possiamo scaricare il file?
     
    Top
    .
  3. Betoniera
        +1   -1
     
    .

    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
     
    Top
    .
  4.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    @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
     
    Top
    .
  5.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    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.
     
    Top
    .
  6.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    885
    Reputation
    +41

    Status
    Offline
    Dovrò provarlo su progecad: quello di betoniera ha funzionato senza problemi perché non ricorreva al visual lisp.
     
    Top
    .
  7.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    766
    Reputation
    +23

    Status
    Offline
    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.
     
    Top
    .
  8.     +1   -1
     
    .
    Avatar

    Member

    Group
    Member
    Posts
    885
    Reputation
    +41

    Status
    Offline
    CITAZIONE (Betoniera @ 23/10/2017, 12:30) 
    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-Lisp

    CODICE
    (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".
     
    Top
    .
  9.     +1   -1
     
    .
    Avatar

    Junior Member

    Group
    Member
    Posts
    1
    Reputation
    0

    Status
    Offline
    ciao Afazio, ho Autocad 2024 e il lisp non funziona...hai un aggiornamento?
     
    Top
    .
  10.     +1   -1
     
    .
    Avatar

    Junior Member

    Group
    Member
    Posts
    1
    Reputation
    0

    Status
    Offline
    ciao Afazio, ho Autocad 2024 e il lisp non funziona...hai un aggiornamento?
     
    Top
    .
  11.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Administrator
    Posts
    8,163
    Reputation
    +294

    Status
    Offline
    CITAZIONE (Caesar2 @ 8/6/2023, 16:18) 
    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
     
    Top
    .
10 replies since 22/10/2017, 16:52   3354 views
  Share  
.