Autor
|
Thema: InstanceName Ändern (1878 / mal gelesen)
|
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 10. Jul. 2019 12:05 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein makro, dass mir alle offenen Teile in CATIA Umbenennt. Jetzt würde ich das ganze gerne umbauen, dass ich in einer Variante alle Dokumente im aktiven Fenster umbenennen kann und zum anderen ein Teil (Part oder Product), welches mit SelectElement2 ausgewählt wurde. Zum besseren Verständnis hier der Code, der alle offenen Dokumente Umbenennt: Code: Set Documents = CATIA.DocumentsFor Each Item In Documents If Right(Item.Name, 10) = "CATProduct" Then Set currentProduct = Item.Product.Products For i = 1 To currentProduct.Count currentProduct.Item(i).PartNumber = currentProduct.Item(i).ReferenceProduct.Nomenclature currentProduct.Item(i).Revision = Nullwert currentProduct.Item(i).DescriptionRef = Nullwert currentpartnumber = currentProduct.Item(i).PartNumber k = 1 For j = 1 To currentProduct.Count currentline = currentProduct.Item(j).PartNumber If currentline = currentpartnumber Then currentProduct.Item(j).Name = currentpartnumber & "." & k k = k + 1 End If Next Next End If Next
Für das Umbenennen im aktiven Fenster hätte ich es so versucht: Das funktioniert aber nicht für die Gesamte Struktur, da ich eine verschachtelte Struktur habe. Code: Set oProducts = CATIA.ActiveDocument.Product.Products For i = 1 To oProducts.Count Set currentProduct = oProducts.Item(i).ReferenceProduct.Products
Für Hilfe bin ich wieder sehr dankbar. Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 10. Jul. 2019 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Hallo, suche doch mal hier im Forum nach: rekursiv Produktstruktur Instanznamen Exemplarnamen SelectedElement Da solltest du ausreichend Anregungen und Beispielcode finden. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 10. Jul. 2019 13:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke, ich habe mir schon einige Beträge angesehen und auch teilweise übernommen. Leider weiß ich trotzdem nicht wo bei mir der Fehler liegt für das Umbenennen im aktiven Fenster. Beim Umbenennen der selektion habe ich keine Idee. Ich kann zwar alles andere, was ich mit der selektion machen möchte, nur das Umbenennen der Instance bekomme ich nicht hin. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 10. Jul. 2019 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Hallo, wenn deine Produktstruktur mehr als eine Ebene hat musst du die Schleife Rekursiv gestalten, d.h. die Schleife muss sich bei Produkten/Komponenten für eben diese Produkte/Komponenten noch mal selbst aufrufen. Code:
Privat Sub ScanProd (t_oProd as Product)Dim oCurrentProd as Product For Each oCurrentProd in t_oProd.Products 'dein Code, umbenennen usw. If TypeName(oCurrentProd.ReferenceProduct.Parent) = "ProductDocument" then ScanProd t_oProd end if Next End Sub
Das ist jetzt nicht getestet, sondern soll vorerst nur das Prinzip verdeutlichen. Wichtig, wenn du Komponenten drin hast musst du die noch berücksichtigen. Ausgewähltes Element: Du fragst die Selection des aktiven Dokumentes ab (CATIA.ActiveDocument.Selection.Count >0 ). Dann würde ich über eine Schleife den Inhalt prüfen (es sei denn du hast den Anwender über SelectedElement aufgefordert etwas zu selektieren und hast dort einen Filter gesetzt).
Code:
For I = 1 to CATIA.ActiveDocument.Selection.Count if Typename(CATIA.ActiveDocument.Selection.Item(I).Value) = "Product" then 'dein Code ... end ifNext
Auch das ungetestet, nur zur Verdeutlichung des Prinzips. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 10. Jul. 2019 16:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für die ausführliche Antwort. Das Prinzip mit dem wiederaufrufen bei Produkten habe ich jetzt verstanden und eingebaut. Leider wird der InstanceName nicht bei allen Teilen umbenannt. Verwendet habe ich meinen Code oben zum umbenennen, aber ab einer gewissen Tiefe lässt sich der InstanceName nicht umbenennen. Das verstehe ich nicht, da das Makro komplett identisch ist wie wenn ich For Each Item In CATIA.Documents ausführe und da funktioniert es. -Product --Part -Product --Part --> instanceName wird nicht umbenannt --Product --> instanceName wird nicht umbenannt ---Part --> instanceName wird nicht umbenannt Das mit der Selektion habe ich schon, danke. Ich setze vorher schon den Typ Auf ProductDocument. Ich weiß eben nur nicht, wie ich bei dem selektiertem Teil den InstanceName ändern kann. [Diese Nachricht wurde von Suchtiii94 am 10. Jul. 2019 editiert.] 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: 10. Jul. 2019 19:46 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Was hast du denn selektiert? AFAIR liefert die Leafproduct (siehe Doku) die jeweilige Instanz eines selektierten Elements. Was bei dem Instanznamen schief läuft ist ohne Code nicht möglich zu beurteilen. Hast du dir schon mal dazu das Makro auf Catia.cad.de angeschaut? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 11. Jul. 2019 07:33 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Moin, CATIA.Documents listet alle in der aktuellen CATIA Sitzung geladenen Dokumente auf, d.h. jedes Dokument taucht nur einmal auf. In einer Produktstruktur die man rekursiv durchläuft ist es natürlich möglich das ein Dokument mehrfach vorkommt ist (man denke nur an Normteile). Wenn dann dein Code mittendrin aussteigt oder so gestaltet ist das Fehler übersprungen/ignoriert (On Error Resume Next) werden, ist es kein Wunder das nicht alle Instanzen berücksichtigt werden. Warum das bei dir nicht klappt ist ohne Code schwer zu sagen, wie Bernd ja schon angemerkt hat. Ist die Struktur vollständig geladen? Hast du Komponenten in deiner Struktur? Hast du auf Produktebene deaktivierte Elemente in der Struktur? Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 11. Jul. 2019 10:11 <-- editieren / zitieren --> Unities abgeben:
Hallo, hier ist mein Code: Code: Sub Product_Suchen() Set oRoot = CATIA.ActiveDocument Set oProducts = oRoot.Product.Products Product_Scannen oProducts End SubSub Product_Scannen(oProducts) Dim PartNumber Dim Nomenclature For i = 1 To oProducts.Count oProducts.Item(i).PartNumber = oProducts.Item(i).ReferenceProduct.Nomenclature oProducts.Item(i).Revision = Nullwert oProducts.Item(i).DescriptionRef = Nullwert CurrentPartnumber = oProducts.Item(i).PartNumber k = 1 For j = 1 To oProducts.Count currentline = oProducts.Item(j).PartNumber If currentline = CurrentPartnumber Then oProducts.Item(j).Name = CurrentPartnumber & "." & k k = k + 1 End If Next If oProducts.Item(i).Products.Count > 0 Then Product_Scannen oProducts.Item(i).Products End If Next End Sub
On Error Resume Next verwende ich nicht, das ist mir zu Unstabil. Deaktivierte Elemente habe ich nicht. Das Makro läuft durch alle Teile auch der die Zeile mit dem Umbenennen der Nomenclature läuft durch. 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: 11. Jul. 2019 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Mit dieser Änderung läuft bei mir dein Code: Code: Product_Scannen oProducts.Item(i).ReferenceProduct.Products
Keine Ahnung warum das hier nötig ist. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 11. Jul. 2019 10:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke Bernd, es läuft jetzt Warum aber hier das ReferenceProduct benötigt wird kann ich nicht nachvollziehen. Danke noch für den Hinweis mit Leafproduct, das werde ich ausprobieren. Edit: ich hätte es jetzt so versucht: Code: Sub InstanceName()Dim Sel1 As Object Dim Filter1(0) Dim Status1 As String Dim AusgewähltesProduct As Product Set Sel1 = CATIA.ActiveDocument.Selection Sel1.Clear Filter1(0) = "Product" Status1 = Sel1.SelectElement2(Filter1, "Produkt Auswählen", False) Set AusgewähltesProduct = Sel1.Item2(1).LeafProduct AusgewähltesProduct.PartNumber = AusgewähltesProduct.ReferenceProduct.Nomenclature AusgewähltesProduct.Products.Parent.Name = AusgewähltesProduct.ReferenceProduct.Nomenclature & "." & Split(Sel1.Item2(1).LeafProduct.Name, ".")(1) End Sub
Auch hier läuft das Makro bei der ersten Instance der Produkte durch. Bei Unterbaugruppen und untereinzelteilen läuft es zwar durch, aber ich hab das gleiche Problem, dass der InstanceName nicht geändert wird. Habt ihr da auch noch eine Idee? Gruß [Diese Nachricht wurde von Suchtiii94 am 11. Jul. 2019 editiert.]
[Diese Nachricht wurde von Suchtiii94 am 11. Jul. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 17. Jul. 2019 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Hallo, kann es sein das du versuchst den gleichen Instanznamen zweimal zu setzen? Ich würde mir an deiner Stelle mal ein einfaches Beispielprodukt mit entsprechender Unterstruktur erstellen und mir dann für jede Zuweisung des Instanznamen die Werte in einer Messagebox oder auch in einem Logfile anzeigen lassen. Du könntest das auch weiter eingrenzen indem du den Instanznamen vorher/nachher vergleichst, wenn der gleich ist -> Messagebox/Logfile. Gruß Randle ------------------ Wer für nichts steht, fällt für alles! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |