接上篇《基于HalfEdge模型加面算法分析(1)》
6.Connect next/previous halfedges
连接 半边指向下一半边 半边的前半边 的关系,这是最复杂的一步,有多种出现情况,下面我们分情况讨论:
情况1:Both edges are new
要连接的两边边都是新边
faceHalfedges[i].Opposite.Previous = faceHalfedges[j].Opposite;
faceHalfedges[j].Opposite.Next = faceHalfedges[i].Opposite;
情况2:This is new, next is old
当前边是新边,下一条不是新边,如图三角形1是已经构建过的了
faceHalfedges[i].Opposite.Previous = faceHalfedges[j].Previous;
faceHalfedges[j].Previous.Next = faceHalfedges[i].Opposite;
情况3: This is old, next is new
当前边是旧边,下一条是新边,如下图,三角形1是已经构建过的了
faceHalfedges[i].Next.Previous = faceHalfedges[j].Opposite;
faceHalfedges[j].Opposite.Next = faceHalfedges[i].Next;
情况4: Both edges are new and vertex has faces connected already
两条边都是新的且顶点已经有面连接了,如图三角形已经构建过了,对于中间的顶点来说已经连接了面1
Halfedge closeHalfedge = null;
// Find the closing halfedge of the first available opening
foreach (Halfedge h in faceVertices[j].Halfedges)
{
if (h.Face == null)
{
closeHalfedge = h;
break;
}
}
Debug.Assert(closeHalfedge != null);
Halfedge openHalfedge = closeHalfedge.Previous;
// Link new outer halfedges into this opening
faceHalfedges[i].Opposite.Previous = openHalfedge;
openHalfedge.Next = faceHalfedges[i].Opposite;
faceHalfedges[j].Opposite.Next = closeHalfedge;
closeHalfedge.Previous = faceHalfedges[j].Opposite;
三 新构建好的三角形面(半边数据)已经添加到模型中,渲染出来,加面算法完成