| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objekte im SelectSet identifizieren (2185 mal gelesen)
|
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2012 WIN 7 x64 SP1
|
erstellt am: 12. Dez. 2011 20:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich möchte feststellen, was für Objekttypen sich in einem SelectSet befinden. Leider komme ich damit nicht weiter, weil die Objekte im Selectset alle vom Typ Object sind. Wie erhalte ich einen Hinweis, was für ein Inventor-Objekt sich dahinter verbrigt? Grüße Manfred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 13. Dez. 2011 20:20 <-- editieren / zitieren --> Unities abgeben: Nur für Manfred Zirk
Hallo Ich mach's immer so: Code:
For Each oSelectedObject In myInventor.ActiveDocument.SelectSet If TypeOf oSelectedObject Is SketchedSymbol Then ... End If Next
Keine Ahnung ob das wieder codetechnisch oberpfuibäh ist, funktioniert aber. ------------------ MfG RK EDIT: Merke grade das ich wieder an der Frage vorbei geantwortet habe. Schau dir mal Object.GetType an.
[Diese Nachricht wurde von rkauskh am 13. Dez. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 13. Dez. 2011 20:37 <-- editieren / zitieren --> Unities abgeben: Nur für Manfred Zirk
|
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2012 WIN 7 x64 SP1
|
erstellt am: 14. Dez. 2011 11:12 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke für die Antworten. Die Objekte im SelectSet sind alle vom Typ Object. Das ist ja der Punkt. In VB.Net muss alles typsicher sein, das heisst ich habe keine Datentyp Variant, sondern muss korrekt konvertieren - also Object z.B. in AssemblyComponentDefinition. Bei mir hapert es daran, das ich im Grunde nicht weiß, was das für native Objekte sind, die der Benutzer ausgewählt hat. Eigentlich möchte ich folgendes machen: Im Contextmenü einen Button anzeigen wenn z.B. In einem Assemblydocument der Benutzer ein Bauteil ausgewählt hat. Dazu wäre nötig, zu wissen, als was für ein Objekttyp dieses Bauteil im Assembly repräsentiert wird. In einer Zeichnung auf einem Blatt liegt unter jeder Ansicht auch die Quelldatei. (Auswählbar im Browser). Was ist das für ein Objekttyp in einer idw? Es mangelt mir also an Wissen um die verwendetn Objekttypen. Grüße Manfred Edit: Kann ich im Inventor VBA mit Variant so eine Konvertierung machen? Dann könnte ich so rausfinden, was für ein Objekt der User selektiert hat.
[Diese Nachricht wurde von Manfred Zirk am 14. Dez. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 14. Dez. 2011 20:08 <-- editieren / zitieren --> Unities abgeben: Nur für Manfred Zirk
Hallo Dann bastel doch ein kleines Script in dein Programm das auf's onSelect-Event reagiert und dort baust du eine MessageBox ein deren Text aus Code:
Dim oSelectedObject as Object oSelectedObject = SelectSet.Item(1) Dim sText as String sText= oSelectedObject.GetType.ToString
gebildet wird. Dann solltest du bei jedem selektierten Objekt eine Meldung mit dem Objekttyp zu sehen bekommen. Wenn du die Typen hast, kannst du in deinem eigentlichen Script z.B. in einer Select-Case-Anweisung der Reihe nach prüfen, ob dein Kontextmenü erweitert werden muß. Soweit mal die Theorie. :D Oder in den VBA-Editor das einfügen: Code: Public Sub GetSingleSelection() ' Get a feature selection from the user Dim oObject As Object Set oObject = ThisApplication.CommandManager.Pick(kAllEntitiesFilter, "Pick a feature") MsgBox "Picked: " & oObject.Type End Sub
Liefert zu jedem selektierten Objekt den ObjectTypeEnumerator. ------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2012 WIN 7 x64 SP1
|
erstellt am: 14. Dez. 2011 22:03 <-- editieren / zitieren --> Unities abgeben:
Hallo, das funktioniert soweit: Code:
Public Sub Test() If ThisApplication.ActiveDocument.SelectSet.Count <> 1 then Exit Sub End if Dim aaa As Variant aaa = ThisApplication.ActiveDocument.SelectSet.Item(1).Type MsgBox ("Type : " & aaa) End Sub
Leider bekomme ich als Objekttyp nur eine Nummer zurück. Im Objektbrowser kann ich aber danach nicht suchen. Grüße Manfred
[Diese Nachricht wurde von Manfred Zirk am 14. Dez. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 14. Dez. 2011 22:36 <-- editieren / zitieren --> Unities abgeben: Nur für Manfred Zirk
Hallo Der Enumerator reicht eigentlich. Danach kann man auch prüfen. Im Endeffekt muß du die Selektionsszenarien nachstellen, die der User machen kann und dabei den Enumerator auslesen. Oder du setzt in dem VBA-Script einen Haltepunkt und schaust dir in der Überwachung den Typ des selektierten Objektes an. Dort steht die Übersetzung des Enumerators.
------------------ MfG RK Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Manfred Zirk Mitglied
Beiträge: 513 Registriert: 01.11.2002 IV2012 WIN 7 x64 SP1
|
erstellt am: 15. Dez. 2011 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hab glaube ich den Dreh gefunden. Man muss erkennen, was man eigentlich in der Browserleiste sieht. Im wesentlichen der Inhalt des Documents mit seiner Hirachie und auch einige Objekte, die zum Browserpane gehören. Anhand der Typnummer habe ich allerdings den echten Objekttyp nicht erkennen können. Grüße Manfred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |