Il codice che ho scritto e che non funziona è il seguente:
(setq selez (ssget "X" '((0 . "INSERT"))))
(command "_explode" selez "")
C'è qualcuno che è riuscito a raggirare questo problema?
Ringrazio tutti in anticipo.
Ciao
--
Emiliano - Webmaster di EmiCAD® - Tutto per AutoCAD e ProgeSOFT® IntelliCAD
e-mail: webm...@emicad.it
web: www.emicad.it
E' parecchio che non uso l'autolisp e non mi ricordo bene i nomi dei
comandi ma fammi provare.
Purtroppo autocad ce l'ho in ufficio e quindi non posso provare
direttamente quello che ti consiglio.
> (setq selez (ssget "X" '((0 . "INSERT"))))
Allora se non ricordo male con questo comando dovrebbe raggruppare in
una lista tutti gli elementi con l'attributo "INSERT".
> (command "_explode" selez "")
Con questo comando cerchi di eplodere la lista che contiene l'elenco dei
blocchi (perlomeno non so se autocad esplode in un colpo solo tutti gli
elementi di una lista, ammetto la mia ignoranza).
Dovresti in teoria iterare sugli elementi della lista e poi esploderli.
Cioe' una cosa del tipo:
(setq indice 0)
(repeat (sslength selez)
(setq ent1 (ssname selez indice))
(command "_explode" ent1 "")
(setq indice (1+ indice))
)
Ovviamente se Autocad fa in automatico l'esplosione su tutti gli
elementi contenuti nella lista allora il mio codice e' inutile.
Io ho semplicemente estratto ogni singolo blocco e poi ad ogni singolo
blocco ho applicato il comando _explode (non ho verificato la sintassi
ma presumo che sia corretta).
Se ti va, prova questa soluzione e se non funziona abbia pazienza e
scusami.
P.S.
verifica che il l'attributo del blocco sia proprio "INSERT", non si sa
mai.
Io per questo tipo di verifiche uso il seguente codice che restituisce
la lista associata all'oggetto (cosi' evito di spulciare il manuale):
-------------------------------------------------------
; Restituisce la lista associativa
; di ogni elemento nella selezione
(defun sel1(/ indice ss1 ent1)
(setq indice 0)
(setq ss1 (ssget))
(repeat (sslength ss1)
(setq ent1 (ssname ss1 indice))
(print (entget ent1))
(setq indice (1+ indice))
)
(princ)
)
-------------------------------------------------------
--
Ciao da Francesco B.
--
Marc'Antonio Alessi
http://xoomer.virgilio.it/alessi
(strcat "NOT a " (substr (ver) 8 4) " guru.")
--
Ciao Francesco,
ti confermo che AutoCAD non esplode tutti i blocchi con la riga di codice
(command "_explode" selez "").
Avevo pertanto anch'io reiterato tutta la lista per esploderli.
Purtroppo questo procedimento è troppo lento (anche con pc recenti) ed i
file da elaborare contengono migliaia di blocchi... quindi minuti di
elaborazione solo per esplodere i blocchi.
La soluzione di Marco, invece, funzione perfettamente!
Ciao e grazie
Ciao Marco,
come già detto a Francesco la tua soluzione funziona perfettamente, tuttavia
non ho capito a cosa serve la variabile "qaflags"; l'ho cercata sulla guida
in linea ma sembra non esserci!
Funziona anche con AutoCAD 2002?
Ciao e grazie.
QAFLAGS
Value between 0 - 32767
bit 0 (1) : ^C in menu macro cancels grips (acts like keyboard <Esc>).
bit 1 (2) : no pause during text screen listings.
bit 2 (4) : no "alert" dialogs (text display instead).
bit 7 (128) : accepts "screen picks" (point lists) via (command) function.
Ma evidentemente ci sono altri usi non contemplati.
Alcune domande:
1) IntelliCad è completamente compatibile con il Lisp di AutoCad?
2) in IntelliCad (ultime versioni) esiste il VisualLisp di AutoCad?
3) hai mai provato gli "abilitatori" Lisp per le versioni LT?
(tipo DrCauto o altri))
Ciao.
Marco
> La soluzione di Marco, invece, funzione perfettamente!
Mi fa piacere che hai risolto.
Al 99%; spesso si tratta di fare solo qualche piccola correzione...
> 2) in IntelliCad (ultime versioni) esiste il VisualLisp di AutoCad?
No, però esistono vari programmi (anche free) molto simile a VisualLISP
senza necessità di appoggiarsi a quest'ultimo.
Per fare alcuni esempi: ObjectDCL, o Sharp Lisp.
Ma ce ne sono anche altri...
>
> 3) hai mai provato gli "abilitatori" Lisp per le versioni LT?
> (tipo DrCauto o altri))
>
Li ho provati qualche anno fa, e funzionavano bene, poi ho rinunciato in
quanto questi software non sono italiani e pertanto difficili da acquistare.
Ciao
...ma se devi far funzionare un programma per AutoCAD, che usa delle
funzioni
VisualLisp, anche su IntelliCAD cosa usi?
Scusa ma non avevo capito, pensavo tu ti riferissi all'interfaccia
VisualLISP.
Le funzioni VisualLISP non sono ancora supportare da ProgeCAD, spero in una
delle prossime versioni...
In ogni caso fino adesso sono sempre riuscito a superare il problema con
qualche stratagemma...