Hallo zusammen,
Ich nutze folgenden Programmteil zum einfügen von Blockdefinitionen,
bzw. ersetze ich die Definition wenn diese in meiner aktuellen Zeichnung
bereits voranden ist. Anschließend wird natürlich gleich eine Referenz erstellt.
Das ganze arbeitet gut wenn der Block nicht dynamisch ist.
Hat der Block aber z. B. einen Sichtbarkeitsparameter reicht die Else Bedingung
(Blockdefinition vorhanden) so nicht aus.
Obwohl beide Parameter (intern und extern) gleich spezifiziert sind verlieren die neuen
Objekte den Bezug zu ihrem Sichtbarkeitsstatus.
Frage wie wie kann ich diese Verbindung wieder herstellen?
Oder wie kann ich den internen Blockparameter mit dem externen Parameter
ersetzen, wie die grafischen Objekte.
(defun blkreplace (blknam / )
(if (setq finlib (findfile "library.dwg"))
(progn
(setq docu (vla-get-activedocument (vlax-get-acad-object)))
(setq odbx (vla-getinterfaceobject (vlax-get-acad-object) "ObjectDBX.AxDbDocument.19"))
(vla-open odbx finlib)
(setq exblks (vla-get-blocks odbx))
(setq inblks (vla-get-blocks docu))
(setq extblk (vla-item exblks blknam))
(if (not (tblsearch "Block" blknam))
(vla-copyobjects odbx (vlax-safearray-fill (vlax-make-safearray vlax-vbobject '(0 . 0)) (list extblk)) inblks)
(progn
(setq blkcou (vla-get-Count extblk))
(setq intblk (vla-item inblks blknam))
(vlax-for blkele intblk
(vla-Delete blkele)
)
(setq elearray (vlax-make-safearray vlax-vbobject (cons 0 (1- blkcou))) blklis nil)
(vlax-for blkele extblk
(setq blklis (append blklis (list blkele)))
)
(vlax-safearray-fill elearray blklis)
(vla-copyobjects odbx elearray intblk)
(vlax-for blkele intblk
(vla-Update blkele)
)
(vlax-put-property intblk 'Explodable :vlax-false)
)
)
(vlax-release-object odbx)
(command "Regen")
)
)
)
Vielen Dank für etwaige Hilfe!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP