PolyToolsModeling : GlobalUtilityPlugin

3ds Max 2011 で導入された PolyToolsModeling GlobalUtilityPlugin は、グラファイト モデリング ツールへのアクセスを MAXScript に提供するインターフェースを公開します。

この機能は、MAXScript ツールとして正式にサポートされていない複数の機能を使用する3ds Max 2010 において初めて実装されました。このインタフェースはすべての関連プロパティおよびメソッドを統合しているため、MAXScript のユーザは独自のツールを使用してそれらを適用することが可能です。

コンストラクタ:

Class instances not creatable by MAXScript

PolyToolsModeling インタフェース:

Interface:  PolyToolsModeling

メソッド:

[ループ] (Loops)パネル

<boolean>PolyToolsModeling.DistanceConnect ()         

サブオブジェクト間に、距離やその他のトポロジを越えて接続を作成します。

サブオブジェクト レベル 機能
ポリゴン サポートされていません。
エッジ 2 つのエッジを選択して適用し、それらの間のメッシュを横切るような形で 2 つのエッジを結びつけます。
頂点 2 つの終了頂点を選択して適用し、それらの間のメッシュを横切るような形で 2 つの終了頂点を結びつけます。

選択した 2 つのエッジを距離に合わせて接続する:

    --Step 1:
    p = plane lengthsegs:10 widthsegs:10 wirecolor:blue
    convertTo p Editable_Poly
    select p
    max modify mode
    subObjectLevel = 2
    polyOp.setEdgeSelection p #{76,92}
    --Step 2:
    PolyToolsModeling.DistanceConnect ()

<boolean>PolyToolsModeling.RemoveLoop ()     

現在のサブオブジェクト レベル内のループを削除し、残された頂点をすべて自動的に削除します。

サブオブジェクト レベル 機能
ポリゴン 2 つ以上のポリゴンを選択して適用し、ポリゴンの行全体を削除します。
エッジ 1 つまたは複数のエッジを選択して適用し、選択したエッジが存在しているループを削除します。
頂点 2 つ以上の頂点を選択して適用し、頂点のループを削除します。

2 つのポリゴン、1 つのエッジ、および 2 つの頂点をを使用してエッジ ループを削除する:

    --Step 1:
    p = plane lengthsegs:10 widthsegs:10 wirecolor:blue --create a plane
    convertTo p Editable_Poly --convert the plane to Editable_Poly
    select p --select the plane to be able to see the results
    max modify mode --switch Command Panel to Modify mode
    subObjectLevel = 4 --switch topolygonsub-object level
    polyOp.setFaceSelection p #{22,23} --select two polygons to define the loops
    --Step 2:
    PolyToolsModeling.RemoveLoop () --remove the loops defined by the two polygons

    --Step 3:
    subObjectLevel = 2 --switch to edge sub-object level
    polyOp.setEdgeSelection p #{101} --select one edge
    --Step 4:
    PolyToolsModeling.RemoveLoop() --remove the loop defined by the one edge

    --Step 5:
    subObjectLevel =1 --switch to vertex sub-object level
    polyOp.setVertSelection p #{101} --select two vertices
    --Step 6:
    PolyToolsModeling.RemoveLoop () --remove the loop defined by the two vertices

<boolean>PolyToolsModeling.SetFlow <boolean>autoLoop   

自動的に選択したエッジまたは頂点をメッシュの周囲のフローに合わせます。

autoLoop が true として提示された場合、エッジのサブオブジェクト レベルで完全なエッジ ループが作成されます。

サブオブジェクト レベル 機能
ポリゴン サポートされていません。
エッジ 1 つまたは複数のエッジを選択して適用し、周囲のトポロジに合わせます。
頂点 1 つまたは複数の頂点を選択して適用し、周囲のトポロジに合わせます。
<boolean>PolyToolsModeling.SetFlowVertex ()

自動的に選択した頂点をメッシュの周囲のフローに合わせます。

<boolean>PolyToolsModeling.BuildEnd ()

2 つのループを挿入し、両方の終点に四角形の終点をビルドします。

サブオブジェクト レベル 機能
ポリゴン サポートされていません。
エッジ 行(エッジ リング)のエッジを選択し、このメソッドを呼び出して選択したエッジに接続している 2 つのループを挿入して四角形の終点をビルドします。
頂点 2 つの平行なループの終端で 2 つの頂点を選択して適用し、四角形の終点をビルドします。
<boolean>PolyToolsModeling.BuildCorner ()

頂点の選択に基づいて四角形のコーナーをビルドして、エッジループの向きを変えます。

サブオブジェクト レベル 機能
ポリゴン サポートされていません。
エッジ エッジ ループのコーナーで 1 つまたは複数のエッジを選択して適用し、四角形のコーナーをビルドします。
頂点 2 つの頂点を選択して適用し、四角形のコーナーをビルドします。
<boolean>PolyToolsModeling.RandomConnect <float>jitter <boolean>autoLoop

エッジを接続し、各エッジ内での新規に作成された頂点の位置をランダム化します。

成功の場合は true を返し、失敗の場合(たとえば、エッジ サブオブジェクト レベルにない時に呼び出された場合)は false を返します。

1 番目の引数はランダム ジッター係数を設定します。

2 番目の引数は、初期選択では接続を生成するのに不十分な場合にその初期選択を隣接するエッジ ループまで拡張して接続を容易化するかどうか設定します。

true として渡された autoLoop を使用する 10x10 グリッド内でのランダム接続:

    --Step 1:
    p = plane lengthsegs:10 widthsegs:10 wirecolor:blue --create a plane
    convertTo p Editable_Poly --convert the plane to Editable_Poly
    select p --select the plane to be able to see the results
    max modify mode --switch Command Panel to Modify mode
    subObjectLevel =2 --switch to polygonsub-object level
    polyOp.setEdgeSelection p #{82} --select one edge to define a loop
    --Step 2:
    PolyToolsModeling.RandomConnect 0.3 true --create loops and connect randomly

単一のエッジのみが選択された状態ですが、true に設定された AutoLoop の 2 つめの引数が選択したエッジからエッジ リングを生成し、新規の選択内容に合わせてランダム接続を実行したことに注意してください。autoLoop が false の場合、接続のエッジは作成されません。

    --Step 3:
    PolyToolsModeling.RandomConnect 0.3 true --create loops and connect randomly
    --Step 4:
    PolyToolsModeling.RandomConnect 0.3 true --create loops and connect randomly

この 3 番目のステップでは、autoLoop が false に設定されている場合に使用すると接続を生成しない単一のエッジ ループから再び開始します。多数の平行なランダム ループを生成していますが、それらは未選択の直線エッジ ループによってブロックされています。この 4 番目のステップで autoLoop が false として渡された場合、これらの直線エッジ ループはやはり接続を生成しません。

例:

false として渡された autoLoop を使用する 10x10 グリッド内でのランダム接続:

    --Step 1:
    p = plane lengthsegs:10 widthsegs:10 wirecolor:blue --create a plane
    convertTo p Editable_Poly --convert the plane to Editable_Poly
    select p --select the plane to be able to see the results
    max modify mode --switch Command Panel to Modify mode
    subObjectLevel =2 --switch to polygon sub-object level
    polyOp.setEdgeSelection p #{80,82,84,86,88} --select edges to define a ring
    --Step 2:
    PolyToolsModeling.RandomConnect 0.5 false --connect selected only

この場合では、初期選択は既に有効なランダム接続を作成するために十分なエッジをリング内に含んでいます。選択したエッジ リングをこれ以上拡張したくないので、false を 2 番目の引数として渡し、既存の選択のみを使用してランダム接続を生成することになっています。

[エッジ] (Edges)パネル

<boolean>PolyToolsModeling.SpinEdge <boolean>alternativeDir

方向を変更することによって、選択したポリゴンの単一のエッジまたは複数のエッジを回転させます。

成功した場合は true を、失敗した場合は false を返します。

サブオブジェクト レベル alternativeDir = false alternativeDir = true
ポリゴン サポートされていません。 サポートされていません。
エッジ 単一のエッジまたは複数のエッジを選択して適用し、エッジを時計回りに回転させます。 単一のエッジまたは複数のエッジを選択して適用し、エッジを反時計回りに回転させます。
頂点 サポートされていません。 サポートされていません。
<boolean>PolyToolsModeling.InsertVertex <integer>number

指定した数の頂点を選択したエッジに挿入します。挿入した頂点はエッジに沿って等間隔に配置されます。

成功した場合は true を、失敗した場合は false を返します。

サブオブジェクト レベル 機能
ポリゴン サポートされていません。
エッジ エッジを選択して適用し、選択した単一または複数のエッジ上の頂点を挿入します。
頂点 サポートされていません。

[ジオメトリ (すべて)] (Geometry (All))パネル

<boolean>PolyToolsModeling.Quadrify <boolean>withinSel <boolean>selectOnly

モデルから三角形状を削除し、主に四角形ポリゴンを生成します。

withinSel が true に設定されている場合、現在のサブオブジェクトの選択のみに適用します。

selectOnly が true に設定されている場合、削除は行わずに削除対象となるエッジを選択するのみになります。

成功した場合は true を、失敗した場合は false を返します。

ポリゴン パネル

<boolean>PolyToolsModeling.GeoPoly ()

ポリゴンを整理し、頂点を編成して完璧なジオメトリック シェイプを形成します。

サブオブジェクト レベル 機能
ポリゴン ポリゴンを選択し、適用してジオメトリック シェイプを作成します。複数の隣接するポリゴンが選択された場合、結果はポリゴンの間で平均化されます。
エッジ サポートされていません。
頂点 サポートされていません。

ループ ツール

<boolean>PolyToolsModeling.CenterLoop <boolean>autoLoop

エッジまたはエッジ ループをそのエッジ リングの中心に合わせ、さらに頂点をエッジの中央に配置します。

1 つまたは複数のエッジを選択して適用します。

autoLoop の引数が true の場合、選択内容は自動的にループになります。

<boolean>PolyToolsModeling.SpaceLoop <boolean>autoLoop

頂点を、選択したエッジまたはエッジ ループに沿って等間隔で配置して、頂点間の距離が等しくなるようにします。

autoLoop の引数が true の場合、選択内容は自動的にループになります。

このメソッドが実行されている間に [SHIFT] キーが押された場合、円柱の上端および下端のループの間隔をあけることが可能になります。

<boolean>PolyToolsModeling.CurveLoop <boolean>autoLoop <boolean>spaceLoop

選択したエッジまたはエッジ ループの各セットを滑らかなカーブに調整します。

各ループの曲率は、ループに沿って選択した頂点の位置によって決まります。作成するカーブを、選択した各頂点において滑らかに補間されたスプライン ノットを持つエッジ/ループの終点からのスプラインとして考えてみます。

autoLoop の引数が true の場合、ツールが適用される前にチェックされた初期選択が自動的にループされます。

spaceLoop の引数が true の場合、すべての頂点はループに沿って等間隔で配置されます。

spaceLoop の引数が false の場合、ループ上の頂点間の初期リレーションシップが維持されます。

注:

カーブの始点および終点が必要になるため、このツールを機能させるためには、選択のエッジ ループが閉じて円のような形にならないようにします。****

実際のエッジ ループは閉じることができますが選択したエッジ ループは閉じられません。

<boolean>PolyToolsModeling.StraightLoop <boolean>autoLoop <boolean>spaceLoop

選択したエッジまたはエッジ ループの各セットをまっすくな直線にします。

エッジまたはエッジ ループの「終端」頂点が選択されている場合は、線はその頂点を使用する最初のエッジからまっすぐに伸びます。頂点が選択されていない場合は、線はエッジまたはエッジ ループの 2 つの端点間に伸びます。

autoLoop の引数が true の場合、ツールが適用される前にチェックされた初期選択が自動的にループされます。

spaceLoops の引数が true の場合、すべての頂点はループに沿って等間隔で配置されます。

spaceLoops の引数が false の場合、ループ上の頂点間の初期リレーションシップが維持されます。

このメソッドが実行されている間に [SHIFT] キーが押された場合、円柱の上端および下端のループを直線状にすることが可能になります。

<boolean>PolyToolsModeling.CircleLoop <boolean>autoLoop

選択したエッジとエッジ ループの各セットを円形状に変換します。

各ループに沿った選択した頂点は円の始点を決定します。

開いたループでは、エッジ/ループの「終点」の 1 つが選択されている必要があります。

(円柱の周囲のような)閉じたループでは、少なくとも変更位置を持ちたい頂点が選択されている必要があります。

autoLoop の引数が true の場合、ツールが適用される前にチェックされた初期選択が自動的にループされます。

このメソッドが実行されている間に [SHIFT] キーが押された場合、円柱の上端および下端のループを円形状にすることが可能になります。

ヒント: ループ上の最初の次の頂点が目的の円の一般的な方向に向かっていることを確認し、円が「反転した」状態になっていないことを確認してください。
<boolean>PolyToolsModeling.RelaxLoop <boolean>autoLoop

選択したエッジまたはエッジ ループの各セットの曲率を緩やかに、または滑らかにします。

より緩やかにするには、複数回呼び出します。

autoLoop 引数が true の場合、ツールが適用される前にチェックされた初期選択が自動的にループされます。

このメソッドが実行されている間に [SHIFT] キーが押された場合、円柱の上端および下端のループを緩めることが可能になります。

[対称]

<boolean>PolyToolsModeling.SymmetryGather <node>node <value>axis <float>threshold

シンメトリ データを最初の引数として指定されているノードから収集します。

2 つめの引数によって、対称軸が、名前 #x#y#z で定義されます。

3 つめの引数によって、対称頂点を検索する場合に使用する位置の偏差のしきい値を定義します。

<boolean>PolyToolsModeling.SymmetryPosToNeg <value>axis

頂点の位置を、対称軸の正の側から負の側にコピーします。

軸の引数は #x、#y または #z のいずれかになります。

[シンメトリ ツール](Symmetry Tools)のフローティング ダイアログ内の"+To-"ボタンに対応しています。

<boolean>PolyToolsModeling.SymmetryNegToPos <value>axis

頂点の位置を、対称軸の負の側から正の側にコピーします。

軸の引数は #x、#y または #z のいずれかになります。

[シンメトリ ツール](Symmetry Tools)のフローティング ダイアログ内の"+To-"ボタンに対応しています。

<boolean>PolyToolsModeling.SymmetryFlip <value>axis

指定した軸に関するシンメトリなデータをスワップします。

<boolean>PolyToolsModeling.SymmetryCopy ()

現在選択された頂点の頂点位置を内部の「クリップボード」にコピーします。

<boolean>PolyToolsModeling.SymmetryPaste ()

頂点の位置を非選択の場合にでも同じ頂点に戻して張り付けます。

シンメトリ メソッドを使用する

    --Step 1:
    s = sphere radius:12 segs:32 wirecolor:blue
    convertTo s Editable_Poly
    select s
    max modify mode
    subObjectLevel = 1
    PolyToolsModeling.SymmetryGather s #x 0.01

    --Step 2:
    PolyOp.moveVert s #{122} [5,0,5]
    --Step 3:
    PolyToolsModeling.SymmetryPosToNeg #x

    --Step 4:
    PolyOp.moveVert s # {170} [-5,0,0]
    --Step 5:
    PolyToolsModeling.SymmetryNegToPos #x

    --Step 6:
    PolyOp.moveVert s #{58} [3,0,5]
    --Step 7:
    PolyToolsModeling.SymmetryFlip #x

    --Step 8:
    PolyOp.setVertSelection s #{122,170}
    PolyToolsModeling.SymmetryCopy()
    PolyOp.moveVert s #{122,170} [5,0,-20]
    --Step 9:
    PolyToolsModeling.SymmetryPaste()

その他のモデリング メソッド

<boolean>PolyToolsModeling.MultiHide ()

現在のサブオブジェクト レベルに基づいて、選択したポリゴンまたは選択した頂点のいずれかを非表示にします。

サブオブジェクト レベル 機能
ポリゴン ポリゴンを選択して適用し、それらを非表示にします。
エッジ サポートされていません。
頂点 頂点を選択して適用し、それらを非表示にします。
<boolean>PolyToolsModeling.RotateSelection <float>degree <integer>coordsys <point3>viewDirection

2 つめの引数で定義された座標系内で、現在のサブ選択内容を、3 つめの引数によって指定されたビュー方向に相対的に、指定した度数、時計回りに回転します。

成功した場合は true を、失敗した場合は false を返します。たとえば、サブオブジェクト レベルでない場合などです。

ポリゴンの選択を反時計回りに 30 度回転する:

    --Step 1:
    p = plane lengthsegs:10 widthsegs:10 wirecolor:blue --create a plane
    convertTo p Editable_Poly --convert the plane to Editable_Poly
    select p --select the plane to be able to see the results
    max modify mode --switchCommand PaneltoModify mode
    subObjectLevel = 4 --switch topolygonsub-object level
    polyOp.setFaceSelection p #{22,23} --select two polygons to define the loops
    --Step 2:
    PolyToolsModeling.RotateSelection 30 1 -(viewport.getTM()).row3

<boolean>PolyToolsModeling.MirrorElement <value>axis <boolean>clone

指定した軸に関する選択した要素をミラーリングします。

クローン引数が true として渡された場合、要素は複製されます。

クローン引数が false として渡された場合、元の要素はミラーリングされます。

成功した場合は true を、失敗した場合は false を返します。

<integer>PolyToolsModeling.CreateFace <bitArray>bitarray

BitArray 引数により提示された頂点のインデックスからポリゴンを作成します。

新しいポリゴンのインデックスを返します。