Autor
|
Thema: Problem beim Umbenennen einer CATIA Struktur mittels Rekursiverschleife (2970 mal gelesen)
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 18. Mrz. 2011 15:51 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein VB.NET geschrieben, welches eine CATIA Struktur umbenennt und unter dem neuen Namen abspeichert. Das funktioniert soweit auch ganz gut. Das Problem ist, dass der Instancename nur in der ersten Ebene umbenannt wird. (Die PartNumber jedoch einwandfrei!) Hat jemand eine Idee woran das liegen lönnte? Den Code habe ich unte angefügt. Ein Bild der Strktur ist im Anhang. Vielen Dank für eure Hilfe! Code:
Sub SUB_SCAN(ByVal oProducts, ByVal UebergabeName, ByVal auftragsnummer) Dim oProductsUebergabe As Products Dim pos As Integer Dim n As Integer Dim NeuerName As String Dim Pfad As String For i = 1 To oProducts.Count If oProducts.Item(i).Products.Count > 0 Then oProductsUebergabe = oProducts.Item(i).Products SUB_SCAN(oProductsUebergabe, UebergabeName, auftragsnummer) '------Umbenennen-------- pos = 0 n = 0 Do pos = Strings.InStr(pos + 1, oProducts.Item(i).PartNumber, "_") n = n + 1 Loop Until n = 2 NeuerName = UebergabeName & "_" & Strings.Mid(oProducts.Item(i).PartNumber, pos + 1) If oProducts.Item(i).PartNumber <> "Formteile" And oProducts.Item(i).PartNumber <> "Rohlinge" Then oProducts.Item(i).PartNumber = NeuerName oProducts.Item(i).Name = NeuerName & ".1" '-------------Prameterinhalt ändern------------ If Strings.InStr(oProducts.Item(i).PartNumber, "Arbeitspart") <> 0 Then oProducts.item(i).ApplyWorkMode(CatWorkModeType.DESIGN_MODE) oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Auftrag").value = auftragsnummer oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Konstrukteur").value = ComboBox2.Text oProducts.Parent.update() End If '-------Speichern---------- Dim loeschFile As String loeschFile = oProducts.Item(i).ReferenceProduct.Parent.Fullname pos = Strings.InStrRev(oProducts.Item(i).ReferenceProduct.Parent.Fullname, "\") Pfad = Strings.Left(oProducts.Item(i).ReferenceProduct.Parent.Fullname, pos) 'Len(oProducts.Item(i).ReferenceProduct.Parent.Fullname) - pos + 1) Catia.DisplayFileAlerts = False Try oProducts.Item(i).ReferenceProduct.Parent.saveas(Pfad & NeuerName) Catch ex As Exception End Try Catia.DisplayFileAlerts = True System.IO.File.Delete(loeschFile) End If Else pos = 0 n = 0 Do pos = Strings.InStr(pos + 1, oProducts.Item(i).PartNumber, "_") n = n + 1 Loop Until n = 2 NeuerName = UebergabeName & "_" & Strings.Mid(oProducts.Item(i).PartNumber, pos + 1) If oProducts.Item(i).PartNumber <> "Formteile" And oProducts.Item(i).PartNumber <> "Rohlinge" Then oProducts.Item(i).PartNumber = NeuerName oProducts.Item(i).Name = NeuerName & ".1" '-------------Prameterinhalt ändern------------ If Strings.InStr(oProducts.Item(i).PartNumber, "Arbeitspart") <> 0 Then oProducts.item(i).ApplyWorkMode(CatWorkModeType.DESIGN_MODE) oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Auftrag").value = auftragsnummer oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Konstrukteur").value = ComboBox2.Text oProducts.Parent.update() End If '-------Speichern---------- Dim loeschFile As String loeschFile = oProducts.Item(i).ReferenceProduct.Parent.Fullname pos = Strings.InStrRev(oProducts.Item(i).ReferenceProduct.Parent.Fullname, "\") Pfad = Strings.Left(oProducts.Item(i).ReferenceProduct.Parent.Fullname, pos) 'Len(oProducts.Item(i).ReferenceProduct.Parent.Fullname) - pos + 1) Catia.DisplayFileAlerts = False Try oProducts.Item(i).ReferenceProduct.Parent.saveas(Pfad & NeuerName) Catch ex As Exception End Try Catia.DisplayFileAlerts = True System.IO.File.Delete(loeschFile) End If End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 18. Mrz. 2011 17:22 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Ich kann es nicht 100% erkennen: kann es sein, dass du "Referenzdokumente laden" abgewählt hast? Du hast ein graues Achsenkreuz als Symbol an der Part-Instanz. Wenn das nicht geladen kann es sein dass das Makro keine Instanzbezeichnung finden kann. Ich kann es im Moment nicht prüfen (kein CATIA). Vlt. Montag wieder wenn nicht ein anderer schneller ist. ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 19. Mrz. 2011 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Hallo, die Antwort auf Instanznamen via .NET ist in diesen Thread beschrieben. Instanznamen sollte man ausschließlich über CATScript umbenennen, ansonsten kann es Probleme mit dem Modell geben (mit den Links z.B.). Im Thread ist auch Beispielcode. Die Umbenennung von PartNumber und Dateiname kann in .NET (oder VBA) bleiben. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 21. Mrz. 2011 15:09 <-- editieren / zitieren --> Unities abgeben:
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 25. Mrz. 2011 16:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, gibt es eine Möglichkeit, dass das Product bzw. die gesamte Struktur nicht im Design-Modus geladen sein muss, während des Umbenennens? Also das der Cache-Modus benutzt wird und dann beispielsweise die einzelnen CATParts und Products einzelnen geladen werden aber nicht alle auf einmal? Hintergrund ist, dass große Baugruppen umbenannt werden sollen und diese unter Umständen sehr lange oder gar nicht komplett geladen werden können. Habe schon mal versucht vor und hinter dem Umbenennen bzw. Speichern das oProducts.item(i) in den Design-Modus zu laden und dann wieder in der Visualization-Modus. Jedoch wurden dann nicht alle Bauteile gespeichert. Ich denke weil ja dann ein Unterprodukt geändert wurde aber wenn das Oberprodukt gespeichert werden soll schon nicht mehr "scharf" geladen ist. Vielen Dank für eure Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Mrz. 2011 16:16 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 25. Mrz. 2011 17:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, vielen Dank für deinen Hinweis! Meinst du, dass ich das ganze Product in den Default-Modus laden soll, weil das schneller als im Design-Modus geht?? das könnte klappen, werde es die Tage mal ausprobieren habe gerade kein Catia zur Hand. Wenn jedes einzelne Part in den Default-Modus geladen wird und dann wieder nur die Visualisierung dann müsste ja das gleichen Problem auftreten wie beim Design-Modus, dass ihm beim Speichern ein Bauteil fehlt weils nicht geladen ist oder? Gruß Tobias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| IT-Solution-Architekt (m/w/x) | Sich etwas Neues trauen, über sich hinauswachsen und dabei die Grenzen des Machbaren neu definieren. Genau das ist es, was unsere Mitarbeitenden täglich leben dürfen und sollen. Um mit unseren Innovationen ein Zeichen zu setzen und Großartiges zu ermöglichen. Denn hinter jedem erfolgreichen Unternehmen stehen eine ganze Menge faszinierende Menschen. In einem offenen und modernen Umfeld mit ... | Anzeige ansehen | Consulting, Engineering |
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 25. Mrz. 2011 19:19 <-- editieren / zitieren --> Unities abgeben: Nur für tobiley
Hallo Tobias, Bernd hat recht, du solltest es mit Default mode versuchen. Es ist etwas mehr, als Visualisation mode (z.B. UserProperties können angesprochen werden), aber nicht Design mode. Dies ist die Unterschied, die hier schon mal erwähnt wurde. Andere kenne ich nicht. Ich weiß nicht, wie verlinkt deine Modelle sind, da können sich evtl. Probleme ergeben. Oder du kannst es versuchen, dass du nur einzelne Baugruppen in Design mode lädst und so umbenennst. Evtl. musst du auch den Zähler anpassen, der die Instanzname generiert (ich meine den Zahl nach dem Punkt). Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |