remove polyhedron delegate

This commit is contained in:
Lingjie Zhu 2017-07-08 22:52:25 +08:00
parent f38c0cb9ce
commit f8b19da416
1 changed files with 21 additions and 39 deletions

View File

@ -317,47 +317,29 @@ public:
bool is_manifold_surface(const std::vector<int> &tris, const std::vector<Point> &vtx) {
typedef CGAL::Polyhedron_3<GeomTraits> PolyhedronSurface;
typedef typename PolyhedronSurface::HalfedgeDS HDS;
// typedef typename HDS::Vertex Vertex;
// typedef typename Vertex::Point Point;
class Build_triangle : public CGAL::Modifier_base<HDS> {
public:
Build_triangle(const std::vector<int> &tris_, const std::vector<Point> &vtx_)
: m_tris_ref(tris_), m_vtx_ref(vtx_), m_is_manifold(true) {};
bool is_manifold() { return m_is_manifold; }
void operator()(HDS &hds) {
// Postcondition: hds is a valid polyhedral surface.
CGAL::Polyhedron_incremental_builder_3<HDS> builder(hds, true);
builder.begin_surface(m_vtx_ref.size(), m_tris_ref.size() / 3);
BOOST_FOREACH(const Point &v, m_vtx_ref)
builder.add_vertex(v);
for (std::vector<int>::const_iterator itr = m_tris_ref.begin(); itr != m_tris_ref.end(); itr += 3) {
if (m_is_manifold = builder.test_facet(itr, itr + 3)) {
builder.begin_facet();
builder.add_vertex_to_facet(*itr);
builder.add_vertex_to_facet(*(itr + 1));
builder.add_vertex_to_facet(*(itr + 2));
builder.end_facet();
}
else {
// std::cerr << "test_facet failed" << std::endl;
builder.end_surface();
return;
}
}
builder.end_surface();
m_is_manifold = !builder.error();
HDS hds;
CGAL::Polyhedron_incremental_builder_3<HDS> builder(hds, true);
builder.begin_surface(vtx.size(), tris.size() / 3);
BOOST_FOREACH(const Point &v, vtx)
builder.add_vertex(v);
for (std::vector<int>::const_iterator itr = tris.begin(); itr != tris.end(); itr += 3) {
if (builder.test_facet(itr, itr + 3)) {
builder.begin_facet();
builder.add_vertex_to_facet(*itr);
builder.add_vertex_to_facet(*(itr + 1));
builder.add_vertex_to_facet(*(itr + 2));
builder.end_facet();
}
private:
const std::vector<int> &m_tris_ref;
const std::vector<Point> &m_vtx_ref;
bool m_is_manifold;
};
else {
// std::cerr << "test_facet failed" << std::endl;
builder.end_surface();
return false;
}
}
builder.end_surface();
PolyhedronSurface p;
Build_triangle tri_builder(tris, vtx);
p.delegate(tri_builder);
return tri_builder.is_manifold();
return true;
}
/**