' ***********************************************************************
'   Purpose:      This macro:
'                 1 - Opens an extended Part document
'				  2 - Retrieves the BehaviorExtensionsRoot, 
'					  which gives access to the behaviors defined in the corresponding CATfct file
'				  3 - Successively retrieves behaviors under the main behavior, and get some of the input 
'					  and output attributes defined on those behaviors
'				  4 - created parameters under the Part document
'				  5 - Assigns the value of those parameters to behavior's attribute: "MyExternal" attribute is linked to parameter P2
'					  

   
' ***********************************************************************

Sub CATMain()

'**********************************************************
dim sDocPath As String 
    sDocPath=CATIA.SystemService.Environ("CATDocView")

    ' ----------------------------------------------------------- 

    ' Open the Part document 
    Dim sFilePath
    sFilePath = CATIA.FileSystem.ConcatenatePaths(sDocPath, _
		"online\CAAScdBKTUseCases\samples\TypedPartforBKTAutomation.CATPart")

'**********************************************************


'Before opening the extended part, don't forget to copy Doc_path\CAAScdBKTUseCases\samples\CAAScdBKTautomation.CATfct into installed_path/intel_a/resources/graphic

' Set the CATIA popup file alerts to False
' It prevents to stop the macro at each alert during its execution
CATIA.DisplayFileAlerts = False

sFilePath ="E:\users\auw\ADELE\CAAAUWCXR14\CAAScriptDoc.edu\CAAScdBKTUseCases.doc\src\samples\TypedPartforBKTAutomation.CATPart"
'We open an extended Part
Set CurDocument= CATIA.Documents.Open  (sFilePath)
CurDocument.Activate()
Set RootPart = CATIA.ActiveDocument.Part

'We get the BehaviorExtension, which will provide access to every behavior instantiated
Set BehExtension = RootPart.GetItem("CATGetBehaviorExtensions")

'We get the behavior called Test Sequence, which is a main behavior (Sequential Combination)
set MainBehavior = BehExtension.SelectBehavior("Test Sequence") 

'We retrieve the behavior called "Display Information" under the sequence
'and the behavior called VBScript
'The method GetItem allows to retrieve a behavior of a sequence with its name
set Behavior = MainBehavior.Behaviors.GetItem("Display Information")
set Behavior2 = MainBehavior.Behaviors.GetItem("VBScript")
msgbox "Name of the information Behavior : " & Behavior.Name

'It is possible to access to any behavior of a sequence
'the "Parent" method retrieves the owner of the behavior its called on
set ParentBehavior= Behavior.Parent

'It is possible to retrieve the type,and the list of behaviors
set ExtensionBehavior= ParentBehavior.Parent
NameExtension = ExtensionBehavior.Name

'From the main behavior, we can get the list of every behaviors defined under it.
set listBehavior = MainBehavior.Behaviors
count = listBehavior.Count
msgbox "number of behaviors : " & count, 64

'ExtensionBehavior Parent is retrieved: it is the name of the extended object : here, Part1
set ParentOfExtension = ExtensionBehavior.Parent
ParentOfExtensionName = ParentOfExtension.Name

type_parent= ExtensionBehavior.ExtensionClass
msgbox "Type is " & type_parent, 64



'As ParentBehavior is a sequence, we can access to any behavior of it using the "Item" method on "Behaviors"
'This is another way than GetItem to access to a behavior
set SecondBehavior=ParentBehavior.Behaviors.Item(1)
name_second=SecondBehavior.Name
'We display the name of the Information behavior to control it is the same as retrieved before by GetItem method.
msgbox "Second Behavior of Parent List is " & name_second , 64   
 
'The TestInput method ensures that the searched input attribute exists, before effectively retrieving it with GetInput 
MyParameter="MyParameter"
Dim Param 
if (Behavior.TestInput(MyParameter)) then 
	set Param = Behavior.GetInput(MyParameter)
end if
	msgbox "MyParameter value is " & Param.Value , 64


'We create a parameter P2 of type LENGTH under the Part. Its value is set to 100
Dim params As Parameters
Set params = RootPart.Parameters
Set NewParameter = params.CreateDimension("P2", "LENGTH", 100.000000)


Behavior2.Start
'Now we retrieve the output attribute called "MyExternal" of the "VBScript" behavior
'We test that this outupt attribute exists with TestOutput method
MyExternal="MyExternal"
Dim ParamExt
if (Behavior2.TestOutput(MyExternal)) then 
	set ParamExt = Behavior2.GetOutput(MyExternal)
end if


'The PutOutput methods assigns a value to an output attribute of a running Behavior
'The Behavior2 has to be in executing mode, that's why we call the Start method on the VBScript behavior.
Behavior2.PutOutput "MyExternal", NewParameter 
msgbox "New parameter MyExternal value  is " & Behavior2.GetOutput(MyExternal).Value, 64




Behavior2.Done

End Sub