本文整理汇总了C++中Face::AdoptEdgeLoop方法的典型用法代码示例。如果您正苦于以下问题:C++ Face::AdoptEdgeLoop方法的具体用法?C++ Face::AdoptEdgeLoop怎么用?C++ Face::AdoptEdgeLoop使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Face
的用法示例。
在下文中一共展示了Face::AdoptEdgeLoop方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
EdgeMesh::Face* EdgeMesh::Face::DissolveEdge(Edge& edge, std::vector<Polygon>* newHoles)
{
assert(edge.twin);
assert(edge.face == this);
Face* otherFace = edge.twin->face == this ? nullptr : edge.twin->face;
assert(IsValid());
if (otherFace)
{
assert(otherFace->IsValid());
AdoptEdgeLoop(*edge.twin);
}
Edge& oldPrev = *edge.prev;
Edge& newNext = *edge.twin->next;
Edge& newPrev = *edge.twin->prev;
Edge& oldNext = *edge.next;
oldPrev.ConnectTo(newNext);
newPrev.ConnectTo(oldNext);
m_edges.erase(FindEdge(*edge.twin));
m_edges.erase(FindEdge(edge));
if (!otherFace)
{
assert(newHoles);
if (newHoles)
{
Face hole;
hole.AdoptEdgeLoop(newPrev);
if (hole.GetPolygon().IsCW()) // Got the wrong bit!
swap(*this, hole);
Polygon holePoly = hole.GetPolygon();
holePoly.MakeCW();
newHoles->push_back(holePoly);
}
}
assert(IsValid());
return otherFace;
}