summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-12-07 04:21:11 (GMT)
committerMarius Kintel <marius@kintel.net>2011-12-07 04:21:11 (GMT)
commit679b8d05c8e25ce95e655b2c0f0e2793e408c368 (patch)
tree9132297412ee30f86923f3efedad58e986619562 /src
parent9d296acf67a24f5f6120ab8b0dc628f097a5920e (diff)
bugfix: 2D hull() now works with for loops. Thanks to nophead to reasserting this bug.
Diffstat (limited to 'src')
-rw-r--r--src/CGALEvaluator.cc22
-rw-r--r--src/cgaladv_convexhull2.cc54
2 files changed, 15 insertions, 61 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;
diff --git a/src/cgaladv_convexhull2.cc b/src/cgaladv_convexhull2.cc
deleted file mode 100644
index 492df3c..0000000
--- a/src/cgaladv_convexhull2.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * OpenSCAD (www.openscad.org)
- * Copyright (C) 2009-2011 Clifford Wolf <clifford@clifford.at> and
- * Marius Kintel <marius@kintel.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * As a special exception, you have permission to link this program
- * with the CGAL library and distribute executables, as long as you
- * follow the requirements of the GNU GPL in regard to all of the
- * software in the executable aside from CGAL.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
-
-#ifdef ENABLE_CGAL
-
-#include "cgal.h"
-#include <CGAL/convex_hull_2.h>
-
-extern CGAL_Poly2 nef2p2(CGAL_Nef_polyhedron2 p);
-
-CGAL_Nef_polyhedron2 *convexhull2(std::list<CGAL_Nef_polyhedron2*> a)
-{
- std::list<CGAL_Nef_polyhedron2::Point> points;
-
- std::list<CGAL_Nef_polyhedron2*>::iterator i;
- for (i=a.begin(); i!=a.end(); i++) {
- CGAL_Poly2 ap=nef2p2(**i);
- for (size_t j=0;j<ap.size();j++) {
- double x=to_double(ap[j].x()),y=to_double(ap[j].y());
- CGAL_Nef_polyhedron2::Point p=CGAL_Nef_polyhedron2::Point(x,y);
- points.push_back(p);
- }
- }
-
- std::list<CGAL_Nef_polyhedron2::Point> result;
- CGAL::convex_hull_2(points.begin(),points.end(),std::back_inserter(result));
-
- return new CGAL_Nef_polyhedron2(result.begin(),result.end(),CGAL_Nef_polyhedron2::INCLUDED);
-}
-
-#endif
contact: Jan Huwald // Impressum