跳到主要内容

封闭线选择三角面并分割网格

在通过封闭曲线分割网格时,一般先将用户绘制的二维闭合线投影到三维网格表面上,得到对应的三维边路径(EdgePath)。具体实现通常是对每个 2D 线段沿视线投射到网格上,求交点并连接形成网格上的闭合路径。接下来使用 MeshTopology 中的区域提取工具:例如 MR::fillContourLeft(topology, contourEdges) 可以计算出位于边路径左侧(或右侧)的所有三角面。这样就得到被闭合线包围的面集合。最后需要根据该边界将网格拆分:一种做法是在边路径处对原三角形进行分割插入新边,然后把路径一侧的面与另一侧的面区分开来。例如,可以调用 mesh.topology.deleteFaces(outsideFaces) 删除路径外的三角面,使网格只保留选中的部分,或反之;任意拓扑修改后同样要调用 mesh.invalidateCaches() 以更新缓存。总之,利用投影得到的 EdgePath 结合 fillContourLeft(和后续的删除/复制操作),即可实现基于用户封闭线的网格分割。