Code:
;;;Rückgabe: gültiges DBX-Objekt für aktuelle Version
(defun JB_DBXObject:Open:GetVS (vs / DBX)
(if(not(vl-catch-all-error-p
(setq DBX (vl-catch-all-apply
'vla-GetInterfaceObject
(list
(vlax-get-acad-object)
vs
)
)
)
))DBX))
;;;DBX-Objekt
(defun JB_DBXObject (dwgname / DBX)
(car(vl-remove-if 'not (list
(JB_DBXObject:Open:GetVS "ObjectDBX.AxDbDocument.18"); ACAD2010 und höher
(JB_DBXObject:Open:GetVS "ObjectDBX.AxDbDocument.17"); ACAD2004 und höher
(JB_DBXObject:Open:GetVS "ObjectDBX.AxDbDocument.16");_ACAD2004
(JB_DBXObject:Open:GetVS "ObjectDBX.AxDbDocument.15");_ACAD2002
(JB_DBXObject:Open:GetVS "ObjectDBX.AxDbDocument")))))
;;;DWG-Datei als DBX-Object öffnen (nur, wenn gültig und nicht schreibgeschützt
(defun JB_DBXObject:Open(DBX / )
(not(vl-catch-all-error-p ;DWG-als DBX öffnen
(vl-catch-all-apply ;_ dabei Fehler abfangen
'vla-open
(list DBX dwgname)))))
;;;DBX-Object wieder freigeben
(defun JB_DBXObject:Release(DBX / )
(not(vl-catch-all-error-p
(vl-catch-all-apply
'vlax-release-object(list DBX) ;_DBX-Verknüfung wieder freigeben
))))
;;;DBX-Objekt speichern
(defun JB_DBXObject:SaveAs (DBX DWGname / )
(not(vl-catch-all-error-p
(vl-catch-all-apply
'vla-saveas(list DBX DWGNAME) ;_DBX-Objekt als DWG-Datei speichern
)))
)
;;;Testfunktion
(defun c:DBX-LayoutNames ( / DBX DBX-OPEN DWGNAME NAME_LISTE)
(setq dwgname "c:\\temp\\test.dwg")
(if (and(setq DBX (JB_DBXObject dwgname))
(setq DBX-Open(JB_DBXObject:Open DBX)))
(progn
(vlax-for ITEM (vla-get-layouts DBX)
(if (/= (vla-get-name ITEM) "Model")
(setq name_liste (cons(vla-get-name ITEM)name_liste))))
(JB_DBXObject:Release DBX))
(cond ((not DBX) (alert "Der DBX-Server konnte nicht gefunden werden."))
((not DBX-Open)(alert (strcat "Die Datei \"" dwgname
"\" ist ungültig oder schreibgechützt.")))
))
name_liste)