| | |  | 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 - zum dritten Mal in Folge, eine Pressemitteilung
|
|
Autor
|
Thema: Multi body Volumenkörper neu nummerieren (1392 / mal gelesen)
|
Hommel80 Mitglied

 Beiträge: 12 Registriert: 21.03.2015 Inventor 2022 Pro
|
erstellt am: 12. Jul. 2021 20:44 <-- editieren / zitieren --> Unities abgeben:         
Guten Abend liebe Forengemeinde, ich habe ein Problem bei dem Ihr mir vielleicht weiterhelfen könnt. Bei der Konstruktion mit Master und multi body generiere ich eine Vielzahl von einzelnen Volumenkörpern die vom Inventor nummeriert werden. Vor der Ableitung von Einzelteilen benenne ich die Volumenkörper um. Der „Inventor-Suffix“ der Volumenkörper stimmt nicht immer mit der Position im „Tree“ überein. Ich verschiebe den „Endpunkt“ um die Volumenkörper auch nachträglich im passenden Bereich zu erstellen. Das bringt allerdings die Nummerierung durcheinander. Beispiel: Volumenkörper 1; Volumenkörper 36;Volumenkörper 2;Volumenkörper 3;Volumenkörper 18;etc. Für das Umbenennen verwende ich eine Ilogic Code der auch wunderbar funktioniert. Mein Problem ist das der Suffix anscheinend vom Inventor vorgegeben und von Ilogic nicht neu nummeriert wird. Nach dem Umrennen bleibt die Nummerierung erhalten Beispiel nach der Umbenennung durch Ilogic: Part 001; Part 036; Part 002; Part 003; Part018; etc. Habt Ihr einen Tipp für mich wie ich die Inventor-Nummerierung durch eine neue fortlaufende Nummerierung ersetzen kann? Beispiel: Part001; Part002; Part003; Part004; Part005; etc. '--------------------------------- 'check for custom iProperty and add it if not found Dim prefix As String = "Prefix" customPropertySet = ThisDoc.Document.PropertySets.Item _ ("Inventor User Defined Properties")
Try prop= customPropertySet.Item(prefix) Catch ' Assume error means not found customPropertySet.Add("", prefix) End Try 'write the part number to the Prefix iProperty if it is empty If iProperties.Value("Custom", "Prefix") = "" Then iProperties.Value("Custom", "Prefix") = iProperties.Value("Project", "Part Number") & "_" Else End If 'check that this active document is a part file Dim partDoc As PartDocument If ThisApplication.ActiveDocument.DocumentType <> kPartDocumentObject Then MessageBox.Show ("Please open a part document", "iLogic") End If 'define the active document partDoc = ThisApplication.ActiveDocument Dim solid As SurfaceBody Dim i As Integer 'get input from user prefix = InputBox("Enter a prefix for the solid body names", "iLogic", iProperties.Value("Custom", "Prefix")) 'write input back to custom iProperty iProperties.Value("Custom", "Prefix") = prefix i = 1 'rename all solid bodies incrementing suffix For Each solid In partDoc.ComponentDefinition.SurfaceBodies solid.Name = prefix + Iif(i < 10, "0" + CStr(i), CStr(i)) i = i + 1 Next '--------------------------------- Gruß, Hommel80 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
      

 Beiträge: 2933 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 13. Jul. 2021 00:03 <-- editieren / zitieren --> Unities abgeben:          Nur für Hommel80
Hallo Deine iLogic Regel wird nicht wie gewünscht funktionieren. In partDoc.ComponentDefinition.SurfaceBodies stehen die einzelnen Volumenkörper in der chronologischen Reihenfolge wie sie erstellt wurden. Die Reihenfolge der Volumenkörper im Teilebrowser kann eine andere sein. Zum Beispiel, wie von dir beschrieben, durch Verschieben des Bauteilendes bevor ein neuer Volumenkörper erstellt wird. Daher wird im Teilebrowser scheinbar nicht neu nummeriert. Des weiteren kann ein Volumenkörper nicht den gleichen Namen haben wie ein anderer. Volumenkörper_02 kann nicht in Volumenkörper_03 umbenannt werden, wenn es einen anderen Volumenkörper mit diesem Namen bereits gibt. Entweder muss der Prefix bei jedem Durchlauf geändert werden oder man benennt im ersten Durchlauf alles mit einem temporären Prefix um und vergibt erst im zweiten Durchlauf den korrekten Prefix. Und nebenbei, wenn du auf einen bestimmten Dateityp prüfst und im Fehlerfall eine Meldung ausgibst, beende auch dein Script im Anschluß. Versuch mal:
Code:
'check for custom iProperty and add it if not found Dim prefix As String = "Prefix" customPropertySet = ThisDoc.Document.PropertySets.Item _ ("Inventor User Defined Properties")Try prop= customPropertySet.Item(prefix) Catch ' Assume error means not found customPropertySet.Add("", prefix) End Try 'write the part number to the Prefix iProperty if it is empty If iProperties.Value("Custom", "Prefix") = "" Then iProperties.Value("Custom", "Prefix") = iProperties.Value("Project", "Part Number") & "_" Else End If 'check that this active document is a part file Dim partDoc As PartDocument If ThisApplication.ActiveDocument.DocumentType <> kPartDocumentObject Then MessageBox.Show("Please open a part document", "iLogic") Exit Sub End If 'define the active document partDoc = ThisApplication.ActiveDocument Dim solid As SurfaceBody Dim i As Integer 'get input from user prefix = InputBox("Enter a prefix for the solid body names", "iLogic", iProperties.Value("Custom", "Prefix")) 'write input back to custom iProperty iProperties.Value("Custom", "Prefix") = prefix 'i = 1 'rename all solid bodies incrementing suffix 'For Each solid In partDoc.ComponentDefinition.SurfaceBodies 'solid.Name = prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) 'i = i + 1 'Next Dim oBrowserPane As BrowserPane = partDoc.BrowserPanes.ActivePane For Each oBrowserPane In partDoc.BrowserPanes If oBrowserPane.InternalName = "PmDefault" Then Exit For Next
Dim oBrowserNode As BrowserNode For Each oBrowserNode In oBrowserPane.TopNode.BrowserNodes If oBrowserNode.BrowserNodeDefinition.Label.StartsWith("Volumenkörper") Then Exit For Next For i=1 To oBrowserNode.BrowserNodes.Count oBrowserNode.BrowserNodes.Item(i).NativeObject.name = "tmp_" + prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) Next For i=1 To oBrowserNode.BrowserNodes.Count oBrowserNode.BrowserNodes.Item(i).NativeObject.name =prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) Next
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Hommel80 Mitglied

 Beiträge: 12 Registriert: 21.03.2015 Inventor 2022 Pro
|
erstellt am: 13. Jul. 2021 21:29 <-- editieren / zitieren --> Unities abgeben:         
Hallo Ralf, Danke für die Hilfe, das ist im Wesentlichen die Lösung für mein Problem. Ich hätte da allerdings noch eine Frage, wenn ich den Code in meine Master-Datei (eine Blech.ipt) ausführen möchte, wird ein Fehler angezeigt, „Der öffentliche Member name für den Typ SheetMetalComponentDefinition wurde nicht gefunden“. Mir ist nicht klar warum der Fehler angezeigt wird da auf Blech Parameter nicht zugegriffen wird, bzw. was muss ich ändern damit dieser Code auch bei einer Blech.ipt funktioniert? Bei einer Norm.ipt funktioniert der Code…. Gruß, Hommel80 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik, Master Eng. IT-Security & Forensic
      

 Beiträge: 2933 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 14. Jul. 2021 08:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Hommel80
Hallo Bei Blechteilen gibt es im Modellbrowser noch die Ebene "Gefaltetes Modell" / "Abwicklung". Hab's ergänzt.
Code:
'check for custom iProperty and add it if not found Dim prefix As String = "Prefix" customPropertySet = ThisDoc.Document.PropertySets.Item _ ("Inventor User Defined Properties")Try prop= customPropertySet.Item(prefix) Catch ' Assume error means not found customPropertySet.Add("", prefix) End Try 'write the part number to the Prefix iProperty if it is empty If iProperties.Value("Custom", "Prefix") = "" Then iProperties.Value("Custom", "Prefix") = iProperties.Value("Project", "Part Number") & "_" Else End If 'check that this active document is a part file Dim partDoc As PartDocument If ThisApplication.ActiveDocument.DocumentType <> kPartDocumentObject Then MessageBox.Show("Please open a part document", "iLogic") Exit Sub End If 'define the active document partDoc = ThisApplication.ActiveDocument Dim solid As SurfaceBody Dim i As Integer 'get input from user prefix = InputBox("Enter a prefix for the solid body names", "iLogic", iProperties.Value("Custom", "Prefix")) 'write input back to custom iProperty iProperties.Value("Custom", "Prefix") = prefix 'i = 1 'rename all solid bodies incrementing suffix 'For Each solid In partDoc.ComponentDefinition.SurfaceBodies 'solid.Name = prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) 'i = i + 1 'Next Dim oBrowserPane As BrowserPane = partDoc.BrowserPanes.ActivePane For Each oBrowserPane In partDoc.BrowserPanes If oBrowserPane.InternalName = "PmDefault" Then Exit For Next
Dim oBrowserNode As BrowserNode Dim oTopNode As BrowserNode If partDoc.DocumentSubType.documentsubtypeid = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then 'SheetMetalPart For Each oBrowsernode In oBrowserPane.TopNode.BrowserNodes If oBrowserNode.BrowserNodeDefinition.Label="Gefaltetes Modell" Then oTopNode = oBrowserNode End If Next Else oTopNode = oBrowserPane.TopNode End If For Each oBrowserNode In oTopNode.BrowserNodes If oBrowserNode.BrowserNodeDefinition.Label.StartsWith("Volumenkörper") Then Exit For Next For i=1 To oBrowserNode.BrowserNodes.Count oBrowserNode.BrowserNodes.Item(i).NativeObject.name = "tmp_" + prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) Next For i=1 To oBrowserNode.BrowserNodes.Count oBrowserNode.BrowserNodes.Item(i).NativeObject.name =prefix + IIf(i < 10, "0" + CStr(i), CStr(i)) Next
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Hommel80 Mitglied

 Beiträge: 12 Registriert: 21.03.2015 Inventor 2022 Pro
|
erstellt am: 14. Jul. 2021 23:19 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |