Hallo zusammen,
ich bin neu in der CATIA-Makroprogrammierung und möchte zum Einstieg gern ein VBA-Makro erstellen, das die Produktstruktur scannt.
Meine Struktur enthält auf beliebig vielen Ebenen beliebig viele Parts und Products pro Product.
Bsp.: (pass nicht zum angehängten Screenshot)
Code:
Product1
+Part1.1
+Part2.1
+Product2.1
| +Part3.1
| +Part4.1
| +Product3.1
| | +Part3.1 (!) Gleicher Instanzname, da in Subassembly
| | +Part4.1 (!) Gleicher Instanzname, da in Subassembly
| +Part5.1
Ich möchte mit dem Makro nun die gesamte Struktur durchlaufen und, falls es sich um ein Part handelt, darin ein GeoSet erzeugen, dass einen bestimmten Namen erhält.
Trotz Recherche komme ich leider nicht mehr weiter...
Mein Ansatz ist folgendermaßen:
Ich starte eine "Initial"-Funktion (Sub), die in die Struktur einsteigt und dann mit der Schleife beginnt.
Die "Product"-Funktion enthält auch die Schleife.
Wird in der Schleife ein Product gefunden, wird die Product-Funktion gestartet, bei einem Part, die entsprechende.
PartFunktion: In dem Part wird ein GeoSet erzeugt, das einen bestimmten Namen hat
Code:
Sub ScanStructure()
Dim objCATIA As Application 'Active "Session"
Set objCATIA = CATIA
Dim objActiveDoc As Document 'Active "Window" (Contains eg. Selection)
Set objActiveDoc = objCATIA.ActiveDocument
Dim objProduct As Product 'Open Part or Product (Contains eg. Parameters)
Set objProduct = objActiveDoc.Product
Dim objProducts As Products 'exists for parts, too, but .count is = 0 (like empty product)
Set objProducts = objProduct.Products
If TypeName(objActiveDoc) = "PartDocument" Then
ScanStr_Part(objActiveDoc)
ElseIf TypeName(objActiveDoc) = "ProductDocument" Then
Dim i As Integer
For i = 1 To objProducts.Count
'objProducts.Item (i)
'SCHLEIFE
Next
Else
MsgBox TypeName(objCATIA.ActiveDocument)
End If
End Sub
Function ScanStr_Product(objProduct As ProductDocument)
Dim i As Integer
For i = 1 To objProduct.Products.Count
'SCHLEIFE
Next
End Function
Function ScanStr_Part(objPart As PartDocument)
'objPart...Keine Ahnung...hybridshapes.add
End Function
Das ist was ich bisher habe. Ich habe zur Hilfe einen Watch auf CATIA gemacht (siehe Anhang). Nun meine Fragen:
1. Wie erkenne ich in der Schleife, ob es sich um ein Part oder Product handelt? Ich finde nicht den Sprung vom Objekt des Typs Product, zum "enthaltenen" Objekt des Typs Part- oder ProductDocument (wie beim CATIA.ActiveDocument)
2. Wie komme ich vom CATIA.ActiveDocument in ein beliebiges Part in der Struktur zum hybridshapes Objekt, um ein GeoSet zu erzeugen?
3. Wie erkenne ich, ob ein Part nur eine weitere Instanz eines anderen Parts ist? (Nicht über Namen!)
4. Ich hatte erst das CATIA-Objekt objCATIA usw. in der CATMain, von der aus ich die ScanStructure() starte, die konnte nicht auf die Objekte zugreifen, als public deklarieren konnte ich sie auch nicht. Müssen sie für jede Funktion neu anglegt werden?
Ich habe oft gesehen, dass in Makros Selection eingesetzt wird, das möchte ich gern vermeiden...
Vielen Dank und viele Grüße!
[Diese Nachricht wurde von PAP am 05. Jun. 2016 editiert.]
[Diese Nachricht wurde von PAP am 05. Jun. 2016 editiert.]
[Diese Nachricht wurde von PAP am 05. Jun. 2016 editiert.]
[Diese Nachricht wurde von PAP am 05. Jun. 2016 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP