Autor
|
Thema: Makro zum automatischen umbenennen von Datei- und Partnamen (14694 mal gelesen)
|
Devian82 Mitglied
Beiträge: 3 Registriert: 27.03.2011
|
erstellt am: 03. Nov. 2011 19:56 <-- editieren / zitieren --> Unities abgeben:
Ich suche ein Makro welches bei großen Baugruppen den Dateinamen der dort eingesetzten Bauteile automatisch in den in Catia verwendetet Part-Namen umschreibt. Vorzugsweise inklusive Instance-Namen... Manuell ist das bei hunderten von Parts fast schon Folter! Gibts da ne Lösung? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 29. Jun. 2012 21:28 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Ich wüsste da schon was. Aber dafür müsste ich wissen ob es bei wirklich alle Parts passieren muss! Wenn ja, stelle ich es mir recht einfach vor...aber theorie und Praxis ist ja so ne sache... Brauchst du es noch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 02. Jul. 2012 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Warum antwortet Du, vor allem auch noch mit Fragen und überhaupt nichts konkretem, außer "man könnte... - ich stelle es mir einfach vor..." auf Ein Thema vom 03. Nov. 2011 ?!? ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing [Diese Nachricht wurde von HoBLila am 02. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 02. Jul. 2012 17:00 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Weil ich ein ähnliches Problem hatte. Da wollte wissen ob es noch aktuell ist, wenn nein, hat er/sie ja evtl bereits schon eine Lösung. Wenn ja, dann würde ich mich damit auseinander setzen. Da ich aber keine Antwort bekommen habe, habe ich micht damit auseinander gesetzt. hier den code: Code:
SUB CATMain() DIM acDoc DIM acProd DIM tmpString DIM FileName DIM FileSeparator FileSeparator = CATIA.FileSystem. FileSeparator SET acDoc = CATIA.ActiveDocument SET acProd = acDoc.Product acProd.ApplyWorkMode DESIGN_MODE 'SETS THE PartNumber = FileName FOR ALL DOCUMENTS OPEN IN CATIA. 'WILL CRASH IF DRWAING ECT ARE OPEN! FOR EACH oDoc IN CATIA.Documents tmp = SPLIT(oDoc.FullName, FileSeparator) tmpString = tmp(UBOUND(tmp)) tmp = SPLIT(tmpString,".") FileName = tmp(0) oDoc.Product.PartNumber = FileName NEXT InstanceName acProd WalkThroughTree acProd END SUB '------------------------------------- '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) InstanceName oChild.ReferenceProduct WalkThroughTree oChild.ReferenceProduct NEXT END SUB '------------------------------------- '------------------------------------- SUB InstanceName (oParent) Set oDict = CreateObject("Scripting.Dictionary") ON ERROR RESUME NEXT DIM iProduct DIM oItemToRename DIM ItemPartNumber FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If 'rename Parts oItemToRename.Name = ItemPartNumber & "--tmpStringToStopERRORS" & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If 'rename Parts oItemToRename.Name = ItemPartNumber & "." & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll END SUB '-------------------------------------
Ich gehe davon aus das man NUR das dokument auf hat, welches man auch bearbeiten möchte. Dieser muss auch ein CATProdukt sein.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 02. Jul. 2012 17:01 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 02. Jul. 2012 19:14 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, du hast die Aufgabenstellung verdreht. Die Partdateinamen sollen mit den Namen im Produkt abgeglichen werden. Zusätzlich sollten die Instazen auch abgeglichen werden. Dies macht auch vom Handling mehr Sinn. Mit deiner Variante müsste mann bei geschlossener Catiasitzung die Dateinamen umbenennen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 02. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 02. Jul. 2012 20:17 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Oh OK. Aber den Sinn ergibt sich bei mir nicht. Warum, wenn ein und das selber Part hundert mal verbaut ist, will ich es auch hundert mal abgespeichert haben? Das macht doch den Effekt von wieder verwendete Teile zunichte. Wenn ich hundert schrauben oder nieten oder sonst was verbaue, dann hätte ich hundert mal das selbe Part unter anderem NAmen abgespeichert. Oder verstehe ich die Aufgabenstellung immer noch nicht Zitat: Mit deiner Variante müsste mann bei geschlossener Catiasitzung die Dateinamen umbenennen.
Warum. Es funktioniert auch Prima wenn CATIA offen ist. Und ich glaube auch nur wenn ein CATIAsitzung offen ist? [Diese Nachricht wurde von DasDon am 02. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 02. Jul. 2012 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, Zitat: Warum, wenn ein und das selber Part hundert mal verbaut ist, will ich es auch hundert mal abgespeichert haben?
Dem ist nicht so. Wenn ein Part 100 mal im Produkt vorahnden ist, gibt es 100 Instanzen, die das Produkt händelt. Das Part gibt es aber nur 1mal auf der Festlatte. Änderst du den Namen des Part im Produkt ändern sich alle 99 auch mit. Nun ist der Name der Datei auf der Festplatte noch nicht umbenannt. Diese Datei gilt es umzubenennen. (Part und Produkt) In der Praxis ist es so, das die Part und Produktnamen dem Namen der Datei (auf der Festplatte)idealer Weise gleich sein sollten.
Zitat: Warum. Es funktioniert auch Prima wenn CATIA offen ist. Und ich glaube auch nur wenn ein CATIAsitzung offen ist?
Bei deiner Variante funktioniert das deswegen, weil du nicht den Dateinamen auf der Festplatte änderst, sondern der Partname im Produkt. Versuche doch mal währen dein Produkte und Parts geladen sind eine Datei auf der Festplatte umzubenennen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 02. Jul. 2012 23:11 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo, Zitat: Wenn ein Part 100 mal im Produkt vorahnden ist, gibt es 100 Instanzen, die das Produkt händelt. Das Part gibt es aber nur 1mal auf der Festlatte. Änderst du den Namen des Part im Produkt ändern sich alle 99 auch mit.
Das weiss ich ja, und ist genau das was ich meinte. Aber warum ist in der Aufgabenstelle hiervon die Rede: Zitat: Vorzugsweise inklusive Instance-Namen
Das beduetet für mich, dass die Dateiname auch den Product.Name haben sollten. Das wären 100 Parts die gespeichert werden. Code: Mit deiner Variante müsste man bei geschlossener Catiasitzung die Dateinamen umbenennen.
Da ich aber die Aufgabenstellung falsch verstanden habe, funktioniert meine Variante mit offener CATIASitzung. Da die Dateinamen ja nicht korrekt sind, müssen die Modelle ja neu abgespeichert werden. Sprich SaveAs. Das kann ich auch mit offener CATIAsitzung machen. Ich stelle mir vor, dass man durch den Specification Tree durch "Lopped" bist ein Element keine Kinder mehr hat. Das speichert man dann mit saveAs als Product.PartNumber.CATPart ab. Danach nimmt man das drüber liegende Assy usw. Bottom Up ist die Lösung. Somit werden alle Links mit gepeichert. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 08:17 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, ich glaube wir reden hier aneinander vorbei. Zitat: Vorzugsweise inklusive Instance-Namen
Die Instance die vom Produkt gehändelt wird. Siehe Bilder ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
So, nach dem durcheinander müsste das die Lösung sein. Es bennent die Dateien nach der PartNumber um und setzt die InsanceName = PartNumber. Code: Opps da war noch ein fehler drinne...bin gerade am korrigieren.
Ach und @moppesle: könntest du mir sagen wie ich CODE fotmatieren kann? Das kann ja keiner Lesen. Warum sehe ich die Tabs nicht? Gruß, [Diese Nachricht wurde von DasDon am 03. Jul. 2012 editiert.] [Diese Nachricht wurde von DasDon am 03. Jul. 2012 editiert.] [Diese Nachricht wurde von DasDon am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Jo das ist es, könnte mann das auch so gestalten, das die Dateien in dem selben Verzeichnis wie die Quelldaten gespeichert werden und die alten automatisch gelöscht werden? Also, ich habe "Part1". "Part1" wird zu "TestPart". Nun soll "Part1" auf der Festplatte nicht mehr im Quellverzeichnis auftauchen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 11:44 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Das müsste es nun sein: Felher mit Instance beim Product korrigiert und es ersetzt (je nach wahl) die orignal Dateien. FILENAME WIRD ZUM PARTNUMBER Code:
MACRO_NAME = "ReNameFileNameAsPartNumber" MACRO_VERS = "V1.1" 'VER: V1.1 CATCHES DEACTIVATED PRODUCTS AND OPEN DOCUMENTS OTHER THAN CATPRODUCT AND CATPART 'DESC: RENAMES THE THE FILE NAMES OF CATPRODUCTS AND CATPARTS TO THAT OF THE PARTNUMBER 'DEPENDING ON THE ANSWER GIVEN THE ORIGINAL FILES WILL BE DELETED 'PREP: ALL DOCUMENTS MUST BE CLOSED APART FROM THE DOCUMENT TO WORK ON 'LANG: CATVBS 'DATE: 03/07/12
'CREA: DasDon '------------------------------------------- DIM answer '------------------------------------------- SUB CATMain() DIM acDoc DIM acProd SET acDoc = CATIA.ActiveDocument SET acProd = acDoc.Product acProd.ApplyWorkMode DESIGN_MODE answer = MSGBOX("do you wish to delete the original file?",36,"DELETION") WalkThroughTree acProd CATIA.DisplayFileAlerts = true END_MESSAGE END SUB '------------------------------------- '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) IF oChild.Parameters.Count <> 0 THEN IF oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true" THEN '-------------------- 'ADDS PARTNUMBER AND OLD INSTANCE NUMBER AS NEW INSTANCENAME tmp = SPLIT(oChild.Name,".") oChild.Name = oChild.PartNumber & "." & tmp(UBOUND(tmp)) '-------------------- 'SENDS CHILDREN WITH NO CHILDREN TO SAVE AND CHILDREN WITH CHILDERN TO WALTHROUGH (BOTTOM UP) IF oChild.Products.Count = 0 THEN SaveAsPartNumber oChild.ReferenceProduct ELSE WalkThroughTree oChild.ReferenceProduct END IF END IF END IF NEXT '-------------------- 'SENDS THE PRODUCT TO SAVE AFTER ALL CHILDREN HAVE BEEN SAVED IF oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true" THEN IF oParent.Products.Count > 0 THEN SaveAsPartNumber oParent END IF END IF END SUB '------------------------------------- '------------------------------------- SUB SaveAsPartNumber (oProd) DIM objToDelete DIM orginalPath DIM oDoc CATIA.DisplayFileAlerts = false FOR EACH oDoc IN CATIA.Documents IF TYPENAME(oDoc) = "ProductDocument" OR TYPENAME(oDoc) = "PartDocument" THEN IF oDoc.Product.PartNumber = oProd.PartNumber THEN objToDelete = oDoc.FullName orginalPath = oDoc.Path & "\" IF oProd.HasAMasterShapeRepresentation THEN 'A PART HAS A MASTERSHAPEREPREASENTATION IF CATIA.FileSystem.FileExists(orginalPath & oProd.PartNumber & ".CATPart") = FALSE THEN oDoc.SaveAs(orginalPath & oProd.PartNumber & ".CATPart") IF answer = 6 THEN CATIA.FileSystem.DeleteFile(objToDelete) END IF ELSE IF CATIA.FileSystem.FileExists(orginalPath & oProd.PartNumber & ".CATProduct") = FALSE THEN oDoc.SaveAs(orginalPath & oProd.PartNumber & ".CATProduct") IF answer = 6 THEN CATIA.FileSystem.DeleteFile(objToDelete) END IF END IF END IF END IF NEXT END SUB '------------------------------------- '---------------------------------------- SUB END_MESSAGE() MSGBOX MACRO_NAME & " " & MACRO_VERS & " finished." _ & vbLF & "Please check results" & vbLF & _ "-----------------------------------" & vbLF & _ "-----------------------------------" & vbLF & _ "macro written by:" & vbLF & _ "DasDon" , vbyes, MACRO_NAME & " " & MACRO_VERS END SUB '----------------------------------------
UND HIER WÄRE DER ANDERE: PARTNUMBER WIRD ZUM FILENAME Code: MACRO_NAME = "ReNamePartNumberAsFileName" MACRO_VERS = "V1.0"'VER: "V1.0 'DESC: RENAMES THE PARTNUMBER OF CATPRODUCTS AND CATPARTS TO THAT OF THE FILENAME 'DEPENSING ON THE ANSWER GIVEN THE ORIGINAL FILES WILL BE DELETED 'PREP: ALL DOCUMENTS MUST BE CLOSED APART FROM THE DOCUMENT TO WORK ON 'LANG: CATVBS 'DATE: 03/07/12 'CREA: DasDon '------------------------------------------- '------------------------------------------- SUB CATMain() DIM acDoc DIM acProd DIM tmpString DIM FileName DIM FileSeparator FileSeparator = CATIA.FileSystem. FileSeparator SET acDoc = CATIA.ActiveDocument SET acProd = acDoc.Product acProd.ApplyWorkMode DESIGN_MODE 'SETS THE PartNumber = FileName FOR ALL DOCUMENTS OPEN IN CATIA. 'WILL CRASH IF DRWAING ECT ARE OPEN! FOR EACH oDoc IN CATIA.Documents If TypeName(oDoc) = "PartDocument" Or TypeName(oDoc) = "ProductDocument" Then tmp = SPLIT(oDoc.FullName, FileSeparator) tmpString = tmp(UBOUND(tmp)) tmp = SPLIT(tmpString,".") FileName = tmp(0) oDoc.Product.PartNumber = FileName End If NEXT InstanceName acProd WalkThroughTree acProd END_MESSAGE END SUB '------------------------------------- '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) InstanceName oChild.ReferenceProduct WalkThroughTree oChild.ReferenceProduct NEXT END SUB '------------------------------------- '------------------------------------- SUB InstanceName (oParent) Set oDict = CreateObject("Scripting.Dictionary") ON ERROR RESUME NEXT DIM iProduct DIM oItemToRename DIM ItemPartNumber FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If 'rename Parts oItemToRename.Name = ItemPartNumber & "--tmpStringToStopERRORS" & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll FOR EACH oItemToRename IN oParent.Products ItemPartNumber = oItemToRename.PartNumber If oDict.Exists(ItemPartNumber) Then oDict.Item(ItemPartNumber) =oDict.Item(ItemPartNumber) +1 Else oDict.Add ItemPartNumber, 1 End If 'rename Parts oItemToRename.Name = ItemPartNumber & "." & oDict.Item(ItemPartNumber) NEXT oDict.RemoveAll END SUB '------------------------------------- '---------------------------------------- SUB END_MESSAGE() MSGBOX MACRO_NAME & " " & MACRO_VERS & " finished." _ & vbLF & "Please check results" & vbLF & _ "-----------------------------------" & vbLF & _ "-----------------------------------" & vbLF & _ "macro written by:" & vbLF & _ "DasDon" , vbyes, MACRO_NAME & " " & MACRO_VERS END SUB '----------------------------------------
[Diese Nachricht wurde von DasDon am 25. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, super tolle Leistung. Ich wäre froh das auch so schnell zu Programmieren. Habe aber noch ein Problem gefunden. Wenn ich das Makro "ReNameFileNameAsPartNumber"mit einen Testprodukt ausführe Funzt es einwandfrei. Nun habe ich mal ein Arbeitsprodukt genommen und ich bekomme diese Fehlermeldung. siehe Bild Wo könnte das Problem liegen? Kann dir das Produkt per PM zukommen lassen wenn deas was hift. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch!
[Diese Nachricht wurde von moppesle am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo Uwe, Danke erstmals für die Unterstützung. ZIELE 66: FOR EACH oDoc IN CATIA.Documents ZIELE 67: IF oDoc.Product.PartNumber = oProd.PartNumber THEN In Zeile 66 wird eine Schleife erzeugt der alle Offene(geladene) Dokumente durchläuft und in Ziele 67 dann die PartNumber des Dokuments (oDoc) mit dem des oProd (ein object aus dem Strukturbaum) vergleicht. Stimmen sie NICHT mit einander ein, so muss diese Doukument dann mit dem PartNumber Abgespeichert werden (sofern nicht vorhanden; was PartNumber = FileName entspricht). Ist jedoch ein Dokument wie zB ein CATDrawing oder ähliches im CATIA Session geöffnet gibt es in Zeile 67 einen Fehler. CATDrawings haben keinen PartNumber (glaube ich zumindest). Das Makro stürtzt beim Versuch es auszulesen ab. Des weiteren könnte es darin liegen, dass products (CATParts oder CATProducts) im ProduktBaum deaktiviert sind. Die Fehlerquelle habe ich auch nicht aus gegrentzt. Schaue mal bitte nach ob das stimmt? UPDATE Ich habe oben den Code angepasst damit auch andere Dokumente offen sein können. Das könnte dir vielleicht schon helfen. Wie ich aber die Fehlerquelle behebe "oChild.PartNumber" wenn oChild deaktiviert ist, das weiß ich noch nicht.
Gruß [Diese Nachricht wurde von DasDon am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo Uwe, so nun müsste in der Version 1.1 die Fehler der offene Dokumente behoben sein und die des deaktivierten product. ICh hoffe es läuft jetzt für dich. Falls nicht, noch mal melden. Gruß, Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, Zitat: Ist jedoch ein Dokument wie zB ein CATDrawing oder ähliches im CATIA Session geöffnet gibt es in Zeile 67 einen Fehler
Drawing hatte ich keines geöffnet. Das geänderte Makro läuft nun in einem Produkt mit Parts. Bei eine Struktur mit meheren Produkten und Unterprodukten bekomme ich in Linie 43 "The Method Name is failed" eine Fehlermeldung. Edit: Habe V1.1 getestet gleiche Fehlermeldung nur in Linie 46 ------------------ Gruß Uwe Auch Catia ist nur ein Mensch!
[Diese Nachricht wurde von moppesle am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 16:19 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Code: Edit: Habe V1.1 getestet gleiche Fehlermeldung nur in Linie 46
Hallo Uwe, wenn ich makro V1.1 kopiere aus dem Forum und MACRO_NAME als erste Linie setze, dann ist bei mir Linie 46 = '-------------------- Was sicherlich keine Probleme macht. Ich vermute es müsste wie folgt lauten: oChild.Name = oChild.PartNumber & "." & tmp(UBOUND(tmp)) oder tmp = SPLIT(oChild.Name,".") Anhand deine Fehlermeldung kann es beiden sein... Ich verstehe aber auch nicht was los ist, denn bei mir funktioniert es. Ob ich nun die Bauteile aus WINDOWS Ordner öffne oder aus ein VPM system (wobei hier das speichern geändert werden muss, und löschen kann ich die orgdateien auch nicht). Könntest du bitte folgende Makros erzeugen, und über das Produkt drüber laufen lassen und bescheid geben ob sie funktionieren?
MACRO1.CATvbs
Code: Sub CATMain()MSGBOX CATIA.ActiveDocument.Product.Products.Item(1).Name End Sub
Und... MACRO2.CATvbs
Code: Sub CATMain()tmp = Split(CATIA.ActiveDocument.Product.Products.Item(1).Name,".") MSGBOX tmp(UBOUND(tmp)) End Sub
[Diese Nachricht wurde von DasDon am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, Problem erkannt! Ich hatte ein "nicht" geladenes Part in meiner Struktur. Könnte man das auch noch abfangen? Inaktivierte Parts werden ignoriert. Ist getestet. Makro läuft jetzt. zu Vervollständigung noch die Bilder zu den Macros: Macro1 und Macro2 ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 03. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 03. Jul. 2012 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo, Das ist ja gut das es Funktioniert. Die macros ein und zwei waren nur gedacht um zu sehen ob es an: oChild.Name = oChild.PartNumber & "." & tmp(UBOUND(tmp)) oder tmp = SPLIT(oChild.Name,".") lag.. Ein nicht geladenes Produkt? Mit BrokenLink oder wie muss ich "nicht Geladen" verstehen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 03. Jul. 2012 21:25 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, Zitat: Ein nicht geladenes Produkt? Mit BrokenLink oder wie muss ich "nicht Geladen" verstehen?
Ein Part oder Produkt das beim laden der Baugruppe nicht gefunden wird. Wenn z.B. eine Datei im Filesystem umbenannt oder verschoben wurde. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
So. Ich glaube ich habe es abgefangen bin mir aber nicht sicher. Bei mir läufts bei einem Produkt welches einen PArt beinhaltet der ein Brocken Link hat bzw. welches nicht geladen ist. Ich hoffe nur, dass ich damit nicht mehr abfange. Sollte ein Produkt nicht geladen sein, hätte es auch keine Parameter (ie. Part Number usw.) darum Zeile 40: Code: IF oChild.Parameters.Count <> 0 THEN
Des wegen stürtzte auch das Makro vorher ab, da es nicht oChild.Name auslesen kann bei nicht vorhandene Parts. Eigentlich dürfte es nichts geben was geladen ist und keine PArameter hat...aber man weiß ja nie...Gruß, Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 04. Jul. 2012 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hall DasDon, habe immer noch ne Fehlermeldung. in Zeile:
Code: oChild.Name = oChild.PartNumber & "." & tmp(UBOUND(tmp))
Habe mal ein Bild dazu wie das im Strukturbam aussieht. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo nochmal, also bei mir sieht der Baum wie im Bild aus und das Makro läuft durch. Steht wirklich bei dir in Zeile 40: IF oChild.Parameters.Count <> 0 THEN ? Also: Code: '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) IF oChild.Parameters.Count <> 0 THEN
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 04. Jul. 2012 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo DasDon, Zitat: Steht wirklich bei dir in Zeile 40: IF oChild.Parameters.Count <> 0 THEN ?
Ja. (siehe Bilder) Habe auch extra noch einmal mit normaler Struktur getestet um andere Fehler auszuschließen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hmmm, komisch. Könntest du bitte folgendes tun: startet bitte das folgende Makro und wähle dein "nicht" geladenes Part/product. gebe mir bitte bescheid welche Nummer dabei raus kommt. Code: Sub CATMain()DIM what(0) What(0) = "Product" STATUS = CATIA.ActiveDocument.Selection.SelectElement2(What,"select a product",false) MSGBOX CATIA.ActiveDocument.Selection.Item(1).Value.Parameters.Count End Sub
Gruß, Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 04. Jul. 2012 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 04. Jul. 2012 14:25 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 14:39 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Das verstehe ich nun wirklich nicht. Du kriegtst die Anzahl der Parameter als 16, im Bild ist eins zu sehen und zwar "Component Activation State" was auch noch true sein soll, obwohl das Produkt eindeutig nicht aktiviert ist. Wie viele parameter befinden sich im "Parameters"? 15 Zufällig? Ich weiß einfach nicht mehr weiter. Tut mir leid. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 04. Jul. 2012 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo, im Part befinden sich 633 Parameter wenn es geladen ist. Könnte man nicht nach dem "toten" Part suchen und dem User eine Meldung anzeigen, das die links zu laden sind? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch!
[Diese Nachricht wurde von moppesle am 04. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 15:16 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Zitat: Könnte man nicht nach dem "toten" Part suchen und dem User eine Meldung anzeigen, das die links zu laden sind?
Eine Meldung kommt (zumindest bei mir) Automatisch nach dem Öffnen des Produkts. Siehe Anhang
Danach suchen mache ich schon mit:
Code: oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true"
Einen anderen Weg ist mir leider nicht bekannt. Das komische ist ja, dass der Wert "true" von "Component Activation State" meines Wissen die bestätigung ist dass das Part geladen ist. ICh befürchte ich kann da nichts machen. Du könntest, wenn du die Meldung nicht bekommst, immer vorher unter |File|Desk| nach schauen ob alle PArts zu finden sind. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 04. Jul. 2012 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hi Uwe, letzter Versuch. Ersetze mal den Sub WalkThroughTree mit dem hier... '------------------------------------- SUB WalkThroughTree(oParent) DIM iProduct DIM oChild FOR iProduct = 1 TO oParent.Products.Count SET oChild = oParent.Products.Item(iProduct) FOR n = 1 TO oChild.Parameters.Count tmpSTR = oChild.Parameters.Item(n).Name IF InStr(tmpSTR ,"Part Number") THEN check = TRUE NEXT IF check THEN IF oChild.Parameters.Count <> 0 THEN IF oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true" THEN '-------------------- 'ADDS PARTNUMBER AND OLD INSTANCE NUMBER AS NEW INSTANCENAME tmp = SPLIT(oChild.Name,".") oChild.Name = oChild.PartNumber & "." & tmp(UBOUND(tmp)) '-------------------- 'SENDS CHILDREN WITH NO CHILDREN TO SAVE AND CHILDREN WITH CHILDERN TO WALTHROUGH (BOTTOM UP) IF oChild.Products.Count = 0 THEN SaveAsPartNumber oChild.ReferenceProduct ELSE WalkThroughTree oChild.ReferenceProduct END IF END IF END IF END IF NEXT '-------------------- 'SENDS THE PRODUCT TO SAVE AFTER ALL CHILDREN HAVE BEEN SAVED IF oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true" THEN IF oParent.Products.Count > 0 THEN SaveAsPartNumber oParent END IF END IF END SUB '------------------------------------- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
olleiCAD Mitglied
Beiträge: 57 Registriert: 24.04.2018 Catia V5 R29 SP3 | Windows 10 Pro
|
erstellt am: 22. Okt. 2020 08:34 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Hallo zusammen, ich habe eine alte Konstruktion in Windows kopiert, dann in CATIA geöffnet, die Part Namen umbenannt (von P11743 in P11742) und dann habe ich das Makro ReNameFileNameAsPartNumber ausgeführt. Komischerweise funktioniert das Makro jetzt nur teilweise.: Die Dateinamen von Oberteil Unterteil und Niederhalter wurden umbenannt, die Dateinamen von Flächenkonstruktion und Methodenkonstruktion nicht. An was liegt das? 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: 22. Okt. 2020 18:46 <-- editieren / zitieren --> Unities abgeben: Nur für Devian82
Servus Wurde die Datei richtig neu gespeichert und nur der Name der Instanz nicht angepasst? Gruß Bernd EDIT: Ich vermute es liegt an der Zeile IF oChild.Parameters.Item(oChild.Parameters.Count).ValueAsString = "true" THEN. Mit der soll geprüft werden ob eine Instanz deaktiviert ist. ggf mal auskommentieren oder per MsgBox testen welcher Parameter da gefunden/angesprochen wird ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |