diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/PolySetCGALEvaluator.cc | 7 | ||||
| -rw-r--r-- | src/cgal.cc | 43 | ||||
| -rw-r--r-- | src/cgal.h | 2 | ||||
| -rw-r--r-- | src/export.cc | 36 | 
4 files changed, 47 insertions, 41 deletions
| 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<int> 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; +} @@ -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. | 
