| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Browsersteuerung über API (1025 mal gelesen)
|
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 02. Jul. 2015 09:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, jetzt habe ich im dritten Anlauf das richtige Forum für diese Frage gefnuden, glaube ich: ich habe mit MS Visual Studio ein Programm geschrieben, das mir ein Modell im Inventor 2014 erzeugt und dieses dann mit der Belastungsanalyse durchrechnet. Soweit so gut. Das einzige was noch fehlt ist folgendes: Der Anwender kann zwischen 3 Belastungsfällen wählen. Im Modell/Part werden dann bestimmte Features unterdrückt (klappt soweit). Nun sollen sich aber die "Festgelegten Abhängigkeiten" in der Belastungsanalyse auch unterdrücken. Als Beispiel: in Inventor gibt es die Abhängigkeiten A, B und C. Klicke ich nun in meinem Programm auf den button A, soll Abhängigkeit A unterdrückt (also nicht mitsimuliert) werden. Das kriege ich absolut nicht hin. Des befehl dafür habe ich in den CommandDefinitions schon gefunden, aber die Features bekomme ich nicht angesprochen. Hat das schonmal jemand gemacht und kann mir helfen? Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 02. Jul. 2015 09:17 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 02. Jul. 2015 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für A13
|
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 02. Jul. 2015 10:33 <-- editieren / zitieren --> Unities abgeben:
Also: (Abfangroutinen usw erstmal außen vor gelassen) Code:
'hier wird das Part bearbeitet, wie es für die Simulation aussehen muss 'die Inventor.application heißt "app"' Update des Parts app.ActiveDocument.Update() 'Dokument als Part definieren: Dim partdoc As PartDocument partdoc = app.ActiveDocument 'FEM- Umgebung aktivieren Try Dim UIManager As UserInterfaceManager UIManager = app.UserInterfaceManager If UIManager.ActiveEnvironment.InternalName <> "FEA Environment Internal Name" Then '=Belastungsanalyse Dim environmentMgr As EnvironmentManager ' Umgebungsmanager environmentMgr = partdoc.EnvironmentManager Dim dsEnv As Inventor.Environment dsEnv = UIManager.Environments.Item("FEA Environment Internal Name")'=Belastungsanalyse Call environmentMgr.SetCurrentEnvironment(dsEnv) End If 'Belastungsanalyse an sich: Dim femManager As AnalysisManager Dim oControlDef As ControlDefinition Dim oCommandMgr As CommandManager femManager = partdoc.ComponentDefinition.AnalysisManager ' Simulation starten oCommandMgr = app.CommandManager 'KNACKPUNNKT: Abhängigkeiten unterdrücken: 'Befehl aus der Controldefinition: (zum Unterdrücken in der FEA-Umgebung) oControlDef = oCommandMgr.ControlDefinitions.Item("FeaSupressCmd") Call oControlDef.Execute() 'er weiß aber nicht was er hier unterdrücken soll...wie sag ich ihm das??? 'Befehl aus der Controldefinition: (zum Starten der Simulation:) oControlDef = oCommandMgr.ControlDefinitions.Item("FeaSimulateCmd") Call oControlDef.Execute() Catch ex As Exception MsgBox("Fehler beim Laden der Belastungsanalyse. Bitte bei 'Umgebungen - Zusatzmodule' manuell laden.") End Try 'Enter drücken (bisschen FUSCH ;) ), weil der Befehl "ausführen" irgendwie nicht angenommen wird, Laut transcript ist der befehl "FeaSimulateStartCmd" System.Windows.Forms.SendKeys.Send("~") ' Form schließen, Inventor in den Vordergrund...usw
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 02. Jul. 2015 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für A13
OK, du versuchst den Befehl an Inventor zu senden und dann wartet Inventor sozusagen auf die Nutzereingabe, welches Feature er unterdrücken soll. Versuch doch mal anders an die Sache ran zu gehen: Erst das Feature definieren, welches unterdrückt werden soll und dann dieses direkt ansprechen: Code: ofeature1.suppress=true
Normalerweise sollte dieser Weg etwas einfacher sein, da du auf einen spezifischen Namen des Features zugreifen kannst.
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 02. Jul. 2015 11:26 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Chris 31: OK, du versuchst den Befehl an Inventor zu senden und dann wartet Inventor sozusagen auf die Nutzereingabe, welches Feature er unterdrücken soll. Versuch doch mal anders an die Sache ran zu gehen: Erst das Feature definieren, welches unterdrückt werden soll und dann dieses direkt ansprechen:Code: ofeature1.suppress=true
Normalerweise sollte dieser Weg etwas einfacher sein, da du auf einen spezifischen Namen des Features zugreifen kannst.
Dachte ich mir auch so, aber ich komme irgendwie nicht an dieses Feature dran, da es nicht Teil des Parts sondern Teil der Simulation ist. Deshalb mein Gedanke, das auch irgendiwe über den browser und die Knoten zu steuern. Vielleicht bin ich auch schon etwas betriebsblind hier. Auf jeden Fall stehe ich mega auf dem Schlauch. :/ Bin mir auch nicht mal sicher, ob die Features der Simulation überhaupt die Eigenschaft "suppressed" haben. Kann man irgendwie alle Features aus dem Browser absuhen, welches von ihnen einen spezifischen Namen hat? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 02. Jul. 2015 13:23 <-- editieren / zitieren --> Unities abgeben: Nur für A13
Was du versuchst zu unterdrücken ist kein Feature sondern die DegreesofFreedom. Ich versuche mal den Weg zu finden, um an die ran zu kommen. Vielleicht meldet sich zwischendurch schon jemand, der dazu was hat ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 02. Jul. 2015 13:57 <-- editieren / zitieren --> Unities abgeben:
OK. Dankeschön Ich hätte jetzt noch anzubieten: Code:
Dim ofeat as object ofeat=app.commandmanager.pick(SelectionFilterEnum.kCustomBrowserNodeFilter, "Pick a Feature")
Dann kann ich das auch auswählen und mit ofeat.delete() z.B. löschen oder mit MsgBox(oFeat.tostring()) kommt raus: System._ComObject. aber was sollte ich dort eingeben um z.B. Typ oder InstantNamen oder irgendwas anderes herauszubekommen? [Diese Nachricht wurde von A13 am 02. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 03. Jul. 2015 07:17 <-- editieren / zitieren --> Unities abgeben: Nur für A13
Versuch doch mal MsgBox(oFeat.name). Ich hab leider auch keine Möglichkeit gefunden, auf die Abhängigkeit zu zu greifen. Auch in der Hilfe konnte ich dazu leider gar nichts finden ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 03. Jul. 2015 08:47 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Chris 31: Versuch doch mal MsgBox(oFeat.name). Ich hab leider auch keine Möglichkeit gefunden, auf die Abhängigkeit zu zu greifen. Auch in der Hilfe konnte ich dazu leider gar nichts finden
Geht nicht...internalname auch nicht, fullname nicht, nicht mal DisplayName... Wie wäre denn der Befehl für das einfache Selektieren eines angewählten Objekts?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 03. Jul. 2015 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für A13
Dazu der Beispielcode aus der Hilfe: Code: Sub DataModelToBrowser() ' Create a new part document, using the default part template. Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject) ' Set a reference to the component definition. Dim oCompDef As PartComponentDefinition Set oCompDef = oPartDoc.ComponentDefinition ' Create a new workplane parallel to the XY plane. Dim oWorkPlane As WorkPlane Set oWorkPlane = oCompDef.WorkPlanes.AddByPlaneAndOffset(oCompDef.WorkPlanes.Item(3), 1) ' Get the browser node definition associated with the work plane. Dim oNativeBrowserNodeDef As NativeBrowserNodeDefinition Set oNativeBrowserNodeDef = oPartDoc.BrowserPanes.GetNativeBrowserNodeDefinition(oWorkPlane) ' Get the top browser node of the model pane. Dim oTopBrowserNode As BrowserNode Set oTopBrowserNode = oPartDoc.BrowserPanes.ActivePane.TopNode ' Get the work plane browser node. ' This assumes that only one node references the browser node definition. ' An example of multiple nodes referencing a single definition is a shared ' sketch. The browser may have multiple nodes that represent the same shared ' sketch, but all of them reference the same definition. Dim oWorkPlaneNode As BrowserNode Set oWorkPlaneNode = oTopBrowserNode.AllReferencedNodes(oNativeBrowserNodeDef).Item(1) ' Get the browser node definition from the browser node. Set oNativeBrowserNodeDef = Nothing Set oNativeBrowserNodeDef = oWorkPlaneNode.BrowserNodeDefinition ' Get the work plane from the browser node definition. Set oWorkPlane = Nothing Set oWorkPlane = oNativeBrowserNodeDef.NativeObject ' Select the work plane to make sure we have the right object. oPartDoc.SelectSet.Select oWorkPlane End Sub
Musst nur die Workplane ersetzen durch die ActiveSelection. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A13 Mitglied
Beiträge: 12 Registriert: 30.06.2015
|
erstellt am: 06. Jul. 2015 09:22 <-- editieren / zitieren --> Unities abgeben:
Also nach etwas hin- und Herprobieren bin ich jetzt soweit, dass mein Programm den Anwender auffordert eine der Lagerungen auszuwählen, die dann unterdrückt (also von der Simulation ausgeschlossen) wird. Wenn das jetzt noch automatisch gehen würde, wäre ich sogar zufrieden (also ohne manuelle Auswahl). Mit den Anweisungen aus der Programmierhilfe komme ich (jemand anders bestimmt) aber nicht zu irgendwelchen Objekten, die ich nicht gerade erstellt habe. Der baum sieht so aus: (-)Simulation:1 (+)Bauteil1.ipt ( )Mateial (-)Abhängigkeiten ( )Lagerung1 ( )Lagerung2 ( )Lagerung3 (+)Lasten Könnte mir nochmal jemand bitte auf die Sprünge helfen wie der Code für die drei Lagerungen ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |