Automazione in AutoCAD tramite programmi LISP

Sviluppo di macro per AutoCAD in linguaggio LISP, che consentono di automatizzare le operazioni di routine relative alla preparazione dei disegni, alla loro formattazione e all'estrazione delle informazioni. I programmi in linguaggio LISP rappresentano uno strumento potente per migliorare l'efficienza nella preparazione della documentazione tecnica con AutoCAD.


Per effettuare un ordine è necessario fornire: un elenco dei dati di partenza; una descrizione della sequenza di azioni da automatizzare e del risultato finale atteso dal programma in linguaggio LISP.

3D offset: LISP for AutoCAD

Molti sanno che è impossibile eseguire la funzione di offset 3D utilizzando gli strumenti standard di AutoCAD. Nella modellazione 3D questa funzione è molto utile. Per semplificare la modellazione tramite nuvole di punti, è possibile creare un codice LISP che consenta di ottenere tale funzionalità.

Ho creato una funzione 3DOFF che funziona come segue:
  1. la funzione memorizza le coordinate della polilinea 3D selezionata
  2. Il passo successivo consiste nell'azzerare tutte le coordinate Z per ciascun punto sulla polilinea selezionata, al fine di “posizionare” la polilinea sul piano
  3. Successivamente, la funzione di offset standard di AutoCAD viene applicata alla linea che giace sul piano
  4. Infine, a ciascun punto sulla polilinea viene restituita la coordinata Z che aveva nella polilinea originale, con l'aggiunta di un offset.

Quali opzioni possono essere applicate in questa funzione:
  • L'utente può selezionare l'offset sul piano rispetto alla polilinea di base
  • L'utente può selezionare l'offset verticale sull'asse Z
  • L'utente può impostare una singola coordinata Z per l'intera polilinea offset
  • È possibile collegare i vertici della polilinea di base e della polilinea offset.

All'utente viene richiesto di selezionare una polilinea 3D. Lo script verifica che la selezione sia valida (tipo POLYLINE). Lo script esegue un ciclo attraverso i vertici della polilinea selezionata e raccoglie le loro coordinate.

A seconda della modalità Z:
  • Aggiungi: aggiunge il valore Z allo Z di ciascun vertice.
  • Sostituisci: imposta Z sul valore specificato.
  • Nessuna: lascia Z invariato.

ZAPPROX

ZAPPROX è un comando AutoCAD che rielabora le quote Z di polilinee selezionate, creando nuove polilinee 3D con valori Z approssimati secondo un metodo scelto dall'utente. È utile per uniformare o interpolare le quote di polilinee 2D/3D in modo rapido e flessibile.

Dati in Ingresso

Oggetti selezionati: una o più polilinee di tipo LWPOLYLINE o POLYLINE (2D o 3D)
Metodo di approssimazione Z, scelto tra:
  • Lowest - usa la quota Z minima tra tutti i vertici
  • Medium - usa la media delle quote Z
  • Highest - usa la quota Z massima
  • Custom - quota Z fissa inserita manualmente dall'utente
  • firstNlast - interpolazione lineare tra una quota Z iniziale e una finale, in base alla lunghezza progressiva della polilinea
  • First - usa la quota Z del primo vertice
  • lAst - usa la quota Z dell'ultimo vertice

Valori Z aggiuntivi (solo per Custom, firstNlast): inseriti dall'utente tramite prompt

Risultato
Per ogni polilinea selezionata, viene creata una nuova polilinea 3D (POLYLINE con flag 3D) con gli stessi vertici XY dell'originale, ma con le quote Z ricalcolate secondo il metodo scelto. Le polilinee chiuse rimangono chiuse. Le polilinee originali non vengono modificate o eliminate.

Risultato

Per ogni polilinea selezionata, viene creata una nuova polilinea 3D (POLYLINE con flag 3D) con gli stessi vertici XY dell'originale, ma con le quote Z ricalcolate secondo il metodo scelto. Le polilinee chiuse rimangono chiuse. Le polilinee originali non vengono modificate o eliminate.

3DCORNER - LISP in AutoCAD

In 3D modeling of interiors based on laser scanning results, a common problem is that some corners of the room are not visible to the scanner because they are blocked by furniture or building materials. To solve this problem, it is necessary to take the corner point of the room in the place where it is visible and “lower” it at floor level. In order to automate this process, a LISP function was created in AutoCAD that allows you to automatically lower the corner points of the room to the height mark of the floor level.

How it works:
- I create a 3D-polyline of the corners of the room in the visible part of the room
- I create a 3D polyline of floor elevations near each pivot point of the polyline created in the first step.
- LISP script creates a new 3D polyline, where X and Y are taken from the corners polyline and Z is taken from the elevation polyline.


3dBorder

3dBorder è un comando AutoLISP che genera una nuova polilinea 3D combinando le coordinate X e Y di una polilinea originale con le quote Z di una seconda polilinea 3D di riferimento. Inoltre, crea linee di collegamento tra i punti originali e quelli nuovi quando la differenza spaziale supera una soglia prefissata di 0,05 m.

Dati in Ingresso

Dati in ingresso
  • Una polilinea 3D originale, usata come sorgente delle coordinate planimetriche X e Y.
  • Una polilinea 3D master, usata come sorgente delle quote Z.
  • Le due polilinee devono avere lo stesso numero di vertici, perché il codice abbina i punti per indice, uno a uno.
  • Una soglia di distanza pari a 0,05 unità grafiche, oltre la quale viene tracciata una linea di collegamento tra il punto originale e quello ricostruito.

Risultato

Ogni nuovo vertice mantiene X e Y della polilinea originale e assume la Z del vertice corrispondente della polilinea master.
Se la distanza tra il punto originale e quello nuovo supera la soglia impostata, viene creata anche una entità LINE tra i due punti sul layer corrente.

QOnLine

QOnLine è un comando AutoLISP per AutoCAD che individua o crea un punto su un oggetto LINE o 3D POLYLINE in corrispondenza di una quota Z assegnata. Se la quota richiesta non cade all'interno della geometria esistente, la funzione può anche prolungare l'oggetto: nelle linee modifica uno degli estremi, mentre nelle 3D polilinee aggiunge un nuovo vertice.

Dati in ingresso

Uno o più oggetti selezionati di tipo LINE oppure POLYLINE 3D.
Una quota Z inserita dall'utente, usata come valore di riferimento per calcolare la posizione del punto lungo il segmento o lungo i segmenti della 3D polilinea.
Per le 3D polilinee, il riconoscimento avviene tramite il flag DXF 70 con valore bit 8, che identifica una polyline 3D.

Risultato

La funzione crea un'entità POINT nel punto in cui l'oggetto raggiunge la quota Z richiesta, oppure nel punto estrapolato se serve il prolungamento.

Se l'oggetto è una LINE, il comando può spostare il punto iniziale o finale; se è una 3D POLYLINE, può aggiungere un nuovo vertice in testa o in coda alla sequenza dei vertici.

3D-2D

3D-2D è un comando AutoLISP che converte le polilinee 3D selezionate (POLYLINE con flag 3D) in nuove polilinee 2D di tipo LWPOLYLINE. La nuova polilinea mantiene la geometria planimetrica XY dei vertici originali e assegna come elevazione il valore Z del primo vertice della polilinea 3D di partenza.

Dati in ingresso

Una o più entità di tipo POLYLINE; il codice verifica che siano realmente 3D polylines.
Le proprietà grafiche principali dell'oggetto originale, come layer, colore, tipo di linea e lineweight, che vengono copiate nella nuova entità quando presenti.

Risultato

La funzione crea una nuova LWPOLYLINE.
La quota Z dei singoli vertici non viene mantenuta separatamente, perché nella LWPOLYLINE l'elevazione è gestita come valore unico dell'entità, mentre i vertici sono memorizzati come coordinate XY.

RAngle

RAngle è un comando AutoLISP che elabora in modo massivo polilinee 3D chiuse con 4 vertici e le trasforma in rettangoli 3D orientati secondo il lato più lungo. Prima uniforma la quota Z dell’oggetto in base a una modalità scelta dall’utente: Lower (quota minima), Upper (quota massima) oppure Med (quota media).

Dati in ingresso

Una o più entità di tipo POLYLINE, verificate come 3D polylines.
Le polilinee devono essere chiuse.
Ogni polilinea deve avere esattamente 4 vertici,

Un criterio di quota finale: Lower, Upper oppure Med.​

Risultato

Per ogni polilinea valida, la funzione costruisce un nuovo rettangolo 3D chiuso mantenendo l’orientamento planimetrico del lato più lungo e assegnando la stessa quota Z a tutti i vertici del nuovo oggetto.
La polilinea originale viene poi eliminata dal disegno.

FLine

FLine è un comando AutoLISP che crea una linea con lunghezza fissa, orientata secondo la direzione definita da due punti scelti dall'utente. La funzione usa il primo punto come origine, il secondo solo come riferimento direzionale, poi calcola automaticamente il punto finale alla distanza impostata.

Dati in ingresso

Una lunghezza numerica inserita dall'utente; se non viene specificata, il comando riutilizza l'ultimo valore memorizzato nella variabile globale.
Un primo punto, che definisce l'inizio della linea.
Un secondo punto, usato esclusivamente per ricavare il vettore direzione nello spazio 3D.

Risultato

La routine normalizza il vettore tra il primo e il secondo punto e calcola un nuovo punto finale alla distanza esatta richiesta.

FSEL

FSEL è un comando AutoLISP che filtra una selezione di oggetti in AutoCAD in base a tipo di entità e colore, tramite una finestra di dialogo DCL con opzioni attivabili dall'utente. Dopo il filtro, il comando aggiorna la selezione lasciando evidenziati solo gli oggetti che soddisfano i criteri scelti.

Dati in ingresso


Una selezione iniziale di oggetti effettuata dall'utente.
Una finestra di dialogo temporanea, generata dal codice, che mostra solo i tipi e i colori realmente presenti nella selezione corrente.

Risultato

La funzione crea una nuova selection set contenente solo gli oggetti i cui tipi e colori corrispondono alle opzioni confermate nel dialogo.
Gli oggetti filtrati restano selezionati e visivamente evidenziati nel disegno.
Al termine, il comando mostra anche il numero di oggetti mantenuti rispetto al totale iniziale.

Caratteristiche

Il comando riconosce etichette colore come ByLayer, ByBlock e i colori ACI numerici; per i primi sette ACI assegna anche i nomi standard come Red, Yellow, Green, Cyan, Blue, Magenta e White.

ILine

ILine è un comando AutoLISP che seleziona due linee 3D, calcola il loro punto di intersezione in pianta XY e crea una nuova linea 3D verticale tra le due quote interpolate in quel punto. In pratica, il comando confronta le due linee nello stesso punto planimetrico e rappresenta graficamente la differenza altimetrica tra esse.

Dati in ingresso


Esattamente due entità di tipo LINE, selezionate dall'utente.

Risultato

Se le due linee si intersecano sul piano XY, la routine calcola per ciascuna linea la quota Z del punto di intersezione mediante interpolazione lineare tra gli estremi.
Successivamente crea una nuova entità LINE tra i due punti 3D ottenuti, con stesso X e Y ma con quote Z diverse.
Se le linee non si intersecano in pianta, il comando non crea alcuna geometria e mostra un messaggio di avviso.

LLine

LLine è un comando AutoLISP che modifica una linea esistente assegnandole una nuova lunghezza, mantenendo però invariati il punto medio e la direzione originale. In pratica, la linea viene allungata o accorciata in modo simmetrico rispetto al suo centro.

Dati in ingresso

Una singola entità selezionata dall'utente, che deve essere di tipo LINE.
Il punto iniziale e finale della linea, letti dai gruppi DXF 10 e 11 tramite entget.
Una nuova lunghezza inserita; se l'utente preme Invio, il comando mantiene la lunghezza attuale.

Risultato

La funzione calcola il punto medio della linea, ricava il vettore direzione unitario e genera due nuovi estremi alla distanza corretta dal centro.
Poi aggiorna l'entità esistente e applica il refresh grafico con entupd.
Non viene creata una nuova linea: viene modificato direttamente l'oggetto selezionato.

NEARLINE

NEARLINE è un comando AutoLISP che trova le due punti più vicini tra due segmenti di tipo LINE nello spazio 3D. Dopo il calcolo, inserisce nel disegno due entità POINT nei punti trovati e mostra a riga di comando le coordinate e la distanza minima tra i segmenti.

Dati in ingresso

Due oggetti selezionati entrambi di tipo LINE.
Le coordinate 3D complete dei due segmenti, usate per il calcolo vettoriale della minima distanza nello spazio.

Risultato

La funzione calcola la coppia di punti più vicini tra i due segmenti 3D e restituisce:
  • un punto sul primo segmento;
  • un punto sul secondo segmento;
  • la distanza minima tra i due.

Successivamente crea due entità POINT nel disegno una per ciascun punto trovato.

PMove

PMove è un comando AutoLISP che sposta un oggetto POINT in una nuova posizione planimetrica usando una linea guida disegnata dall’utente. Il punto viene cercato all’inizio della linea tracciata e, se trovato, viene spostato prendendo X e Y dal punto finale della linea e mantenendo invariata la quota Z originale.

Dati in ingresso

Una linea temporanea disegnata manualmente dall’utente con il comando LINE.

Risultato

Se viene trovato un punto all’inizio della linea guida, la funzione modifica la sua posizione.
La nuova posizione conserva la quota Z del punto originale, mentre le coordinate X e Y vengono prese dall’estremità finale della linea guida.
Dopo lo spostamento, la linea temporanea viene eliminata.

Topografo Senior

Aleksandr Iershov

Rilievi topografici per architetti e geometri: precisi, puntuali, senza sorprese.

Ogni dato è verificato con due strumenti indipendenti. Consegno nei tempi concordati - altrimenti il servizio è gratuito. Parli direttamente con me, dal sopralluogo alla consegna dei file nel formato del tuo software. Nessun ufficio. Nessun intermediario. Solo misure che tornano.


  • Precisione verificata due volte. Ogni rilievo viene controllato con due strumenti indipendenti: nuvola di punti con laser scanner verificata con Stazione totale, oppure rilievo con tacheometro controllato con GPS/GNSS. Ricevi un report di precisione con ogni consegna.

  • Nei tempi concordati o non paghi. La data di consegna è scritta nel preventivo. Se il ritardo dipende da me, il servizio è gratuito. Nessuna clausola nascosta, nessuna giustificazione: o consegno puntuale, o non ti costo nulla.

  • Parli sempre con chi ha fatto il rilievo. Nessun ufficio da mantenere, nessun personale amministrativo, nessun intermediario, nessun passaggio di informazioni tra manager e tecnico. Dal primo contatto alla consegna dei file, hai a disposizione direttamente il professionista che ha eseguito le misure. I dettagli tecnici non si perdono.
Richiedi preventivo

Articoli utili

Lavori in campo

Made on
Tilda