Mxs:收集网格的边界边

Mxs: Collect Border edges of Mesh

我正在尝试收集我的网格中所有边界的边缘(开放边缘)并将这些边缘存储在一个数组中。更具体地说,我想将边缘分成与网格中的边界一样多的数组。

示例:我们有一个带有 2 个孔的网格(网格图像见附件),因此它有 2 个边框,我希望脚本生成一个包含 2 个子数组、1 个子数组的数组对于每个孔/'open edge loop'。此网格的图像:test mesh, vertex numbers indicated in blue/purple, edge numbers indicated in red

如果有人能告诉我将边缘收集到数组中的正确方法是什么,我们将不胜感激。如果你know/can想到一个好的方法将边缘分成各自的子阵列(对应于网格中的holes/border)请告诉我。

图片:

open edge loops indicated

desired result/output

我尝试过的:

我尝试使用命令

选择开放边
 polyOp.getOpenEdges $

我确实得到了这个选择开放边缘的工作,不幸的是我无法使用这个命令 'get' 所述开放边缘的边缘编号,因为 getOpenEdges 命令的结果是一个位数组(here and here).

我写了一些伪代码,应该可以在所有开放边都存储在数组中后将边分离到各自的子数组中:

--注意:open_edges是存储网格所有open/border条边的数组

i = 0; edge_found = true
while open_edges.count > 0 do(
    current_loop = #()
    while edge_found == true do(
        i += 1
        if i==1 do( append current_loop open_edges[1]; Deleteitem open_edges 1 )

        -- Select 2nd vertex of current_loop[-1]
        -- Find edge in 'open_edges' which has this vertex
        --if(no edge is found)then( edge_found = false )
        --else(  
            -- Append the found edge to 'current_loop'
            -- Remove the found edge from 'open_edges'
            --)
        ) --end while edge_found == true do(
    ) --end while open_edges.count > 0 do(

如果你在我的 code/approach 中发现错误将边缘分成各自的子数组(对应于网格中的 holes/border)或者可以想到 better/more 高效执行此过程的方法请告诉我。

谢谢!

注意:在附图中:'edge_and_vertex_nums.png' 我用红色标出了边号,在 blue/purple 中标出了顶点号。

试试这个。 您也可以简单地将 firstHole 数组与 allOpenEdges 进行比较并删除重复项。

allOpenEdges = (polyop.getOpenEdges $) as array
firstHole = (polyop.getBorderFromEdge $ allOpenEdges[1]) as array

select $
subobjectlevel = 2
polyop.setEdgeSelection $ firstHole
subobjectLevel = 3
max select invert
secondHole = (polyop.getedgeselection $) as array
subobjectLevel = 0

format "count1: %, count2: %\n" firstHole.count secondHole.count