v1.5
operator
トポロジ オペレータを適用し、戻します。 トポロジ
オペレータは、既存のジオメトリを修正(エッジの追加、削除など)するオペレータです。 たとえば、BridgeEdges、DissolveComponent、および
SubdividePolygon
はすべてトポロジ オペレータの例です。
ヒント: ApplyOp コマンドを使用してトポロジ
オペレータを適用することもできます。
注: このコマンドは、出力引数を使用します。 一部のスクリプト言語(JScript、PerlScript や Python
など)は、リファレンスによって渡される引数をサポートしません。 通常、これらの言語では出力引数を取得するために
ISIVTCollection
を使用できますが、このコマンドはすでに値を戻しているため、その解決策は使用できません(詳細については、「出力引数配列に関するセクション」を参照してください)。
oReturn = ApplyTopoOp( PresetObj, [ConnectionSet], [ConnectType], [ImmediateMode], [OutputObjs], [ConstructionMode] ); |
作成されたオペレータのリストを含む XSICollection を戻します。
注: イミディエート
モード(ただちにオペレータをフリーズするモード)でオペレータを適用すると、適用されたオペレータのコレクションを取得できますが、それらは無効になります(シーン内のどのオペレータにも接続されません)。
パラメータ | タイプ | 詳細 |
---|---|---|
PresetObj | 文字列 またはプリセット オブジェクト(「SIGetPreset」を参照) | トポロジ オペレータ |
ConnectionSet | ConnectionSet | オペレータに接続されるオブジェクトを指定します。 このオペレータに必要な接続セットについては、OpPreset を参照してください。 注: これは入/出力パラメータのため、このパラメータに渡した任意の文字列(変数または値)は、自動的に ConnectionSet オブジェクトに変換されます。 デフォルト値:現在選択されているオブジェクトをメイン グループとして使用 |
ConnectType | siBranchFlag | 接続タイプ(ノードまたはブランチ)を指定します。
デフォルト値: siUnspecified |
ImmediateMode | siOperationMode | オペレータを即座にフリーズするかどうかを指定します。
デフォルト値: siPersistentOperation |
OutputObjs | XSICollection | オペレータによって作成されたプリミティブを戻します。 この時点で、オブジェクトを戻すコマンドはありません。 |
ConstructionMode | siConstructionMode | 「Delete Edge」オペレータを適用するコンストラクション モードを指定します。
デフォルト値:現在のコンストラクション モードを使用 |
' 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]" ) |
// 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 |
/* 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 |