Meshop エッジ メソッド
次のメソッドは、メッシュ エッジに対する高度なアクセスを提供します。
エッジの面取り、押し出し、集約
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() --create a Box
convertToMesh obj --collapse to EMesh
meshop.extrudeEdges obj #{5,7,14,17} 10.0 --extrude edges
update obj --update the mesh
addmodifier obj (normalmodifier unify:true) --unify normals
addmodifier obj (smooth auto:true) --auto-smooth
convertToMesh obj --collapse to 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() --create a Box
convertToMesh obj --collapse to EMesh
meshop.divideEdge obj 5 0.33 --divide bottom edge at 1/3
meshop.divideEdge obj 5 0.5 --divide remaining 2/3 at half -> 2 * 1/3
update obj --update the mesh
obj.vertexTicks = True --show the vertices
obj.allEdges=True --show all edges
|
|
meshop.divideEdges <Mesh mesh> <edgelist>
指定されたエッジをすべて半分に分割して、新しいポイントを作成し、面をサブディバイドします。
例
|
obj = Box() --create a Box
convertToMesh obj --collapse to EMesh
meshop.divideEdges obj #{5,7,14,17} --divide edges
update obj --update the mesh
obj.vertexTicks = True --show the vertices
obj.allEdges=True --show all edges
|
|
meshop.edgeTessellate <Mesh mesh> <facelist> <float tension>
指定されたエッジを面分割します。このアルゴリズムは、Faces および Edge SO 要素の操作中に Tessellate モディファイヤで使用されます。
<tension> は、エッジ面分割のテンションを指定します。テンションの値は 0~.5 で、Tessellate、Edit Mesh、または Editable Mesh UI を
400 で除算した値に一致する必要があります。
例
|
obj = Box() --create a Box
convertToMesh obj --collapse to EMesh
meshop.EdgeTessellate obj #{5,6} 0.0 --tessellate faces based on edges
update obj --update the mesh
|
|
meshop.turnEdge <Mesh mesh> <int edgeIndex>
指定されたエッジが回転します。両側に面を持つエッジにのみ適用されます。これらの 2 つの面は、四角形と解釈されます。つまり、このエッジは、各面上でこのエッジと反対側にあった頂点との間で対角線を形成し、対角線が結ばれるように再マップされます。
B を使用した A の取得...
meshop.getVertsUsingEdge <Mesh mesh> <edgelist>
指定されたエッジで使用されるすべての頂点に設定されているビットで、size=(mesh 内の #vertices)の BitArray を返します。
スクリプト
|
macroScript Edge2VertSel category:"MXS Help"
(
--make sure a single EMesh object is selected
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1]--get selected object
edgeSel = getEdgeSelection obj --get selected Edges
--get Verts of selected Edges:
vertsSel = meshop.getVertsUsingEdge obj edgeSel
setVertSelection obj vertsSel --select the Verts
max modify mode --switch to Modify panel
subObjectLevel =1--set Vertex SO level
) --end on
) --end macro
|
|
meshop.getFacesUsingEdge <Mesh mesh> <edgelist>
指定されたエッジを使用するすべての面に設定されているビットで、size=(mesh 内の #faces)の BitArray を返します。
スクリプト
|
macroScript Edge2FaceSel category:"MXS Help"
(
--make sure a single EMesh object is selected
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --get selected object
edgeSel = getEdgeSelection obj --get selected Edges
--get Faces of selected Edges:
faceSel = meshop.getFacesUsingEdge obj edgeSel
setFaceSelection obj faceSel --select the Faces
maxmodify mode --switch to Modify panel
subObjectLevel =3 --set Face SO level
) --end on
) --end macro
|
|
meshop.getPolysUsingEdge <Mesh mesh> <edgelist> ignoreVisEdges:<boolean=false> threshhold:<float=45.>
指定されたエッジを含む「ポリゴン」にあるすべての面に設定されているビットで、メッシュ内の面の数と等しいサイズの BitArray を返します。
ポリゴンは、非表示エッジを共有するすべての面として定義します。エッジ角度はしきい値角度未満です。既定値のしきい値角度は 45 度です。
ignoreVisEdges: が true に設定されている場合、エッジの可視性は無視されますが、しきい値の関連性は保持されます。
スクリプト
|
macroScript Edge2PolySel category:"MXS Help"
(
--make sure a single EMesh object is selected
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --get selected object
edgeSel = getEdgeSelection obj --get selected Edges
--get Polygons of selected Edges:
faceSel = meshop.getPolysUsingEdge obj edgeSel
setFaceSelection obj faceSel --select the Faces
max modify mode --switch to Modify panel
subObjectLevel =4 --set Polygon SO level
) --end on
) --end macro
|
|
meshop.getEdgesUsingVert <Mesh mesh> <vertlist>
指定された頂点を使用するすべてのエッジに設定されているビットで、size=(メッシュ内の #edges)の BitArray を返します。
スクリプト
|
macroScript Vert2EdgeSel category:"MXS Help"
(
--make sure a single EMesh object is selected
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --get selected object
vertsSel = getVertSelection obj --get selected Verts
--get Edges of selected Verts:
edgeSel = meshop.getEdgesUsingVert obj vertsSel
setEdgeSelection obj edgeSel --select the edges
max modify mode --switch to Modify panel
subObjectLevel =2 --set Edge SO level
)
) --end macro
|
|
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]
--get edges that use vertex 13
edges = meshop.getEdgesUsingVert $ (getVertSelection $)
--select the vertices used by those edges
$.selectedVerts = meshop.getVertsUsingEdge $ edges
update $
--not what we wanted, really want all vertices
-- "surrounding" vertex 13
faces = meshop.getPolysUsingVert $ 13
$.selectedVerts = meshop.getVertsUsingFace $ faces
update $
--or ...
faces = meshop.getFacesUsingVert $ #(13)
edges = meshop.getEdgesUsingFace $ faces
--turn off all visible edges
for e in edges do edges[e]=not (getEdgeVis $ (1+(e-1)/3)(1+mod (e-1) 3))
--get the edges on the adjacent faces that are the "reverse" of these edges
--"OR" that bitarray with the initial edges bitarray
edges = (meshop.getEdgesReverseEdge $ edges) + edges
--get the faces that use the edges, and "OR" that bitarray with the initial
--face bitarray
faces = (meshop.getFacesUsingEdge $ edges) + faces
$.selectedVerts = meshop.getVertsUsingFace $ faces
update $
|
meshop.getOpenEdges <Mesh mesh>
単一面で使用されるすべてのエッジに設定されているビットで、size=( mesh 内の #edges)の BitArray を返します。
スクリプト
|
macroScript SelOpenEdges category:"MXS Help"
(
--make sure a single EMesh object is selected
on isEnabled return
selection.count == 1 and classof selection[1] == Editable_Mesh
on execute do
(
obj = selection[1] --get selected object
max modify mode --switch to Modify panel
subObjectLevel =2 --set Edge SO level
openEdges = meshop.getOpenEdges obj --get open edges
setEdgeSelection obj openEdges --select the open edges
)
) --end macro
|
|
自動エッジの可視性
meshop.autoEdge <Mesh mesh> <edgelist> <float threshold> type:<{#SetClear| #Set| #Clear}=#SetClear>
しきい値角度に基づいて、指定されたエッジの可視性を設定またはクリアします。
注:
エッジに autoEdged を実行する場合、そのエッジ、および同一頂点を共有する面上の「逆の」エッジの両方をエッジ仕様で指定する必要があります。