Morgen Zusammen,
ich versuche schon seit einiger Zeit die Layernamen aus den Gruppefiltern im Layermanager mit Autocad 2019 auszulesen. Einen Beitrag habe ich dazu hier:
https://ww3.cad.de/foren/ubb/Forum259/HTML/002244.shtml
gefunden. Allerdings funktioniert es nicht so wie im Beitrag zum Schluss beschrieben. Das Problem liegt aus meiner Sicht an Xrecord welcher die LayerId's zurückgeben sollte. Das erläutere ich etwas später.
Zuerst: Ich verwende folgendes Beispiel:
Code:
Sub readfilter()
Dim oDict As AcadDictionary
Dim TrackingoDict As AcadDictionary
Dim LayFlt As Variant
Dim oXrec As AcadXRecord
Dim strLayer As String
Dim objLayer As AcadLayer
Dim DataLayer As String
Dim ArraySize As Long
Set oDict = ThisDrawing.Layers.GetExtensionDictionary("ACLYDICTIONARY")
'Set oDict = ThisDrawing.Layers.GetExtensionDictionary("ACAD_LAYERFILTERS")
Set TrackingoDict = oDict
On Error Resume Next
For Each LayFlt In oDict
Set oXrec = TrackingoDict.GetObject(LayFlt.Name)
Dim z As String
z = ThisDrawing.Utility.GetObjectIdString(LayFlt, False)
oXrec.GetXRecordData xtype, XValue
For i = 3 To UBound(XValue)
DataLayer = XValue(i)(0)
Set objLayer = ThisDrawing.ObjectIdToObject(DataLayer)
Next
Next LayFlt
End Sub
Die DWG-Datei ist im Anhang.
Lässt man nun den Debugger laufen (Dabei wie im Beitrag unter der oben erwähnten URL beschieben "Alle" filter aktiviert) und schaut sich die Ergebnisse von XValue an, dann sehen wir, dass der Gruppenfilter erkannt wird und es zwei weitere Einräge in XValue gibt, die die LayerID' ethalten sollen. In der Codezeile
Code:
Set objLayer = ThisDrawing.ObjectIdToObject(DataLayer)
wird versucht das Layerobjekt abzugreifen. Das Ergebniss ist allerdings Nothing. Die Zahlen, die in XValue enthalten sind, sind auch negative Zahlen. Die Id's sollten aus meiner Sicht die Form und die Länge, wie die Variable z haben.
Ich hoffe ich konnte das Problem soweit verständlich erläutern und es hat evtl. der eine oder andere einen Tipp für mich.
[Diese Nachricht wurde von Gora1000 am 26. Okt. 2019 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP