Newsgroup: it.comp.software.cad
Titolo: LISP - Esplodere più blocchi contemporaneamente

Ciao a tutti,
devo realizzare un LISP nel quale ho la necessità di esplodere tutti i 
blocchi presenti in un disegno.
Purtroppo (anche leggendo la guida in linea) sembra che questa operazione 
non sia fattibile, ma che occorra esplodere un blocco alla volta con la 
conseguenza che il LISP gira lentissimo, impiega dei minuti se il disegno 
contiene migliaia di blocchi...
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
 

 (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.

(setvar "qaflags" 1)
(command ".explode" (ssget "_X" '((0 . "INSERT"))) "")
(setvar "qaflags" 0)
-- 
Marc'Antonio Alessi
http://xoomer.virgilio.it/alessi
(strcat "NOT a " (substr (ver) 8 4) " guru.")
--

 Cioe' una cosa del tipo:
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


 (setvar "qaflags" 0)
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.


E' una variabile non documentata, quello che so è:
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.



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 ce ne sono anche altri...
...ma se devi far funzionare un programma per AutoCAD, che usa delle 
funzioni
VisualLisp, anche su IntelliCAD cosa usi?


 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...
