diff options
author | Marius Kintel <marius@kintel.net> | 2011-12-07 04:21:11 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2011-12-07 04:21:11 (GMT) |
commit | 679b8d05c8e25ce95e655b2c0f0e2793e408c368 (patch) | |
tree | 9132297412ee30f86923f3efedad58e986619562 /src/CGALEvaluator.cc | |
parent | 9d296acf67a24f5f6120ab8b0dc628f097a5920e (diff) |
bugfix: 2D hull() now works with for loops. Thanks to nophead to reasserting this bug.
Diffstat (limited to 'src/CGALEvaluator.cc')
-rw-r--r-- | src/CGALEvaluator.cc | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index 1772354..684ab42 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -116,13 +116,12 @@ CGAL_Nef_polyhedron CGALEvaluator::applyToChildren(const AbstractNode &node, CGA return N; } -extern CGAL_Nef_polyhedron2 *convexhull2(std::list<CGAL_Nef_polyhedron2*> a); - CGAL_Nef_polyhedron CGALEvaluator::applyHull(const CgaladvNode &node) { CGAL_Nef_polyhedron N; std::list<CGAL_Nef_polyhedron2*> polys; - std::list<CGAL_Polyhedron::Vertex::Point_3> points; + std::list<CGAL_Nef_polyhedron2::Point> points2d; + std::list<CGAL_Polyhedron::Vertex::Point_3> points3d; int dim = 0; BOOST_FOREACH(const ChildItem &item, this->visitedchildren[node.index()]) { const AbstractNode *chnode = item.first; @@ -137,23 +136,32 @@ CGAL_Nef_polyhedron CGALEvaluator::applyHull(const CgaladvNode &node) continue; } if (dim == 2) { - polys.push_back(chN.p2.get()); + CGAL_Nef_polyhedron2::Explorer explorer = chN.p2->explorer(); + BOOST_FOREACH(const CGAL_Nef_polyhedron2::Explorer::Vertex &vh, + std::make_pair(explorer.vertices_begin(), explorer.vertices_end())) { + if (explorer.is_standard(&vh)) { + points2d.push_back(explorer.point(&vh)); + } + } } else if (dim == 3) { CGAL_Polyhedron P; chN.p3->convert_to_Polyhedron(P); - std::transform(P.vertices_begin(), P.vertices_end(), std::back_inserter(points), + std::transform(P.vertices_begin(), P.vertices_end(), std::back_inserter(points3d), boost::bind(static_cast<const CGAL_Polyhedron::Vertex::Point_3&(CGAL_Polyhedron::Vertex::*)() const>(&CGAL_Polyhedron::Vertex::point), _1)); } chnode->progress_report(); } if (dim == 2) { - N = CGAL_Nef_polyhedron(convexhull2(polys)); + std::list<CGAL_Nef_polyhedron2::Point> result; + CGAL::convex_hull_2(points2d.begin(), points2d.end(),std:: back_inserter(result)); + N = CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron2(result.begin(), result.end(), + CGAL_Nef_polyhedron2::INCLUDED)); } else if (dim == 3) { CGAL_Polyhedron P; - CGAL::convex_hull_3(points.begin(), points.end(), P); + CGAL::convex_hull_3(points3d.begin(), points3d.end(), P); N = CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron3(P)); } return N; |