From 428d5bfc0e8684d6cf8116d0a580b36281135a45 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 22 Aug 2011 19:31:56 +0200 Subject: Refactored cgal_nef3_to_polyset() to cgal wrapper class diff --git a/openscad.pro b/openscad.pro index d89a074..deda4d0 100644 --- a/openscad.pro +++ b/openscad.pro @@ -170,6 +170,7 @@ HEADERS += src/renderer.h \ SOURCES += src/openscad.cc \ src/mainwin.cc \ src/cgalrenderer.cc \ + src/cgal.cc \ src/ThrownTogetherRenderer.cc \ src/glview.cc \ src/export.cc \ diff --git a/src/PolySetCGALEvaluator.cc b/src/PolySetCGALEvaluator.cc index c269045..a914a62 100644 --- a/src/PolySetCGALEvaluator.cc +++ b/src/PolySetCGALEvaluator.cc @@ -9,7 +9,6 @@ #include "module.h" #include "printutils.h" -#include "export.h" // void cgal_nef3_to_polyset() #include "openscad.h" // get_fragments_from_r() PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node, AbstractPolyNode::render_mode_e) @@ -74,8 +73,7 @@ PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node, Abstr goto cant_project_non_simple_polyhedron; } - PolySet *ps3 = new PolySet(); - cgal_nef3_to_polyset(ps3, &N); + PolySet *ps3 = N.convertToPolyset(); Grid2d conversion_grid(GRID_COARSE); for (size_t i = 0; i < ps3->polygons.size(); i++) { for (size_t j = 0; j < ps3->polygons[i].size(); j++) { @@ -106,8 +104,7 @@ PolySet *PolySetCGALEvaluator::evaluatePolySet(const ProjectionNode &node, Abstr goto cant_project_non_simple_polyhedron; } - PolySet *ps3 = new PolySet(); - cgal_nef3_to_polyset(ps3, &N); + PolySet *ps3 = N.convertToPolyset(); CGAL_Nef_polyhedron np; np.dim = 2; for (size_t i = 0; i < ps3->polygons.size(); i++) diff --git a/src/cgal.cc b/src/cgal.cc new file mode 100644 index 0000000..ad33a3e --- /dev/null +++ b/src/cgal.cc @@ -0,0 +1,43 @@ +#include "cgal.h" +#include "polyset.h" + +/*! + Creates a new PolySet and initializes it with the data from this polyhedron +*/ +PolySet *CGAL_Nef_polyhedron::convertToPolyset() const +{ + PolySet *ps = new PolySet(); + CGAL_Polyhedron P; + this->p3.convert_to_Polyhedron(P); + + typedef CGAL_Polyhedron::Vertex Vertex; + typedef CGAL_Polyhedron::Vertex_const_iterator VCI; + typedef CGAL_Polyhedron::Facet_const_iterator FCI; + typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC; + + for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) { + HFCC hc = fi->facet_begin(); + HFCC hc_end = hc; + Vertex v1, v2, v3; + v1 = *VCI((hc++)->vertex()); + v3 = *VCI((hc++)->vertex()); + do { + v2 = v3; + v3 = *VCI((hc++)->vertex()); + double x1 = CGAL::to_double(v1.point().x()); + double y1 = CGAL::to_double(v1.point().y()); + double z1 = CGAL::to_double(v1.point().z()); + double x2 = CGAL::to_double(v2.point().x()); + double y2 = CGAL::to_double(v2.point().y()); + double z2 = CGAL::to_double(v2.point().z()); + double x3 = CGAL::to_double(v3.point().x()); + double y3 = CGAL::to_double(v3.point().y()); + double z3 = CGAL::to_double(v3.point().z()); + ps->append_poly(); + ps->append_vertex(x1, y1, z1); + ps->append_vertex(x2, y2, z2); + ps->append_vertex(x3, y3, z3); + } while (hc != hc_end); + } + return ps; +} diff --git a/src/cgal.h b/src/cgal.h index f9161cc..9ccc4df 100644 --- a/src/cgal.h +++ b/src/cgal.h @@ -94,6 +94,8 @@ struct CGAL_Nef_polyhedron return p3.number_of_vertices(); return 0; } + + class PolySet *convertToPolyset() const; }; #endif /* ENABLE_CGAL */ diff --git a/src/export.cc b/src/export.cc index c87e917..e46a14f 100644 --- a/src/export.cc +++ b/src/export.cc @@ -36,42 +36,6 @@ #ifdef ENABLE_CGAL #include "cgal.h" -void cgal_nef3_to_polyset(PolySet *ps, CGAL_Nef_polyhedron *root_N) -{ - CGAL_Polyhedron P; - root_N->p3.convert_to_Polyhedron(P); - - typedef CGAL_Polyhedron::Vertex Vertex; - typedef CGAL_Polyhedron::Vertex_const_iterator VCI; - typedef CGAL_Polyhedron::Facet_const_iterator FCI; - typedef CGAL_Polyhedron::Halfedge_around_facet_const_circulator HFCC; - - for (FCI fi = P.facets_begin(); fi != P.facets_end(); ++fi) { - HFCC hc = fi->facet_begin(); - HFCC hc_end = hc; - Vertex v1, v2, v3; - v1 = *VCI((hc++)->vertex()); - v3 = *VCI((hc++)->vertex()); - do { - v2 = v3; - v3 = *VCI((hc++)->vertex()); - double x1 = CGAL::to_double(v1.point().x()); - double y1 = CGAL::to_double(v1.point().y()); - double z1 = CGAL::to_double(v1.point().z()); - double x2 = CGAL::to_double(v2.point().x()); - double y2 = CGAL::to_double(v2.point().y()); - double z2 = CGAL::to_double(v2.point().z()); - double x3 = CGAL::to_double(v3.point().x()); - double y3 = CGAL::to_double(v3.point().y()); - double z3 = CGAL::to_double(v3.point().z()); - ps->append_poly(); - ps->append_vertex(x1, y1, z1); - ps->append_vertex(x2, y2, z2); - ps->append_vertex(x3, y3, z3); - } while (hc != hc_end); - } -} - /*! Saves the current 3D CGAL Nef polyhedron as STL to the given file. The file must be open. -- cgit v0.10.1