| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Bauteile/Baugruppen in Modelbrowser-Ordner verschieben (496 / mal gelesen)
|
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2024 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 10. Nov. 2022 13:44 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte mein Modelbrowser etwas "Aufräumen" und bestimmte Bauteile bzw. Baugruppen in verschiedene Ordner verschieben. Wie ich einen Ordner erstelle und gleichzeiteg die Bauteile/Baugruppen dort hin verschiebe, das habe ich schon herausgefunden und das funktioniert. Dim oOcc As ComponentOccurrence For Each oOcc In oDef.Occurrences Dim oNode As BrowserNode oNode = oPane.GetBrowserNodeFromObject(oOcc) oCollectionNormteile.Add(oNode) Next Dim oFolder As BrowserFolder oFolder = oPane.AddBrowserFolder("001 - Normteile", oCollectionNormteile) Ich bekomme es jedoch nicht hinn, wenn der Ordner schon vorhanden ist in diesen die Bauteile/Baugruppen zu verschiebn. Hat jemand eine Idee? Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 10. Nov. 2022 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Hallo Ohne das getestet zu haben:
Code:
Dim oFolder As BrowserFolder For Each oFolder In opane.TopNode.BrowserFolders If oFolder.Name = "001 - Normteile" Then Exit For NextIf oFolder Is Nothing Then oFolder = opane.AddBrowserFolder("001 - Normteile") End If Dim oOcc As ComponentOccurrence For Each oOcc In oDef.Occurrences Dim oNode As BrowserNode oNode = opane.GetBrowserNodeFromObject(oOcc) Call oFolder.Add(oNode) Next
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2024 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 14. Nov. 2022 14:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, danke, mit etewas anpassen hat es funktioniert. Jedoch da ist für mich noch einiges zu tun denn ich muss z.B. die Bauteile die schon in Ordnern sind von der "Sortierung" aussschließen wie ich das hinbekomme dass weiß ich noch nicht. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 14. Nov. 2022 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
|
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2024 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 18. Nov. 2022 23:40 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, ich bekomme es Teilweise hin. Ich kann die Ordner erstellen, wenn diese nicht vorhanden sind und die Bauteile in die richtigen Ordner zu verschieben funktioniert auch. Jedoch weiß ich nicht wie ich es abfragen kann ob ein Bauteil schon in einem Ordner liegt, denn dann würde ich das Bauteil übergehen wollen. Habe schon vieles versucht und probiert aber leider ohne Erfolg. Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 19. Nov. 2022 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Moin Sollte eigentlich funktionieren. Bei einer Occurrence die nicht in einem BrowserFolder ist, müsste der Typ kBrowserNodeObject sein. Code:
Dim oOcc As ComponentOccurrence For Each oOcc In oDef.Occurrences Dim oNode As BrowserNode oNode = opane.GetBrowserNodeFromObject(oOcc) If Not oNode.Parent.NativeObject.Type = kFolderBrowserObject then Call oFolder.Add(oNode) End If Next
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2024 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 19. Nov. 2022 15:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Ralf, danke für deine Hilfe, das Tool funktioniert jetzt! Ich wäre auf die Abfrage nie draufgekommen, steht so was in der Inventor API-Hilfe oder beruht dein Wissen auf programmier Erfahrung? Vielleicht noch eine Frage. Wenn ich die „Occurrences“ der Baugruppe durchlaufe und dann die „CommponentDefinition“ benötige gehe ich immer so vor: … For Each oOcc As ComponentOccurrence In oAssDef.Occurrences If oOcc.DefinitionDocumentType = DocumentTypeEnum.kPartDocumentObject Then Dim oPartDoc As PartDocument = oInventorApp.Documents.Open(oOcc.ReferencedDocumentDescriptor.ReferencedFileDescriptor.FullFileName.ToString, False) Dim ocompdef As ComponentDefinition ocompdef = oPartDoc.ComponentDefinition ... oPartDoc.Close() End If Next Oder gibt es noch einen anderen Weg um auf die "ComponentDefinition" der "ComponentOccurrence" zugreifen zu können? Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 19. Nov. 2022 18:05 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 19. Nov. 2022 18:10 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas01
Hallo Also eigentlich sollte es direkt gehen über:
Code:
oOcc.Definition
Das Öffnen des Dokumentes bringt nichts, da es als referenziertes Dokument der Baugruppe eh schon offen ist. Das Schließen funktioniert auch nicht, da Inventor das stillschweigend ignoriert. Das Bauteil ist über die Baugruppe weiterhin offen. Steht alles in der API Doku. Dazu kommen noch fast 20 Jahre Erfahrung mit dem Kram. Da hat man oft schon ein Gefühl wo man was erwarten darf und wie man dran kommt. Ich empfehle immer wieder im VBA-Editor in einem Miniscript (s.u.) einen Haltepunkt setzen, Überwachung für z.B. oDoc einfügen und in der Überwachung den Objektbaum rauf und runter suchen. Man sieht dort nur Eigenschaften der Objekte, keine Methoden wie Add, Copy, Delete usw. Aber das hilft schon viel weiter und mit der Zeit muss man für die normalen Sachen nicht mehr nachsehen. Code:
Private Sub Mini()Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDoc As Document Set oDoc = oApp.ActiveDocument End Sub '<--- Haltepunkt hier drauf setzen
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas01 Mitglied Dipl.-Ing.(FH) Konstrukteur
Beiträge: 242 Registriert: 05.08.2004 Inventor 2024 i7 32 GB RAM Quatro FX 4000 WIN10-64bit
|
erstellt am: 19. Nov. 2022 20:59 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke KraBBy und dir Ralf für die Hilfe. @Ralf Ich selber programmiere meine Tools mit VB.Net und dass mit den Haltepunkt mache ich sehr oft aber wie du schon schreibst ich kenne halt nicht die Methoden usw. Habe mir ja alles selbst beigebracht (natürlich auch mit Hilfe des Forums hier). Gruß Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |