Hi und guten Morgen an alle,
Ich bin derzeit dabei ein Makro zu schreiben, welches die 3D-Daten von Fastener (Xe, Ye, Ze, Xdir, Ydir, Zdir) aus Catia ausliest.
Dabei ist die Produktstruktur immer gleich aufgabaut.
Produkt
-> Produkt-STD01 (Part)
-> PartBody
-> Fasteners (Geometrical Set)
-> Modified
-> Dia 2
-> Rivet_dia2_1
-> Rivet_dia2_2
-> Rivet_dia2_3
-> Dia 4
-> Rivet_dia4_1
-> Rivet_dia4_2
-> Rivet_dia4_3
Um an die gewünschten Parameter zu kommen wollte ich eine Liste der Parameter erstellen. (".Parameters")
Die Liste die ich damit erhalte enthält jedoch nur 256 Einträge, wobei jeder Fastener ca. 30 Parameter in der Liste hat.
Nun hab ich teilweise aber über 250 Fastener und die begrenzte Liste reicht natürlich nicht aus.
Ich hab das Problem auch schon behoben, indem ich einfach eine Liste aller Fastener erstelle.
Anschließend gehe ich den gesamten Pfad_Namen des Fasteners ab und ziehe mir die Parameter raus.
Jedoch braucht das Programm zeimlich lange, da der Fastener-Name ja immer beginned vom Anfang abgefragt wird.
Ich suche nun nach einer Möglichkeit mein Programm zu beschleunigen, da es derzeit mind. 9min dauert.
Vielleicht hat ja jmd. eine Idee?
Hier mal mein Programm:
----------------------------------------------------------------------------------------------------------------------------------------
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim h As Integer
Dim r As Integer
Dim product3 As Variant
Dim hybrids As HybridBodies
Dim product2 As Product
Dim hybrid As HybridBody
Dim hybrid2 As HybridBody
Dim riv As HybridShape
Dim name1 As String
Dim name2 As String
Dim rivListoa() As HybridBody
Dim rivlist() As HybridShape
Dim para As Parameters
Dim par As RealParam
Dim prüf As Integer
Dim Direction()
----------------------------------------------------------------------------------------------------------------------------------------
Sub CATMain()
Err.Clear
On Error GoTo weiter
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
product1.ApplyWorkMode DESIGN_MODE
GoTo fertig
weiter: MsgBox "A product should be open!"
Exit Sub
fertig:
Err.Clear
On Error Resume Next
On Error GoTo 0
########## Heraussuchen des Parts, welches die Fastener besitzt und abspeichern als Part ###############
For i = 1 To product1.Products.Count
If product1.Products.Item(i).PartNumber = product1.PartNumber & "-STD01" Then
Set part1 = product1.Products.Item(i).ReferenceProduct.Parent
Exit For
End If
Next
Set part2 = part1.part
Set hybrids = part2.HybridBodies
Set hybrid = hybrids.Item("Fasteners")
Set hybrid2 = hybrid.HybridBodies.Item("Modified")
ReDim rivListoa(hybrid2.HybridBodies.Count - 1)
For j = 1 To hybrid2.HybridBodies.Count
Set rivListoa(j - 1) = hybrid2.HybridBodies.Item(j)
Next
prüf = 0
For k = 0 To UBound(rivListoa, 1)
prüf = prüf + rivListoa(k).HybridShapes.Count
Next
ReDim rivlist(prüf - 1)
prüf = 1
i = 0
For j = 0 To UBound(rivlist, 1)
Set rivlist(j) = rivListoa(i).HybridShapes.Item(prüf)
If prüf = rivListoa(i).HybridShapes.Count Then
i = i + 1
prüf = 1
Else
prüf = prüf + 1
End If
Next
ReDim Direction(2, 0)
ReDim Direction(2, UBound(rivlist, 1))
Set para = part2.Parameters
################# Ab hier beginnt die Abfrage nach dem Rivets, wobei "name1" immer den gleichen Namens-Pfad darstellt ###########
name1 = part2.name & "\" & hybrid.name & "\" & hybrid2.name
For k = 0 To UBound(rivlist, 1)
name2 = name1 & "\" & rivlist(k).Parent.name & "\" & rivlist(k).name & "\Ye"
Set par = para.Item(name2)
Direction(0, k) = par.Value
name2 = name1 & "\" & rivlist(k).Parent.name & "\" & rivlist(k).name & "\Xdir"
Set par = para.Item(name2)
If par.Value <> 0 Then
name2 = name1 & "\" & rivlist(k).Parent.name & "\" & rivlist(k).name & "\Ze"
Set par = para.Item(name2)
Direction(1, k) = par.Value
Else
name2 = name1 & "\" & rivlist(k).Parent.name & "\" & rivlist(k).name & "\Xe"
Set par = para.Item(name2)
Direction(1, k) = par.Value
End If
Direction(2, k) = rivlist(k).name
Next
----------------------------------------------------------------------------------------------------------------------------------------
Abhängig von der Fastener Ausrichtung brauch ich also unterschiedliche X- oder Z-Parameter.
(Fastener wurden übrigens mit dem Catia-Fastener-Tool erstellt)
Möglicherweise kann man die Abfrage ja auch einfacher machen, ich wusste nur leider nicht wie.
(Die derzeitige Methode hab ich mir durch Abgucken und Umbasteln des Macro-Recordings erarbeitet)
Beste Grüße
Hamlet
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP