Hallo Lisp-Gemeinde,
bin hier ein wenig am verzweifeln, bitte um gute Raschläge. Ich möchte per AutoLisp einen Block (Schriftfeld) löschen. Anschließend möchte ich den Block über den Befehl "PURGE" bereinigen.
Wenn der gelöschte Block nun aber verschachtelt ist, muss ich "PURGE" immer wieder aufrufen, bis die letzte verschachtelte Ebene abgearbeitet ist.
Mein Lösungsansatz:
Habe mir von MapCar die Funktion Get-Subinserts ausgeliehen, um die verschachtelten Blöcke zu erhalten.
Code:
----------------------------------------------------------------------
(defun get-subinserts(insert / subinserts ent)
(setq subinserts(list insert))
(setq ent(cdr(assoc -2(tblsearch "block"(cdr(assoc 2(entget insert)))))))
(while ent
(if(="INSERT"(cdr(assoc 0(entget ent))))
(setq subinserts(append subinserts(get-subinserts ent)))
)
(setq ent(entnext ent))
)
subinserts
)
----------------------------------------------------------------------
Also:
(SETQ BLÖCKE (GET-SUBINSERTS MyBlock)) ;;Blöcke suchen
(FOREACH OBJ BLÖCKE (ENTDEL OBJ)) ;; Blöcke löschen
So weit so gut, nur beim Bereinigen habe ich so meine Probleme:
;; Bereinigen des angegebenen Blocks
(DEFUN PurgeBlock (block / blockname)
(SETQ blockname (CDR (ASSOC 2 (ENTGET block))))
(COMMAND "_PURGE" "Blöcke" BlockName "N")
);;Defun
(FOREACH OBJ (BLÖCKE (PurgeBlock OBJ))
AutoCad rattert zwar jetzt den Purge-Befehl durch, tut aber im Endeffekt nichts, da ich immer die Meldung "Keine unreferenzierten Blöcke gefunden." erhalte.
Was mache ich falsch?
Mit bestem Dank und freundlichen Grüßen,
WolfgangE
------------------
An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!
[Diese Nachricht wurde von WolfgangE am 23. Sep. 2004 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP