| |
 | 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: Element markieren (ObjektID) bekannt (2207 mal gelesen)
|
MartinM Mitglied
 
 Beiträge: 122 Registriert: 27.11.2001
|
erstellt am: 30. Jun. 2004 17:11 <-- editieren / zitieren --> Unities abgeben:         
Hallo Zusammen, wie kann ich in meiner aktuellen Sitzung ein Element markieren (auswählen), von dem ich die ObjektID kenne ? Das müsste doch über einen Selektion Set gehen. Die AddItem Methode schlug bis jetzt fehl. Kann mir jemand helfen ? Viele Grüsse Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 01. Jul. 2004 08:18 <-- editieren / zitieren --> Unities abgeben:          Nur für MartinM
Hallo Martin, kannst du vielleicht genauer erklären was du machen möchtest. Willst du z.B. das Objekt einfach mit .Highlight hervorheben oder möchtest du das Objekt nach Beendigung deiner Prozedur das Objekt mit z.b. Wahl;Vorige; auswählen. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MartinM Mitglied
 
 Beiträge: 122 Registriert: 27.11.2001
|
erstellt am: 01. Jul. 2004 08:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo Roland, danke für deine Antwort. Gerne erläutere ich mein Problem ausführlicher: Ich bekomme aus einer anderen Prozedur *) ein Array mit den ObjektID´s von diversen AutoCAD Elementen der aktuellen Sitzung. Nun möchte ich diese AutoCAD-Elemente markieren (= ich möchte die Griffe sehen). Ich denke eine Möglichkeit wäre, die gesamte Zeichnung (Element für Element) durchzugehen, und jeweils die ObjektIDs vergleichen; das hört sich nicht nur unelegant an, ich glaube es ist es auch. Meine Hoffnung ist es, die Elemente direkt anzusprechen. Viele Grüsse Martin *) Für diejenigen, die es genauer interessiert: Ich arbeite mit Map und habe da manchmal das Problem, das Elemente im Speichersatz enthalten sind, deren Identität (Lage) ich nicht kenne. Die Map-Grundfunktionalität "Speichersatz anzeigen" hilft mir dabei nicht, weil die Zeichnungen zum Teil recht groß sind und die Elemente dabei "nur gehighlightet" werden. VBA gibt mit Objekt.SaveSet.GetObjects(kQueriedExisted) ein Array dieser Elemente mit den ObjektID´s zurück. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 01. Jul. 2004 08:51 <-- editieren / zitieren --> Unities abgeben:          Nur für MartinM
OK, entweder du verwendest die Methode .Highlight für alle Objekte, dan hast du aber keine Griffe. Mit VBA ist es leider nicht möglich die Griffe einzuschalten. Ich habe mir aber zwei Funktionen geschrieben (der Lösungsansatz kommt von Bernd Cuder, Danke an dieser Stelle) mit denen du die Objekte in einen Auswahlsatz schreibst den du anschließend in ACAD auswählen kannst (also mit dem Befehl WAHL). Code: Sub RSNNSSSetXdata(Object As AcadEntity) Dim DataType(1) As Integer Dim Data(1) As Variant On Error GoTo Err_Control DataType(0) = 1001: Data(0) = "RSNN_Selection" DataType(1) = 1000: Data(1) = "Auswahl" Object.SetXData DataType, DataExit_Here: Exit Sub Err_Control: Err.Clear Resume Exit_Here End Sub Sub RSNNSSDelXdataAll() Dim objSelSet As AcadSelectionSet Dim Object As AcadEntity Dim varData(0) As Variant Dim intData(0) As Integer Dim varDataS(0) As Variant Dim intDataS(0) As Integer On Error GoTo Err_Control Set objSelSet = ThisDrawing.PickfirstSelectionSet 'objSelSet.Clear intDataS(0) = 1001 varDataS(0) = "RSNN_Selection" 'intDataS(1) = 1000 'varDataS(1) = "Auswahl" objSelSet.Select acSelectionSetAll, FilterType:=intDataS, FilterData:=varDataS If objSelSet.Count = 0 Then GoTo Exit_Here intData(0) = 1001 varData(0) = "RSNN_Selection" For Each Object In objSelSet Object.SetXData intData, varData Next Object Exit_Here: objSelSet.Delete Exit Sub Err_Control: Err.Clear Resume Exit_Here End Sub
Mit RSNNSSSetXdata setzt du XDatas und mit RSNNSSDelXdataAll löscht du alle XDatas. Dadurch kannst du dann alle Objekte auf einmal wählen und die Griffe einschalten. Die Vorgehensweise ist dann recht einfach.
Code: Dim tempObj As AcadObject RSNNSSDelXdataAll 'am Anfang alle eventuell vorhandenen Daten löschen Set tempObj = ThisDrawing.ObjectIdToObject(objectID) RSNNSSSetXdata (tempObj) 'Objekt zur späteren Auswahl hinzufügen RSNNSSDelXdataAll 'Objekte nun für Auswahl in Acad bereitstellen
------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MartinM Mitglied
 
 Beiträge: 122 Registriert: 27.11.2001
|
erstellt am: 01. Jul. 2004 13:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Roland, danke für deine Antwort. Das man einen Selection Set nicht "aktivieren" (Griffe sichtbar) kann, ist schade. Ich habe deinen (Bernds) Ansatz aufgenommen und eine Eigenschaft (Farbe) der Daten des Selection Sets verändert, sodaß ich anschließend visuell bzw. über die Schnellauswahl meinen Auswahlsatz erkennen kann ! Danke und viele Grüsse Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 01. Jul. 2004 15:17 <-- editieren / zitieren --> Unities abgeben:          Nur für MartinM
Wenn du die Farbe änderst brauchst du den ganzen Code von oben nicht. Du könntst aber mit SendCommand folgendes versuchen. Code: ThisDrawing.SendCommand "_select" & vbCr & "_p" & vbCr
Stell vorigen Code ans Ende der Prozedur. ------------------ Roland [Diese Nachricht wurde von RoSiNiNo am 01. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MartinM Mitglied
 
 Beiträge: 122 Registriert: 27.11.2001
|
erstellt am: 05. Jul. 2004 11:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo Roland, die Realisierung über XDATEN hat mir nicht so gut gefallen, weil ich denke, dass einige das anschließende Löschen dieser XDATEN unterlassen würden. Deshalb habe ich der Farbänderung den Vorrang gegeben. Deine Idee mit dem SendCommand funktioniert leider nicht, denn es wird die Objektwahl im Selection Set offensichtlich nicht berücksichtigt. Ich habe jetzt aber noch eine andere Möglichkeit gefunden, ohne die Daten zu "manipulieren": ThisDrawing.Wblock Dateiname, Selection Set ...schreibt den Inhalt des Auswahlsatzes in eine DWG. Das ganze werde ich jetzt mal mit den Benutzern besprechen und demokratisch entscheiden lassen, welches Verfahren wir anwenden. Viele Grüsse Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoSiNiNo Mitglied Konstrukteur
   
 Beiträge: 1126 Registriert: 09.10.2002 Acad 2011-deutsch, Express Tools 3ds Max 2010 Win 7-Professional HP Workstation Z400, 6GB GeForce GTX 470
|
erstellt am: 05. Jul. 2004 12:06 <-- editieren / zitieren --> Unities abgeben:          Nur für MartinM
Hi Maritn, ich glaub da hast du etwas falsch verstanden, der SendCommand funktioniert nur im zusammenhang mit den XDatas und wenn du sie wie oben beschrieben wieder löschst. Also versuch es doch noch einmal so wie oben beschrieben und häng den SendCommand dran. Wenn es trotzdem nicht funtionieren sollte erklär ich es dir gerne noch einmal. ------------------ Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MartinM Mitglied
 
 Beiträge: 122 Registriert: 27.11.2001
|
erstellt am: 05. Jul. 2004 13:07 <-- editieren / zitieren --> Unities abgeben:         
|