値 > MAXWrapper > ノード |
次のプロパティとメソッドは、ノードから派生した任意の値に適用できます。
トピック ナビゲーション | |
---|---|
コンストラクタ:
<non_wild_card_pathname>
シーンにおいて一意のノードを識別します。
<objectset>[<integer>] <wild_card_pathname>[<integer>]
コレクションにおける n 番目のシーン オブジェクトです。
<node_constructor> [name: <string> ] \ [ prefix: <string> ] \ [ material: <material> ] \ [ target: <node> ] \ [ pos: <point3> ] \-- default [0,0,0] [ position: <point3> ] \-- synonym for pos [ rotation: <quat> ] \-- default 0 rotation [ scale: <point3> ] \-- default 100% scale [ pivot: <point3> ] \-- default normal node pivot location [ transform: <matrix3> ] \-- default identity [ isSelected: <boolean> ] \-- default false [ dir: <point3> ]-- set local z direction
「coordsys grid」が現在使用中の座標系の場合、位置と回転の値は現在のアクティブ グリッドに対する相対値になります。
<node_constructor> は、「ノードのサブクラス」でリストされているボックス、球、QuadPatch、SplineShape などのシーン ノード クラスのいずれかです。
例: |
b = box name:"foo" position:[10,10,10] height:20 |
すべてのノード コンストラクタには、上記のオプションのキーワード引数を指定でき、さらに一般ノード プロパティまたは特定のノード クラスのプロパティもキーワード引数として指定できます。
name キーワードは、作成したノードの名前の指定に使用できます。3ds Max では、複数のノードに同じ名前を使用できます。
prefix キーワードは、キーワード引数 name の場所に使われて、ノード名の開始部分を指定します。3ds Max は、これをもとにオブジェクトをインタラクティブに作成するときのように、一連の桁を付け加えて一意の名前を生成します。
例: |
for i in 1 to 100 do sphere prefix:"baz" --creates 100 spheres, giving each a unique name --beginning with "baz", such as $baz001, $baz002, $baz003, etc. |
material キーワードを使用すると、作成したノードに指定したマテリアルを適用できます。
target キーワードを使用すると、自動的にノードの変換トラックにルックアット コントローラが適用され、指定したノードがルックアット ターゲットとして設定されます。
変換引数 pos 、 scale 、 rotation 、および pivot は、コンストラクタの呼び出しで指定されている順番で新しいオブジェクトに適用されるため、ユーザは変換の順序をコントロールできます。 pos 、 scale 、 rotation 引数は、代替手段として 1 回の実行でノードの完全な変換行列を設定可能な transform 引数と相互に排他的です。
target キーワードを指定した場合は注意が必要です。ターゲット オブジェクトを指定すると、ターゲット オブジェクトと、ターゲットの元になる最後のオブジェクトが共に 3ds Max に格納されます。そのターゲット オブジェクトを削除すると、参照元のオブジェクトも削除されます。ターゲット オブジェクトが targetobject クラスのオブジェクトの場合、参照元のオブジェクトを削除すると、ほかのオブジェクトがターゲット オブジェクトを参照している場合でも、そのターゲット オブジェクトは削除されます。
3ds Max 4では、「selection」および「$」オブジェクト セットの反復とインデックス処理のパフォーマンスが大幅に改善されました。3ds Max 4 以前のバージョンでは、インデックス処理、反復処理、または配列へのスナップショットの取り込みを行う場合、選択されたノードを検索するのにシーン全体が走査されたため、サイズの大きなシーンでは大きな遅延を引き起こしていました。バージョン 4 の「selection」オブジェクト セットは、SDK の明示的な現在の選択への直接アクセスを使用します。
プロパティ
シーン ノードでアクセス可能なプロパティの詳細は、「一般的なノードのプロパティ」および「ノード変換プロパティ」を参照してください。
メソッド
ほとんどのノード メソッドは、ノードのコレクションに自動的にマップされます。
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> への参照になります。
<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:<bool> ignoreCase:<bool> all:<bool>
指定された名前を持つ最初のノードを返します。 exact が false(既定値)である場合、通常の MAXScript ノード名の比較が行われます。
ignoreCase は、比較するときに大文字と小文字を区別するかどうかを指定します。true に設定すると、大文字と小文字を区別しない比較が実行されます。
all が true の場合、指定された名前のノードの配列が返されます。
既定値は exact:false ignoreCase:true all:false です。
例: |
--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 を指定すると、すべてのロックがチェックされません。
例については、「チュートリアル - 変換ロック スクリプトの開発」を参照してください。
getVisController <node>
ノードの可視性コントローラのインスタンスを返します。ノードに可視トラックがない場合は undefined を返します。
getInheritVisibility <node>
親オブジェクトが存在し、ノードが親の可視性を継承する場合は true を返し、その他の場合は false を返します。
setInheritVisibility <node> <boolean>
親オブジェクトが存在し、ノードが親の可視性を継承するかどうかを設定します。 <boolean> が true の場合、ノードは可視性を継承します。 <boolean> が false の場合、ノードは可視性を継承しません。
getImageBlurMultController <node>
ノードのイメージ モーション ブラー マルチプライヤ コントローラを返します。ノードにイメージ モーション ブラー マルチプライヤ コントローラが割り当てられていない場合は、undefined を返します。
setImageBlurMultiplier <node> <time> <number>
ノードのイメージ モーション ブラー マルチプライヤ値を指定した時間に指定した値に設定します。
setImageBlurMultController <node> <controller>
ノードのイメージ モーション ブラー マルチプライヤ コントローラを指定したコントローラに設定します。
setMotBlur <node> <integer>
ノードに対してどのタイプのモーション ブラーを使用するかを設定します。 <integer> が 1 の場合は、なしです。 <integer> が 2 の場合は、オブジェクト モーション ブラーです。 <integer> が 3 の場合は、イメージ モーション ブラーです。
setRenderable <node> <boolean>
ノードがレンダリング可能かどうかを設定します。 <boolean> が true の場合、ノードはレンダリング可能です。 <boolean> が false の場合、ノードはレンダリングできません。
getRenderID <node>
ノードの RenderID を返します。シーンがまだレンダリングされていない場合、またはノードがレンダリング不可能の場合は、65535 という値が返されます。ノードの RenderID とは、レンダラーによる NODE_RENDER_ID G-バッファ チャネルへの出力です。
setRenderID <node> <integer>
ノードの RenderID を指定した値に設定します。この値は、「スティッキー」ではありません。つまり、シーンとともに保存されることはなく、次にレンダリングを行うときにレンダラーによって置き換えられます。
group <node_collection> [name:<string> ] [prefix:<string> ] [select:<boolean> ]
指定したノードのグループを作成し、グループ ノードを返します。オプションで、グループ名またはグループ名のプレフィックスを指定することもできます。グループ名やグループ名のプレフィックスを指定しないでおくと、一意のグループ名を確実に割り当てることができます。 select:true を指定すると、作成後にグループが選択されます。
result = group $box* if (isvalidnode result) do ...
例: |
group $box* name:"boxes"--makes a group of all box*'s named "boxes". group selection--groups current selection. |
ungroup <group_head_node> -- mapped
グループ ノードの 1 レベルをグループ解除します。
例: |
ungroup $group001--ungroups group $group001 |
explodeGroup <group_head_node> -- mapped
グループ ノード内のすべてのレベルをグループ解除します。
attachNodesToGroup <node_collection> <targetNode>
ノード コレクションを既存のグループにアタッチします。既にグループのメンバーの場合は他のグループにアタッチできません。
<ノード_collection> は、targetノード のグループにアタッチするノードの配列です。
<targetノード> は、グループ メンバー、またはグループ ヘッドのノードでなければいけません。<ノードCollection> のメンバーにはなれません。
3ds Max 2010 以降 で使用可能です。
detachNodesFromGroup <node_collection>
所属したグループから指定されたノードをデタッチします。
<node_collection>は、グループ ヘッドからデタッチされたノードの配列です。<nodeCollection> のメンバーは、グループ メンバーを開きます。
3ds Max 2010以降 で使用可能です。
isGroupHead <node>
ノードがグループ ヘッドの場合は true を返し、その他の場合は false を返します。
isOpenGroupHead <node>
<node> がグループのヘッドで、そのグループが開かれている場合は true を返します。
isGroupMember <node>
ノードがグループ内にある場合は true を返し、その他の場合は false を返します。
isOpenGroupMember <node>
<node> がグループのメンバで、そのグループが開かれている場合は true を返します。
setGroupOpen <group_head_node> <boolean>
グループを開くか、閉じるかを設定します。 <boolean> が true の場合、グループは開いた状態として設定されます。 <boolean> が false の場合、グループは閉じた状態として設定されます。
警告: |
次のメソッドを使用するときには、十分注意してください。 3ds Max ユーザ インタフェースからは設定できない状態にノードを設定できます。 |
setGroupMember <node> <boolean>
ノードをグループ メンバとするかどうかを設定します。 <boolean> が true の場合は、ノードはグループ メンバとして設定されます。 <boolean> が false でノードがグループ メンバの場合は、ノードはグループ メンバではないように設定されており、グループ ヘッドとリンクされていません。
このメソッドを使用してノードをグループ メンバとして設定した場合は、このノードをグループ ヘッドの子として設定する必要があります。この設定を行わないと、ノード名は[名前による選択](Select By Name)ダイアログ ボックスに表示されません。
例: |
setGroupHead $dummy001 true append $group003.children $dummy001 |
setGroupHead <node> <boolean>
ノードをグループ ヘッドとしてフラグ設定するかどうかを設定します。 <boolean> が true の場合は、ノードはグループのヘッドとしてフラグ設定されます。 <boolean> が false の場合は、ノードはグループのヘッドではないように設定されます。
このメソッドを使用して、ノードをグループ ヘッドとしてフラグ設定した場合、ノードのメッシュはビューポートには表示されず、プロパティも[修正](Modify)パネルに表示されません。このメソッドを使用して、グループ ヘッドであるノードをグループ ヘッドでないようにフラグ設定すると、グループに対して[グループ](Group)メニューの[開く](Open)または[分解](Explode)コマンドを実行することはできません。
例: |
-- create a set of spheres, group them, and test group head and member of group mySpheres=for i = 1 to 5 collect sphere pos:(random [-100,-100,0] [100,100,0]) group MySpheres name:"MyGroup" isGroupHead $MyGroup-- returns true isGroupMember $sphere001-- returns true -- check to see if group is open. Open group and test member of group isOpenGroupHead $MyGroup-- returns false setGroupOpen $MyGroup true isOpenGroupMember $sphere001-- returns false -- create a new set of spheres, append the group to the set, and then group them all NewSpheres=for i= 1 to 3 collect sphere pos:(random [-100,-100,0] [100,100,0]) append NewSpheres $MyGroup group NewSpheres name:"BiggerGroup" -- open the group head, test member of group, and then close the groups. setGroupOpen $BiggerGroup true isOpenGroupMember $MyGroup setGroupOpen $MyGroup false setGroupOpen $BiggerGroup false |
hide <node> -- mapped
指定したノードまたはノード コレクションを非表示にします。
unhide <node> [doLayer:<boolean>] -- mapped
指定したノードまたはノード コレクションを表示します。
オプションの doLayer キーワードを true に設定して、そのノードを非表示のレイヤに配置すると、レイヤ全体が表示されます。 false (既定値)の場合は、ノードが表示されるだけです。
freeze <node> -- mapped
指定したノードまたはノード コレクションをフリーズします。
unfreeze <node> [doLayer:<boolean>] -- mapped
指定したノードまたはノード コレクションをフリーズ解除します。
オプションの doLayer キーワードを true に設定して、そのノードをフリーズされたレイヤに配置すると、レイヤ全体がフリーズ解除されます。false (既定値)の場合は、ノードがフリーズ解除されるだけです。
flagForeground <node> <boolean> -- mapped
ビューポートのフォアグラウンド/バックグラウンド面におけるシーン ノードの状態を設定します。これにより、特定のノードに対してインタラクティブに操作できます。フォアグラウンド平面に配置されたノードは個別に再描画されるため、スクリプトで書かれたロールアウト パネルでスピナーからそのノードをインタラクティブに変更する作業は、大幅に高速になります。
ブール値の引数が true の場合には、シーン ノードをフォアグラウンド平面に配置します。 false の場合には、バックグラウンド平面に配置します。フォアグラウンド平面にあまり多くのオブジェクトを配置するとフォアグラウンド平面のパフォーマンスが低下しますので、フォアグラウンド平面にノードを配置する場合には十分注意してください。オブジェクトをインタラクティブにコントロールする必要がなくなった場合には、オブジェクトのフラグを解除するようにしてください。
getTrajectoryOn <node>
ノードの軌道が表示された場合は true を返し、その他の場合は false を返します。
setTrajectoryOn <node> <boolean>
ノードの軌道を表示するかどうかを設定します。 <boolean> が true の場合、軌道は表示されます。 <boolean> が false の場合、軌道は表示されません。
isBoneOnly <node>
ノードの showLinksOnly プロパティが true の場合、 true を返します。
getCVertMode <node>
シェーディングされたビューポート内の頂点カラーを使用してノードが表示された場合は true を返し、その他の場合は false を返します。
setCVertMode <node> <boolean>
シェーディングされたビューポート内で、ノードに割り当てられた頂点カラーの効果を表示するかどうかを設定します。 <boolean> が true の場合は、ノードは頂点カラーを使用して表示されます。 <boolean> が false の場合は、ノードはマテリアルまたはワイヤフレームのカラーで表示されます。
getShadeCVerts <node>
ノードの頂点カラーの表示がビューポートでシェーディングされている場合は true を返し、その他の場合は false を返します。
setShadeCVerts <node> <boolean>
ビューポート内でノードの頂点カラーの表示をシェーディングするかどうかを設定します。 true の場合、カラーはシェーディングされず、純粋な RGB 値で表示されます。 false の場合、カラーはビューポートに割り当てられた他のカラーと同じように表示されます。
select <node> -- mapped
現在選択されているオブジェクトをすべて選択解除し、指定したノードを選択します。
selectMore <node> -- mapped
選択されているオブジェクトのセットに、ノードを追加します。選択オブジェクトのセットをループ内で最初から作成する場合は、 clearSelection() を使用してループに入る前に選択を解除し、ループ内で selectMore() を使用して、選択オブジェクトのセットにオブジェクトを追加できます。
clearSelection() clearNodeSelection [redraw:<boolean> ]
現在選択されているシーン ノードをすべて選択解除します。 redraw:false が指定されている場合を除いて、シーンは再描画されません。
deselect <node>-- mapped
指定されたノードを選択解除します。
例: |
deselect $box*--deselects all items whose names start with "box". |
deselectNode <node>
単独のノードの選択を解除します。
validModifier [<node> | <objectset> | <group> ] <modifier |modifier_class>
指定された <node> または、オブジェクト セットやグループ内のすべてのオブジェクトに特定のモディファイヤまたはモディファイヤ クラスが追加できるかどうかをテストします。追加できる場合は true を返し、追加できない場合は false を返します。
validModifier() メソッドは、モディファイヤの適用性を判断するときには[修正](Modify)パネルと同様に機能します。変形可能なオブジェクトを受け入れるモディファイヤはすべて、ヘルプ以外のすべてのシーン オブジェクトに対して true を返します。これは、[ベンド](Bend)、[テーパ](Taper)などのモディファイヤを、ライト、カメラ、スペース ワープ オブジェクトなどの他に、ボックス、球などのジオメトリ タイプに対して適用できるようにする一方で、ダミーやボーンなどのヘルパーには適用できない修正パネルの動作に対応します。
validModifier() メソッドは、空の <objectset> が指定されるか、または <group> が指定されたグループのすべてのメンバに対応するモディファイヤが有効になっている場合は、 true を返します。このような場合、 addModifier() メソッドを使ったモディファイヤの適用は失敗します。これは、 <objectset> が空である(最初のケース)か、グループの各オブジェク の親オブジェクトであるダミー オブジェクトにモディファイヤを適用できないためです。これらの条件については、スクリプトや「修正パネル」で説明されている modPanel.addModToSelection() メソッドを使ってテストする必要があります。
addModifier <node> <modifier> [before:index] -- mapped
関数が適用されるノードのすべての インスタンスにモディファイヤを追加します。オプションの before: キーワード引数を使用して、ノードのモディファイヤ スタックの最上位から見てインデックス付けされたモディファイヤの直前の位置にモディファイヤを挿入できます。
3ds Max 3 以降、 addModifier() では、モディファイヤを追加するときに、モディファイヤ スタック内でアクティブである可能性のあるサブオブジェクト選択は保持されなくなりました。モディファイヤを追加すると同時にサブオブジェクト選択を保持する必要のある場合は、「[修正](Modify)パネル」で説明されている modPanel.addModToSelection() メソッドを使用します。
<node> がコレクションの場合、モディファイヤのインスタンスはコレクション内のすべてのノードに配置されます。インタラクティブにモディファイヤを選択に対して適用するのとは異なり、各モディファイヤ インスタンスのギズモの位置とサイズは、モディファイヤ インスタンスを適用するノードの位置とサイズに対応します。3ds Maxがモディファイヤを適用するときと同じ方法で、コレクションにモディファイヤを適用するには、「[修正](Modify)パネル」で説明されている modPanel.addModToSelection() メソッドを使用します。
詳細は、「モディファイヤ および SpacewarpModifier」 を参照してください。
addModifierWithLocalData <destnode> <dest modifier> <srcnode> <src modifier_or_index> [before:index]
このメソッドは、ローカルデータ(頂点の位置などの修正を含む)などの既存のモディファイヤをターゲット ノードにコピーします。2 つのモディファイヤは同じタイプである必要があります。ソースのローカル データがある場合は、このクローンが作成されて、ターゲット モディファイヤにアタッチされます。ソース モディファイヤにローカル データがない場合は、ターゲット モディファイヤに既定のローカル データの内容が格納されます(addModifier() メソッドで追加された場合と同様)。
deleteModifier <node> <modifier_or_index> -- mapped
モディファイヤ スタックからモディファイヤを削除できます。 <node> スタックに存在するモディファイヤの値を取るか、またはインデックスを取り、スタックの最上位から見て削除するモディファイヤのインデックスを指定します。
collapseStack <node> -- mapped
スタックからモディファイヤを集約して、スタックの最上位のノードのクラスに対応する編集可能基本オブジェクトを残します。これを呼び出すときにスタックの中にモディファイヤが存在しない場合は、何も行われません。オブジェクトを強制的に編集可能メッシュにする場合は、次の convertToMesh() 関数を使用します。
getModContextTM <node> <modifier>
モディファイヤ サブオブジェクト ギズモで使われたローカル座標に、モディファイヤのコンテキスト変換を提供する Matrix3 値を返します。
モディファイヤのサブオブジェクトの変換プロパティ(MAXScript のギズモや中心など)にアクセスすると、そのモディファイヤのコンテキスト変換に相対した値が生成されます。これは、トラック ビューで表示される変換プロパティの値と同じです。モディファイヤが面や頂点の選択などのサブオブジェクト選択で機能しない場合、またはモディファイヤをオブジェクトの選択にインタラクティブに適用した場合、このコンテキスト TM はオブジェクトのローカル座標空間になります。一方、モディファイヤがオブジェクト選択セットまたはサブオブジェクト選択で機能している場合、このコンテキスト変換により、その選択の位置と方向が与えられるため、 getModContextTM() 関数を使って、そのサブオブジェクトのワールド空間変換プロパティを取得できます。
setModContextTM <node> <modifier> <matrix3>
特定のノード上の指定されたモディファイヤのモディファイヤ コンテキスト変換行列を設定します。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
getModContextBBoxMin <node> <modifier> getModContextBBoxMax <node> <modifier>
これらの関数は getModContextTM() 関数を補完するもので、これを使ってモディファイヤ コンテキストのバウンディング ボックスのワールド空間座標を派生させることができます。たとえば、これを使ってサブ選択に作用するモディファイヤの境界や、FFD ラティスの境界を決定できます。FFD コントロール ポイントの位置をスクリプト記述する場合に、このことが特に役立ちます。これは、これらのコントロール ポイントが 0 対 1 のラティス空間に存在するためです。モディファイヤ コンテキストのバウンディング ボックスにより、このラティス空間のワールド空間境界が設定されることで、スケール処理したラティス空間座標をワールド座標から計算できるようになります。この関数は、バウンディング ボックスの最小範囲と最大範囲に対して Point3 値を返します。
setModContextBBox <node> <modifier> <point3 min> <point3 max>
特定のノード上のモディファイヤのモディファイヤ コンテキスト バウンディング ボックスを指定された最小値および最大値に設定します。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
上のメソッドの使用例については、「モディファイヤ サブオブジェクト変換プロパティ」を参照してください。
isDeformable <node>
ノードのオブジェクトが変形可能である場合に true を返します。3ds Max 2008 以降 で使用可能です。
従来、Avguard 機能拡張として提供されていた機能です。
変形可能なオブジェクトとは |
変形可能なオブジェクトとは、修正可能なポイントが含まれているオブジェクトです。そのようなポイントは、オブジェクトが要求する任意の形式で内部的に保存することができます。「i 番目」のポイントを取得および設定するためのメソッドを使用して、仮想配列インタフェースを介してアクセスします。 この抽象レイヤによって 3ds Max は同じモディファイヤを、さまざまなジオメトリ クラス(編集可能メッシュ、編集可能ポリゴン、スプライン、パッチ、NURBS)に適用することができます。このとき、これらのクラスの内部構造に関する専門知識は必要ありません。モディファイヤは、仮想配列インタフェース メソッドを介してオブジェクトによって提供されるポイントに対して単に動作しますが、これらのポイントは、頂点、ベジェ スプラインのノットおよび接線、パッチのノットおよび接線などになります。 'on map <index> <point> do' ハンドラを実装することによって、ポイント上でこのような動作が可能なスクリプト化されたモディファイヤについては、「スクリプト SimpleMod プラグイン」を参照してください。 |
特定のノードについて isDeformable が true を返した場合でも、必ずしも変形可能であるわけではありません。たとえば、雪、スーパー スプレー、ブリザードなどの従来のすべてのパーティクル システムは true を返しますが、実際には変形の影響を受けません。また、すべてのジオメトリ プリミティブは false を返しますが、変形可能です。
このメソッドは SDK メソッドをラップするものであり、変形可能であるかどうかを確認した場合にオブジェクトによって提供される値を返すにすぎません。
例: |
for g in geometryClass.classes do ( try ( o = execute (g as string +"()") if isDeformable o then format "% is Deformable.\n" g else format "% is NOT Deformable.\n" g )catch(format "Failed To Create %\n" g) ) |
numPoints <node>
ノードのオブジェクトの変形可能ポイントの数を返します。3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
getPointPos <node> <index>
ノードのオブジェクトの、インデックスで指定されたポイントの位置を返します。位置は現在の座標系に戻ります。3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
nodeGetBoundingBox <node> <matrix3>
座標系 matrix3 におけるノードのバウンディング ボックスの最小ポイントおよび最大ポイントが含まれている 2 要素配列を point3 値として返します。返される位置は必ず指定された matrix3 座標系における位置です。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
例: |
--Run: t=teapot() c=freecamera() bb= nodeGetBoundingBox $teapot001 $camera001.transform in coordsys$camera01 point pos:bb[1] in coordsys$camera01 point pos:bb[2] --Note that this does not correct for the camera's FOV. |
nodeLocalBoundingBox <node>
ノードのローカル バウンディング ボックスの最小ポイントおよび最大ポイントが含まれている 2 要素配列を返します。ここで「位置」とは、現在の座標系における位置です。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
例: |
--Create a teapot. Run: bb= nodeLocalBoundingBox $teapot01 point pos:bb[1] point pos:bb[2] |
convertToMesh <node> -- mapped
この関数は、該当するシーン オブジェクトのタイプを編集可能メッシュに変換します。この関数は、存在するすべてのモディファイヤを削除する collapseStack() に似ていますが、 collapseStack() とは異なり、たとえモディファイヤが存在しない場合でも、基本オブジェクトを編集可能メッシュに常に置き換えます。
convertToMesh() は、メッシュ編集モディファイヤが作用可能なオブジェクトすべてに適用できます。たとえば、ジオメトリやシェイプには適用できますが、ヘルパー、スペース ワープ、ライトなどには適用できません。オブジェクトが変換不可能な場合、関数は undefined を返します。
convertToSplineShape <node> -- mapped
指定されたシーン ノードを SplineShape オブジェクトに変換します。オブジェクトを変換できない(通常はオブジェクトがシェイプでない)場合、この関数は undefined を返します。存在するモディファイヤはすべて集約されます。 collapseStack() 関数も、3ds Max の[モディファイヤ スタック](modifier stack)ダイアログ ボックスにおける[集約](collapse)ボタンと同じ用途で使用できます。いずれもスプライン シェイプを生成しますが、これは少なくとも 1 つのモディファイヤが存在するときに限られます。
canConvertTo <node> <class>
これにより、指定されたノードが指定されたクラスに変換可能かどうかをテストできます。 true または false を返します。
例: |
if canConvertTo $foo NURBSSurface then... |
オブジェクトを変換できるクラスは汎用の編集可能形式のもので、Mesh、SplineShape、NURBSCurve、NURBSSurface などがあります。
convertTo <node> <class> -- mapped
この関数は、既存の特定の変換関数( convertToMesh() 、 convertToSplineShape() など)の標準形式です。
convertToSplineShape() は次のように記述することができます。
例: |
convertTo $circle001 SplineShape |
変換がサポートされていない場合、関数は undefined 値を返します。
convertToNURBSSurface <node> -- mapped convertToNURBSCurve <node> -- mapped
これらの関数は、NURBS への変換をサポートしている基本的なジオメトリおよびシェイプのクラス(四角形、球、円、線など)に作用します。オブジェクトが変換をサポートしていない場合、この関数は undefined を返します。
isDeleted <MAXWrapper_object>
オブジェクトが既に削除されている場合、この関数は true を返し、オブジェクトがまだシーン内に存在している場合は、 false を返します。この関数の使用は、3ds Max オブジェクトへの参照が変数や配列内に保持される場合や、パラメータとして渡され、オブジェクトがシーンから削除されているかどうかを判断したい状況でのみ役立ちます。変数や配列で参照された削除済みの 3ds Max オブジェクトで演算が実行されると、他の方法で例外が発生します。シーン オブジェクト、モディファイヤ、コントローラ、マテリアルなど、どの種類の 3ds Max オブジェクトもこの方法でテストすることができます。
例: |
sel = selection as array-- snapshot selection --... -- <one or more objects in the selection are deleted, -- by the user or other scripts> --... for obj in sel where not isDeleted obj do move obj [10,0,0] |
ノードが削除されている場合、
<node> == undefined は false を返します。
<node> != undefined は true を返します。
例: |
if mynode != undefined and not isdeleted myNode do... |
distance <node> <node>
指定した 2 つのノードの基点間の距離を計算します。
intersectRay <node> <ray>
レイと指定したノードのサーフェスのもっとも近い交差を計算します。3D スペースにおいて交差の位置を定義する別のレイと、その点におけるサーフェスの法線ベクトルを返します。交差のテストではノード面の法線が考慮されます。面の法線がレイのソースとは離れた方向を指している場合には、その面に対しては交差のテストは実行されません。 intersectRay() は、ノードのワールド状態(ノード スタックの最上位にあるノードの状態)に、編集可能メッシュ、標準プリミティブ、拡張プリミティブ、合成プリミティブ、パッチ、または NURBS サーフェス オブジェクトのようなサーフェスがある場合に機能します。スプラインおよび NURBS カーブにはサーフェスはありません。レイがノードと交差しない場合、レイが交差する面がレイの位置とは離れた方向を指している場合、またはノードにサーフェスがない場合は、 undefined が返されます。
intersectRayEx <node> <ray>
レイをとって、所定のノードのサーフェスから最も近い交差点を計算します。次の 3 つの要素を持つ配列を返します。
3D スペースにおける交差点の位置を定義するレイと、その点におけるサーフェスの法線ベクトルを返します。
レイが交差する面のインデックス
ヒットした面の重心座標
ノードがもともと編集可能メッシュであったか、ノードをメッシュに変換するモディファイヤが適用されているために、ノードのワールド状態がメッシュとなっている場合にのみ、このメソッドは機能します。 intersectRay() とは異なり、このメソッドはノードが標準プリミティブまたは拡張プリミティブである場合には機能しません。ノードのスタックは、メッシュに対して評価する必要があります。交差のテストではノード面の法線が考慮されます。面の法線がレイのソースとは離れた方向を指している場合には、その面に対しては交差のテストは実行されません。レイがノードと交差しない場合、レイが交差する面がレイの位置とは離れた方向を指している場合、またはノードがメッシュでない場合、 undefined が返されます。
重心座標とは |
重心座標は、三角形の面に相対的な座標です。三角形に相対的なポイント p の重心座標は、そのポイントを三角形の頂点の重量合計として記述します。 b0 、 b1 、 b2 の場合、次のようになります。 p = b0*p0 + b1*p1 + b2*p2 ここで、 p0 、 p1 、 p2 は三角形の頂点の位置を示しています。 このメソッドによって返される Point3 では、3 つの座標に格納された重心座標があります。これらの座標は、交差する三角形の面に相対的な座標です。 これらの重心座標は、三角形の頂点における量の値がわかっている場合には、どの量を補完するためにでも使用できます。 |
次に、交差点における UV 座標を見つける例を示します。
例: |
s = geosphere material:(standardMaterial diffuseMap:(checker())) showTextureMap s.material s.material.diffuseMap on -- -- Add a normal modifier to make the sphere into a mesh addModifier s (normalModifier()) r = ray [-100,5,0] (s.center-[-100,5,0]) -- -- Get the Intersection details arr = (intersectRayEx s r) -- -- Create a dummy at the point of intersection dummy pos:(arr[1]).pos -- -- Get the texture face tf = getTVFace s arr[2] -- -- Get the UVW verts of the face tv1 = getTVert s tf.x tv2 = getTVert s tf.y tv3 = getTVert s tf.z -- -- Calculate the texture vertices at point of intersection from -- the barycentric coordinates tv = tv1*arr[3].x + tv2*arr[3].y + tv3*arr[3].z -- -- Delete the modifier deleteModifier s 1 |
intersectRayScene <ray>
シーン内のすべてのノード上で intersectRay を実行します。
ノード ヒットあたり 1 エントリの結果の配列を返します。各エントリは、ノードおよびそのノードに対する intersectRay の結果が含まれている 2 要素配列です。
この交差は、非表示のオブジェクトを含む、すべてのジオメトリ オブジェクトに対して実行されます。
3ds Max 2008 以降 で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
例 |
( local r = ray [0,0,0] [1,0,0]--define a ray along X for i = 0 to 4 do--loop 5 times ( box pos:[i * 30, 0,0]--create a box ) local hits = intersectRayScene r--intersect withscene print hits --Misses box 1 because ray originates inside the box ) -- output --> #($Box:Box02 @ [30.000000,0.000000,0.000000], (ray [17.5,0,0] [-1,0,0])) --> #($Box:Box03 @ [60.000000,0.000000,0.000000], (ray [47.5,0,0] [-1,0,0])) --> #($Box:Box04 @ [90.000000,0.000000,0.000000], (ray [77.5,0,0] [-1,0,0])) --> #($Box:Box05 @ [120.000000,0.000000,0.000000], (ray [107.5,0,0] [-1,0,0])) --> OK |
intersects <node> <node>
指定した 2 つのノードのバウンディング ボックスが重なる場合は true 、重ならない場合は false を返します。
printStack <node>
指定されたノードに対する現在のモディファイヤ スタックの表示を出力します。
getLastMergedNodes()
前回の合成操作(mergeMAXFile()など)によってロードされたノードの配列を返します。
getUserProp <node> <key_string> setUserProp <node> <key_string> <value> getUserPropVal <node> <key_string> asString:<bool> setUserPropVal <node> <key_string> <value> quoteStrings:<bool> getUserPropBuffer <node> setUserPropBuffer <node> <string>
これらのメソッドの詳細は、「ノードのユーザ定義プロパティとメソッド」を参照してください。
次のメソッドは、[階層](Hierarchy)パネルの[オブジェクト パラメータ](Object Parameters)ロールアウトに表示されるノードの IK 値を取得および設定します。
getRotTaskWeight <node>
ノードの回転バインドの重みを返します。
setRotTaskWeight <node> <float>
ノードの回転バインドの重みを設定します。
getPosTaskWeight <node>
ノードの位置バインドの重みを返します。
setPosTaskWeight <node> <float>
ノードの位置バインドの重みを設定します。
getTaskAxisState <node> <pos_or_rot_integer> <axis_integer>
指定した軸で位置バインドまたは回転バインドがオンになったかどうかにより、 true または false を返します。軸がオフになった場合、指定した軸は従属オブジェクトや IK コントローラ位置エンド エフェクタによって影響を受けることはありません。 <pos_or_rot_integer> により、メソッドによって返されるのが位置状態であるか、回転状態であるかを設定します。0 は位置状態、1 は回転状態になります。 <axis_integer> により、確認する軸を設定します。0 は X 軸、1 は Y 軸、2 は Z 軸になります。
setTaskAxisState <node> <pos_or_rot_integer> <axis_integer> <boolean>
位置バインドまたは回転バインドの軸状態を指定したブール値に設定します。パラメータの詳細については、 getTaskAxisState() を参照してください。
mirrorIKConstraints <node> <axis_integer> <pos_or_rot_integer>
指定したノードの変換コントローラ上の指定した IK コンストレイントを、指定した軸に対してミラーします。 <axis_integer> により、反射の軸を指定します。0 は X 軸、1 は Y 軸、2 は Z 軸になります。 <pos_or_rot_integer> は、ミラーされるコンストレイントのタイプを指定します。0 は位置状態、1 は回転状態になります。
nodeIKParamsChanged <node>
このメソッドは、ノード レベルの IK パラメータを変更したときに呼び出します。
OKToBindToNode <ik_node> <node>
<ik_node> が従属オブジェクトとして <node> にバインドする場合は true を返し、その他の場合は false を返します。 <ik_node> が IK システムの一部でない場合は、このメソッドは必ず true を返します。このメソッドは、 <node> をテストしてその変換が IK システムに従属であるかどうかを確認し、従属の場合は false を返します。
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" |