Hallo,
es gibt schon eine Lösung. Das Problem ist erst mal folgendes:
Wenn du die Parameter eines Parts in einer Struktur über das CATIA.ActiveDocument (Root) aufrufst, hast du bei einer großen Struktur einen ganzen Haufen an Parametern, unabhängig davon, ob du die Kontenpunkte deiner Modelle deaktivierst oder nicht.
Lass mal das Script unten laufen, wenn einfach nur ein leeres CATProduct geöffnet ist.
Es werden 10 Parts mit jeweils 20 test-Parametern mit Wert "10" angelegt. Dann alle Parts deaktiviert, und die Parameter nochmals gezählt. Das selbe wie vorher. Das bringt nichts.
Dann werden die erzeugten Parameter übers Root angezogen und der Wert auf 20 gesetzt. Zeit gestoppt. Dauert lange.
Schneller geht es, die Parts in deiner Struktur durchzugehen und dort die Parameter aufzurufen. Sie werden auf den Wert 30 gesetzt. Zeit gestoppt. Und siehe da: das geht richtig schnell.
Ich bearbeite Strukturen mit mehreren 1000 Modellen und jeweils einigen 1000 Parametern. Der beschriebene Weg ist um Faktor 100 und mehr schneller !!
Ich hoffe das Script ist soweit selbsterklärend. Bis dann
TomTom
Language="VBSCRIPT"
Sub CATMain()
Set oProds = CATIA.ActiveDocument.Product.Products
For i = 1 to 10
Set oProd = oProds.AddNewComponent("Part", "")
Set oParams = oProd.ReferenceProduct.Parent.Part.Parameters
For p = 1 to 20
Set oParam = oParams.CreateDimension("test" & p, "LENGTH" , 10)
Next
Next
iOld = CATIA.ActiveDocument.Product.Parameters.Count
CATIA.RefreshDisplay = True
CATIA.ActiveDocument.Product.Update
MsgBox "Das CATIA.ActiveDocument hat " & iOld & " Parameter"
MsgBox "Jetzt werden alle Knotenpunkte deaktiviert"
For i = 1 to oProds.Count
oProds.Item(i).DesactivateDefaultShape
Next
MsgBox "Das CATIA.ActiveDocument hat immer noch " & CATIA.ActiveDocument.Product.Parameters.Count & " Parameter" & VbLf & "vorher warens: " & iOld
MsgBox "Jetzt werden die Knotenpunkte werden wieder aktiviert"
For e = 1 to oProds.Count
oProds.Item(e).ActivateDefaultShape
Next
MsgBox "Jetzt werden die erzeugten Parameter übers CATIA.Active.Document angezogen und auf den Wert 20 gesetzt."
aa = timer
For o = 1 to oProds.Count
For l = 1 to 20
sParamName = oProds.Item(o).PartNumber & "\test" & l
Set oParam = CATIA.ActiveDocument.Product.Parameters.Item(sParamName)
Next
Next
oldtime = timer - aa
MsgBox "das hat jetzt " & oldtime & " sec gedauert"
MsgBox "Jetzt werden die Parameter übers jeweilige Part angezogen und auf den Wert 30 gesetzt"
bb = timer
For f = 1 to oProds.Count
Set oParams = oProds.Item(f).ReferenceProduct.Parent.Part.Parameters
For k = 1 to 20
sParamName = oProds.Item(f).PartNumber & "\test" & k
Set oParam = oParams.Item(sParamName)
oParam.Value = 30
Next
Next
MsgBox "das hat jetzt " & timer - bb & " sec anstatt " & oldtime & " sec gedauert"
End Sub
------------------
tomtom1972
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP