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.
Sito web dell'Autore
Lisp »Tips 'n Tricks
|