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.>

指定されたエッジを含む「ポリゴン」にあるすべての面に設定されているビットで、mesh 内の面の数と等しいサイズの 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 を実行する場合、そのエッジ、および同一頂点を共有する面上の「逆の」エッジの両方をエッジ仕様で指定する必要があります。

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

Editable_Mesh : GeometryClass および TriMesh : 値