Hallo Dede,
mal ein Beispiel für dein Problem, ist aber ein vbaproject.
Parameter müssen aber External Parameter sein, sollte das nicht immer so sein mußt du noch mal ne Unterscheidung machen. Sollten sich die Nummern der Flächen ändern würde ich die Range vom Benutzer eingeben lassen. Mit der Search funktion geht´s natürlich auch ist einfacher (brauchst dann keine Rekursion) aber auch bissl langsamer...
Option Explicit
Sub CATMain()
Dim MyDocument As Document
Dim MyPart As Part
Dim MyHybBody As HybridBody
Dim MyHybBodies As HybridBodies
Set MyDocument = CATIA.ActiveDocument
Set MyPart = MyDocument.Part
Set MyHybBodies = MyPart
'Prüfen ob Part aktiv ist
If TypeName(MyDocument) <> "PartDocument" Then
MsgBox "Bitte Part im eigenen Fenster öffnen.", vbCritical, "Abbruch"
End
End If
'GeoSets scannen
ScanHybBodies MyPart.HybridBodies, MyPart
'Fertig
CATIA.StatusBar = "Vorgang Abgeschlossen"
MsgBox "Vorgang abgeschlossen.", vbOKOnly, "Hinweis"
End Sub
Function ScanHybBodies(MyRootHybBodies As HybridBodies, MyPart As Part)
Dim MyHybBody As HybridBody
Dim MyHybShape As HybridShape
Dim i As Double
'Schleife über alle GeoSets
For Each MyHybBody In MyRootHybBodies
CATIA.StatusBar = "duchsuche: " & MyHybBody.Name
'alle Shapes durchsuchen
'Fehler übergehen, da items im HybBody Empty sein können
'und nicht immer update des ThickSurface durchläuft
On Error Resume Next
For i = 250042 To 250062 Step 10
Set MyHybShape = MyHybBody.HybridShapes.Item(CStr(i))
If Not MyHybShape Is Nothing Then
'Bearbeitung starten
CATIA.StatusBar = "duchsuche: " & MyHybBody.Name & " --> bearbeite: " & MyHybShape.Name
DoIt MyHybShape, MyPart, MyHybBody
End If
Set MyHybShape = Nothing
Next
On Error GoTo 0
'Rekursion über untere GeoSets
ScanHybBodies MyHybBody.HybridBodies, MyPart
Next
End Function
Function DoIt(MyHybShape As HybridShape, MyPart As Part, MyHybBody As HybridBody)
Dim MyRelation As Relation
Dim MyRelations As Relations
Dim MyParameter As Parameter
Dim MyValue As Parameter
Dim MyParameters As Parameters
Dim MyFormula As Formula
Dim MyFactory As ShapeFactory
Dim MyThickSur As ThickSurface
Dim MyReference As Reference
Dim sFormula As String
'Thick erzeugen
MyPart.InWorkObject = MyPart.MainBody
Set MyFactory = MyPart.ShapeFactory
Set MyReference = MyPart.CreateReferenceFromObject(MyHybShape)
Set MyThickSur = MyFactory.AddNewThickSurface(MyReference, 0, 1, 0)
'MyThickSur.swap_OffsetSide 'Bei Bedarf aktivieren
MyThickSur.Name = MyHybShape.Name
'Verknüpfen
Set MyParameters = MyPart.Parameters
Set MyParameter = MyParameters.Item(MyPart.Name & "\External Parameters\" & MyHybShape.Name)
Set MyValue = MyThickSur.TopOffset
Set MyRelations = MyPart.Relations
sFormula = "`" & Replace(MyParameter.Name, MyPart.Name & "\", "", 1, 1) & "`"
Set MyFormula = MyRelations.CreateFormula(MyHybShape.Name & "_THICKSURFACE_" & MyRelations.Count + 1, "", MyValue, sFormula)
'Object updaten
MyPart.UpdateObject MyThickSur
End Function
mfG
Mario
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP