Code:
Sub CATMain()Dim myPart As Part
Set myPart = CATIA.ActiveDocument.Part
' Parameter "Kantenlaenge" mit initial 200 mm erzeugen --------------------
Dim params As Parameters
Set params = myPart.Parameters
Dim laenge_kante As Length
Set laenge_kante = params.CreateDimension("", "LENGTH", 0#)
laenge_kante.Rename "Kantenlaenge"
laenge_kante.Value = 200#
Dim hauptKoerper As Body
Set hauptKoerper = myPart.MainBody
' Listenobjekt Sketches erzeugen -----------------------------------
Dim Skizzen As Sketches
Set Skizzen = hauptKoerper.Sketches
' Referenzebene erzeugen -------------------------------------------
Dim UrsprungsElemente, Ebene
Set UrsprungsElemente = myPart.OriginElements
Set Ebene = UrsprungsElemente.PlaneXY
' Objekt Sketch erzeugen -------------------------------------------
Dim Skizze As Sketch
Set Skizze = Skizzen.Add(Ebene)
' 2D-Werkzeugkasten erzeugen und Skizze oeffnen ---------------------
Dim Wzk As Factory2D
Set Wzk = Skizze.OpenEdition
' Zwei Punkte und dazwischen Linie erzeugen -------------------------
Dim pt(4) As Point2D
Set pt(1) = Wzk.CreatePoint(0, 0)
Set pt(2) = Wzk.CreatePoint(laenge_kante.Value * 0.2, 0)
Set pt(3) = Wzk.CreatePoint(laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
Set pt(4) = Wzk.CreatePoint(0, laenge_kante.Value * 0.15)
Dim linie(4) As Line2D
Set linie(1) = Wzk.CreateLine(0, 0, laenge_kante.Value * 0.2, 0)
Set linie(2) = Wzk.CreateLine(laenge_kante.Value * 0.2, 0, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
Set linie(3) = Wzk.CreateLine(0, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15, laenge_kante.Value * 0.15)
linie(1).StartPoint = pt(1)
linie(1).EndPoint = pt(2)
linie(2).StartPoint = pt(2)
linie(2).EndPoint = pt(3)
linie(3).StartPoint = pt(3)
linie(3).EndPoint = pt(4)
Set linie(4) = Wzk.CreateLine(0, 0, 0, laenge_kante.Value * 0.15)
linie(4).StartPoint = pt(1)
linie(4).EndPoint = pt(4)
linie(4).Construction = True
Skizze.CenterLine = linie(4)
' Linienreferenz erstellen
Dim ref_linie(4) As Reference
For I = 1 To 4 Step 1
Set ref_linie(I) = myPart.CreateReferenceFromObject(linie(I))
Next
' Bemassungsbedingung für die Linie definieren
Dim Bedingungen(4) As Constraints
Dim Bedingung(4) As Constraint
For I = 1 To 4 Step 1
Set Bedingungen(I) = Skizze.Constraints
Set Bedingung(I) = Bedingungen(I).AddMonoEltCst(catCstTypeLength, ref_linie(I))
Next
' Formel fuer das Linienmass mit Parameter Kantenlaenge erzeugen
Dim laenge_linie(4) As Length
Dim rel As Relations
For I = 1 To 4 Step 1
Set laenge_linie(I) = Bedingung(I).Dimension
Next
Set rel = myPart.Relations
Dim arr(4) As String
'arr(1) = "Formel.1"
'arr(2) = "Formel.2"
'arr(3) = "Formel.3"
'arr(4) = "Formel.4"
Dim formel(4) As Formula
'Set formel(1) = rel.CreateFormula("Formel.1", "", laenge_linie(1), "Kantenlaenge*laenge_linie(1)/100")
'Set formel(2) = rel.CreateFormula("Formel.2", "", laenge_linie(2), "Kantenlaenge*laenge_linie(2)/100")
'Set formel(3) = rel.CreateFormula("Formel.3", "", laenge_linie(3), "Kantenlaenge*laenge_linie(3)/100")
'Set formel(4) = rel.CreateFormula("Formel.4", "", laenge_linie(4), "Kantenlaenge*laenge_linie(4)/100")
' Set formel = rel.CreateFormula(Formelname, Kommentar, Ausgabeparameter, Formeldefinition)
Dim strFormel As String
'For I = 1 To 4 Step 1
'MsgBox ("Formel." & I)
'Set formel(I) = rel.CreateFormula("Formel." & I, "", laenge_linie(I), "Kantenlaenge*laenge_linie(I)/100")
'strFormel = "Kantenlaenge*laenge_linie*(" & CStr(I) & "/100)"
'Set formel(I) = rel.CreateFormula("Formel." & I, "", laenge_linie(I), strFormel)
'Next
Skizze.CloseEdition
' 3D-Werkzeugkasten erzeugen ---------------------
Dim Wzk3D As ShapeFactory
Set Wzk3D = myPart.ShapeFactory
Dim RotKoerper As Shaft
Set RotKoerper = Wzk3D.AddNewShaft(Skizze)
myPart.Update
End Sub