| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Guppendilter und LayerID's (1335 / mal gelesen)
|
Gora1000 Mitglied Ingenieur
Beiträge: 23 Registriert: 21.08.2013
|
erstellt am: 26. Okt. 2019 09:09 <-- editieren / zitieren --> Unities abgeben:
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. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gora1000 Mitglied Ingenieur
Beiträge: 23 Registriert: 21.08.2013
|
erstellt am: 31. Okt. 2019 13:28 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 31. Okt. 2019 13:40 <-- editieren / zitieren --> Unities abgeben: Nur für Gora1000
Naja, VB A ist ein längst totgeschriebenes Pferd und nicht mehr nativer Bestandteil von AutoDESK CAD Produkten, daher schwindet auch die Anwenderschaft und Layout-Gruppenfilter sind zudem recht exotisch was die Programmierung angeht, also noch ein Fakt der die Helfergruppe eingrenzt. Dennoch sollte man eigentlich immer "alles" in der Hilfe oder im www finden. Hilft dir dieser Thread weiter? Klick! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gora1000 Mitglied Ingenieur
Beiträge: 23 Registriert: 21.08.2013
|
erstellt am: 31. Okt. 2019 13:46 <-- editieren / zitieren --> Unities abgeben:
Hey danke für die Antwort. genau aus diesem Thread habe ich mein Beipiel aufgebaut. Nach letztem Beitrag aus dem Thread funktioniert es bei silcono. Wende ich seinen Code an läuft es nicht. Könntest du seinen Code ausprobieren? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 31. Okt. 2019 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für Gora1000
Was nicht plugNplay läuft bereitet mir selbst viel Arbeit in VBA (=Zeit), da wirst du auf andere Hilfe warten müssen. Aber wenn du dich selbst in VBA und der VBAIDE auskennst wirst du es bestimmt auch selbst hinbekommen - Daumendrück. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 04. Nov. 2019 16:13 <-- editieren / zitieren --> Unities abgeben: Nur für Gora1000
Zitat: Original erstellt von Gora1000: 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: [ URL=http://INTERNETADRESSEHIER ]https://ww3.cad.de/foren/ubb/Forum259/HTML/002244.shtml[/URL] 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.
Bitte zukünftig das "INTERNETADRESSEHIER" durch die richtige Adresse ersetzen, dann funktioniert der Link auch Zitat: Original erstellt von cadffm: Naja, VBA ist ein längst totgeschriebenes Pferd und nicht mehr nativer Bestandteil von AutoDESK CAD Produkten, daher schwindet auch die Anwenderschaft und Layout-Gruppenfilter sind zudem recht exotisch was die Programmierung angeht, also noch ein Fakt der die Helfergruppe eingrenzt.Dennoch sollte man eigentlich immer "alles" in der Hilfe oder im www finden. Hilft dir dieser Thread weiter? Klick!
"längst totgeschriebenes Pferd" ist etwas übertrieben, warum soll man die alten funktionierenden (kleinen) Programme nicht mehr nutzen? ( Klick ist die gleiche Adresse wie bei INTERNETADRESSEHIER ) Aber solche Spezialanwendungen mit Zugriff auf Dictionary sind natürlich schon eine Spezialsache. Mal sehen ob ich abends mal einen Blick darauf werfen kann ... Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |