メッシュ頂点メソッド

次のメソッドは、メッシュの頂点と頂点の法線への基本的なアクセスを提供するものです。

メソッド:

メッシュ頂点アクセス:

getNumVerts <mesh>

頂点の数を整数で返します。<mesh>.numverts. を使用する場合と同じです。

setNumVerts <mesh> <vert_index_integer> [ <boolean> ]

頂点の数に指定値を設定します。オプションのブール値の引数が true の場合、既存のトポロジはそのままの状態を維持します。この引数が false の場合、またはこの引数を省略すると、トポロジは失われます。

numVerts プロパティまたは setNumVerts メソッドを使用して頂点の数を設定する場合は、新しい頂点が[0.,0.,0.]

getVert <mesh> <vert_index_integer>

インデックスで指定された頂点の位置 (現在の作業座標系における位置) を Point3 として返します。

setVert <mesh> <vert_index_integer> ( <point3> | <float> <float> <float> )

インデックスで指定された頂点の位置を Point3、または 3 つの浮動小数点 X、Y、Z として設定します。

警告:

この下位レベル メッシュ メソッドは、頂点が animateVertex theMesh #all を使用して準備されており、メソッドが animate on コンテキスト内から呼び出された場合でも、頂点アニメーションの作成を処理しません。 アニメートされたメッシュを操作する場合は、代わりに meshop.setVert() メソッドを使用してください。

例:

    obj = sphere() --create a Sphere
    convertToMesh obj --collapse to EditableMesh
    for v = 1 to getNumVerts obj do --loop through all vertices
    (
    vert = getVert obj v --get the v-th vertex
    vert.z = 0.0 --change the Z coordinate to 0.0
    setVert obj v vert --assign back to the v-thvertex
    )
    update obj --update the mesh - the sphere should be flattened

deleteVert <mesh> <vert_index_integer>

インデックスで指定された頂点をメッシュから削除し、さらにその頂点を共有するすべての面を削除します。削除操作の結果を反映させるため、頂点と面の数は更新されます。必要に応じて、面の頂点インデックスも調整されます。

    p = plane() --create a Plane
    convertToMesh p --collapse toEditable_Mesh
    deleteVert p 13 --delete vertex 13 (the middle vertex)
    update p --update the mesh

メッシュ頂点の法線

getNormal <mesh> <vert_index_integer>

インデックスで指定された頂点の法線を Point3 として返します。法線は、頂点を使用する面およびこれらの面に割り当てられたスムージング グループに基づいています。

    obj = geosphere() --create a GeoSphere
    convertToMesh obj --collapse to Editable_Mesh
    --Count backwards from the last vertex to the first.
    --This is necessary because we intend to deletevertices
    --and this will renumber the remaining ones. Counting backwards
    --ensures the renumbering does not affect the loop:
    for v = obj.numVerts to 1 by -1 do
    (
    --get the vertex normal and get the dot product with the +Z vector
    --If the result is less than the specifiedthreshold,
    --then delete the vertex the normal belongs to
    if dot (getNormal obj v) [0,0,1] <= -0.25 do deleteVert obj v
    )
    update obj --update the mesh

setNormal <mesh> <vert_index_integer> <point3>

インデックスで指定された頂点の法線ベクトルを設定します。

3ds Max 2015 から、頂点法線を設定すると、法線を明示的に設定するため、メッシュが更新された場合にその値が保持されます。3ds Max 2015 より前のバージョンでは、MAXScript を使用した頂点法線の設定は、ビューポートの再描画またはシーン レンダリングでのスムージング グループ ベースの暗黙的な放線再計算によって、データが簡単に上書きされるため、非常に短い効果しか持続しませんでした。

メッシュ頂点の選択:

getVertSelection <node> [ <modifier_or_index> ] [ name:<name> ]
getVertSelection <mesh>

現時点における頂点の選択セットを返します。または、オプションの name: パラメータが BitArray として指定されている場合は、指定された名前の付いた選択セットを取得します。オプションの <modifier_or_index> は、所定のシーン オブジェクトでメッシュを編集モディファイヤ、メッシュ選択モディファイヤ、またはポリゴンを選択モディファイヤを識別し、ここから選択項目の BitArray が取得されます。

    getVertSelection $foo $foo.modifiers[3]

オプションの <modifier_or_index> 引数が指定されない場合、<node> は編集可能メッシュオブジェクトである必要があります。この場合、選択項目はモディファイヤ スタックの上から選択されます。<modifier_or_index> を指定する場合、指定する値はノード上のモディファイヤか数値でなければなりません。モディファイヤの場合は、メッシュ編集モディファイヤかメッシュ選択モディファイヤでなければなりません。数値の場合は、<node> 上のメッシュを編集モディファイヤまたはメッシュ選択モディファイヤのインデックス(スタックの最上位から開始)として使用されます。

注:

このインデックスは、別のタイプのモディファイヤが存在していても、それをカウントしません。したがって、インデックス 1 は、スタックの最上位で現在アクティブな選択項目を常に取得します。

この関数は、指定されたモディファイヤのオブジェクト内で選択されている頂点のインデックス(1 から始まる)用にビットが設定された BitArray、または名前が付いた選択セットで指定された頂点を返します。

    getVertSelection $foo $foo.modifiers[3]

戻り値

    #{2..5,9,25..27}

これは、一時的な選択です。つまり、BitArray はユーザが別の選択を行っても自動的には変化しません。さらにこれは、モディファイヤが頂点サブオブジェクト選択モードになっていようがいまいが、現時点における頂点の選択内容を反映します(この選択内容は記憶され、頂点サブオブジェクト モードに戻るたびに復元されます)。このため、たとえば頂点を選択してから頂点サブオブジェクト モードを終了する場合、選択項目ではなくオブジェクト全体がスタックの次のモディファイヤに渡されますが、getVertSelection() の返す値は頂点サブオブジェクト モードを終了した時点で選択されていた頂点になります。

固有の名前を持たないメッシュを編集モディファイヤが数多くある場合、modifiers モディファイヤ配列アクセス手順をここで使用することができます。また、次の例に示すように、作成された文字列をインデックスとして modifiers 配列に使用することもできます。

    $foo.modifiers["edit mesh"+ i as string]

変数 'i' にインデックス値があり、それに従って名前が設定されたと仮定しています。'+' により文字列が連結されます。

スタックにモディファイヤが存在するとき、編集可能メッシュのベース オブジェクトから選択にアクセスするには、ベース オブジェクトの TriMesh 値にアクセスする必要があります。

    getVertSelection $foo.baseobject.mesh
setVertSelection <node> [<modifier_or_index>]( <sel_bitarray> | <sel_array> ) [name:<name>] [keep:<boolean>]
setVertSelection <mesh> ( <sel_bitarray> | <sel_array> )[keep:<boolean>]

頂点の選択内容を、編集可能メッシュ基本オブジェクト、メッシュ選択モディファイヤ、メッシュを編集モディファイヤ、ポリゴンを選択モディファイヤ、または TriMesh に設定します。 これらの関数は、既に述べた選択項目を取得する関数に対応しています。

<modifier_or_index> 引数は、設定操作でメッシュ選択モディファイヤおよびポリゴンを選択モディファイヤだけがサポートされること以外は、上記の取得操作(get-)と同様に機能します。

    setVertSelection $foo #{1..4,100..102}
    setFaceSelection $foo (getFaceSelection $baz) keep:true

オプションの name: 引数が指定されている場合は、編集可能メッシュ内またはメッシュ選択モディファイヤ内の指定された名前の付いた選択セットの頂点が選択されます。name: 引数を指定しない場合は、選択インデックス引数は、選択するサブオブジェクトの項目のインデックスを表す BitArray、または整数配列のいずれかとなります。オプションの keep: キーワード引数が false の場合、または引数を省略した場合、現在の選択内容が新しい選択に置き換わります。keep: キーワード引数が true の場合、現在の選択内容に新しい選択が追加されますname: 引数は、TriMesh には適用されません。

選択の変更を行った後は、それをオブジェクトのモディファイヤに明示するため、メッシュ更新関数 update() を使用してください。

averageSelVertCenter <node>

所定のメッシュ内で選択された頂点の平均位置(中心)を Point3 として返します。オブジェクトがメッシュでない場合は、このメソッドは undefined を返します。このメッシュ内で頂点が 1 つも選択されていない場合は、値[0,0,0]が返されます。このメソッドは TriMesh には適用されません。

averageSelVertNormal <node>

所定のメッシュで選択されている頂点の平均法線を Point3 として返します。所定のノードがメッシュでない場合は、undefined を返します。このメッシュ内で頂点が 1 つも選択されていない場合、または平均法線が[0,0,0]の場合は、値[1,0,0]が返されます。このメソッドは TriMesh には適用されません。

このメソッドで使われる頂点の法線は、この頂点を使用する面に割り当てられたスムージング グループのデータを考慮しません。

メッシュに関連するメソッドについては、以下を参照してください。

Editable_Mesh : GeometryClass および TriMesh : 値