| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Gruppenfilterinhalte mit VBA auslesen (2504 / mal gelesen)
|
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 26. Jun. 2018 03:40 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD Team , Wenn ich meinen Layereigenschafte-Manager öffne hab ich mir dort einige Gruppenfilter und Untergruppenfilter angelegt. Wie kann ich nun mit VBA diesen Gruppenfilterbaum und deren Layerinhalt auslesen? Ich habe bisher vergebens nach einem Code gesucht. Vielen Dank 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: 26. Jun. 2018 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
|
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 26. Jun. 2018 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo michimueller85, ich hätte da zwei Ansätze. 1. Hier eine VBA-Lösung um die Layer auszulesen:
Code:
Sub Layerauslesen()Dim strLayer As String Open "C:\Users\BENUTZERNAME\Desktop\Layer.txt" For Output As #1 For Each objLayer In ThisDrawing.Layers strLayer = strLayer & objLayer.Name & ";" Next Print #1, strLayer & vbCr Close #1 'MsgBox strLayer End Sub
2. Eine VBA-Lösung um die Gruppenfilter auszulesen, dafür habe ich mir den Code aus dem Beitrag Layerfilter loeschen vorgenommen und umgebastelt: Code:
Sub Layerfilterauslesen()Dim strLayer As String Dim objLayer As Variant Dim dict As AcadDictionary Dim TrackingDictionary As AcadDictionary, TrackingXRecord As AcadXRecord Dim XRecordDataType As Variant, XRecordData As Variant Dim ArraySize As Long, iCount As Long Dim DataType As Integer, Data As String, msg As String Set dict = ThisDrawing.Layers.GetExtensionDictionary("ACLYDICTIONARY") Set TrackingDictionary = dict If dict.Count > 0 Then Open "C:\Users\BENUTZERNAME\Desktop\Layerfilter.txt" For Output As #1 For Each objLayer In dict Set TrackingXRecord = TrackingDictionary.GetObject(objLayer.Name) TrackingXRecord.GetXRecordData XRecordDataType, XRecordData ArraySize = UBound(XRecordDataType) For iCount = 0 To ArraySize DataType = XRecordDataType(iCount) Data = XRecordData(iCount) Debug.Print DataType; " : "; Data If DataType = 300 Then strLayer = strLayer & Data & ";" End If Next Next objLayer End If Print #1, strLayer & vbCr Close #1 End Sub
Vielleicht hilft dir das weiter. Bei Fragen gerne melden. Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 26. Jun. 2018 10:20 <-- editieren / zitieren --> Unities abgeben:
Hallo ihr zwei oh das ging ja echt schnell mit den Antworten. also ich hab nun gleich mal den Code von silcono kopiert und ausgeführt. Ich hab einfach mal eine neue leere Datei angelegt, mit zwei Gruppenfiltern und in jedem Gruppenfilter je einen Layer angelegt. Jedoch kommt bei mir dann in der Zeile: Data = XRecordData(iCount) die Fehlermeldung Typen unverträglich. woran kann es liegen?! ich nutze autocad 2014 Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 26. Jun. 2018 10:45 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
|
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 26. Jun. 2018 11:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Silcono, also wenn ich das mache kommt sofort eine Fehlermeldung, ich hab gelesen das in neueren Autocad Version glaube ab 2008 das ACLYDICTIONARY richtig wäre, daher würde es schon passen. Also ich hab nun mal drei Gruppenfilter erstellt und in den zweiten Gruppenfilter einen Layer gelegt. Dort wo der Layer liegt bleibt das Programm auch hängen. ich hab dir die Datei und zwei Screens angehängt. vielleicht kannst du mir damit weiterhelfen Danke dir
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 26. Jun. 2018 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo michi, da habe ich wohl noch zu viel Code aus dem anderen übernommen. Probiers mal so: Code:
Sub Layerfilterauslesen()Dim strLayer As String Dim objLayer As Variant Dim dict As AcadDictionary Dim TrackingDictionary As AcadDictionary, TrackingXRecord As AcadXRecord Dim XRecordDataType As Variant, XRecordData As Variant Dim ArraySize As Long, iCount As Long Dim DataType As Integer, Data As String Dim blnLayFilter As Boolean Set dict = ThisDrawing.Layers.GetExtensionDictionary("ACLYDICTIONARY") Set TrackingDictionary = dict If dict.Count > 0 Then Open "C:\Users\michi\Desktop\Layerfilter.txt" For Output As #1 For Each objLayer In dict Set TrackingXRecord = TrackingDictionary.GetObject(objLayer.Name) TrackingXRecord.GetXRecordData XRecordDataType, XRecordData ArraySize = UBound(XRecordDataType) DataType = XRecordDataType(2) Data = XRecordData(2) Debug.Print DataType; " : "; Data If DataType = 300 Then strLayer = strLayer & Data & ";" End If Next objLayer End If Print #1, strLayer & vbCr Close #1 End Sub
Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 26. Jun. 2018 16:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Silcono, vielen Dank läuft nun einwandfrei durch , nur muss ich nun noch wissen welche Layer sich in den Layerfilter befinden. Hab ich vielleicht zu Anfangs schlecht beschrieben. Kann man das noch irgendwie einbauen? Gruß
Michi [Diese Nachricht wurde von michimueller85 am 26. Jun. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 27. Jun. 2018 11:23 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
|
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 28. Jun. 2018 01:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Silcono, vielen dank für deine Mühen, ich hab auch nochmal den ganzen Tag damit verbracht eine Lösung zu finden, aber ohne Erfolg. Hat noch irgendjemand eine Idee wie ich die Layer aus einen Gruppenfilter auslesen kann? Danke euch Gruß Michi 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: 28. Jun. 2018 02:55 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Schau dir mal die erweiterten Daten eines Layers an welcher in deinem Layergruppenfilter steckt. Am besten neue Datei, ein Layer, ein Gruppenfilter welcher den Layer enthält. So kannst du gut den Daten folgen. Hoffe ich schicke dich nicht falsch, ich sitze gerade nicht am Acad. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 28. Jun. 2018 10:49 <-- editieren / zitieren --> Unities abgeben:
hallo cadffm, danke für deine Antwort! wie komme ich denn zu den erweiterten Daten eines Layers? wenn ich mir mit VBA einen Layer anschaue gehe ich immer folgend vor: dim objLayer as ACADLayer dim layer_name as variant for each objLayer in ThisDrawing.layers layer_name= objLayer.name nun kann ich im VBA Lokalfenster guggen was der Layer alles für Informationen enhält. Es es befindet sich dort keine Information welchem Gruppenfilter der Layer zugeordnet ist. anbei bei Auszug von Autocad mit den Layerinformationen. Gruß Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 28. Jun. 2018 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo Michi, ich glaube cadffm meint es andersrum. Die erweiterten Daten für den Layer innerhalb der Daten des Gruppenfilters. Bisher habe ich rausgefunden, dass der XRecordDataType '330' sich auf einen Layer im Gruppenfilter bezieht. Nun muss man schauen, wie man weiter vorgeht. Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 28. Jun. 2018 11:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Silcono, ah ok alles klar hab ich verstanden. ich hab da auch schon bisschen rumgespielt, immer wenn ich einen Layer zu dem Gruppenfilter hinzufüge, kommt so ein XRecordData hinzu. Aber dort stehen nur irgendwelche Zahlen drin?! anbei nochmal ein Auszug von den XRecordData (zwei Layer befinden sich in dem Gruppenfilter1) Gruß Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 28. Jun. 2018 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
|
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 01. Jul. 2018 05:55 <-- editieren / zitieren --> Unities abgeben:
|
rexxitall Mitglied Dipl. -Ing. Bau
Beiträge: 270 Registriert: 07.06.2013 Various: systems, Operating systems, cad systems, cad versions, programming languages.
|
erstellt am: 02. Jul. 2018 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Könnte es vielleicht sein, das der ominöse Zahlenverhau die ObjektID des Layers angibt ? Autocad kennt 2 Wege ein Objekt zu addressieren HANDLES (hex String) und die ObjektID ein LONG Word. Nur so mal als Idee in den raum gewürfelt ohne es zu testen. Lieben Gruß aus Finnland ------------------ Wer es nicht versucht, hat schon verlorn Und bei 3 Typos gibts den vierten gratis ! <<< for sale ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 02. Jul. 2018 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo, da ich das ganze Thema in c#.Net bereits gelöst habe, ff Hinweise zum Aufbau, wie die Layerfilter in einer Zeichnung gespeichert sind. In der Zeichnungsdatenbank (Database) gibt es die Eigenschaft LayerFilters Dort musst du auf die Root-Eigenschaft zugreifen, Das ist der Einstiegsfilter unter dem alle anderen verschachtelt sind. Die verschachtelten Elemente dieses Root-Laxyerfilters können Eigenschaftenfilter oder Gruppenfilter sein. Da du die Verschachtelungstiefe nicht kennst, solltest du die Funktion zum Auslesen des Inhalts eines Filters als rekursiv arbeitende Funktion gestalten. Hast du einen Gruppenfilter gefunden (was du anhand des Objekttypes ermitteln kannst) besitz dieser die Eigenschaft: LayerIds Darin enthalten ist eine LayerCollection, die eine Liste der ObjektId's der LayertableRecords, also der Layer, beinhaltet. Darüber hast du also Zugriff auf die Layer, von denen du dann eben auch alle Eigenschaften (Name, Farbe, Linientyp ...) ermitteln kannst. Falls du nur auslesen möchtest ist das folgende nicht wichtig, ich möchte es dennoch nicht vorenthalten. Namen der Layerfilter müssen eindeutig sein. Erzeugt man Layerfilter im Programm, dann muss diese Prüfung im Code erfolgen. AutoCAD meckert nicht, wenn ein neuer Layerfilter den Namen eines bereits existierenden Filters zugewiesen bekommt. Dieser wird auch im AutoCAD angezeigt. ABER: Wählt man diesen im AutoCAD aus, so wird immer der zuerst angelegte namensgleiche Filter ausgeführt, egal welche Eigenschaften oder Filter tatsächlich definiert sind. Möchte man dennoch namensgleiche Filter anlegen, muss man mit unsichtbaren Zeichen im Namen arbeiten, die den Namen dann eindeutig machen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 02. Jul. 2018 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hi Michi, vielleicht kannst du aus Holger's Beitrag auch noch etwas mitnehmen. Ich wird mir seinen Beitrag direkt mal ausdrucken und wo ablegen :P Aber noch was anderes. Mittlerweile habe ich ex hinbekommen, alle Gruppenfilter mit ihren ersten genannten Layer auszugeben und das ganze so: Code:
Sub Layerfilterauslesen()Dim strFilter As String Dim strLayer As String Dim objFilter As Variant Dim dict As AcadDictionary Dim TrackingDictionary As AcadDictionary, TrackingXRecord As AcadXRecord Dim XRecordDataType As Variant, xRecordData As Variant Dim ArraySize As Long ', iCount As Long Dim DataType As Integer, Data As String Dim blnLayFilter As Boolean Dim objLayer As AcadLayer Dim DataLayer As String Set dict = ThisDrawing.Layers.GetExtensionDictionary("ACLYDICTIONARY") Set TrackingDictionary = dict
If dict.Count > 0 Then Open "C:\Users\NAME\Desktop\Layerfilter.txt" For Output As #1 On Error Resume Next For Each objFilter In dict Set TrackingXRecord = TrackingDictionary.GetObject(objFilter.Name) TrackingXRecord.GetXRecordData XRecordDataType, xRecordData DataType = XRecordDataType(3) Data = xRecordData(2) DataLayer = xRecordData(3)(0) Set objLayer = ThisDrawing.ObjectIdToObject(DataLayer) If DataType = 330 Then strFilter = strFilter & Data & ": " & objLayer.Name & ";" & vbCrLf End If Next objFilter End If Print #1, strFilter Close #1 End Sub
jetzt bin ich gerade noch dabei, das ganze so umzuschreiben, das es alle Layer in einem Gruppenfilter ausgibt. Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 03. Jul. 2018 06:50 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, vielen Dank für deine Mithilfe, ich hab verstanden was du meinst aber um das umzusetzen fehlen mir viel zu viele tiefere Informationen wie ich auf Root usw. zugreifen kann. Ich bin leider kein Programmierer, ich wurstel immer nur bisschen im VBA rum. könntest du mir ein bisschen VBA Code zu Verfügung stellen, dann könnte ich es zugleich nachvollziehen und versuchen zu verstehen?! Hallo Silcono, also ich hab deinen Code mal ausprobiert. Leider funktioniert er bei mir nicht Mit DataLayer = xRecordData(3)(0) hab ich verstanden das du die LayerID ermitteln willst. Ich hab das mal im Debugger beobachtet dort wird bei mir für -1266639904 bei xRecordData(3)(0) eingetragen. Aber ich glaube mit dieser Zahl handelt es sich nicht um eine ObjectID von dem Layer. Du kannst ja einfach mal deine Layer abfragen: mit: dim objlayer as acadlayer For Each objlayer in thisdrawing.layers objlayer.objectid next leider hat keine ID mit dem Inhalt von xRecordData(3)(0) übereingestimmt. Auch war die objlayer.objectid viel länger (15 Stellen) als die aus xRecordData(3)(0). Vielleicht kann Holger was erkennen Danke dir Gruß Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 03. Jul. 2018 07:02 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo michi, also bei mir hat es funktioniert. Ich bekomme in die Textdatei die Gruppenfilter und die ersten Layer der Gruppenfilter genannt. Bei der Ausführung des Makros muss man auch darauf achten, dass kein Gruppenfilter selektiert ist, sondern "Alle". Vielleicht schickst du mir mal deine Test-DWG, vielleicht ist diese anders aufgebaut. Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 03. Jul. 2018 08:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Silcono, ok sehr merkwürdig, anbei die meine Test DWG Datei und nochmal zwei Bilder. Auf dem einen Bild ein Debug Auszug von dem zweiten Gruppenfilter mit den Record IDS. Auf dem anderen Bild wird die richtige Object id von dem Layer in Gruppe 2 angezeigt. Ich hab das direkt mit einem AutoCAD Datenbank-Tool ausgelesen. Gruß Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 ACAD20XX, defun-tools
|
erstellt am: 03. Jul. 2018 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Zitat: Original erstellt von michimueller85: ... könntest du mir ein bisschen VBA Code zu Verfügung stellen, dann könnte ich es zugleich nachvollziehen und versuchen zu verstehen?!
.. nein, weil wie gesagt, ich arbeite mit c#.Net und nicht VBA. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michimueller85 Mitglied
Beiträge: 24 Registriert: 06.12.2010
|
erstellt am: 05. Jul. 2018 04:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, ok alles klar, könnest du mir den c#.Net Code zur Verfügung stellen vielleicht kann ich mir etwas daraus ableiten Ich hatte im Studium mal C++ vielleicht komm ich noch damit zurecht. @Silcono, bist du weitergekommen? bzw. konntest du mit meiner DWG Datei was anfangen. Gruß Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 06. Jul. 2018 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo Michi, also weitergekommen nicht direkt. Das Auslesen von Layerfilter und Layer funktioniert, aber bisher nur einzeln. Bzgl. deiner Zeichnung habe ich kein Problem gehabt, da hat das Programm die Layerfilter ohne Probleme ausgelesen. Grüße Silcono Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
silcono Mitglied Planer
Beiträge: 88 Registriert: 19.12.2014 AutoCAD 2010 LT AutoCAD 2014 AutoCAD 2018 AutoCAD MAP 3D 2017 Intel(R) Core(TM) i5-4570 CPU @ 3.20GhZ 3.20Ghz 16,00GB Ram Windows 7- Prof. 64-Bit ASUS EAH6450 Series
|
erstellt am: 06. Jul. 2018 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für michimueller85
Hallo Michi, also ich hab jetzt noch ein bisschen rumgetüfftelt und siehe da, es funktioniert Probier mal den folgenden Code bei dir aus und achte darauf, dass du im Layermanager "ALLE" selektiert hast: 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 TrackingoDict = oDict Open "C:\Users\NAME\Desktop\Layerfilter.txt" For Output As #1 On Error Resume Next For Each LayFlt In oDict Set oXrec = TrackingoDict.GetObject(LayFlt.Name) oXrec.GetXRecordData xtype, XValue strFilter = XValue(2) ArraySize = UBound(XValue) Print #1, strFilter strFilter = "" 'On Error Resume Next For i = 3 To ArraySize DataLayer = XValue(i)(0) Set objLayer = ThisDrawing.ObjectIdToObject(DataLayer) strLayer = objLayer.Name & ";" & vbCrLf Print #1, strLayer strLayer = "" Next Next LayFlt Close #1 End Sub
Anbei findest du noch meine Ergebnisse-> Grüße Silcono [Diese Nachricht wurde von silcono am 06. Jul. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |