| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: noch einmal Selektion (1522 mal gelesen)
|
PeterF Mitglied

 Beiträge: 30 Registriert: 11.08.2008 BricsCad V8-9 ACAD 2000-2009
|
erstellt am: 18. Aug. 2008 22:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo allerseits, ich habe noch ein Selektionsproblem. Ich möchte aus einem bestimmten Layout einen Block auslesen. Wenn ich das Layout nicht angebe, geht das ja recht einfach: Dim myData(2) As Variant Dim myType(2) As Integer Dim mySS As AcadSelectionSet
myType(0) = 0 myData(0) = "INSERT" myType(1) = 2 myData(1) = <blocknam> myType(2) = 67 myData(2) = 1
SelectionSetsClear ActiveDocument, "Temp" Set mySS = ActiveDocument.SelectionSets.Add("Temp") mySS.Select acSelectionSetAll, , , myType, myData
Wenn ich nun prüfen möchte, ob der Block in einem bestimmten Layout vorhanden ist, kann ich ja alle Ergebnise durchlaufen und die OwnerID auswerten. Das ist aber nicht schön. Nun habe ich mit mir mit (entget(car(entsel))'("*")) die Daten des Blocks einmal angeschaut und den Gruppencode 410 gefunden, in dem der Layoutname steht. ((-1 . <Objektname: 7e8f5908> ) (0 . "INSERT") (330 . <Objektname: 7e8f54a8> ) (5 . "1B71") (100 . "AcDbEntity") (67 . 1) (410 . "TESTLAYOUT") (8 . "TestLayer") (100 . "AcDbBlockReference") (66 . 1) (2 . "Testblock") (10 1019.0 5.0 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) nun dachte ich, dass ich die Daten- und Filterliste nur um myType(3) = 410 myData(3) = "TESTLAYOUT" zu erweitern brauche. Aber das SelectionSet hat dann keine Objekte. WARUM?
------------------ Viele Grüße aus dem Münsterland! PeterF -------------------------------------------- Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt. 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: 19. Aug. 2008 07:07 <-- editieren / zitieren --> Unities abgeben:          Nur für PeterF
Hi Peter, Warum holst du dir nicht erst einmal das Layout, was ja auch nur eine Blockauflistung ist und ermittelst den gesuchten Block in diesem Layout-Block?! Gruß aus dem Münsterland, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PeterF Mitglied

 Beiträge: 30 Registriert: 11.08.2008 BricsCad V8-9 ACAD 2000-2009
|
erstellt am: 19. Aug. 2008 09:14 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten, Danke für die Antwort. Klar geht das auch, aber 1. möchte ich prinzipiell wissen, warum ich den Gruppencode 410 nicht abfragen kann 2. ich wollte verhindern, eine for each schleife zu durchlaufen um ein bestimmtes Element zu filtern, wenn man es dirket zu fassen bekommen könnte Sonst kann ich auch alle betreffenden Blöcke aus allen Papierbereichen selektieren um dann über die OwderID das Layout zu bestimmen. Dann weiß ich wenigstens schon mal, dass ich ein Element mit Typ und Name habe, welches ich suche und muß nicht erst noch eine Typidentifizierung machen. Aber viele Wege führen nach Rom. Klar ist Dein Vorschlag auch eine Variante. ------------------ Viele Grüße aus dem Münsterland! PeterF -------------------------------------------- Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt. 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: 19. Aug. 2008 16:17 <-- editieren / zitieren --> Unities abgeben:          Nur für PeterF
Hallo Peter, Zitat: mySS.Select acSelectionSetAll, , , myType, myData
Wenn ich mich recht erinnere, wird nur das selektiert was sichtbar ist. Versuch doch mal zuerst auf das Layout zu wechseln und dann dein Selectionset zu füllen. Ist es dann auch noch leer? 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 |
PeterF Mitglied

 Beiträge: 30 Registriert: 11.08.2008
|
erstellt am: 19. Aug. 2008 17:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried leider hilft Dein Tip auch nicht weiter. Meines Wissens ist es egal, ob Objekte am Bildschirm sichtbar sind oder nicht. Man kann mit dem GruppenCode 67 unterscheiden, ob man Objekte aus dem Modellbereich (=0) oder den Layouts (=1) selektieren möchte. ------------------ Viele Grüße aus dem Münsterland! PeterF -------------------------------------------- Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt. 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: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 19. Aug. 2008 18:26 <-- editieren / zitieren --> Unities abgeben:          Nur für PeterF
Hallo Peter, was hast Du denn schon wieder vor? Eine Legende durchsuchen ob alle Blöcke auch vorhanden sind? Meines Erachtens kannst Du den Layoutnamen über den Gruppencode unter VBA so nicht herausfiltern, evtl. geht's ja über LISP. Wenn Dir der Vorschlag von Carsten nicht gefällt, hier noch eine Variante wie ich das machen würde: Wechsel in das Layout und mach ein acSelectionSetWindow ExtMin, ExtMax dann weißt Du ob der Block in diesem Layout vorhanden ist oder nicht Damit kannst Du den Filter anwenden und sparst Dir das Durchlaufen der Layoutentities. Grüße, Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PeterF Mitglied

 Beiträge: 30 Registriert: 11.08.2008
|
erstellt am: 19. Aug. 2008 21:32 <-- editieren / zitieren --> Unities abgeben:         
Hallo Klaus, ich muß ein Stempelfeld prüfen, ob es erstens überhaupt noch da ist und zweitens ob nicht so ein Experte den Block gesprengt hat und damit alle Attribute vernichtet hat. Das kommt leider öfter vor, als man glauben mag. Deine Idee ist ja so schon mal nicht schlecht. Wie bekomme ich den min und max des Layouts? BoundingBox geht ja nicht. (Hoffentlich ist die Frage nicht zu blöd!) Eigentlich habe ich mein Problem ja schon wie oben beschrieben über die OwnerID gelöst. Geht ja auch ganz flott. Sie viele Objekte sind das ja nicht. Aber wenn es klarer strukturiert geht, ist mir das lieber. Dann kann ich meinen Code ja vielleicht in ein paar Wochen auch noch verstehen (Ach ja die Kommentare im Code sollte man ja auch nicht vergessen!) Zu LISP: Davon habe ich so gut wie gar keine Ahnung. Kann man zwischen LISP und ActiveX Daten austauschen? Ich vermute mal es kommt ein ganz dickes NEIN!
------------------ Viele Grüße aus dem Münsterland! PeterF -------------------------------------------- Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt. 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: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 19. Aug. 2008 21:48 <-- editieren / zitieren --> Unities abgeben:          Nur für PeterF
|
PeterF Mitglied

 Beiträge: 30 Registriert: 11.08.2008
|
erstellt am: 20. Aug. 2008 06:49 <-- editieren / zitieren --> Unities abgeben:         
Moin Klaus, man kommt doch immer wieder an seine Wissensgrenzen. Die Infos sind aber auch sehr verstreut in Autocad. Einmal hängen sie am Objekt, dann an einem abgeleiteten Objekt und manchmal sind es die Systemvariablen. Auf alle Fälle lernt man nie aus. vielen Dank! ------------------ Viele Grüße aus dem Münsterland! PeterF -------------------------------------------- Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |