ApplyTopoOp

導入

v1.5

詳細

トポロジ オペレータを適用し、戻します。 トポロジ オペレータは、既存のジオメトリを修正(エッジの追加、削除など)するオペレータです。 たとえば、BridgeEdges、DissolveComponent、および SubdividePolygon はすべてトポロジ オペレータの例です。

ヒント: ApplyOp コマンドを使用してトポロジ オペレータを適用することもできます。

注: このコマンドは、出力引数を使用します。 一部のスクリプト言語(JScript、PerlScript や Python など)は、リファレンスによって渡される引数をサポートしません。 通常、これらの言語では出力引数を取得するために ISIVTCollection を使用できますが、このコマンドはすでに値を戻しているため、その解決策は使用できません(詳細については、「出力引数配列に関するセクション」を参照してください)。

スクリプト構文

oReturn = ApplyTopoOp( PresetObj, [ConnectionSet], [ConnectType], [ImmediateMode], [OutputObjs], [ConstructionMode] );

戻り値

作成されたオペレータのリストを含む XSICollection を戻します。

注: イミディエート モード(ただちにオペレータをフリーズするモード)でオペレータを適用すると、適用されたオペレータのコレクションを取得できますが、それらは無効になります(シーン内のどのオペレータにも接続されません)。

パラメータ

パラメータ タイプ 説明
PresetObj String またはプリセット オブジェクト(「SIGetPreset」を参照) トポロジ オペレータ
ConnectionSet ConnectionSet オペレータに接続されるオブジェクトを指定します。

注: これは入/出力パラメータのため、このパラメータに渡した任意の文字列(変数または値)は、自動的に ConnectionSet オブジェクトに変換されます。

デフォルト値:現在選択されているオブジェクトをメイン グループとして使用

警告: 接続セットが無効だと、エラーが発生します。 スクリプトの中断を防ぐため、このオペレータに必要な接続セットを確認してください。

ConnectType siBranchFlag 接続タイプ(ノードまたはブランチ)を指定します。

デフォルト値: siUnspecified

ImmediateMode siOperationMode オペレータを即座にフリーズするかどうかを指定します。

デフォルト値: siPersistentOperation

OutputObjs XSICollection オペレータによって作成されたプリミティブを戻します。 この時点で、オブジェクトを戻すコマンドはありません。
ConstructionMode siConstructionMode 「Delete Edge」オペレータを適用するコンストラクション モードを指定します。

デフォルト値:現在のコンストラクション モードを使用

1. VBScript の例

' Collapse some vertices on a polygon mesh.

dim obj, op

set obj = CreatePrim( "Grid", "MeshSurface" )

set op = ApplyTopoOp( "Collapse" , "grid.pnt[30-32,39-41,48-50]" )

2. JScript の例

// Example demonstrating how to get use ApplyTopoOp

// to create an operator and retrieve it from the return value.

NewScene( null, false );

// Get a pointer to the internal object database. 

var objdata = XSIUtils.DataRepository;

// Apply the Collapse operator in ImmediateMode to see what gets returned.

var obj = CreatePrim( "Grid", "MeshSurface" );

var ops = ApplyTopoOp( "Collapse" , obj + ".pnt[30-32,39-41,48-50]", null, siPersistentOperation);

// Because we only apply to a single object we only expect a 

// single item in the XSICollection.  But

// it is a good habit to use a "for" loop

// to go through all elements.

for (var i=0; i<ops.Count; i++) {

	logmessage( "New Operator: " + ops(i).Name +

		 ", Type: " + ops(i).Type + 

", ClassName: " + ClassName( ops(i) ) ) ;

}

// Output of above script:

//INFO : New Operator: Collapse Op ,Type: collapseop, ClassName: Operator

3. JScript の例

/*

	This example demonstrates what gets returned when you apply and freeze a TopoOp with the 

	ApplyTopoOp command in siImmediateOperation mode. 

	The command still returns a pointer to the operator, but, unlike the

	example above, it no longer exists in the scene, so you can't do anything with it.

	The tricky part is testing the returned object to see whether it is valid or not. Normally you can 

	test the class or type to determine its validity; however, these operators will tell you

	that they are Operator objects (Application.ClassName). The Type property

	returns an empty string, which you can also use to test for an operator's validity, but

	this example uses the DataRepository object instead.

	The DataRepository object is an internal database which keeps track of objects in Softimage. It

	holds the ID for each object in the system which you can retrieve with the GetIdentifier

	method.

	Note: This example is only provided to illustrate what to expect from an XSICollection 

	containing frozen operators. Normally, you would not be interested in the returned value

	of an apply-and-freeze-operator operation.

*/

NewScene( null, false );

// Get a pointer to the internal object database. 

var objdata = XSIUtils.DataRepository;

// Apply the Collapse operator in ImmediateMode to see what gets returned.

var obj = CreatePrim( "Grid", "MeshSurface" );

var ops = ApplyTopoOp( "Collapse" , obj + ".pnt[30-32,39-41,48-50]", null, siImmediateOperation );

for (var i=0; i<ops.Count; i++) {

	// Normally this returns 'collapseop'

	logmessage( "Type returns: '" + ops(i).Type + "'" );

	// Wrap the call to DataRepository.GetIdentifier in a try-catch block because it will

	// throw an error if the object is invalid (if it's valid, you would see a GUID)

	try {

		logmessage( objdata.GetIdentifier(ops(i), siObjectGUID) );

	} catch(e) {

		logmessage( "object is not valid" );

	}

}

// Output of above script:

//INFO : Type returns: ''

//INFO : object is not valid

関連項目

ApplyOperator ApplyOp ApplyGenOp ApplyHairOp