' Instantiation of a User Feature Reference "UserFeature2" 
' UserFeature2 is stored in the CATPart "e:\UserFeatureStartSweep.CATPart"
' It has
' 2 inputs: Center and Surface
' 2 published parameters: Height and Radius
' 1 output: Direction
'------------------------------------------------------------------

'------------------------------------------------------------------
Catia.SystemService.Print "Retrieve the current part"

Dim PartDocumentDest As PartDocument
Set PartDocumentDest = CATIA.ActiveDocument

Dim PartDest As Part
Set PartDest = PartDocumentDest.Part

'------------------------------------------------------------------
Catia.SystemService.Print "Retrieve the User Feature Reference"

CATIA.DisplayFileAlerts = False

Dim PartDocumentStart As PartDocument
Set PartDocumentStart = CATIA.Documents.Read ("E:\UserFeatureStartSweep.CATPart")

Dim PartStart As Part
Set PartStart = PartDocumentStart.Part

Dim reference As Object
Set reference = PartStart.FindObjectByName("UserFeature2")

'------------------------------------------------------------------
Catia.SystemService.Print "Instantiate the reference in the current part"

Dim factory As InstanceFactory
Set factory = PartDest.GetCustomerFactory("InstanceFactory")

Dim instance As ShapeInstance
Set instance = factory.AddInstance(reference)

'------------------------------------------------------------------
Catia.SystemService.Print "Set Inputs"

Dim Center As Object
Set Center = PartDest.FindObjectByName("Point.1")

Dim Surface As Object
Set Surface = PartDest.FindObjectByName("Surface.1")

instance.PutInput "Point.1", Center
instance.PutInput "Surface.1", Surface

'------------------------------------------------------------------
Catia.SystemService.Print "Modify Parameters"

Dim param1 As Parameter
Set param1 = instance.GetParameter("Height")
param1.ValuateFromString("40mm")

Dim param2 As Parameter
Set param2 = instance.GetParameter("Radius")
param2.ValuateFromString("30mm")

'------------------------------------------------------------------
Catia.SystemService.Print "Update"
PartDest.Update

'------------------------------------------------------------------
Catia.SystemService.Print "Retrieves Inputs and Outputs"

Dim inputCentre As Object
Set inputCentre = instance.GetInput("Center")
Dim inputSurface As Object
Set inputSurface = instance.GetInput("Surface")

Catia.SystemService.Print "Retrieve outputs"
Dim outputDirection As Object
Set outputDirection = instance.GetOutput("Direction")

'------------------------------------------------------------------
Catia.SystemService.Print "Close the CATPart containing the reference"
PartDocumentStart.Close

