Language="VBSCRIPT"
Sub CATMain()
Dim documents1 As Documents Set documents1 = CATIA.Documents ' Open CATPart
'
---Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) Open CAAGsiStart.CATPart
"
' Open CATIA Part : CAAGsiCreateJoinSurface.CATPart Dim sDocPath As String
sDocPath=CATIA.SystemService.Environ("CATDocView")
Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) DocPath = "&sDocPath Dim partDocument1 As Document
Set partDocument1 = documents1.Open(sDocPath &
"\online\CAAScdGsiUseCases\samples\CAAGsiStart.CATPart") Dim part1 As Part
Set part1 = partDocument1.Part Dim hybridShapeFactory1 As Factory
Set hybridShapeFactory1 = part1.HybridShapeFactory Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Open_body.1") ' Declarations
' ---Dim max as integer
max=20
Dim hybridShapePointCoord1 As HybridShapePointCoord Dim hybridShapePointCoord2 As HybridShapePointCoord Dim reference1 As Reference
Dim reference2 As Reference
Dim hybridShapeLinePtPt1 As HybridShapeLinePtPt
Dim reference3 As Reference
Dim originElements1 As OriginElements Dim hybridShapePlaneExplicit1 As AnyObject Dim reference4 As Reference
Dim hybridShapeIntersection1 As HybridShapeIntersection Dim reference5 As Reference
Dim hybridShapePointExplicit1 As HybridShapePointExplicit Dim VisPropSet1 As VisPropertySet
Dim hybridShapeLineExplicit1 As HybridShapeLineExplicit
Dim selection1
Dim parameters1 As Parameters Dim intParam1 As Parameter Dim parameters2 As Parameters Dim realParam1 As Parameter
Set selection1 = CATIA.ActiveDocument.Selection Set parameters1 = part1.Parameters
Set intParam1 = parameters1.Item("Num_Of_Points_Created") intParam1.Value = 0
Set parameters2 = part1.Parameters
Set realParam1 = parameters2.Item("Percentage_Completed") realParam1.Value = 0.00
' Array
' ---Dim TabExt ()
Dim TabMil () Dim TabLine() Dim TabLineExpl() Dim TabPtExpl()
ReDim TabExt(2*max) ReDim TabMil(max) ReDim TabLine(max) ReDim TabLineExpl(max) ReDim TabPtExpl(max)
Dim Pi As double Dim R As double Dim Omega As double R = 50.0000
Pi = 3.14116 Omega= 2*Pi/max Dim i as integer Dim angle As double
'
---' GSD Geometrie Creation
'
---Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) Create Points and Lines "
for i=1 to max 'Create two points Angle = Omega * (i-1)
Set TabExt(2*i-1) = hybridShapeFactory1.AddNewPointCoord(R*cos(Angle), R*sin(Angle), 100.000000)
hybridBody1.AppendHybridShape TabExt(2*i-1) part1.InWorkObject = TabExt(2*i-1)
Set TabExt(2*i) = hybridShapeFactory1.AddNewPointCoord(R*cos(Angle+2*Pi/3), R*sin(Angle+2*Pi/3), -100.000000)
hybridBody1.AppendHybridShape TabExt(2*i) part1.InWorkObject = TabExt(2*i)
'Draw line
Set reference1 = part1.CreateReferenceFromObject(TabExt(2*i-1)) Set reference2 = part1.CreateReferenceFromObject(TabExt(2*i))
Set TabLine(i) = hybridShapeFactory1.AddNewLinePtPt(reference1, reference2) hybridBody1.AppendHybridShape TabLine(i)
part1.InWorkObject = TabLine(i) 'Generate Intersection Point
Set reference3 = part1.CreateReferenceFromObject(TabLine(i)) Set originElements1 = part1.OriginElements
Set hybridShapePlaneExplicit1 = originElements1.PlaneXY
Set reference4 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit1) Set TabMil(i) = hybridShapeFactory1.AddNewIntersection(reference3, reference4) hybridBody1.AppendHybridShape TabMil(i)
part1.InWorkObject = TabMil(i)
'update Num_Of_Points_Created parameter intParam1.Value = i
'update Percentage_Completed parameter realParam1.Value = i/max *100
---Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) Convert to Datum "
' Add OpenBodys for datum point and for datum line Dim OpenBody1 As HybridBody
Dim OpenBody2 As HybridBody Dim referencebody As Reference Set OpenBody1 = hybridBodies1.Add()
Set referencebody = part1.CreateReferenceFromObject(OpenBody1)
hybridShapeFactory1.ChangeFeatureName referencebody , "DatumPointBody"
Set OpenBody2 = hybridBodies1.Add()
Set referencebody = part1.CreateReferenceFromObject(OpenBody2)
hybridShapeFactory1.ChangeFeatureName referencebody , "DatumLineBody"
' Loop on element to convert for i=1 to max
'Isolate Intersection point
Set reference5 = part1.CreateReferenceFromObject(TabMil(i))
Set TabPtExpl(i) = hybridShapeFactory1.AddNewPointDatum(reference5) OpenBody1.AppendHybridShape TabPtExpl(i)
part1.InWorkObject = TabPtExpl(i)
hybridShapeFactory1.DeleteObjectForDatum reference5 'Isolate the line
Set reference5 = part1.CreateReferenceFromObject(TabLine(i))
Set TabLineExpl(i) = hybridShapeFactory1.AddNewLineDatum(reference5) OpenBody2.AppendHybridShape TabLineExpl(i)
part1.InWorkObject = TabLineExpl(i)
hybridShapeFactory1.DeleteObjectForDatum reference5 next
part1.Update
' ---' Delete Useless points
' ---for i=1 to max
selection1.Clear()
selection1.Add(TabExt(2*i-1)) selection1.Add(TabExt(2*i)) selection1.Delete
next
part1.Update
'
---' Change graphic properties(color) and datum names '
---Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) Update graphic properties and names "
Dim referencedat1 As Reference Dim referencedat2 As Reference ' Loop on element to modify for i=1 to max
' -- Points
' Change Color of Middle Point selection1.Clear()
selection1.Add(TabPtExpl(i))
Set VisPropSet1 = selection1.VisProperties
VisPropSet1.SetRealColor 255, int(255*(i-1)/max), int(255*(1-((i-1)/max)) ), 1 ' Rename
NewName ="PointDatum" & "." & i
Set referencedat1 = part1.CreateReferenceFromObject(TabPtExpl(i)) hybridShapeFactory1.ChangeFeatureName referencedat1 ,NewName
' -- Lines
' Change Color of Line selection1.Clear()
selection1.Add(TabLineExpl(i))
Set VisPropSet1 = selection1.VisProperties
VisPropSet1.SetRealColor int(255*(i-1)/max), 255, int(255*(1-((i-1)/max)) ), 1
' Rename
NewName = "LineDatum" & "." & i
Set referencedat2 = part1.CreateReferenceFromObject(TabLineExpl(i)) hybridShapeFactory1.ChangeFeatureName referencedat2 ,NewName next
EnvSave = Catia.SystemService.Environ("CAA_GSD_SAVE") Catia.SystemService.Print "EnvSave=" & EnvSave
If ( EnvSave <> "" ) Then
' ' Save As
'
' Note : Optional - allows to specify where document should be saved sTmpPath = Catia.SystemService.Environ("CATTemp")
If (Not Catia.FileSystem.FolderExists(sTmpPath)) Then Err.Raise 9999,,"No Tmp Path Defined"
End If ' Save
Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) SaveAs in :" & sTmpPath
& "\CAAGsiCreatePtLnAndConvertToDatum.CATPart"
partDocument1.SaveAs sTmpPath & "\CAAGsiCreatePtLnAndConvertToDatum.CATPart"
End If
EnvVar = Catia.SystemService.Environ("CAA_GSD_EXIT") Catia.SystemService.Print "EnvVar=" & EnvVar
If ( EnvVar <> "" ) Then On Error Resume Next
CATIA.DisplayFileAlerts = False
' ' Close
'
Catia.SystemService.Print "(CAAGsiCreatePtLnAndConvertToDatum) Close and Quit "
partDocument1.Close
' ' Exit Catia
' Catia.SystemService.Print "Catia.Quit"
Catia.Quit End If End Sub
Language="VBSCRIPT"
'My macro creates five cylinders Sub CATMain()
Dim documents1 As Documents Set documents1 = CATIA.Documents Dim partDocument1 As Document
Set partDocument1 = documents1.Add("Part") Dim part1 As Part
Set part1 = partDocument1.Part Dim bodies1 As Bodies
Set bodies1 = part1.Bodies Dim body1 As Body
Set body1 = bodies1.Item("MechanicalTool.1") Dim sketches1 As Sketches
Set sketches1 = body1.Sketches Dim originElements1 As OriginElements Set originElements1 = part1.OriginElements Dim reference1 As AnyObject
Set reference1 = originElements1.PlaneXY x = 0
Dim arrayOfVariantOfDouble1(8)
arrayOfVariantOfDouble1(0) = 0.000000 arrayOfVariantOfDouble1(1) = 0.000000 arrayOfVariantOfDouble1(2) = 0.000000
arrayOfVariantOfDouble1(3) = 1.000000 arrayOfVariantOfDouble1(4) = 0.000000 arrayOfVariantOfDouble1(5) = 0.000000 arrayOfVariantOfDouble1(6) = 0.000000 arrayOfVariantOfDouble1(7) = 1.000000 arrayOfVariantOfDouble1(8) = 0.000000 For I = 1 To 5
Dim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)
sketch1.SetAbsoluteAxisData arrayOfVariantOfDouble1 Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()
Dim geometricElements1 As GeometricElements Set geometricElements1 = sketch1.GeometricElements Dim axis2D1 As GeometricElement
Set axis2D1 = geometricElements1.Item("AbsoluteAxis") Dim line2D1 As AnyObject
Set line2D1 = axis2D1.GetItem("HDirection") line2D1.ReportName = 1
Dim line2D2 As AnyObject
Set line2D2 = axis2D1.GetItem("VDirection") line2D2.ReportName = 2
Dim circle2D1 As Circle2D
Set circle2D1 = factory2D1.CreateClosedCircle(x, 0.000000, 10.000000) circle2D1.ReportName = 3
sketch1.CloseEdition part1.Update
Dim shapeFactory1 As Factory
Set shapeFactory1 = part1.ShapeFactory Dim pad1 As Pad
Set pad1 = shapeFactory1.AddNewPad(sketch1, 20.000000) part1.Update
x = x + 25 Next End Sub