ConstructionHistory
 
 
 

ConstructionHistory

Object Hierarchy

Inheritance

SIObject

ConstructionHistory

Description

This object represents the Operator stack for a Primitive object. It allows you to browse through the stack one operator at a time by enumerating the ConstructionHistory object, which you can get with the Primitive.ConstructionHistory property.

The operator stack on a primitive is called the "Construction History" because the order of the operators generally reflects the order that the operators were created. However because of the concept of siConstructionMode, operators may sometime be added underneath existing operators.

The construction history is one example of the more general concept of "Connection Stack", see DataRepository.GetConnectionStackInfo for details.

Note: For performance reasons the Item and Count properties have not been implemented, so you have to enumerate the entire stack and check each one to see if it's the one you want.

Methods

Filter Find IsClassOf operator IsEqualTo operator

Properties

Application Categories FullName operator Help
Name operator NestedObjects Origin OriginPath
Parent Type operator    
       

Examples

1. VBScript Example

' Set up the scenario (a cylinder with two operators)
Set oObj = CreatePrim( "Cylinder", "MeshSurface" )
ApplyOp "Bulge", oObj, 3, siPersistentOperation
ApplyOp "Twist", oObj, 3, siPersistentOperation
' First find the cylinder with the operators on it
Set oRoot = ActiveSceneRoot
Set oCyl = oRoot.FindChild(,,siMeshFamily)
' Now get the primitive from the cylinder and then the 
' operator stack as the construction history object
Set oPrim = oCyl.ActivePrimitive
Set oOpStack = oPrim.ConstructionHistory
' This isn't a normal collection, so Count and Item 
' do not work, as you can see if you uncomment these lines:
REM LogMessage "The stack contains " & oOpStack.Count & " operators."
REM LogMessage "...and the first one is: " & oOpStack.Item(0)
' Since you cannot indicate which one you want with Item,
' you need to enumerate each one to check to see whether it
' is the one you are looking for 
For Each o in oOpStack
        If (o = oPrim & ".bulgeop") Then
                ' You found it!
                Set oBulgeOp = o
                ' Find the DeformAlong settings and toggle Y and Z
                For Each p in oBulgeOp.Parameters
                        Select Case p.ScriptName
                                Case "defy"
                                        LogMessage "Original value for DeformAlongY = " & p.Value
                                        p.Value = not( p.Value )
                                        LogMessage "New value = " & p.Value
                                Case "defz"
                                        LogMessage "Original value for DeformAlongZ = " & p.Value
                                        p.Value = not( p.Value )
                                        LogMessage "New value = " & p.Value
                                Case Else
                        End Select
                Next
        End If
Next
REM Output of above script is:
'INFO : "Original value for DeformAlongY = False"
'INFO : "New value = True"
'INFO : "Original value for DeformAlongZ = True"
'INFO : "New value = False"

2. VBScript Example

' The following code illustrates how to get a ConstructionHistory 
' object and how to iterate the construction history using the 
' For Each...Next statement: 
Set oObject = Application.ActiveProject.ActiveScene.Root.AddGeometry("Sphere","MeshSurface")
ApplyOp "Twist", oObject
ApplyOp "Bend", oObject
ApplyOp "Taper", oObject
LogMessage "The " & oObject.Name & " has the following operators applied:"
For Each oOperator in oObject.ActivePrimitive.ConstructionHistory
        LogMessage vbTab & oOperator.Name 
Next
REM The output of the above script is:
'INFO : "The sphere has the following operators applied:"
'INFO : "       Taper Op"
'INFO : "       Bend Op"
'INFO : "       Twist Op"
'INFO : "       Geometry"

3. JScript Example

//jscript example showing how to 
//enumerate the Operators on a geometry
var oGrid = ActiveProject.ActiveScene.Root.AddGeometry( "Sphere", "MeshSurface" ) ;
ApplyOp("Bulge", oGrid.Name, 3, siPersistentOperation);
ApplyOp("Bend", oGrid.Name, 3, siPersistentOperation);
oEnum = new Enumerator( oGrid.ActivePrimitive.ConstructionHistory );
for (;!oEnum.atEnd();oEnum.moveNext())           
{
        // Print the name of the operator
        logmessage( oEnum.item().fullname ) ;
}
// Output of this script is:
//INFO : "sphere.polymsh.bendop"
//INFO : "sphere.polymsh.bulgeop"
//INFO : "sphere.polymsh.geom"

See Also

Primitive.ConstructionHistory Operator