| |
| KISTERS 3DViewStation: Effektiver Know-how-Schutz von sensiblen Produktdaten, eine Pressemitteilung
|
Autor
|
Thema: Makro zur Umbenennung von Parts im Produkt erweitern (2219 mal gelesen)
|
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 13. Jul. 2011 13:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, bin nicht das erste mal hier, aber hab meinen User vergessen Habe hier ein tolles Makro gefunden, welches in einem Produkt Parts umbenennt (String ersetzen).. Könnt ihr mir vielleicht einen Tipp geben, wie ich das Makro erweitern kann, um den String zusätzlich in den Hauptkörpern ersetzen kann? Hier ist das Makro (nicht von mir): Code: Sub traverse(Prod, origstr, newstr) set refp = Prod.ReferenceProduct if instr(refp.Name, origstr) then newpname = Replace(refp.Name, origstr, newstr) refp.Name = newpname end if if instr(refp.PartNumber, origstr) then newpnum = Replace(refp.PartNumber, origstr, newstr) refp.PartNumber = newpnum end if Set prods = Prod.Products pc = prods.Count If pc > 0 then For i = 1 to pc traverse prods.Item(i), origstr, newstr Next End If End SubSub CATMain() Set actProd = CATIA.ActiveDocument.Product origstr = Inputbox ("Eingeben welcher Name oder Nummer ersetzt werden soll!!! ", "Test") newstr = Inputbox ("Zu ersetzenden Namen oder Nummer eingeben", "Test") traverse actProd, origstr, newstr End Sub
Danke schonmal im Voraus! MfG 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: 13. Jul. 2011 17:42 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
|
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 13. Jul. 2011 18:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, hat leider nicht so funktioniert, habe es jetzt als seperaten IF Block eingefügt, aber es geht trotzdem nicht Code: Sub traverse(Prod, origstr, newstr) set refp = Prod.ReferenceProduct if instr(refp.Name, origstr) then newpname = Replace(refp.Name, origstr, newstr) refp.Name = newpname end if if instr(refp.PartNumber, origstr) then newpnum = Replace(refp.PartNumber, origstr, newstr) refp.PartNumber = newpnum end if if instr(refp.Part.Mainbody.Name, origstr) then newpnum = Replace(refp.Part.Mainbody.Name, origstr, newstr) refp.Part.Mainbody.Name = newpnum end if Set prods = Prod.Products pc = prods.Count If pc > 0 then For i = 1 to pc traverse prods.Item(i), origstr, newstr Next End If End SubSub CATMain() Set actProd = CATIA.ActiveDocument.Product origstr = Inputbox ("Eingeben welcher Name oder Nummer ersetzt werden soll!!! ", "Test") newstr = Inputbox ("Zu ersetzenden Namen oder Nummer eingeben", "Test") traverse actProd, origstr, newstr End Sub
Er sagt: "Das Objekt unterstützt diese eigenschaft nicht.: 'refp.Part'" in Linie: 11, Spalte: 2.. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Jul. 2011 19:54 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Servus Versuch es mal so: Code: Sub traverse(Prod, origstr, newstr) Set refp = Prod.ReferenceProduct If InStr(refp.name, origstr) Then newpname = Replace(refp.name, origstr, newstr) refp.name = newpname End If If InStr(refp.PartNumber, origstr) Then newpnum = Replace(refp.PartNumber, origstr, newstr) refp.PartNumber = newpnum End If If TypeName(refp.Parent) = "PartDocument" Then If InStr(refp.Parent.Part.Mainbody.name, origstr) Then newpnum = Replace(refp.Parent.Part.Mainbody.name, origstr, newstr) refp.Parent.Part.Mainbody.name = newpnum End If End If Set prods = Prod.Products pc = prods.Count If pc > 0 Then For i = 1 To pc traverse prods.Item(i), origstr, newstr Next End If End SubSub CATMain() Set actProd = CATIA.ActiveDocument.Product origstr = InputBox("Eingeben welcher Name oder Nummer ersetzt werden soll!!! ", "Test") newstr = InputBox("Zu ersetzenden Namen oder Nummer eingeben", "Test") traverse actProd, origstr, newstr End Sub
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 13. Jul. 2011 20:09 <-- editieren / zitieren --> Unities abgeben:
|
julianw239 Mitglied student
Beiträge: 6 Registriert: 04.05.2012
|
erstellt am: 04. Mai. 2012 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Zitat: Servus Versuch es mal so: [...] Gruß Bernd
Hallo Bernd, habe den Code auch gerade verwendet, funktioniert super. Was muss ich nun noch ändern, damit die Abfrage nciht nur einmal sondern öfters (in meinem Fall 16 mal) erscheint und man so mit der einmaligen ausührung mehrere Körper umbenennen kann? Bin echt ein blutiger Anfängre, hoffe du kannst mir helfen Liebe Grüße Julian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Mai. 2012 11:06 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Servus Willkommen im Forum. Bitte Systeminfo ausfüllen. Wann soll denn die Abfrage erfolgen? Pro Part einmal? Wie sollen die einzelnen Körper benannt werden? Was willst du den machen? Vielleicht ist das Makro gar nicht als "Vorlage" für deine Anwendung geeignet. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
julianw239 Mitglied student
Beiträge: 6 Registriert: 04.05.2012
|
erstellt am: 07. Mai. 2012 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Hallo, es geht darum, dass verschiedenen Punkte aus einer Excel-Datei mit den entsprechenden x-,y- und z-Koordinaten mit einem Makro nach Catia exportiert wurden. Es ergebn sich verschiedene "Ringe", da jeweils eineige Punkte auf einem gemeinsamen Kreis liegen. Diese sollen zur bessern Übersichtlichkeit nicht als 400 Punkte untereinander im Strukturbaum stehen, sondern gewissermassen einsortiert werden. Hierfür sollen immer die ca. 15-60 Punkte, die auf einem Kreis liegen zusammengefasst werden. Ob dies in einem geometrischen Set oder einem Körper geschieht, ist mir eigentlich egal. Hierfür habe ich eine Makro-Aufzeichnung verwendet, die die entsprechenden Körper bzw. geometrischen Sets erzeugt und die Punkte darin einsortiert (mit einfachem ausschneiden und in anderen Körper einfügen). Nun sollen diese Körper bzw. Sets individuell umbenannt werden. Wenn möglich auch gerne vollautomatisiert, also ohne Abfrage eine direkte Umbenennung in Ring 1 bis x. Auch sehr gut wäre eine Abfrage, wie viele Punkte zu Ring 1 gehören und dann demenstsprechend Punkt 1 bis beispielsweisse 10 in den Körper Ring 1, 11-20 in Ring 2 und so weiter einsortiert. Ich hoffe es wurde einigermassen verständlich und würde mich über Hilfe freuen! Vielen Dank schonmal im Voraus! Julian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 07. Mai. 2012 15:23 <-- editieren / zitieren --> Unities abgeben:
Hab dir mal schnell was zusammengetippt, sollte mit einem Part als aktives Dokument funktionieren.. Code:
Sub CATMain()Dim RingZaehler As Integer Set partdocument1 = CATIA.ActiveDocument Set part1 = partdocument1.Part Set hybridBodies1 = part1.HybridBodies RingZaehler = 0 For i = 1 To hybridBodies1.Count Set hybridbody1 = hybridBodies1.Item(i) hybridbody1.Name = "Ringset" & CStr(i) For j = 1 To hybridbody1.HybridShapes.Count hybridbody1.HybridShapes.Item(j).Name = "Ring" + CStr(RingZaehler + 1) RingZaehler = RingZaehler + 1 Next Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
julianw239 Mitglied student
Beiträge: 6 Registriert: 04.05.2012
|
erstellt am: 07. Mai. 2012 16:11 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
|
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 07. Mai. 2012 16:15 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Mai. 2012 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
|
julianw239 Mitglied student
Beiträge: 6 Registriert: 04.05.2012
|
erstellt am: 08. Mai. 2012 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Hallo, das speichern als CATscript hat dazu geführt, dass die Fehlermeldung nciht mehr erscheint allerdings apssiert auch ncihts sonst (Makro tut nichts)! mit dem Weglassen von "As integer" hats funktioniert, allerdings wurde nur 2 Sets hinzugefügt; kann mir noch jemand sagen wie cih diese Anzahl beliebig verrändern kann? Ich bräuchte quasi eine Abfrage, die mich so oft fragt welchen Körper oder Set ich in welchen Namen umbenennen muss bis ich auf Abbrechen klicke und somit das Makro beende. Vielen Dank und Liebe Grüße Julian [Diese Nachricht wurde von julianw239 am 08. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mai. 2012 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Servus Das Makro sollte auch nur die vorhandenen Geometrischen Set Umbenennen/Nummerieren (bzw auch die Hybridshapes in den GeoSets). Wie viele GeoSets hast du umzubenennen? Reicht da nicht Set markieren ALT + Enter? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 08. Mai. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
julianw239 Mitglied student
Beiträge: 6 Registriert: 04.05.2012
|
erstellt am: 22. Mai. 2012 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Hallo, ich habe 16 Sets, allerdings soll das ganze dann über 20 mal durchgeführt werden, was also eine Benennung von über 300 Sets bedeutet und von Hand schon ein gewisser Aufwand wäre... LG Julian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 22. Mai. 2012 14:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Julian, wenn ich dich jetzt richtig verstanden habe, müsste es folgendes Script tun: Code:
Sub CATMain()Set partdocument1 = CATIA.ActiveDocument Set part1 = partdocument1.Part Set hybridBodies1 = part1.HybridBodies For i = 1 To hybridBodies1.Count Set hybridBody1 = hybridBodies1.Item(i) hybridBody1.Name = "Ringset" & CStr(i) For j = 1 To hybridBody1.HybridBodies.Count hybridBody1.HybridBodies.Item(j).Name = "Ring" + CStr(j) Next Next End Sub
Es werden Sets auf der ersten ebene in RingsetX umbenannt und Sets auf zweiter Ebene in RingX.. Die Sets müssen allerdings schon da sein.. Hatte vorher angenommen du hast z.B. Kreise in den Sets.. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |