v4.0
ジェネレータ オペレータを適用して、新しく作成されたオペレータを返します (ジェネレータ オペレータは、Loft、CrvStitch、SrfFillet オペレータなど、新しいジオメトリを作成するオペレータです)。新しく生成されるオブジェクトは、以下のいずれかの方法によっても取得できます。
(1)出力引数 OutputObjs を使用する(ほとんどの言語では出力引数と戻り値の両方をうまく扱えないため、VBScript でのみ使用できます。詳細については、後述します)。
(2)まず出力オペレータで Operator.OutputPorts を使用し、次に戻されたコレクションのアイテムで Port.Target2 を使用する(以下の JScript の例で説明します)。
警告: 新しく生成されたオブジェクトを取得するために OutputPorts/Target2 メソッドを使用するときは、パーシスタント モードで適用された場合のみ、オペレータの出力ポートにアクセスできることを忘れないでください(つまり、ターゲット オブジェクトへのポインタを取得するまで、フリーズしないでください)。
汎用の ApplyOp コマンドを使用してジェネレータ オペレータを適用することもできますが、入力オブジェクト(元のジオメトリ)を非表示にしたり削除したりする場合、または新しいジオメトリをポリゴン メッシュにする場合は、このコマンドを使用する必要があります。
注: このコマンドは、出力引数を使用します。C# および一部のスクリプト言語(JScript、PerlScript、Python など)は、リファレンスによって渡される引数をサポートしていません。通常、出力引数は XSIApplication.ExecuteCommand メソッド(C#)または ISIVTCollection (スクリプト言語)を介して取得できますが、このコマンドはすでに値を返しています。
この場合の唯一の回避策は、出力引数と戻り値の両方を 1 つの配列で戻す VBScript のカスタム コマンドを作成することです。詳細については、「関数がすでに値を戻している場合の処理について」を参照してください。
oReturn = ApplyGenOp( PresetObj, [Target], [ConnectionSet], [ConnectType], [ImmediateMode], [GenOpInputsDisposal], [OutputObjs] ); |
新しく作成されたオペレータを含む XSICollection を戻します。
注: イミディエート モード(ただちにオペレータをフリーズするモード)でオペレータを適用すると、適用されたオペレータのコレクションを取得できますが、それらは無効になります(シーン内のどのオペレータにも接続されません)。
パラメータ | タイプ | 説明 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
PresetObj | String またはプリセット オブジェクト(「SIGetPreset」を参照) | ジェネレータ オペレータとコンバータ オペレータ | ||||||||
Target | 文字列 |
以下のサーフェイス - カーブ タイプのオペレータの用の出力サーフェイス ジオメトリ: 「Birail」、「CrvNet」、「Extrusion」、「ExtrusionAlongAxis」、「ExtrusionTwoProfiles」、「FourSided」、「Loft」、「Revolution」、および「RevolutionAroundAxis」 デフォルト値: NurbsSurface
|
||||||||
ConnectionSet | ConnectionSet |
オペレータに接続されるオブジェクトを指定します。 使用している特定のオペレータに必要です。 注: これは入/出力パラメータのため、このパラメータに渡した任意の文字列(変数または値)は、自動的に ConnectionSet に変換されます。 デフォルト値:現在選択されているオブジェクトをメイン グループとして使用 |
||||||||
ConnectType | siBranchFlag |
接続タイプ(ノードまたはブランチ)を指定します。 デフォルト値: siUnspecified |
||||||||
ImmediateMode | siOperationMode |
オペレータを即座にフリーズするかどうかを指定します。 デフォルト値: siPersistentOperation |
||||||||
GenOpInputsDisposal | siGeneratorInputsDisposalMode |
操作を実行した後に入力オブジェクトをどのように扱うかを指定します。 デフォルト値: siKeepGenOpInputs
|
||||||||
OutputObjs | XSICollection | ジェネレータ オペレータによって作成された X3DObject オブジェクトのコレクションを戻します。 |
/* This example demonstrates how to get the newly generated object after applying one of the generator ops with the ApplyGenOp command. It also demonstrates how to extract the newly applied operator object from the special ISIVTCollection which is a workaround for languages like JScript that don't support output arguments. */ NewScene( null, false ); // Use a Nurbs disc to apply the Fit Surface operator var original_3dobject = CreatePrim( "Disc", "NurbsSurface" ); original_3dobject.innerradius.Value = 0.5; Application.LogMessage( original_3dobject.Name + " is a " + ClassName(original_3dobject) ); // Get the ISIVTCollection back from this command. In this example, it contains // only one object (our operator), so we can just use this shortcut // NB: You cannot use siImmediateOperation for the ImmediateMode parameter if you // want to get at the new object, because a frozen operator is invalid. var new_srffit_op = ApplyGenOp( "SrfFit", "NurbsSurface", original_3dobject, siUnspecified, siPersistentOperation, siKeepGenOpInputs, null)(0); Application.LogMessage( new_srffit_op.Name + " is a " + ClassName(new_srffit_op) ); // You can change the operator's parameters to tweak the new surface mesh new_srffit_op.Parameters( "upoints" ).Value = 5; new_srffit_op.Parameters( "upoints" ).Value = 5; new_srffit_op.Parameters( "udeg" ).Value = 1; new_srffit_op.Parameters( "vdeg" ).Value = 1; // You can also get the newly generated object var newly_generated_object = new_srffit_op.OutputPorts(0).Target2.Parent; Application.LogMessage( newly_generated_object.Name + " is a " + ClassName(newly_generated_object) ); // Output of above script: //INFO : disc is a X3DObject //INFO : Fit surface is a Operator //INFO : surfmsh is a X3DObject |
' ' This example demonstrates how to merge two mesh objects together and automatically delete the originals. ' CreatePrim "Grid", "MeshSurface" Duplicate "grid", , 2, 1, 1, 0, 0, 1, 0, 1, , , , , , , , , , , 0 Translate , 8.31067961165049, -8.32607541679225E-18, 0.135979621382887, siRelative, siView, siObj, siXYZ SelectObj "grid", , True AddToSelection "grid1", , True ApplyGenOp "MeshMerge", , , 3, siImmediateOperation, siDeleteGenOpInputs |
' ' This example demonstrates how to create surfaces from curves. It creates two polymsh objects and two ' srfmesh objects from the same input curves. ' NewScene , false Dim oMeshRev, oMeshExt Dim oNurbsRev, oNurbsExt ' Create the two curves to use to create surfaces CreatePrim "Circle", "NurbsCurve" CreatePrim "Circle", "NurbsCurve" SetValue "circle1.circle.radius", 2 Translate "circle1", 7, 0, 0, siAbsolute, siParent, siObj, siX ' Create NURBS surfaces of revolution and extrusion. ApplyGenOp "RevolutionAroundAxis", "NurbsSurface", "circle1", 3, siPersistentOperation, siKeepGenOpInputs, oNurbsRev Translate , 16, 0, 0, siAbsolute, siParent, siObj, siX Translate , 0, 8, 0, siAbsolute, siParent, siObj, siY ApplyGenOp "Extrusion", "NurbsSurface", "circle1;circle", 3, siPersistentOperation, siKeepGenOpInputs, oNurbsExt Translate , 16, 0, 0, siAbsolute, siParent, siObj, siX ' Create Mesh surfaces of revolution and extrusion. ApplyGenOp "RevolutionAroundAxis", "MeshSurface", "circle1", 3, siPersistentOperation, siKeepGenOpInputs, oMeshRev Translate , -12, 0, 0, siAbsolute, siParent, siObj, siX Translate , 0, 8, 0, siAbsolute, siParent, siObj, siY ApplyGenOp "Extrusion", "MeshSurface", "circle1;circle", 3, siPersistentOperation, siKeepGenOpInputs, oMeshExt Translate , -12, 0, 0, siAbsolute, siParent, siObj, siX ' Move a point on input circle to show the effect on all created surfaces from curve. Translate "circle1.pnt[12]", 0.0, 2, 0.0, siRelative, siView, siObj, siXYZ SetDisplayMode "Camera", "shaded" ' Select output and log information about created surfaces. SelectObj oMeshRev,,True AddToSelection oMeshExt,,True AddToSelection oNurbsRev,,True AddToSelection oNurbsExt,,True Application.LogMessage "Mesh Created from Revolution: " & oMeshRev Application.LogMessage "Mesh Created from Extrusion: " & oMeshExt Application.LogMessage "NURBS Created from Revolution: " & oNurbsRev Application.LogMessage "NURBS Created from Extrusion: " & oNurbsExt ' Running this script should log the following: ' --------------------------------------------- 'INFO : "Mesh Created from Revolution: polymsh" 'INFO : "Mesh Created from Extrusion: polymsh1" 'INFO : "NURBS Created from Revolution: surfmsh" 'INFO : "NURBS Created from Extrusion: surfmsh1" |