Autor
|
Thema: Erstellen von Parts auf vordefinierten Achsensystemen (1432 / mal gelesen)
|
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 12. Jul. 2017 14:57 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 12. Jul. 2017 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
Servus Willkommen im Forum. Bei deinem ersten Ansatz: hast du dort auch die Werte des Achsensystems ausgelesen und dieser der Position der Instanz deines Parts zugewiesen? Zu deinem jetzigen Ansatz: Warum setzt du die Achsensystem nicht direkt nur mit einer Bedingung aufeinander? Hier findest du einen Beitrag der dir erklärt wie die Referenz dafür erstellt wird. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 12. Jul. 2017 15:21 <-- editieren / zitieren --> Unities abgeben:
Danke dir Bernd Ansatz 1: Nein hab ich nicht und ich weiß auch ehrlich gesagt nicht, wie das funktioniert. Benutze VBA und habe das Teil per Makro Recording aufgenommen. Hierbei hatte ich den Ursprungspunkt des Robot Axis System als Ursprungspunkt des neuen Parts ausgewählt. Weiter konnte ich mir hier aber nicht helfen. Ansatz 2: Das Problem ist, dass ich nicht den Pfad nehmen kann, da dieser variiert. Zunächst kann das Product variieren, da mein Makro in verschiedenen Products anwendbar sein soll. Außerdem sind meine "Robot Axis System" Ebenfalls mit der Variable i versehen. Hier mal meine Zeilen zum auswählen und Umbenennen der Achsensysteme (heißen hier Laser Axis System): 'AUSWÄHLEN DER ACHSENSYSTEME Dim objSearch As Selection Set objSearch = CATIA.ActiveDocument.Selection objSearch.Search ("Name = Laser Axis System*,all") objcount = objSearch.Count & " zu erstellende/r Sensor/en erkannt" MsgBox objcount 'UMBENENNEN DER ACHSENSYSTEME Dim i As Integer For i = 1 To objSearch.Count objSearch.Item(i).Value.Name = objSearch.Item(i).Value.Name & i 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: 12. Jul. 2017 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
Servus Zu Ansatz 1: Schau mal in der Doku (V5Automation) nach "Position" Zu Ansatz 2: Genau hier fängt das Makroprogrammieren erst richtig an. Du musst dir per Makro den String für die Reference zusammenbauen. Der Link im anderen Beitrag, die Doku, das Watchfenster und die Forensuche hilft dir da sicher weiter. Gruß Bernd PS: Grenze die Suche so weit wie möglich ein, nicht dass zB auch ein Punkt der so heißt selektiert wird (dann fällt dein Makro auf die Nase) ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 14. Jul. 2017 08:36 <-- editieren / zitieren --> Unities abgeben:
Servus Aktuell verfolge ich den Ansatz, dass ich in die manuell erstellten Parts meine Bauteile einfüge. Mein Makro erkennt die entsprechenden Parts (bezeichnet als Sensor Axis System). Im Anschluss habe ich versucht in jedes objSearch.Item(i) ein Bauteil zu erstellen. Das klappt so aber nicht. Ich vermute, weil objSearch.Item(i) Teil einer Selection ist. Auch Spezifikationen wie Type = Part oder dergleichen haben mir nicht weitergeholfen. Meine Struktur besteht aus einem Produkt, in dem bereits Produkte und Parts vorhanden sind. Anschließend sollen Parts mit dem Namen "Sensor Axis System" eingefügt werden. Unten findet ihr einen Code der zwar funktioniert, jedoch in jedem Part einen Sensor erstellt. Die fehlerhafte Zeile habe ich markiert. [CODE][ Sub CATMain() Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument Dim product1 As Product Set product1 = productDocument1.Product Dim products1 As Products Set products1 = product1.Products 'AUSWÄHLEN DER ACHSENSYSTEME Dim objSearch As Selection Set objSearch = CATIA.ActiveDocument.Selection objSearch.Search "(.Part.Name = *Sensor Axis System*),In" objcount = objSearch.Count & " zu erstellende/r Sensor/en erkannt" MsgBox objcount 'ERSTELLEN DER SENSOREN Dim i As Integer For i = 1 To objSearch.Count
Dim oDoc1 As Document Set product2 = products1.Item(i) <-----Hier habe ich versucht objSearch.Item(i) einzusetzen hat aber mit der folgenden Zeile Probleme erzeugt Set oDoc1 = product2.ReferenceProduct.Parent If TypeName(oDoc1) = "PartDocument" Then Dim oPart1 As Part Set oPart1 = oDoc1.Part ... /CODE] 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: 14. Jul. 2017 09:58 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
Servus Kannst du mal ein Bild des Strukturbaums posten? Was bedeutet für dich "Bauteil erstellen"? Wo soll dies geschehen? Was selektierst du? Lass dir mal den Typ ausgeben zB: Code: msgBox TypeName(objSearch.item2(i).Value) 'das Value ist wichtig, somit kannst du das selektierte Objekt ansprechen
Von der Suche her würde ich vermuten dass du Parts selektierst. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 14. Jul. 2017 10:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Mit Bauteil erstellen meine ich, das bereits vorhandene Part auszuwählen und zum Beispiel ein Pad zu erzeugen. Im Anhang findest du beispielhaft einen Strukturbaum. Ja ich wähle aktuell ein Part aus. Ich habe die Suche noch weiter eingeschränkt:
Code:
objSearch.Search "(Name = *Sensor Axis System* & Part Design.Part),all"
Mein Value ist Part, wie ich es wollte. Aber ich kann damit nicht weiterarbeiten. Was ist denn der Unterschied zwischen objSearch.Item(i) und objSearch.Item2(i)?
[Diese Nachricht wurde von KNaumann1 am 14. Jul. 2017 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: 14. Jul. 2017 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
Servus Du kannst dann über eine Schleife deine Parts abarbeiten. zB: Code: Dim myPart as Part For i = 1 To objSearch.Count Set MyPart = objSearch.item2(i).Value 'mach hier was mit dem Part next
Unterschied Item zu Item2: siehe Doku Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 14. Jul. 2017 10:32 <-- editieren / zitieren --> Unities abgeben:
|
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 18. Jul. 2017 08:29 <-- editieren / zitieren --> Unities abgeben:
Servus, Muss den Beitrag doch wieder nutzen. Und zwar habe ich wieder Probleme mit den einzelnen Items einer Selection. Ich möchte zuvor kopierte Bodies in jedes Item der Selection einfügen. Kopieren und ______objSel.PasteSpecial ("CATPrtResultWithOutLink"________ funktionieren. Aber über diesen Befehl kann ich die Bodies nicht in jedes Item der Selection einfügen. Die Items in der Selection sind Parts. Hatte mir das so vorgestellt: Code:
For i = 1 to objSel.Count Dim oPart1 as Part Set oPart1 = objSel.item2(i).Value oPart1.PasteSpecial ("CATPrtResultWithOutLink")
Scheitert an der fett geschriebenen Zeile. Ebenfalls frage ich mich ob man die zuvor kopierten Bodies zu einem einzigen Body zusammenfassen kann? Grüße Knaumann [Diese Nachricht wurde von KNaumann1 am 18. Jul. 2017 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: 18. Jul. 2017 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
Servus Du musst die Parts, in die du was einfügen willst, einzeln selektieren und dann auf die Selektion die Methode PasteSpecial anwenden. ggf am Anfang deine Körper suchen/selektieren, diese dann in einem Array bzw einer Collection zwischenspeichern. Dann kannst du per Schleife diesen Zwischenspeicher abarbeiten und kannst die Selektion wieder unabhängig nutzen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KNaumann1 Mitglied Maschinenbau Student
Beiträge: 10 Registriert: 12.07.2017 Catia V5 R24 SP4
|
erstellt am: 18. Jul. 2017 09:35 <-- editieren / zitieren --> Unities abgeben:
Danke für den Ansatz Bernd. Leider kenne ich mich mit Array und Collections nicht aus. Die V5Automation Datei hilft mir auch nicht wirklich weiter. Hast du einen hilfreichen Link für mich? Grüße KNaumann 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: 18. Jul. 2017 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für KNaumann1
|