次のメソッドは、ノードから派生した任意の値に適用できます。
ほとんどのノード メソッドは、ノードのコレクションに自動的にマップされます。
IsValidNode <var>
<var>
がノード値で、ノードが削除されていない場合は true
を返します。それ以外の場合は false
を返します。
move <node> <point3> -- mapped
scale <node> <point3> -- mapped
rotate <node> <angle> <axis_point3> -- mapped -- angle in degrees
rotate <node> <quat> -- mapped
rotate <node> <eulerangles> -- mapped
変換操作はいずれも、現行の作業座標系で行われます。「コンテキスト式」を参照してください。
copy <node> -- mapped
reference <node> -- mapped
instance <node> -- mapped
すべてのクローン操作には、標準のノード作成用のオプションのキーワード引数を指定できます。このキーワード引数は、ノードがコピーされた後に適用されます。
これらの関数は、オリジナルのノードの変換コントローラとキーのすべてについてクローンを作成し、かつ可視トラックが割り当てられている場合には可視コントローラおよびそのキーのクローンを作成します。
snapshot <node> -- mapped
この関数は、3ds Max のスナップショット ツールと同様の機能を持ちます。スナップショットが作成されるときに、ソース <node>
のワールド状態メッシュのコピーを含む新しいノードを生成します。既存のモディファイヤはすべて新しいノードから集約され、メッシュ スナップショットには、現在適用されているすべてのスペース ワープが反映されます。クローン メソッド(コピー、リファレンス、インスタンス)については、pos:
、name:
などのすべての標準ノード作成キーワード引数を追加できます。
次の例では、3ds Max のスナップショット ツールと同様のアニメーション ベースのスナップショットが得られます。
例:
for t in 0 to 100 do at time t snapshot $foo
delete <node> -- mapped
指定したノードを削除します。
instanceReplace <dest_node> <src_node> -- mapped
referenceReplace <dest_node> <src_node> -- mapped
既存のノードをインスタンス、および他のノードへの参照にします。たとえば、これを使ってあるノードのジオメトリを別のノードのものに置換して、カスタムの詳細レベル ツールを実装することができます。
<dest_node>
は、インスタンスまたは <src_node>
への参照に変換されます。新しいインスタンスの場合、既存のジオメトリとモディファイヤは削除され、<src_node>
に置き換えられますが、ノード関連のプロパティ(マテリアル、変換、可視性、名前など)はすべて保持されます。新しい参照として、<dest_node>
の基本オブジェクトは、<src_node>
のワールド状態になるため、src_node
の変更はすべての <dest_node>
に影響しますが、<dest_node>
の変更はローカルに適用されます。
これらの関数と mergeMAXFile()
関数を使用してファイル/置換関数のカスタム スクリプト バージョンを作成できます。この場合、現在のシーンにあるノードの名前を一時的に変更し、次にその指定されたノードに別のノードを合成します。新しく合成されたノードのインスタンスを instanceReplace()
を使って最初のノードに設定し、新しく合成されたノードを削除して前のノードの名前に戻します。
これらの関数はどちらもコレクション マップ型であるため、オブジェクト(すべてのインスタンス)から選択するか、同じオブジェクトを参照することができます。
例:
instanceReplace $foo* $baz --makes all the foo* objects be instances of baz's geometry --and modifier stack.
areNodesInstances <node> <node>
2 つのノードがインスタンスの場合、true
を返します。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
例:
InstanceMgr.GetInstances $ &rptInstances trueInstances = for n in rptInstances where\ (areNodesInstances $ n) collect n
attachObjects <node1> <node2> [move:<boolean> ]
<node2>
を <node1>
の子にします。move:false
が指定されていない場合、<node2>
の現在の位置を <node1>
にリセットします。
getTMController <node>
ノードの変換コントローラを返します。
bindSpaceWarp <node> <spacewarp_node>
シーン ノードをスペース ワープ オブジェクトのシーン ノードにバインドします。スペース ワープをバインドしたものはモディファイヤ スタックに表示され、他のモディファイヤと同じようにアクセスできます。スペース ワープからオブジェクトのバインドを解除するには、deleteModifier() 関数を使用します。モディファイヤ スタックを使った操作の詳細は、「モディファイヤおよび SpacewarpModifier」を参照してください。
getPolygonCount <node>
2 つの要素の配列を返します。最初の要素はノードの現在の面の数、2 番目の要素はノードの現在の頂点の数です。返された面と頂点の数は、ノードをメッシュ オブジェクトに変換した場合に存在する数です。
isShapeObject <node>
ノードがシェイプ オブジェクトの場合は true
を返し、その他の場合は false
を返します。
numSurfaces <node>
オブジェクトのパラメトリック サーフェスの数を返します。現時点では、複数のサーフェスを持つオブジェクトは Loft オブジェクト(ドーナツ形状のロフト)のみです。
isSurfaceUVClosed <node> <surface_index_integer>
パラメトリック サーフェスが U 次元と V 次元において閉じているかどうかを示す 2 つの要素の配列を返します(円環体は U 次元と V 次元の両方において閉じています)。すべてのオブジェクトにこのメソッドが実装されているわけではないことに注意してください。そのような場合は既定値の #(true, true)
が返されます。
getTransformAxis (<node>|undefined) <index>
ノードのインデックス付き軸システムの変換軸を <matrix3>
値で返します。通常、ノードの変換軸は 1 つだけです。ただし、ノードがローカル参照座標系にある場合、オブジェクト SO モードの場合、複数の SO が選択されている場合などは、複数の変換軸が存在します。インデックス > 変換軸の数の場合は、最初の変換軸の変換が返されます。
最初の引数がノードではなく「undefined」という値である場合、ビューポートの共通の軸が返されます。座標系の中心(getCoordCenter())が #local であるか、 参照座標系(getRefCoordSys())が #local、#parent、#gimbal である場合、最後に計算された共通の軸を返します。
このメソッドによって返された変換を「in coordsys」コンテキストおよび「about」コンテキストで使用して、現在の 3ds Max UI 参照座標系の中心のまわりで、オブジェクトの移動、回転、およびスケールを行うことができます。
例:
fn axisRotate obj rotation = ( local axis local objA =if classof obj == objectSet or classof obj == array then obj else #(obj) if getCoordCenter() != #local then ( axis = getTransformAxis objA[1] 0 for obj1 in objA do in coordsys axis about axis rotate obj1 rotation ) else ( for obj1 in objA do ( axis = getTransformAxis obj1 0 in coordsys axis about axis rotate obj1 rotation ) ) )
invalidateTM <node> -- mapped
ノードの変換行列キャッシュを無効にします。
invalidateTreeTM <node> -- mapped
ノードの変換行列キャッシュを無効にし、変換行列が変更されたことをノードのサブツリーに通知します。
次の MAXScript 関数は、変換がスクリプト コントローラ(位置トラック上のスクリプト コントローラなど)によって部分的にコントロールされるオブジェクトを強制的に更新する場合に使用できます。
例:
mapped fn TMInvalidate obj = ( at time(currenttime-1) obj.transform nodeInvalRect obj invalidateTreeTM obj redrawViews() )
getNodeTM {<node> | <rootnode>}
指定されたノードまたはルート ノードの変換行列を Matrix3value として返します。ルート ノードは外部参照シーンのオブジェクトのルート ノードである場合があります。3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
invalidateWS <node> -- mapped
ノードのワールド空間キャッシュを無効にします。
getNodeByName <string> exact:<boolean> ignoreCase:<boolean> all:<boolean>
指定された名前を持つ最初のノードを返します。exact
が false(既定値)である場合、通常の MAXScript ノード名の比較が行われます。
ignoreCase
は、比較するときに大文字と小文字を区別するかどうかを指定します。true に設定すると、大文字と小文字を区別しない比較が実行されます。
all
が true の場合、指定された名前のノードの配列が返されます。
既定値は exact:false ignoreCase:true all:false
です。
getnodebyname "AA"
」と指定すると、[高速ノード名ルックアップ](Fast Node Name Lookup)がオンになっていれば「AA」が返されます。高速ノード名ルックアップがオフになっている場合、どちらのノードも条件に合うため、どちらかのノードが返されることになります。例:
--If you have a scene with 3 nodes: "AA", "aa", and "B B": $AA $Box:AA @ [...] $aa $Teapot:aa @ [...] $bb Sphere:B B @ [...] getnodebyname "AA" exact:true $Box:AA @ [...] getnodebyname "AA" exact:false $Box:AA @ [...] getnodebyname "AA" ignoreCase:true $Box:AA @ [...] getnodebyname "AA" ignoreCase:false $Box:AA @ [...] getnodebyname "Aa" exact:true $Box:AA @ [...] getnodebyname "Aa" exact:false $Box:AA @ [...] getnodebyname "Aa" ignoreCase:true $Box:AA @ [...] getnodebyname "Aa" ignoreCase:false undefined getnodebyname "aa" exact:true $Teapot:aa @ [...] getnodebyname "aa" exact:false $Teapot:aa @ [...] getnodebyname "B B" exact:true $Sphere:B B @ [...] getnodebyname "B_B" exact:true undefined getnodebyname "BB" exact:true undefined getnodebyname "B_B" exact:false $Sphere:B B @ [...] getnodebyname "BB" exact:false $Sphere:B B @ [...] getnodebyname "AA" all:true #($Teapot:aa @ [...], $Box:AA @ [...])
snapshotAsMesh <node>
ノードのワールド状態を <mesh>
値で返します。
getInheritanceFlags <node>
setInheritanceFlags <node> (#all|#none| <bitarray>) keepPos:<boolean>-- mapped
指定されたノードの継承フラグを <bitarray>
で取得および設定します。
ビットがオンの場合、対応する継承はオンになります。ビットの順序は、#{POS_X,POS_Y,POS_Z,ROT_X,ROT_Y,ROT_Z,SCALE_X,SCALE_Y,SCALE_Z} です。
keepPos:false
が指定されている場合は、継承がオンまたはオフになったときにノードが移動することがあります。
getTransformLockFlags <node> -- mapped
setTransformLockFlags <node> (#all|#none| <bitarray>)-- mapped
指定されたノードの変換ロックフラグを <bitarray>
で取得および設定します。
ビットがオンの場合、対応する継承ロックはオンになります。ビットの順序は、#{POS_X,POS_Y,POS_Z,ROT_X,ROT_Y,ROT_Z,SCALE_X,SCALE_Y,SCALE_Z} です。
#all
を指定すると、すべてのロックがチェックされます。
#none
を指定すると、すべてのロックがチェックされません。
例については、「チュートリアル - 変換ロック スクリプトの開発」を参照してください。
classOf <node>
ノードのワールド状態(スタックのトップにおけるノードの状態)のクラスを返します。基本オブジェクトにモディファイヤが適用されていない場合、返されるクラスは基本オブジェクトのクラスになります。基本オブジェクトにモディファイヤが適用されている場合は、返されるクラスはノードが最後のモディファイヤを終了するときのクラスになります。たとえば、ボックスにベンド モディファイヤを適用した場合、ベンド モディファイヤにより入ってくるボックス プリミティブがメッシュに変換され、classOf
によって返されたクラスは Editable_Mesh となります。classOf <node>.baseObject
を使用して、すべての場合に基本オブジェクトのクラスを取得できます。
isPointSelected <node> <point_index>
指定したポイントが選択されている場合は true を返し、選択されていない場合は false を返します。
「ポイント」の定義は、オブジェクト タイプによって異なります。
メッシュの場合はメッシュの頂点、
NURBS オブジェクトの場合は頂点やコントロール ポイントになります。
スプラインの場合は、ノットとその入出力ベジェ ハンドルになります。スプラインには 3 倍のノットが含まれ、ノットが選択されると、そのベジェ ハンドルも選択されたとみなされます。したがって、正しいノット値をクエリーするには、<point_index>
に 3 を乗算する必要があります。たとえば、編集可能スプラインのノット 1 が選択され、ノット 2 が選択されていない場合、インデックス 1、2、3 では True が返されますが、インデックス 4、5、6 では False が返されます。
pointSelection <node> <point_index>
オブジェクトがソフト選択をサポートしている場合は、選択したポイントに重みを付けた浮動小数点数を返します。ほとんどのオブジェクト タイプは、ポイントが選択されている場合に 1.0 を返し、選択されていない場合は 0.0 を返します。現在、重み付きポイントの選択がサポートされているのは、NURBS、編集可能メッシュ、および編集可能ポリゴン オブジェクトのみです。
nodeInvalRect <node>
ノードが占めているビューポート内の長方形を無効にします。無効としてフラグ設定された長方形は、次に画面が再描画されるときに更新されます。
stopCreating <node>
このメソッドは現在のオブジェクトの作成を中止します(作成中の場合)。このメソッドは、主に NURBS オブジェクトが完全に作成されている(作成が中止されるまで)ことを確認する目的で使用されます。また、このメソッドは、[作成] (Create)パネルでアクティブになっているオブジェクト作成用の各ボタンを非アクティブにします。
関連するメソッド
uniqueName <prefix> [numDigits:<integer>]
シーン内にオブジェクトを作成する場合に 3ds Max で行われるのと同様の方法で、一連の桁数を追加することによってプレフィックス文字列から一意のシーン ノード名を生成します。この名前は、次のシーン ノードが生成されるまでの間に限り、その固有性が保証されます。
3ds Max 2011 以降で使用できるオプションのキーワード引数 numDigits:
で、使用する桁数をコントロールします。
この値が提供されない場合、3ds Max 2011 以降のバージョンでは既定値として 3 桁に設定されます。
3ds Max 2011 以前のリリースではこの桁数は 2 でした。
例
$Box001.name = uniqueName "MyRenamedBox" -->"MyRenamedBox001"