cg-Cad

Lisp »Tips 'n Tricks »Tutorial di Claudio Rivoira (1) »2 | 3

Ho preparato un piccolo programma in autolisp (chiamato TUTORIAL.LSP) che in realtà "Non serve a nulla !" ma è solo il concentrato di varie routine di acquisizione dati.
Può essere molto utile come "Base" per altri programmi; ecco come si carica e cosa contiene:

  • Creare un nuovo disegno di Autocad (non importa se Ver. Italiano o Inglese)
  • Disegnare qualche entità (linee, cerchi, blocchi) con vari layer, colori e tipolinea
  • Caricare il file con Strumenti->Carica Applicazioni oppure direttamente da linea comando con (load "C:/percorso/tutorial.lsp")
  • Lanciarlo con TUTORIAL dalla linea di comando
  • Verranno chiesti (in ordine) una stringa ("S" o "N"), un numero intero (es. 7 o -12), un numero reale (es. 14.67 o -26.0); verrà chesto di selezionare un'entità qualunque ed infine un blocco.

Vediamo come funziona:

  • Apriamolo con un editor di testo (tipo blocco note)
  • Al fondo troviamo il programma principale che inizia con:

(defun C:TUTORIAL (/ a mlst)

Defun mi indica la definizione di un comando (in questo caso) o di una subrutine
C: Non indica il percorso (C: non e' l'hard disk) ma e' proprio la presenza di questa C: che mi indica che si tratta di un comando (TUTORIAL) e non una subrutine come le altre all'interno del file stesso.
(/ a mlst) E' un elenco di variabili che voglio porre a NIL (valore nullo) ad ogni lancio del comando. Se le variabili sono poste prima di / (o se non c'e' /), le variabili sono "Argomenti" da passare alla funzione: tutte le subrutine all'interno del file TUTORIAL.LSP funzionano così.

(setq olderr *error* *error* b_err)

Richiama una subrutine particolare che serve per la gestione errori: entra in azione quando viene premuto il tasto ESC, prima della fine del comando. In questo modo è possibile ripristinare le variabili modificate durante l'esecuzione del comando stesso. Es. riportare il corretto Colore corrente o impostazione di osnap.

(indati)

Richiama la subrutine di acquisizione dati: quest'ultima contiene il richiamo a tutte le altre subrutine presenti nel programma.

(moder)

Richiama la subrutine di ripristino variabili all'uscita (se tutto è andato liscio).

(setq olderr *error*)

Richiama la subrutine di ripristino variabili all'uscita (se è stato premuto ESC)

(princ)

Conclude l'esecuzione del programma senza stampare nil su riga comando.

Ora andiamo a guardare le varie subrutine partendo dall'inizio del file ricordando che (a parte la seconda e la terza già richiamate nel programma principale), vengono tutte richiamate nella subrutine INDATI.

SCELTAS

Subrutine per la scelta di una stringa; ecco i parametri da inserire al momento del richiamo della subrutine:

;msg	 = Stringa domanda - es. "\nCosa scegli <"
;def	 = Valore default  - es. "S"
;msg1	 = Stringa fine domanda	 - es. "> ? "
;nul	 = se=0 non accetta risposta nulla 
;          se=1 accetta anche un invio
;opzioni = stringa possibili risposte	- es. "S N"
;
;La variabile in uscita e' SCELTA (stringa)

SCELTAN

Subrutine per l'immissione di un numero intero o reale.

;intrea	= 1=N.Intero (es. 20)  - 0=N.reale (es. 20.5)
;msg	= Stringa domanda      - es. "\nInserisci numero <"
;def	= Valore default       - es. 5
;msg1	= Stringa fine domanda - es. "> ? "
;
;La variabile in uscita e' SCELTA (N. Intero o Reale)

SELSING

Subrutine per l'acquisizione di una entità singola (l'entità viene acquisita cliccandoci sopra): con questa sub. non è possibile acquisire l'entità con una finestra di selezione.
Questo tipo di selezione, richiede l'uso di un comando completamente diverso nei parametri, rispetto a ENTSEL o NENTSEL; il comando in questione è SSGET che verrà trattato in futuro.

;entnent= 0=entsel (entita') 1=nentsel (sottoentita')
;msg	= Stringa domanda - es. "\nSeleziona un'entita': "
;lst	= Lista di codici di gruppo (vedi Help di Autocad)

Questa sub. permette di utilizzare sia il comando ENTSEL che il comando NENTSEL:
ENTSEL Seleziona una entità singola (cerchio, linea, polilinea, blocco)
NENTSEL Seleziona una sottoentità: selezionando una linea o un cerchio, non cambia nulla rispetto a ENTSEL, mentre selezionando un blocco, si seleziona l'entità (es. la linea) contenuta nel blocco stesso.

Questa sub. genera in uscita una lista caratteristiche dell'entità selezionata; quante e quali caratteristiche, dipende dai codici di gruppo (vedi Help di autocad : Codici di gruppo DXF) inseriti nella lista "passata" come parametro alla subrutine.

La manipolazione di queste caratteristiche dell'oggetto selezionato, potrà essere effettuata in vari modi:

  • utilizzando un comando (COMMAND "CAMBIA" ...) per esempio per cambiare il colore ad una linea.
  • oppure agendo con una serie di comandi autolisp (SUBST ed ENTMOD) per "sostituire" direttamente un colore con un altro all'interno della lista dell'entità selezionata.
Tutorial.zip
Dimensioni file zip: 4.523 byte
AutoCAD

Sito web dell'Autore

Lisp »Tips 'n Tricks