Script, lisp, macro e azioni: quali differenze?

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Buonasera a tutti e scusate se l'argomento è stato già trattato ma ho cercato sia qui che in rete e non sono riuscito a farmi un'idea chiara sulla questione.
Mi trovo ad eseguire su un certo numero di files le stesse operazioni, per cui ho cercato un modo per automatizzare ed ottimizzare il tutto. Ora, nel mio caso ho capito che posso risolvere usando il registratore di azioni e uno script per aprire a turno i files della cartella ed eseguire la macro creata.

In generale, però, non ho capito bene quale sia la differenza tra le varie funzionalità. L'idea che mi sono fatto è:
- gli script sono la versione più semplice, si tratta di un elenco di comandi da eseguire in sequenza
- i lisp sono lo strumento più complesso e per crearli si passa per un apposito linguaggio informatico che permette di creare operazioni più articolate
- le macro mi sembrano equivalenti a degli script più elaborati, per esempio permettono di inserire messaggi nelle operazioni. Sono fatti da una sequenza di azioni e possono essere creati o con la voce Registra nel pannello gestisci oppure scrivendone la struttura in Visual Basic

Mi confermate l'idea che mi sono fatto finora?
Ma soprattutto, mi aiutate a capire per sommi capi quando usare i vari strumenti?
Grazie.
 

Cristallo

Utente Standard
professione: Leggo e confronto
software: Lettura critica
regione: Fuori dalla cerchia
Il lisp è un linguaggio di programmazione (in realtà il nome completo sarebbe AutoLISP, una variante di LISP apposita per Autocad).
Il LISP non esegue macro più complesse, interagisce con il database del disegno e puoi andare a ricavare (modificare-creare) le caratteristiche di ogni singolo oggetto del DWG.
E con queste fare calcoli, scelte, estrazioni etc.
Ti faccio un esempio molto grezzo:
Hai due linee inclinate tra loro di X gradi (non lo conosci sono li a video).
Immagini di creare 4 linee che uniscano le due inclinate esattamente ad 1/5 di ognuna di loro. Leggi coordinate inizio e fine di ogni linea, ne leggi la lunghezza, la dividi per 5, calcoli le coordinate dei punti ad 1/5 di ognuna delle linee inclinate, crei la linea al primo quinto di ognuna, poi la seconda, la terza a così via.
Ovviamente 1/5 può essere una variabile, per cui puoi farti chiedere in quante parti puoi dividere per cui una volta la routine divide in 5 parti, un'altra decidi che debba dividere in 7 parti etc.

Questo per fati capire che LISP ricava TUTTE le caratteristiche dell'entità su cui opera, per cui puoi farci ragionamenti su.
Con macro e script questo non ti è consentito.
Uno script è in realtà una serie di macro su più linee, racchiusa in un file esterno.
Una macro è su singola linea e la puoi richiamare solo da un'icona.
Script e macro interagiscono molto poco con l'utente e sono utilizzabili per azioni ripetitive (tipo "sposta l'oggetto da->a e poi ruotali nel punto 0,0, e cambiagli di colore) .
Con LISP al contrario stabilisci il criterio generale e ci fai i calcoli (se l'oggetto è testo allora cambia colore e sposta, chiedendomi di quanto; se èuna linea spezzala in n parti e ruota le singole parti dell'angolo che mi chiederai per ognuna di esse).

Scusa il post enorme
 

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
Vorrei ancora aggiungere che esiste l'Autolisp "base" (chiamiamolo cosi'), cioè quello presente fin dalle prime versioni di Autocad, che poteva essere scritto esclusivamente mediante un editor di testo (tipo Blocco Note). A partire da Autocad 14 (se non erro!), è stata introdotta una nuova versione, derivata da Vital-Lisp. Con questa nuova versione è stato introdotto il VisualLisp; che aiuta notevolmente la programmazione, in quanto consente di eseguire il programma passo-passo ... per vedere dove ci sono errori di programmazione. Contemporaneamente sono state introdotti comandi che consentono di eseguire le stesse cose (ed anche più cose)... ad una velocità notevolmente superiore.
E' stato introdotto anche un linguaggio chiamato DCL, che consente di creare finestre interattive, con pulsanti e opzioni da selezionare.
Per non parlare dell'ActiveX .... questo consente di fare cose inimmaginabili ... ma è decisamente complesso: solo per programmatori esperti.
 
Ultima modifica:

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
.... e il DIESEL dove lo mettiamo? c'è anche questo linguaggio. :)

(defun C:ACADMODE ( )
(setvar "modemacro"
(strcat
"Layer [imath](substr,[/imath](getvar,clayer),1,8)"
"[imath](if,[/imath](getvar,orthomode), Orto)"
"[imath](if,[/imath](getvar,snapmode), Snap)"
" OSM:[imath](substr,[/imath](getvar,osmode),1,3)"
" $(getvar,dimstyle)"
"[imath](if,[/imath](=,$(getvar,tilemode),0),"
"[imath](if,[/imath](=,$(getvar,cvport),1), P)"
")"
)
)

)

Questo è un esempio di linguaggio DIESEL che imposta (mediante il lisp), la variabile MODEMACRO.
In particolare questo comando consente di avere in basso a sinistra la situazione degli osnap attivi, modalità orto ecc.

Diciamo che era utile parecchie versioni fa ... quando Autocad girava su DOS ed aveva meno informazioni a disposizione dell'utente.... ma era solo per fare un esempio.

Il linguaggio DIESEL può anche essere utile per "manipolare" i valori espressi nei "campi dati":

Un mio disegno chiamato A-NOMECLIENTE-23-800.DWG, se metto un campo dati contenente:

[imath](substr,[/imath](getvar,dwgname),[imath](-,[/imath](strlen,$(getvar,dwgname)),9),6)

Ottengo '23-800' quindi elimino il resto del nome del file e lo posso inserire agevolmente nelle mie tavole, avendo la certezza che si aggiorni quando cambio cliente.

PS.
Era solo per completezza... non certo per creare confusione a @ing.dir !!
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Grazie a tutti per le vostre risposte, devo rileggere tutto con calma ma direi che adesso ho un quadro della situazione più chiaro.
Sono giorni che ho deciso di mettere a posto il database cartografico e ho la necessità di esplodere i blocchi dei vari file. Mi ritrovo a fare diverse operazioni sempre uguali per tanti file e ne sto approfittando per capire come ottimizzare le cose piuttosto che lavorare come un mulo.
 

Legs

Utente Standard
professione: ingegnere strutturista
software: Autocad
regione: Provincia Milano
Se volessi provare a lavorare con il LISP prova a dare un'occhiata a questo libro libero:
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Ottimo, grazie, l'ho scaricato, sicuramente in futuro voglio provare ad apprendere almeno le basi.
 

Cristallo

Utente Standard
professione: Leggo e confronto
software: Lettura critica
regione: Fuori dalla cerchia
in futuro voglio provare ad apprendere almeno le basi.
Se lo inizi ad apprendere ti catturerà, per la sua potenza e per le prospettive che apre.

Se ti dicessi che è alquanto banale scrivere un lisp che, lanciato su un file aperto, :
Preleva il nome del file;
cerca tutti i blocchi presente in quel file.
ad uno ad uno li esplode;
elimina i blocchi originali;
salva il file aggiungendo alla fine del nome il suffisso "-exploded"
:)
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Se lo inizi ad apprendere ti catturerà, per la sua potenza e per le prospettive che apre.

Se ti dicessi che è alquanto banale scrivere un lisp che, lanciato su un file aperto, :
Preleva il nome del file;
cerca tutti i blocchi presente in quel file.
ad uno ad uno li esplode;
elimina i blocchi originali;
salva il file aggiungendo alla fine del nome il suffisso "-exploded"
:)
E' esattamente quello che sto cercando di fare e dopo un paio di giorni di sbattimento mi pare di aver capito che non c'è altro modo che scrivere un lisp.
Sono riuscito a fare qualcosa di simile con uno script ma non riesco ad esplodere i blocchi perché il comando "Precedente" funziona scrivendo nella command line ma non all'interno dello script, allucinante. Il tutto è complicato dal fatto che devo prima ridefinire tutti i blocchi altrimenti una volta esplosi finiscono sul layer 0 (burst impiega più tempo di esplodi e xplode con opzione eredita non so perché ma alcuni blocchi li manda comunque su zero; in più sono tutti in mille pezzi che ho unito nel ridefinirli).

Sai dirmi se c'è qualche esempio valido in giro che posso usare anche solo come base di partenza?
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Un piccolo update anche se ormai si sta andando un po' fuori topic: prendendo a riferimento qualche codice trovato in giro sono riuscito a fare alcuni lisp che effettivamente funzionano a dovere, sono incredibili nella loro semplicità.
Ho un minimo di basi di programmazione, che ho ripreso con python ultimamente, quindi grossomodo riesco ad orientarmi ma per ora posso muovermi solo pasticciando codici già fatti.
La soddisfazione però è enorme, quando scarichi i lisp già fatti pensi ad un modo per semplificarti la vita ma quando ci metti mano ti rendi conto delle potenzialità enormi.
 

x11start

Utente Standard
professione: Disegnatore prefabbricati
software: Autocad - GStarCAD
regione: Piemonte
Se non erro, Autocad (non GStarCAD, Progecad o ZWCAD), puo' anche eseguire dei codici Python ...
Ma qui lo dico e qui lo nego...
Comunque se hai già un'infarinatura di quel linguaggio, prova ad approfondire la cosa.
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Proverò ad informarmi ma è comunque una conoscenza molto limitata, per lo più devo comunque cercare codici già fatti in giro, anche perché non scrivendo abbastanza spesso non riesco ad essere autonomo, però almeno so avere un'idea di cosa sto facendo.
Per il resto penso che valga la pena leggere un po' la guida che mi hanno segnalato qui, anche per capire cosa c'è scritto negli script che si trovano in giro.
 

Tristan

Moderatore Civil 3D
Staff Forum
professione: Application Engineer
software: Autodesk Civil 3D, Revit e altre amenità
regione: Trentino
Se non erro, Autocad (non GStarCAD, Progecad o ZWCAD), puo' anche eseguire dei codici Python ...
Ma qui lo dico e qui lo nego...
Comunque se hai già un'infarinatura di quel linguaggio, prova ad approfondire la cosa.
Non mi risulta. O almeno, non nativamente. Forse con una plugin aggiuntiva
 

ing.dir

Utente poco attivo
professione: Ing
software: Autocad
regione: Salerno
Non mi risulta. O almeno, non nativamente. Forse con una plugin aggiuntiva

In fin dei conti credo che non valga la pena approfondire la questione dal momento che se anche fosse funzionante python i codici sono comunque tutti scritti come autolisp quindi meglio capire qualcosa di quello.
 

Statistiche forum

Discussioni
59,382
Messaggi
507,063
Utenti registrati
111,778
Ultimo utente registrato
tikkienese93

Utenti online

Top