From 73092dd4c89829bb0a7fa0a026addd2d54171cbb Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 23 Nov 2011 16:11:48 +0100 Subject: [PATCH] Added support for 3D object in the hull() module --- RELEASE_NOTES | 1 + src/CGALEvaluator.cc | 29 ++++++++++--- testdata/scad/features/hull3-tests.scad | 34 ++++++---------- .../cgalpngtest/hull3-tests-expected.png | Bin 4408 -> 11978 bytes .../dumptest/hull3-tests-expected.txt | 38 ++++++++---------- .../opencsgtest/hull3-tests-expected.png | Bin 4408 -> 12471 bytes .../hull3-tests-expected.png | Bin 4408 -> 12471 bytes 7 files changed, 52 insertions(+), 50 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 2de956d9..f25de79e 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -3,6 +3,7 @@ OpenSCAD 20xx.yy Features: o The MCAD library is now bundled with OpenSCAD +o hull() Now supports 3D objects o Added import and export of the OFF file format o New import() statement reads the correct file format based on the filename extension (.stl, .dxf and .off is supported) diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index 3646af2b..7921b856 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -18,6 +18,7 @@ #include "cgalutils.h" #include #include +#include #include #include @@ -29,6 +30,7 @@ #include #include +#include CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const AbstractNode &node) { @@ -114,25 +116,40 @@ CGAL_Nef_polyhedron CGALEvaluator::applyHull(const CgaladvNode &node) { CGAL_Nef_polyhedron N; std::list polys; - bool all2d = true; + std::list points; + int dim = 0; BOOST_FOREACH(const ChildItem &item, this->visitedchildren[node.index()]) { const AbstractNode *chnode = item.first; const CGAL_Nef_polyhedron &chN = item.second; // FIXME: Don't use deep access to modinst members if (chnode->modinst->tag_background) continue; - if (chN.dim == 2) { + if (dim == 0) { + dim = chN.dim; + } + else if (dim != chN.dim) { + PRINT("WARNING: hull() does not support mixing 2D and 3D objects."); + continue; + } + if (dim == 2) { polys.push_back(chN.p2.get()); } - else if (chN.dim == 3) { - PRINT("WARNING: hull() is not implemented yet for 3D objects!"); - all2d = false; + 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), + boost::bind(static_cast(&CGAL_Polyhedron::Vertex::point), _1)); } chnode->progress_report(); } - if (all2d) { + if (dim == 2) { N = CGAL_Nef_polyhedron(convexhull2(polys)); } + else if (dim == 3) { + CGAL_Polyhedron P; + CGAL::convex_hull_3(points.begin(), points.end(), P); + N = CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron3(P)); + } return N; } diff --git a/testdata/scad/features/hull3-tests.scad b/testdata/scad/features/hull3-tests.scad index 2bd7d735..12c8a11b 100644 --- a/testdata/scad/features/hull3-tests.scad +++ b/testdata/scad/features/hull3-tests.scad @@ -1,27 +1,17 @@ -// 3d not currently implemented -module convex3dSimple() { - hull() { - translate([15,10]) cylinder(r=10); - cylinder(r=10); - } -} - -// 3d not currently implemented -module convex3dHole() { - hull() { - translate([15,10,0]) cylinder(10); - difference() { - cylinder(10); - cylinder(5); - } - } -} - -translate([0,40,0]) convex3dHole(); -translate([40,40,0]) convex3dSimple(); - // Empty hull(); // No children hull() { } +hull() { + cylinder(r=10, h=1); + translate([0,0,10]) cube([5,5,5], center=true); +} + +translate([25,0,0]) hull() { + translate([0,0,10]) cylinder(r=3); + difference() { + cylinder(r=10, h=4, center=true); + cylinder(r=5, h=5, center=true); + } +} diff --git a/tests/regression/cgalpngtest/hull3-tests-expected.png b/tests/regression/cgalpngtest/hull3-tests-expected.png index 50d838c32f7b9119a1e8638f0bdf495d7e6931e2..e34ae893b8a488fb46e3524f6244cc7bacf7652a 100644 GIT binary patch literal 11978 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 Rp&oVM>?zBWpH4VO{~zYWWU~MO literal 4408 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 S2=a#n;JE3@qxpwjqyG=65SR}D literal 4408 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 S2=a#n;JE3@qxpwjqyG=65SR}D literal 4408 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&t&wwUqN(1_puuo-U3d6^w7MGV(Gg@Gv_b z*dOfDv*2+)UsdcS+v4fU4h;;A^A5apoi>Akk%?tr1LFsF77l?9E{TSWk4eG`4hI;1 z0L3|6Sa}?_RBYrFP)K0-15&w&iA^DD&kdkj1BSW=phzGivw&_~4p6NGgFVR96%C9X zV)|x4wLA^-3JwhpAqN;-y2WP$)v_Jn7f^6e&`MxfbhO(SsGIo#JBNURfT#h(#Yacg z92$VmU>