| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Auswahlsatz von Layern mit Filter 'Teil des Layernamens' (1085 mal gelesen)
|
otm Mitglied Bauingenieur
Beiträge: 167 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023 VBA Enabler 2023 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 07. Okt. 2009 10:57 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich versuche eine Layergruppe in einen Auswahlsatz zu bringen. Sollte nicht so schwer sein, geht aber nicht. Bis jetzt hab ich Folgendes: Code:
'Löscht alle eventuell vorhandenen Auswahlsätze If ThisDrawing.SelectionSets.Count > 0 Then MsgBox "Vorhandene Auswahlsätze: " & ThisDrawing.SelectionSets.Count, , "Löschen" Dim intAuswahl As Long For intAuswahl = 0 To ThisDrawing.SelectionSets.Count - 1 ThisDrawing.SelectionSets.Item(intAuswahl).Delete Next intAuswahl End If 'Auswahlsatz neu bilden 'Alle Layer die mit XY anfangen und auf denen etwas gezeichnet ist Dim ssMLayers As AcadSelectionSet Dim MLayer As AcadLayer Dim FilterTyp(0) As Integer Dim FilterDat(0) As Variant Set ssMLayers = ThisDrawing.SelectionSets.Add("ssMLay") FilterTyp(0) = 8 'Filter Layer FilterDat(0) = "xy*" 'Layername als String mit Wildcard 'FilterTyp(1) = 0 'Filter ob Modell oder Layout 'FilterDat(1) = ?? 'Enthält Objekte (Ja= ? | Nein= ?) 'Alle Layer mit dem Filterkriterium in den Auswahlsatz aufnehmen ssMLayers.Select acSelectionSetAll, , , FilterTyp, FilterDat For Each MLayer In ssMLayers ...... Next
Bei For Each ... bekomme ich den Hinweis "Typen unverträglich". Tatsächlich sind im Auswahlsatz die Objekte auf dem Layer und nicht die Layernamen. Ich dachte unter diesem Link wäre ein Hinweis http://ww3.cad.de/foren/ubb/Forum259/HTML/000515.shtml Hat aber nicht gefunzt. Was mach' ich falsch?
------------------ Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Okt. 2009 11:06 <-- editieren / zitieren -->
Hi Christian, >> Dim MLayer As AcadLayer >> ... >> For Each MLayer In ssMLayers
Ein SelectionSet liefert Items vom Typ AcadEntity, Du versuchst aber durch die Deklaration 'As AcadLayer' die retournierten Elemente zum Typ AcadLayer zu casten, das fliegt ab, weil's nicht geht SelectionSet-Filter für Modell:
Code: FilterTyp(1) = 410 'Filter ob Modell oder Layout FilterDat(1) = "Model" 'Enthält Objekte (Ja= ? | Nein= ?)
HTH, - alfred -
------------------ www.hollaus.at |
otm Mitglied Bauingenieur
Beiträge: 167 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023 VBA Enabler 2023 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 07. Okt. 2009 14:19 <-- editieren / zitieren --> Unities abgeben:
Hi alfred, hab ich leider nicht ganz verstanden. Ich möchte eine Liste mit Layernamen haben, die mit "xy*" anfangen und auf denen Objekte liegen. Das ich in meinem Auswahlsatz nur nach Objekten auf Layern suchen kann, hab ich kapiert. Aber wie kann ich dann die Layerliste zusammenstellen?
------------------ Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Okt. 2009 14:26 <-- editieren / zitieren -->
Hi, >> Ich möchte eine Liste mit Layernamen haben, >> die mit "xy*" anfangen und auf denen Objekte liegen Eine Layerliste bekommst Du nicht mit SelectionSet, mit einem SelectionSet bekommst Du Geometrieelemente! Willst Du Layer Deiner Zeichnung aufspüren, dann geht das nur durch Scannen durch die LayerTable: Code: Dim tLayer as AcadLayer For each tLayer in ThisDrawing.Layers if ucase(tLayer.Name) like "XY*" then 'ok, da ist ein passender layer, wie auch immer Du diese dann sammeln willst 'da kannst Du ein SelectionSet mit diesem Layer-Namen machen, um zu 'erkennen, ob Objekte gefunden werden end if Next
HTH, - alfred - ------------------ www.hollaus.at |
otm Mitglied Bauingenieur
Beiträge: 167 Registriert: 26.08.2009 MS Win 10 AutoCAD Civil 3D 2023 VBA Enabler 2023 MS Access Database Enginge X64 MSO 365 (64bit)
|
erstellt am: 07. Okt. 2009 14:42 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|