ConstructionHistory

ConstructionHistory

Object Hierarchy

継承

SIObject

ConstructionHistory

説明

このオブジェクトは、PrimitiveオブジェクトのOperatorスタックです。Primitive.ConstructionHistoryプロパティを使用して ConstructionHistory オブジェクトのリストを取得することにより、1 つずつスタックにオペレータを表示できます。

プリミティブのオペレータスタックは、オペレータの順序がオペレータが作成されたときの順序と通常一致するため、「コンストラクションヒストリ」と呼ばれます。ただし、siConstructionModeの概念から、オペレータは既存のオペレータの下に追加される場合があります。

コンストラクションヒストリは、「接続スタック」の概念を一般的にした例の 1 つです(詳細は「DataRepository.GetConnectionStackInfo」を参照)。

注:パフォーマンスを維持するために Item プロパティと Count プロパティは実装されていないため、スタック全体のリストを表示しておき、そのオペレータが目的のオペレータであるかどうかを 1 つずつ確認してください。

メソッド

Filter Find IsClassOfオペレータ IsEqualToオペレータ

プロパティ

Application Categories FullNameオペレータ Help
Nameオペレータ NestedObjects Origin OriginPath
Parent Typeオペレータ    
       

1. VBScript の例

' 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 の例

' 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 の例

//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"

関連項目

Primitive.ConstructionHistory Operator