| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Objekte auf Layer erkennen (2369 mal gelesen)
|
Frank136 Mitglied

 Beiträge: 45 Registriert: 06.04.2009 P4 WinXP Acad2004,2005,2008 Office2003
|
erstellt am: 02. Jun. 2009 11:21 <-- editieren / zitieren --> Unities abgeben:         
Da bin ich mal wieder  , heute gehts um Layer. Ich habe eine Zeichnung mit verschiedenen Layern, auf denen Polylinien und Blockreferenzen liegen. Jetzt möchte ich von einem bestimmten Layer die Koordinaten aller Blockreferenzen auslesen. mein Code: Dim Entity As AcadEntity Dim ActLayer As AcadLayer Dim InPoint As Variant On Local Error Resume Next Set ActLayer = ThisDrawing.Layers("Module") ActLayer.Freeze = False ThisDrawing.ActiveLayer = ActLayer For Each Entity In ThisDrawing.ActiveLayer If TypeOf Entity Is AcadBlockReference InPoint = Entity.InsertionPoint dann in ein Array schreiben...(läuft schon) Das Programm setzt mir den gewünschen Layer auf aktuell, aber es wird keine Blockref erkannt. Was mache ich falsch?
gruß Frank
------------------ Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 02. Jun. 2009 12:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Frank136
Hi Frank, Für solche Sachen würde ich einen Selectionset mit Filter nutzen. Da gibt es schon einige Beispiele hier im Forum. Da kannst du direkt über den Layer und das Element filtern. Das geht bei vielen Elementen auch schneller. Die Filtertypen kannst du in der DXF-Hilfe nachlesen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank136 Mitglied

 Beiträge: 45 Registriert: 06.04.2009 P4 WinXP Acad2004,2005,2008 Office2003
|
erstellt am: 02. Jun. 2009 15:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, das mit der SelectionSet hatte ich mir schon fast gedacht. Mal schauen, ob ich da durchblicke. Jetzt noch ne ganz blöde Frage: Wo finde ich denn diese DXF-Hilfe, bzw ein Auflistung der DXF-Gruppencodes? Danke schonmal gruß Frank ------------------ Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 02. Jun. 2009 15:31 <-- editieren / zitieren --> Unities abgeben:          Nur für Frank136
Hi Frank, Aus der Hilfe: Code: DXF-Referenz > Abschnitt OBJECTS > Gängige Gruppencodes für Objekte In der nachfolgenden Tabelle werden die Gruppencodes aufgeführt, die für praktisch alle nichtgrafischen Objekte gelten. Wenn Sie auf die Gruppencode-Tabelle mit Hilfe des Objekttyps verweisen (Liste der Codes, die einem bestimmten Objekt zugeordnet wurden), ist zu beachten, dass die hier angegebenen Codes bereits vorliegen könnten. Bestimmte Gruppencodes sind nur dann bei einem Objekt aufgeführt, wenn das Objekt keine Vorgabewerte für diese Gruppencode-Eigenschaften aufweist. Weitere Informationen zu Abkürzungen und Formatierungen, die in dieser Tabelle verwendet werden, finden Sie unter Formatierungskonventionen in der Referenz.Gängige Objekt-Gruppencodes Gruppencode Beschreibung 0 Objekttyp 5 Referenz 8 Layername (mehrere Einträge möglich)
Gruß, Carsten [Diese Nachricht wurde von Carsten1210 am 02. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank136 Mitglied

 Beiträge: 45 Registriert: 06.04.2009 P4 WinXP Acad2004,2005,2008 Office2003
|
erstellt am: 02. Jun. 2009 20:31 <-- editieren / zitieren --> Unities abgeben:         
Hallo, danke für den Verweis auf die Hilfe, hätte ich nie gefunden! Ich hab mal ein kleines Programm geschrieben, welches mir einen Layer ausliest. Dabei bin ich auf folgende Probleme gestoßen: 1)Die Reihenfolge, in der die gefundenen Elemente ausgegeben werden ist genau umgekehrt, als wenn ich normal mit "For Each Entity in ThisDrawing.ModelSpace" suche. Das ist für mich nicht so toll, weil ich mit den Koordinaten noch weiterrechnen will und mit so alle Werte davonlaufen. 2)Die Suche mit SelectionSet dauert bei mir wesentlich länger als mit der einfachen Methode, warum auch immer 3)Wenn ich den Filter so einstelle, dass er eine Polylinie auf dem Layer "Grenze" sucht, findet die SelectionSet nichts, obwohl eine Polylinie da ist. code: FilterCode(0) = -4 : FilterWert(0)= "<AND" FilterCode(1) = 0 : FilterWert(1)= "polyline" FilterCode(2) = 8 : FilterWert(2)= "Grenze" FilterCode(3) = -4 : FilterWert(3)= "AND>" Ehrlich gesagt finde ich so ne SelectionSet nicht ganz so toll, auch wenn sie vielseitig ist. Kann ich nicht doch an meinen ersten Versuchen weitermachen und alles auf nem aktiven Layer suchen?
gruß Frank ------------------ Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 02. Jun. 2009 22:52 <-- editieren / zitieren --> Unities abgeben:          Nur für Frank136
Hallo Frank, Zitat: FilterCode(0) = -4 : FilterWert(0)= "<AND" FilterCode(1) = 0 : FilterWert(1)= "polyline" FilterCode(2) = 8 : FilterWert(2)= "Grenze" FilterCode(3) = -4 : FilterWert(3)= "AND>"
das mit dem and kannst du dir sparen. Wenn mehrere Bedingungen angegeben sind ist es immer eine and Bedingung. Handelt es sich denn um eine Polylinie ? Wahrscheinlich nicht. Es ist bestimmt eine LWPolyline. Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 03. Jun. 2009 09:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Frank136
Hallo Frank, hab mal ein Beipiel:
Code: Dim FilterType() As Integer Dim FilterData() As VariantDim group As Variant Dim FData As Variant ' Insert ReDim FilterType(0 To 0) ReDim FilterData(0 To 0) FilterType(0) = 0 FilterData(0) = "INSERT" ' Punkt ReDim FilterType(0 To 0) ReDim FilterData(0 To 0) FilterType(0) = 0 FilterData(0) = "POINT" ' Text ReDim FilterType(0 To 3) ReDim FilterData(0 To 3) FilterType(0) = -4 FilterData(0) = "<OR" FilterType(1) = 0 FilterData(1) = "TEXT" FilterType(2) = 0 FilterData(2) = "MTEXT" FilterType(3) = -4 FilterData(3) = "OR>" ' Linien ReDim FilterType(0 To 0) ReDim FilterData(0 To 0) FilterType(0) = 0 FilterData(0) = "LINE" ' LWPOly Linien ReDim FilterType(0 To 0) ReDim FilterData(0 To 0) FilterType(0) = 0 FilterData(0) = "LWPOLYLINE"
Die Beispiele brauchst du nur noch mit dem Code (8) Layer ergänzen. Eine Alternative Schreibweise bei Mehrfachauswahl wäre
Code: ' Text ReDim FilterType(0 To 0) ReDim FilterData(0 To 0) FilterType(0) = 0 FilterData(0) = "TEXT,MTEXT"
Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank136 Mitglied

 Beiträge: 45 Registriert: 06.04.2009 P4 WinXP Acad2004,2005,2008 Office2003
|
erstellt am: 03. Jun. 2009 11:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, Danke für die Tips, es ist wirklich eine LWPolylinie. Jetzt hab ich auch verstanden, wo da der Unterschied ist. Ich werd mal mit den Beispielen ein wenig testen. Melde mich dann noch mal. gruß Frank ------------------ Wenn das Wasser bis zum Hals steht, sollte man den Kopf nicht hängen lassen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Frank136 Mitglied

 Beiträge: 45 Registriert: 06.04.2009 P4 WinXP Acad2004,2005,2008 Office2003
|
erstellt am: 05. Jun. 2009 13:18 <-- editieren / zitieren --> Unities abgeben:         
|