次のメソッドは、メッシュ エッジに対する高度なアクセスを提供します。
エッジの面取り、押し出し、集約
meshop.chamferEdges <Mesh mesh> <edgelist> <float amount>
指定されたエッジを指定された量だけ面取りを行います。
例
|
obj = Box()
convertToMesh obj
meshop.chamferEdges obj #{7,8,11,14,17} 5
update obj
|
|
meshop.extrudeEdges<Mesh mesh> <edgelist> <float height> dir:<{<point3 dir> | #independent | #common}=#independent> node:<node=unsupplied>
指定されたエッジに対応する新しいエッジを作成して、新しいエッジを <height> で移動します。
エッジを移動する方向は、<dir> によって決定されます。<dir> が Point3 値の場合、エッジはその方向に移動します(
<mesh>
がノードの場合、または <mesh> が編集可能メッシュあるいはメッシュ値で、
node:
が指定されている場合、方向は現在の座標系コンテキストにあります。<mesh> が編集可能メッシュまたはメッシュ値で、
node:
が指定されていない場合、方向はメッシュのローカル座標系にあります)。
dir:#independent
が指定されている場合、エッジを使用する面の法線に基づいてエッジが移動します。
dir:#common
が指定されている場合、エッジを使用する面集団の法線に基づいてエッジが移動します。
例
|
obj = Box() --ボックスを作成
convertToMesh obj --EMesh に集約
meshop.extrudeEdges obj #{5,7,14,17} 10.0 --エッジを押し出します。
update obj --メッシュを更新
addmodifier obj (normalmodifier unify:true) --法線を統一します。
addmodifier obj (smooth auto:true) --自動スムージングを行います。
convertToMesh obj --EMesh に集約
|
|
meshop.collapseEdges <Mesh mesh> <edgelist>
指定されたエッジを集約します。
例
|
obj = Box()
convertToMesh obj
meshop.collapseEdges obj #{14,17}
update obj
|
|
エッジのクローンと削除
meshop.cloneEdges <Mesh mesh> <edgelist>
指定されたエッジのクローンを作成します。
meshop.deleteEdges <Mesh mesh> <edgelist> delIsoVerts:<boolean=true>
指定されたエッジを削除します。
delIsoVerts:
が
true
の場合、孤立した頂点が削除されます。
エッジの分割
meshop.divideEdge <Mesh mesh> <int edgeIndex> <float edgef> visDiag1:<boolean=false> visDiag2:<boolean=false> fixNeighbors:<boolean=true> split:<boolean=false>
<edgef> の距離(分数)で指定されたエッジをエッジの長さに沿って分割します。
visDiag1:
および
visDiag2:
は、分割された 2 つのエッジをそれぞれ表示するかどうかを指定します。
fixNeighbors:
が
true
の場合、継ぎ目が適用されるのを防ぐため、エッジの反対側の面(つまり「背面」)も分割されます。
split:
が
true
の場合、メッシュの開口部を対角線に沿って分割し、2 等分されたエッジに対して別々の頂点が作成されます。
例
|
obj = Box() --ボックスを作成
convertToMesh obj --EMesh に集約
meshop.divideEdge obj 5 0.33 --ボトム エッジを 1/3 のところで分割します。
meshop.divideEdge obj 5 0.5 --残りの 2/3 を半分のところで分割します。-> 2 * 1/3
update obj --メッシュを更新
obj.vertexTicks = True --頂点を表示
obj.allEdges=True --すべてのエッジを表示
|
|
meshop.divideEdges <Mesh mesh> <edgelist>
指定されたエッジをすべて半分に分割して、新しいポイントを作成し、面をサブディバイドします。
例
|
obj = Box() --ボックスを作成
convertToMesh obj --EMesh に集約
meshop.divideEdges obj #{5,7,14,17} --エッジを分割します。
update obj --メッシュを更新
obj.vertexTicks = True --頂点を表示
obj.allEdges=True --すべてのエッジを表示
|
|
meshop.edgeTessellate <Mesh mesh> <facelist> <float tension>
指定されたエッジを面分割します。このアルゴリズムは、Faces および Edge SO 要素の操作中に Tessellate モディファイヤで使用されます。
<tension>
は、エッジ面分割のテンションを指定します。テンションの値は 0~.5 で、Tessellate、Edit Mesh、または Editable Mesh UI を 400 で除算した値に一致する必要があります。
例
|
obj = Box() --ボックスを作成
convertToMesh obj --EMesh に集約
meshop.EdgeTessellate obj #{5,6} 0.0 --エッジに基づいて面分割します。
update obj --メッシュを更新
|
|
meshop.turnEdge <Mesh mesh> <int edgeIndex>
指定されたエッジが回転します。両側に面を持つエッジにのみ適用されます。これらの 2 つの面は、四角形と解釈されます。つまり、このエッジは、各面上でこのエッジと反対側にあった頂点との間で対角線を形成し、対角線が結ばれるように再マップされます。
B を使用した A の取得...
meshop.getVertsUsingEdge <Mesh mesh> <edgelist>
指定されたエッジで使用されるすべての頂点に設定されているビットで、size=(mesh 内の #vertices)の BitArray を返します。
スクリプト
|
macroScript Edge2VertSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1]--選択したオブジェクトを取得
edgeSel = getEdgeSelection obj --選択したエッジの頂点を取得
--選択したエッジの頂点を取得します。
vertsSel = meshop.getVertsUsingEdge obj edgeSel
setVertSelection obj vertsSel --頂点を選択
max modify mode --[修正]パネルに切り替え
subObjectLevel =1--頂点の SO レベルを設定
) --on 終了
) --マクロの終了
|
|
meshop.getFacesUsingEdge <Mesh mesh> <edgelist>
指定されたエッジを使用するすべての面に設定されているビットで、size=(mesh 内の #faces)の BitArray を返します。
スクリプト
|
macroScript Edge2FaceSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
edgeSel = getEdgeSelection obj --選択したエッジの頂点を取得
--選択したエッジの面を取得します。
faceSel = meshop.getFacesUsingEdge obj edgeSel
setFaceSelection obj faceSel --面を選択
maxmodify mode --[修正]パネルに切り替え
subObjectLevel =3 --面の SO レベルを設定
) --on 終了
) --マクロの終了
|
|
meshop.getPolysUsingEdge <Mesh mesh> <edgelist> ignoreVisEdges:<boolean=false> threshhold:<float=45.>
指定されたエッジを含む「ポリゴン」にあるすべての面に設定されているビットで、メッシュ内の面の数と等しいサイズの BitArray を返します。
ポリゴンは、非表示エッジを共有するすべての面として定義します。エッジ角度はスレッショルド角度未満です。既定値のスレッショルド角度は 45 度です。
ignoreVisEdges:
が
true
に設定されている場合、エッジの可視性は無視されますが、スレッショルドの関連性は保持されます。
スクリプト
|
macroScript Edge2PolySel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
edgeSel = getEdgeSelection obj --選択したエッジを取得
--選択したエッジのポリゴンを取得します。
faceSel = meshop.getPolysUsingEdge obj edgeSel
setFaceSelection obj faceSel --面を選択
max modify mode --[修正]パネルに切り替え
subObjectLevel =4 --ポリゴンの SO レベルを設定
) --on 終了
) --マクロの終了
|
|
meshop.getEdgesUsingVert <Mesh mesh> <vertlist>
指定された頂点を使用するすべてのエッジに設定されているビットで、size=(メッシュ内の #edges)の BitArray を返します。
スクリプト
|
macroScript Vert2EdgeSel category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
vertsSel = getVertSelection obj --選択した Vert (頂点)を取得
--選択した頂点のエッジを取得します。
edgeSel = meshop.getEdgesUsingVert obj vertsSel
setEdgeSelection obj edgeSel --エッジを選択します。
max modify mode --[修正]パネルに切り替え
subObjectLevel =2 --エッジの SO レベルを設定
)
) --マクロの終了
|
|
meshop.getEdgesReverseEdge <Mesh mesh> <edgelist>
指定されたエッジと同じ頂点を使用するすべての追加エッジに設定されているビットで、size=(メッシュ内の #edges)の BitArray を返します。これらは隣接する面上のエッジです。
例
|
Plane length:100 width:100 isSelected:on
convertTo $ TriMeshGeometry
max modify mode
subobjectLevel = 1
select $.verts[13]
--頂点 13 を使用するエッジを取得します。
edges = meshop.getEdgesUsingVert $ (getVertSelection $)
--それらのエッジで使用される頂点を選択
$.selectedVerts = meshop.getVertsUsingEdge $ edges
update $
--実際に必要なのはこれではなく、頂点 13 を「囲む」
-- すべての頂点です。
faces = meshop.getPolysUsingVert $ 13
$.selectedVerts = meshop.getVertsUsingFace $ faces
update $
--または...
faces = meshop.getFacesUsingVert $ #(13)
edges = meshop.getEdgesUsingFace $ faces
--すべての可視エッジをオフにします。
for e in edges do edges[e]=not (getEdgeVis $ (1+(e-1)/3)(1+mod (e-1) 3))
--これらのエッジの逆となる、隣接する面のエッジを取得します。
--その BitArray を最初のエッジの BitArray で「OR」します。
edges = (meshop.getEdgesReverseEdge $ edges) + edges
--エッジを使用する面を取得し、その BitArray を最初の
--面の BitArray で「OR」します。
faces = (meshop.getFacesUsingEdge $ edges) + faces
$.selectedVerts = meshop.getVertsUsingFace $ faces
update $
|
meshop.getOpenEdges <Mesh mesh>
単一面で使用されるすべてのエッジに設定されているビットで、size=(
mesh
内の #edges)の BitArray を返します。
スクリプト
|
macroScript SelOpenEdges category:"MXS Help"
(
--単一の EMesh オブジェクトが選択されるようにします
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --選択したオブジェクトを取得
max modify mode --[修正]パネルに切り替え
subObjectLevel =2 --エッジの SO レベルを設定
openEdges = meshop.getOpenEdges obj --開いているエッジを取得します。
setEdgeSelection obj openEdges --開いているエッジを選択
)
) --マクロの終了
|
|
自動エッジの可視性
meshop.autoEdge <Mesh mesh> <edgelist> <float threshold> type:<{#SetClear| #Set| #Clear}=#SetClear>
スレッショルド角度に基づいて、指定されたエッジの可視性を設定またはクリアします。
注:
エッジに autoEdged を実行する場合、そのエッジ、および同一頂点を共有する面上の「逆の」エッジの両方をエッジ仕様で指定する必要があります。