Autor
|
Thema: Mehrere Abzugskörper von Part entfernen (1462 / mal gelesen)
|
jupo2804 Mitglied
Beiträge: 9 Registriert: 24.07.2017 Catia v5 r24, Windows 7
|
erstellt am: 14. Aug. 2017 11:20 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich versuche mich gerade damit, ein "machined" Part zu generieren mit Hilfe eines Makros. In meinem Produkt sind die notwenigen Parts sowie die Abzugskörper eingelesen. Wenn ich den Abzugskörper vom Part manuell entfernen möchte, selektiere ich die gewünschten Abzugskörper, klicke rechts und kann das Objekt zum Entfernen definieren. Diesen Prozess habe ich in ein Makro geschrieben, bekomme allerdings eine Fehlermeldung beim durchlaufen der Schleife. Der Fehler besagt: "The Method Item failed". Anscheinend muss dort irgendwo der Wurm drin sein, aber ich kann einfach nicht erkennen wo genau. Das Ausschreiben der Variablen, sei es Name oder Nummer, weisen keine Fehler auf. Der Fehler tritt erst auf, wenn ich die Operation AddNewRemove ausführe. Ich freue mich über jeden Hinweis oder Tipp. Hier noch der Code: For i=1 To 3 Dim body2 As Body Set body2 = bodies1.Item(i) Dim shapes1 As Shapes Set shapes1 = body2.Shapes For k=4 To 6 Dim shapeFactory1 As Factory Set shapeFactory1 = oSelPart.ShapeFactory Set bodies1 = oSelPart.Bodies Set body1 = bodies1.Item(k) oSelPart.InWorkObject = body2 shapeFactory1.AddNewRemove body1 Next Next Vielen Dank schon mal im voraus und beste Grüsse, Julien Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
monka Mitglied
Beiträge: 67 Registriert: 26.01.2012 Windows 7 Professional 64bit Catia V5-6 R2014/R2016
|
erstellt am: 14. Aug. 2017 12:00 <-- editieren / zitieren --> Unities abgeben: Nur für jupo2804
Hallo Julien deinem Code zufolge versuchst du den ersten 3 Körpern in deinem Part die Körper 4, 5 und 6 abzuziehen. Du müsstest demnach bevor du die Körper ein weiteres mal abziehen kannst eine Kopie erstellen. Versuch es mal ungefähr so. Achtung Code ist nicht getestet Code: Dim selection1 as Selection Set selection1 =Catia.Activedocument.SelectionFor i=1 To 3 Dim body2 As Body Set body2 = bodies1.Item(i) Dim shapes1 As Shapes Set shapes1 = body2.Shapes For k=4 To 6 Dim shapeFactory1 As Factory Set shapeFactory1 = oSelPart.ShapeFactory Set bodies1 = oSelPart.Bodies Set body1 = bodies1.Item(k) selection1.clear selection1.Add body1 selection1.copy selection1.clear selection1.Add oSelPart selection1.paste selection1.clear oSelPart.InWorkObject = body2 shapeFactory1.AddNewRemove body1 Next k Next i
Gruß monka Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 14. Aug. 2017 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für jupo2804
Hi jupo, bitte deine Systeminfo eintragen. Zum Code: - 'Dims' haben in einer Schleife nix verloren - in der äusseren Schleife definierst Du 'body2 = bodies1.item(i). Zu diesem Zeitpunkt ist 'bodies1' undefiniert. - Mit 'oSelPart.InWorkObject = body2' versuchst Du einen undefinierten body2 'InWork' zu setzen. Das kann alles nicht funktionieren. Welchen Code erzeugt der Makro-Rekorder? Code:
Dim body2 As Body Dim shapes1 As Shapes Dim shapeFactory1 As factory For i = 1 To 3 Set body2 = bodies1.Item(i) Set shapes1 = body2.Shapes For k = 4 To 6 Set shapeFactory1 = oSelPart.ShapeFactory Set bodies1 = oSelPart.Bodies Set body1 = bodies1.Item(k) oSelPart.InWorkObject = body2 shapeFactory1.AddNewRemove body1 Next Next
Tschau, Joe ------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
monka Mitglied
Beiträge: 67 Registriert: 26.01.2012 Windows 7 Professional 64bit Catia V5-6 R2014/R2016
|
erstellt am: 14. Aug. 2017 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für jupo2804
Hallo Julien erst mal muss ich gestehen es war mir nicht bekannt das man per Makro einen Körper mehrfach von diversen Körpern abziehen kann (habs von Hand versucht und es ging nicht). Hab dein Code jetzt aber Probiert und er läuft durch wenn ich bodies1 so definier: Code:
Set bodies1 = oSelPart.Part.Bodies
Gruß monka Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupo2804 Mitglied
Beiträge: 9 Registriert: 24.07.2017 Catia v5 r24, Windows 7
|
erstellt am: 14. Aug. 2017 13:47 <-- editieren / zitieren --> Unities abgeben:
Hallo, Erst mal vielen Dank für die Beiträge. Zum ersten Kommentar kann ich folgendes sagen. Die Baumstruktur sieht momentan so aus: die ersten drei Parts sind die zu bearbeitenden Parts. Danach folgen 3 mal 3 Abzugskörper, die aus Kopien erzeugt worden sind. Daher war meine Idee, dass ich zuerst von Körper 1, die Körper 4 bis 6 abziehe. Danach verschwinden (bzw. werden verschoben) diese Parts aus der Baumstruktur und ich kann im nächsten Schritt für Part 2 erneut die Parts 4 bis 6 abziehen. Der Code funktioniert auch für i=1 und i=2 oder i=1 und i=3, sowohl in der For-Schleife als auch wenn ich es explizit in den Code schreibe. Erst wenn ich alle drei Parts einbeziehe, erscheint die Fehlermeldung. Daher habe ich das Gefühl, dass es irgendwie an der Schleife liegen muss. Zu dem anderen Kommentar kann ich folgendes sagen: Über die Dims beschwert sich Catia nicht, daher habe ich es nicht als falsch empfunden, aber ich verstehe den Einwand. Allerdings hat das herausziehen der Dims aus der Schleife leider auch nicht geholfen. Die Definition von bodies1 ist vor der Schleife erfolgt, was ich aber anscheinend vergessen habe zu kopieren. Der Code ist ein CATSkript für Catia v5 r24, falls das mit der Systeminfo gemeint ist. Vielen Dank nochmals und beste Grüsse, Julien Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 14. Aug. 2017 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für jupo2804
Zitat:
Über die Dims beschwert sich Catia nicht, daher habe ich es nicht als falsch empfunden, aber ich verstehe den Einwand. Allerdings hat das herausziehen der Dims aus der Schleife leider auch nicht geholfen.
Dass es nicht sinnvoll sein kann, dieselbe Variable immer wieder zu deklarieren, sollte einleuchten. Kostet nur Zeit. Zitat:
Die Definition von bodies1 ist vor der Schleife erfolgt, was ich aber anscheinend vergessen habe zu kopieren. Der Code ist ein CATSkript für Catia v5 r24, falls das mit der Systeminfo gemeint ist.
Unter anderem, ja. Wie du zu der Profil-Info gelangst, zeigt Bild01. Was du wo eintragen kannst zeigt Bild02. Tschau, joe
------------------ Inoffizielle Catia Hilfeseite Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupo2804 Mitglied
Beiträge: 9 Registriert: 24.07.2017 Catia v5 r24, Windows 7
|
erstellt am: 14. Aug. 2017 14:36 <-- editieren / zitieren --> Unities abgeben:
|
jupo2804 Mitglied
Beiträge: 9 Registriert: 24.07.2017 Catia v5 r24, Windows 7
|
erstellt am: 15. Aug. 2017 09:07 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe das Problem lösen können. Vielen Dank nochmals für die Hilfe. Im Endeffekt lag es daran, dass ich einen klassischen Anfängerfehler gemacht habe, was das zählen der Parts geht, die abgezogen werden sollen. Ich habe die Parts von 4 bis 6 durchzählen lassen. Allerdings habe ich nicht bedacht, dass nachdem das vierte Part abgezogen worden ist, es aus der Baumstruktur verschwindet. Daraufhin war das eigentlich fünfte Part nun das vierte, welches jedoch übersprungen wurde in meiner Schleife. Das ist nun der funktionierende Code: Dim bodies1 As Bodies Dim body2 As Body Dim shapes1 As Shapes Dim shapeFactory1 As Factory For i=1 To 3 Set body2 = bodies1.Item(i) Set shapes1 = body2.Shapes For n=1 To 3 Set shapeFactory1 = oSelPart.ShapeFactory Set bodies1 = oSelPart.Bodies Set body1 = bodies1.Item(4) oSelPart.InWorkObject = body2 shapeFactory1.AddNewRemove body1 Next Next Viele Grüsse, Julien Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technische Systemplaner / Zeichner - TGA (m/w/d) | SÜLZLE steht als starker Firmenverbund für Kompetenz und Innovationskraft in den Bereichen Stahl, Anlagenbau und Gebäudetechnik. Für interessante Tätigkeiten in der Technischen Gebäudeausrüstung in Sulz am Neckar suchen wir ab sofort: TECHNISCHE SYSTEMPLANER / ZEICHNER - TGA (M/W/D)
- Erstellung von Konstruktionszeichnungen im Bereich der Technischen ...
| Anzeige ansehen | Konstruktion, Visualisierung |
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Aug. 2017 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für jupo2804
Servus Julien Ein paar Hinweise: Bitte verwende korrekte Begriffe: deine Schleife geht über die Bodies (Körper) nicht über Parts (da ist was anderes) Poste bitte Code in den entsprechenden Tags. Verwende bessert sprechende Variablennamen (was soll den body2 sein?) Dass sich die Reihenfolge der Bodies in der Bodies-Collection ändert wage ich zu bezweifeln (mit R19 getestet). Dies trifft zB bei GeoSet zu aber nicht bei Bodies. (das Ergebnis deines Codes sieht bei mir so aus wie im Bild gezeigt) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |