Post by MDsi, avevo notato il registra script di intellicad, molto semplice ma
meglio di niente, credo comunque che un registra macro come quello di
excel sia una grave mancanza di autocad, io ho imparato quel poco che
so di vba grazie al registra macro e ora un pò ne mastico...senza il
registra macro credo ci avrei messo molto di più ad imparare
veniamo agli scritpt, innanzitutto funzionano tutti, basta
grazie?Mille grazie va bene? :)
Post by Roberto(setq gruppo (ssget "X" '((8 . "TEST")
(-4 . "<NOT")
(-4 . "<OR")
(0 . "CIRCLE")
(0 . "LINE")
(-4 . "OR>")
(-4 . "NOT>")
)
)
)
);enddef
perchè dopo l'otto c'è il punto?
La funzione 'ssget' permette di selezionare un determinato gruppo di
oggetti solamente attraverso l'utilizzo di liste chiamate 'coppie
puntate', il numero indica il tipo di campo su cui effettuare il filtro
(8 = layer), mentre il secondo dato indica il contenuto del campo.
In pratica 'ssget' vuole una definizione parziale degli oggetti da
ricercare.
Post by MDse al posto che "test" avessi voluto scrivere nomelayer , dove
nomelayer è una variabile che passa il nome del layer, quale è la
sintassi?Ho provato ma son riuscito solo costruendo una lista con cons
e poi cmq non riuscivo ad aggiungerci in coda gli operatori logici
ho scritto una cosa del tipo (ssget "X" (list (cons 8 nomelayer ...ma poi?
(setq gruppo (ssget "X" (list (cons 8 nomelayer)
(cons -4 "<NOT")
(cons -4 "<OR")
(cons 0 "CIRCLE")
(cons 0 "LINE")
(cons -4 "OR>")
(cons -4 . "NOT>")
)
)
)
ricorda che 'cons', utilizzato con due elementi base (interi,reali,
stringhe,ecc...) genera una coppia puntata, mentre 'list' crea una lista
comprensiva dei valori passati come parametri.
Post by MDPost by Roberto(while (setq elemento (tblnext "LAYER" flag))
(setq return (cons (cdr (assoc 2 elemento)) return))
(setq flag nil)
)
return
tblnext legge le tabelle di simboli, vero?Così leggo nell'help. In
pratica con questo comando posso lavorare su nomi layer, tipolinea
ecc, cioè su quelle "cose" che non sono vere e proprie entita di
disegno, giusto?Oltre alle entità di disegno e alle entità di tabelle
di simboli, quali altri entità prevede il lisp?
Tutte quelle gestite da AutoCAD. Puoi manipolare qualsiasi elemento
(tranne i solidi).
Se vuoi un'elenco preciso lo trovi nella sezione che parla dei DXF.
Inoltre il lisp gestisce file, database, ti permette di pilotare
applicazioni esterne (es. Excel) ecc... Insomma è un linguaggio di
programmazione 'quasi' completo.
Post by MDSe volessi stampare la lista all'iterno di una finestra alert?Ho
provato, ma mi da errore, come se la lista non fosse considerata una
"stringa"
Infatti hai ragione, la lista non è una stringa, se vuoi inserirla in un
'alert' devi convertirla in una stringa.
Post by MDPost by Roberto;questa funzione stampa a video il numero di entità per ogni layer
(defun print_nEntLay ( / quantita layer layers gruppo)
(setq layers (get_layerList))
-----CUT----------
Post by Roberto(princ (strcat "\nSul layer " layer " ci sono " (itoa quantita) "
oggetti."))
);endfor
);enddef
Questa funzione devo ancora studiarmela un pò, cmq funziona, alla fine
però mi stampa il contenuto della riga di princ, come si può eliminare
tale errore?
Questo non è un errore, semplicemente tutte le funzioni lisp (nel nostro
caso 'print_nEntLay') ritornano il valore dato dall'ultima espressione
presente, quindi il doppione che vedi è solamente il valore ritornato
dalla funzione stessa.
Se desideri che una funzione non ritorni alcun valore, inserisci
(prin1)
come ultima riga, prima dell'ultima parentesi chiusa.
Post by MDHo notato che tu non usi mai defun nel modo defun c:nomecomando , come
mai? io ho cambiato invece in questo modo le tue funzioni, anche
perchè se no non riesco ad avviarle...........come si fa?
Non esiste una ragione particolare, è solamente un'abitudine. Comunque,
se desideri eseguire delle funzioni lisp (non comandi), sulla riga ri
comando di AutoCAD/IntelliCAD puoi digitare :
(nomefunzione)
comprensivo di parentesi.
Post by MDgrazie mille ancora :)
Prego.
Ciao.
Roberto Rossi
Web : http://rsoftware.altervista.org