meshOp Struct により公開されている次のメソッドは、メッシュ面に対する高度なアクセスを提供します。
面の数
<integer>meshop.getNumFaces <Mesh mesh>
メッシュの面の数を返します。
meshop.setNumFaces <Mesh mesh> <int>
メッシュの面の数を設定します。
面の情報の取得
<float>meshop.getFaceArea <Mesh mesh> <facelist>
指定された面の範囲を浮動小数点として返します。例
例
|
--領域が 20.0 よりも小さいすべての面を選択
obj = sphere radius:20 --球を作成
convertToMesh obj --EditableMesh に集約
faceSel= #() -- 整数の配列。
--メッシュ内のすべての面を巡回するようにループします。
--面の領域をスレッショルドと比較して、
--面を選択した配列に追加します。
for f = 1 to obj.numfaces do
if meshop.getFaceArea obj #{f} < 20.0 then
append faceSel f
setFaceSelection obj faceSel --収集したすべての面を選択
update obj --メッシュを更新
max modify mode --修正モードに切り替え
select obj --メッシュを選択
subObjectLevel = 3 --面のサブオブジェクト レベルに切り替え
|
|
<point3>meshop.getBaryCoords <Mesh mesh> <int faceIndex> <point3 pos> node:<node=unsupplied>
指定された面の平面における指定されたポイントの(指定された面に相対する)重心座標。<mesh> がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、位置は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、位置はメッシュのローカル座標系にあります。
<point3>meshop.getFaceCenter <Mesh mesh> <int faceIndex> node:<node=unsupplied>
指定された面の中心を返します。<mesh> がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、位置は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、位置はメッシュのローカル座標系にあります。
meshop.getFaceRNormals <Mesh mesh> <int faceIndex> node:<node=unsupplied>
面の 3 つの頂点に対してレンダー法線の 3 つの要素配列を返します。<mesh> がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、位置は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、位置はメッシュのローカル座標系にあります。
面の削除
meshop.deleteFaces <Mesh mesh> <facelist> delIsoVerts:<boolean=true>
指定された面を削除します。
delIsoVerts:
が
true
の場合、孤立した頂点が削除されます。
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--メッシュ内の面を削除、ただし頂点は残します:
meshop.deleteFaces obj #{1..obj.numfaces} delIsoVerts:false
update obj --メッシュを更新
max modify mode --修正モードに切り替え
select obj --メッシュを選択
SubObjectLevel = 1 --頂点レベルに切り替えて、頂点を表示
|
|
meshop.removeDegenerateFaces <Mesh mesh>
メッシュ内の展開された面を削除します。展開された面には、同じ頂点インデックスが複数あります。
meshop.removeIllegalFaces <Mesh mesh>
メッシュ内の不正な面を削除します。不正な面には、1 つまたは複数の範囲外の頂点インデックスがあります。
面の非表示化
meshop.setHiddenFaces <Mesh mesh> <facelist>
指定された面を非表示にして、指定されていない面を表示するように設定します。
meshop.getHiddenFaces <Mesh mesh>
非表示のすべての面に設定されているビットで、size=(mesh 内の #faces)の BitArray を返します。
面のベベル、押し出し、クローン、集約およびデタッチ
meshop.bevelFaces <Mesh mesh> <facelist> <float height> <float outline> dir:<{<point3 dir> | #independent | #common}=#independent> node:<node=unsupplied>
指定された面を
<height>
で移動し、
<outline>
でアウトラインを作成します。
注:このメソッドは、編集可能メッシュ UI におけるべベル機能には対応していません。この機能では、新しい面を作成せずに面を移動してアウトラインを作成します。新しくべべル処理された面を作成する関連メソッドの詳細については、このページの
meshop.ExtrudeFaces を参照してください。
面を移動する方向は、
<dir>
によって決定されます。
dir
が Point3 値の場合、面はその方向に移動します。
(<mesh> がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、方向は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、方向はメッシュのローカル座標系にあります)。
dir:#independent
が指定されている場合、面は個々の面の法線に基づいて移動されます。
dir:#common
が指定されている場合、面は面集団の法線に基づいて移動されます。
meshop.extrudeFaces <Mesh mesh> <facelist> <float height> <float outline> dir:<{<point3 dir> | #independent | #common}=#independent> node:<node=unsupplied>
指定された面に対応する新しい面を作成して、新しい面を <height> で移動し、
<outline>
でアウトラインを作成します。
面を移動する方向は、
dir
によって決定されます。
dir:
が Point3 値の場合、面はその方向に移動します。
(<mesh> がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、方向は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、方向はメッシュのローカル座標系にあります)。
dir:#independent
が指定されている場合、面は個々の面の法線に基づいて移動されます。
dir:#common
が指定されている場合、面は面集団の法線に基づいて移動されます。
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --Editable_Mesh に集約
--面の半分からループして、1 に戻るまでカウントします。
--ExtrudeFaces によって新しい面が作成されるので、後ろ向きにカウントすることで
--ループは元の面のみを巡回することになります。
for f = obj.numfaces/2 to 1 by -1 do
meshop.extrudeFaces obj #{f} 5.0 -1.0 --単一の面を押し出します。
update obj --メッシュを更新
|
|
meshop.cloneFaces <Mesh mesh> <facelist>
指定された面のクローンを作成します。
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--面の半分のクローンを作成します。クローンは自動的に選択されます。
meshop.cloneFaces obj #{1..obj.numfaces/2}
--ローカル法線に沿って 20 単位のところで、選択されている面をオフセットします。
meshop.bevelFaces obj (getFaceSelection obj) 20 0 dir:#independent
update obj--メッシュを更新
|
|
meshop.collapseFaces <Mesh mesh> <facelist>
指定された面を集約します。
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--面の半分を集約
meshop.collapseFaces obj #{1..obj.numfaces/2}
update obj --メッシュを更新
|
|
meshop.detachFaces <Mesh mesh> <facelist> delete:<boolean=true> asMesh:<boolean=false>
指定された面をデタッチします。
delete:
が
true
の場合、面はデタッチ後に削除されます。
delete:
が
false
の場合、面は削除されません。
asMesh:
が
true
の場合、面はデタッチされ、メッシュ値として返されます。
asMesh:
が
false
の場合、面はメッシュの要素としてデタッチされ、OK が返されます。
例
|
--元のメッシュ内部の要素として面をデタッチします。
obj = geosphere pos:[100,0,0] --天球体を作成
convertToMesh obj --EditableMesh に集約
--面の半分を要素としてデタッチし、元の面を削除します。
meshop.detachFaces obj #{1..obj.numfaces/2} delete:true
update obj --メッシュを更新
--この例では、同じメッシュが別々のオブジェクトとしてデタッチされます。
obj = geosphere pos:[0,0,0] --別の天球体を作成
convertToMesh obj --EditableMesh に集約
-- 面をメッシュとしてデタッチし、
--変数内の結果の TriMesh を取得します:
newMesh = meshop.detachFaces obj #{1..obj.numfaces/2} delete:true asMesh:true
update obj --メッシュを更新
emesh = Editable_mesh() --空の Editable_mesh を作成
emesh.mesh = newMesh --デタッチされた面を新しいメッシュに割り当てます。
update emesh --メッシュを更新
|
|
面の分割
meshop.divideFace <Mesh mesh> <int faceIndex> baryCoord:<point3=unsupplied>
指定された面を分割します。
baryCoord:
が指定されている場合、対応する位置に新しい頂点が作成されます。
baryCoord:
が指定されていない場合、面の中心に新しい頂点が作成されます。
「重心座標」も参照してください。
例
|
obj = plane() --平面を作成
convertToMesh obj --Editable_Mesh に集約
--すべての元の面を巡回するように後ろ向きにループします。
--これによって、面の配列に追加された新しい面がすべて無視されます。
for f = obj.numfaces to 1 by -1 do
meshop.divideFace obj f barycoord:[0.1,0.1,0.5] --面を分割します。
update obj --メッシュを更新
--重心座標のコンポーネントの合計が
--1.0 にならない場合、各値は比例的に増減されます。したがって、上記の
--座標は[0.142857,0.142857,0.714285]と同値になります。.
|
|
meshop.divideFaceByEdges <Mesh mesh> <int faceIndex> <int edge1Index> <float edge1f> <int edge2Index> <float edge2f> fixNeighbors:<boolean=true> split:<boolean=false>
指定された面を分割します。新しい頂点は、指定された距離(分数)の指定されたエッジに、それらの長さに沿って作成されます。
fixNeighbors:
が
true
の場合、継ぎ目が適用されるのを防ぐため、エッジの反対側の面(つまり「背面」)も分割されます。
split:
が
true
の場合、メッシュの開口部を対角線に沿って分割し、2 等分されたエッジに対して別々の頂点が作成されます。
例
|
obj = plane lengthsegs:1 widthsegs:1 --2 つの面の単純な平面を作成
convertToMesh obj --Editable_Mesh に集約
obj.allEdges = true --すべてのエッジを表示
--エッジ 2 と 3 に接続している面 1 を、長さに沿って 0.25 対 0.75 に分割します。
--長さ。これによってエッジ 1 に平行な新しいエッジが作成されます。
meshop.divideFaceByEdges obj 1 2 0.25 3 0.75
update obj --メッシュを更新
|
|
meshop.divideFaces <Mesh mesh> <facelist>
指定された面を分割し、面の中心に新しい頂点を作成します。
例
|
--次のコードは、面の中心モードの面分割と同じものではありません。
obj = plane() --平面を作成
convertToMesh obj --Editable_Mesh に集約
--面の中央に新しい頂点を配置することですべての面を分割します。
meshop.divideFaces obj #{1..obj.numfaces}
update obj --メッシュを更新
|
|
面の分解
meshop.explodeAllFaces <Mesh mesh> <float threshold>
メッシュを別の要素に分解します。
<threshold> は面と面の間の角度を指定し、それらの面が同じ要素に存在するか、または別の要素に存在するかを示します。
警告:
|
浮動小数点のスレッショルド パラメータは、現在、ラジアンで指定することが求められています。
|
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--メッシュ内のすべての面を、角度に関係なく要素に分解します。
meshop.explodeAllFaces obj 0
update obj --メッシュを更新
|
|
meshop.explodeFaces <Mesh mesh> <facelist> <float threshold>
指定された面を別の要素に分解します。
<threshold> は面と面の間の角度を指定し、それらの面が同じ要素に存在するか、または別の要素に存在するかを示します。
例
|
obj = geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--面の半分を角度に関係なく分解します。
meshop.explodeFaces obj #{1..obj.numfaces/2} 0
--分解した面を(explodeFaces メソッドによって選択して)
--アウトラインなしで 10 単位のところの法線に沿って移動します。
meshop.bevelFaces obj (getFaceSelection obj) 10 0 dir:#independent
update obj --メッシュを更新
|
|
B を使用した A の取得
meshop.getVertsUsingFace <Mesh mesh> <facelist>
指定された面で使用されるすべての頂点に設定されているビットで、size=(mesh 内の #vertices)の BitArray を返します。
スクリプト
|
macroScript Face2VertSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1]--選択したオブジェクトを取得
faceSel = getFaceSelection obj--選択した面を取得
--選択した面の頂点を取得します。
vertsSel = meshop.getVertsUsedFace obj faceSel
setVertSelection obj vertsSel --頂点を選択
update obj --メッシュを更新
max modify mode--[修正]パネルに切り替え
subObjectLevel =1--頂点の SO レベルを設定
)
) --マクロの終了
|
meshop.getEdgesUsingFace <Mesh mesh> <facelist>
指定された面で使用されるすべてのエッジに設定されているビットで、size=(
mesh
内の #edges)の BitArray を返します。
スクリプト
|
macroScript Face2EdgeSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
faceSel = getFaceSelection obj --選択した面を取得
--選択した面のエッジを取得します。
edgeSel = meshop.getEdgesUsingFace obj faceSel
setEdgeSelection obj edgeSel --エッジを選択します。
update obj --メッシュを更新
max modify mode --[修正]パネルに切り替え
subObjectLevel =2 --エッジの SO レベルを設定
)
) --マクロの終了
|
meshop.getPolysUsingFace <Mesh mesh> <facelist> ignoreVisEdges:<boolean=false> threshhold:<float=45.>
指定された面が含まれる「ポリゴン」にあるすべての面に設定されているビットで、size=(mesh 内の #faces)の BitArray を返します。ポリゴンは、非表示エッジを共有するすべての面として定義します。エッジ角度はスレッショルド角度未満です。既定値のスレッショルド角度は
45 度です。
ignoreVisEdges:
が
true
に設定されている場合、エッジの可視性は無視されますが、スレッショルドの関連性は保持されます。
meshop.getFacesUsingVert <Mesh mesh> <vertlist>
指定された頂点を使用するすべての面に設定されているビットで、size=(メッシュ内の #faces)の BitArray を返します。
例
|
obj =Sphere() --球を作成
convertToMesh obj --EditableMesh に集約
--最初の頂点(北極)によって使用される面を取得
verts= meshop.getFacesUsingVertobj #{1}
--最後の頂点(南極)によって使用される面を追加
verts+= meshop.getFacesUsingVertobj #{obj.numverts}
--両方の極の頂点によって使用される面を選択
setFaceSelectionobjverts
updateobj --メッシュを更新
max modifymode --修正モードに切り替え
selectobj --メッシュを選択
subObjectLevel=3 --面のサブオブジェクト レベルに切り替え
|
|
スクリプト
|
macroScript Vert2FaceSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
onisEnabledreturn
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
vertSel = getVertSelection obj --選択した頂点を取得
--選択した頂点の面を取得
faceSel = meshop.getFacesUsingVert obj vertSel
setFaceSelection obj vertsSel --面を選択
update obj --メッシュを更新
max modify mode --[修正]パネルに切り替え
subObjectLevel =3 --面の SO レベルを設定
)
) --マクロの終了
|
meshop.getElementsUsingFace <Mesh mesh> <facelist> fence:<facelist=unsupplied>
要素内の少なくとも 1 つの面が <facelist> に指定されている場合に、要素のすべての面に設定されているビットで、size=(mesh 内の #faces)の BitArray を返します。
fence:
が指定されている場合、その面は要素の境界とみなされ、処理されません。
meshop.getVertsUsedOnlyByFaces <Mesh mesh> <facelist>
指定されたエッジで使用されるすべての面に設定されているビットで、size=(mesh 内の #vertices)の BitArray を返します。
法線のフリップと統一
meshop.unifyNormals <Mesh mesh> <facelist>
指定された面の法線を統一します。
meshop.flipNormals <Mesh mesh> <facelist>
指定された面の法線をフリップします。
例
|
obj =sphere() -- 球を作成
convertToMesh obj --EditableMesh に集約
--上半分の面の法線をフリップします。
meshop.flipNormalsobj #{1..obj.numfaces/2}
updateobj --メッシュを更新
|
|
平面化
meshop.makeFacesPlanar <Mesh mesh> <facelist>
指定された面が平面になるように移動します。
例
|
obj = sphere()
convertToMesh obj
--球面の上半分の面を作成します:
meshop.makeFacesPlanar obj #{1..obj.numfaces/2.0}
update obj
|
|
面の自動スムージング
meshop.autoSmooth <Mesh mesh> <facelist> <float threshold>
スレッショルド角度に基づいて、指定された面のスムージングを行います。
例
|
obj =geosphere() --天球体を作成
convertToMesh obj --EditableMesh に集約
--面の半分をスムージングします。
meshop.autoSmoothobj #{obj.numfaces/2..obj.numfaces} 0.0
update obj --メッシュを更新
|
|