ApplyGenOp

導入

v4.0

カテゴリ

operator

詳細

ジェネレータ オペレータを適用して、新しく作成されたオペレータを返します (ジェネレータ オペレータは、LoftCrvStitchSrfFillet オペレータなど、新しいジオメトリを作成するオペレータです)。 新しく生成されるオブジェクトは、以下のいずれかの方法によっても取得できます。

(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 文字列 またはプリセット オブジェクト(「SIGetPreset」を参照) ジェネレータおよびコンバータ オペレータ
Target 文字列 以下のサーフェイス - カーブ タイプのオペレータの用の出力サーフェイス ジオメトリ:

「Birail」、「CrvNet」、「Extrusion」、「ExtrusionAlongAxis」、「ExtrusionTwoProfiles」、「FourSided」、「Loft」、「Revolution」、および「RevolutionAroundAxis」

デフォルト値: NurbsSurface

指定可能な値:

説明:

MeshSurface Mesh サーフェイス ジオメトリ
NurbsSurface NURBS サーフェイス ジオメトリ
ConnectionSet ConnectionSet オペレータに接続されるオブジェクトを指定します。 使用している特定のオペレータに必要な接続セットの詳細については、OpPreset を参照してください。

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

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

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

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

デフォルト値: siUnspecified

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

デフォルト値: siPersistentOperation

GenOpInputsDisposal siGeneratorInputsDisposalMode 操作を実行した後に入力オブジェクトをどのように扱うかを指定します。

デフォルト値: siKeepGenOpInputs

指定可能な値:

説明:

siKeepGenOpInputs 入力はそのまま保持されます。
siHideGenOpInputs 入力は非表示になります。
siDeleteGenOpInputs 入力は削除されます。
OutputObjs XSICollection ジェネレータ オペレータによって作成された X3DObject オブジェクトのコレクションを戻します。

1. JScript の例

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

2. VBScript の例

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

3. VBScript の例

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

関連項目

ApplyOperator ApplyOp ApplyTopoOp ApplyHairOp ジェネレータおよびコンバータ オペレータ