Hallo zusammen und frohes neues,
ich bin mir nicht ganz sicher ob ich hier im richtigen thread bin, aber ich schildere einfach mal mein problem. Ich glaube ich habe ein ähnliches problem wie chung, dass ich ein beliebiges Product in meinem Strukturbaum aktiv setzen will.
Beispielsweise sieht mein Strukturbaum folgendermaßen aus (das funktionierte Makro soll auch auf beliebig aussehende Strukturbäume funktionieren):
Product
+Product1
+Product2
+Product3
+Prodcut4
+Product5
+Part1
+Part2
+Part3
+Part4
Man nehme jetzt an, dass in Product5/part2 eine Kinematik (skelett) hinterlegt sei. aus dieser Kinematik möchte ich mit den restlichen Parts automatisch ein Dressup erzeugen was soweit funktioniert.
mein jetziges nmakro funktioniert, aber auch nur weil ich ihm hinterlege in welchem Product die Kinematik hinterlegt ist:
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
dim product2 as product
Set product2 = products1.Item(1)
dim products2 as products
Set products2 = product2.Products
dim product3 as product
Set product3 = products2.Item(1)
dim products3 as products
Set products3 = product3.Products
dim product4 as product
Set product4 = products3.Item(1)
dim products4 as products
Set products4 = product4.Products
dim product5 as product
Set product5 = products4.Item(1)
...DRESSUP
Sub end
mit diesem Programmaufbau ist es nur möglich automatische dressups zu erzeugen wenn jeder STrukturbaum identisch aussieht. ich dachte mir das z.b. durch selektion des parts indem die Kineamtik versteckt ist und über die parent funktion auf das zugehörige Product zurückgeschlossen werden kann und dieses dann aktiv setze. entweder geht das so überhaupt nicht oder ich habe einen fehler drinnen:
Code:
Sub CATMain()
Dim prodWork as product
Dim selWork As Selection
Set selWork = CATIA.ActiveDocument.Selection
Set prodWork = selWork.Item(1).Value
ReDim Datenfeld(selWork.count)
For Zaehler = 1 To selWork.Count
Set Datenfeld(Zaehler) = selWork.Item(Zaehler).Value
Next
selWork.clear
selWork.add Datenfeld(1)
Dim prod as product
Set prod = selWork.Item(1).Value
set RootProd= prod.Parent.Parent
'msgbox(RootProd.Name)
Set productDocument1 = CATIA.ActiveDocument
Set RootProd = productDocument1.Product
...DRESSUP
Sub end
oder geht sowas nur mit einer rekursiven schleife? ist das aber nicht das selbe? dabei würde ich doch auch nur alle produkte durchlaufen und sobald ich auf das produkt gestoßen bin in dem sich die Kinematik befindet dieses auf aktiv setze.
Grüße Ivanl
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP