diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CGALEvaluator.cc | 16 | ||||
| -rw-r--r-- | src/CGAL_Nef_polyhedron.cc | 19 | ||||
| -rw-r--r-- | src/cgal.h | 1 | ||||
| -rw-r--r-- | src/export.cc | 10 | 
4 files changed, 37 insertions, 9 deletions
| diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index ec01315..242fe0f 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -159,9 +159,19 @@ CGAL_Nef_polyhedron CGALEvaluator::applyHull(const CgaladvNode &node)  				PRINT("Hull() currently requires a valid 2-manifold. Please modify your design. See http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/STL_Import_and_Export");  			}  			else { -				chN.p3->convert_to_Polyhedron(P); -				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)); +				bool err = false; +				try{ +					err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>( *(chN.p3), P ); +					//chN.p3->convert_to_Polyhedron(P); +				} catch (...) { +					err = true; +				} +				if (err) { +					PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed"); +				} else { +					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(); diff --git a/src/CGAL_Nef_polyhedron.cc b/src/CGAL_Nef_polyhedron.cc index 440f4ed..49b9a53 100644 --- a/src/CGAL_Nef_polyhedron.cc +++ b/src/CGAL_Nef_polyhedron.cc @@ -96,13 +96,22 @@ PolySet *CGAL_Nef_polyhedron::convertToPolyset()  	}  	else if (this->dim == 3) {  		CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); +		bool err = true; +		std::string errmsg(""); +		CGAL_Polyhedron P;  		try { -			CGAL_Polyhedron P; -			this->p3->convert_to_Polyhedron(P); -			ps = createPolySetFromPolyhedron(P); +			err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>( *(this->p3), P ); +			//this->p3->convert_to_Polyhedron(P); +		} +		catch (const CGAL::Failure_exception &e) { +			err = true; +			errmsg = std::string(e.what());  		} -		catch (const CGAL::Precondition_exception &e) { -			PRINTB("CGAL error in CGAL_Nef_polyhedron::convertToPolyset(): %s", e.what()); +		if (err) { +			PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed."); +			if (errmsg!="") PRINTB("ERROR: %s",errmsg); +		} else { +			ps = createPolySetFromPolyhedron(P);  		}  		CGAL::set_error_behaviour(old_behaviour);  	} @@ -27,6 +27,7 @@ using boost::uintmax_t;  #include <CGAL/Cartesian.h>  #include <CGAL/Polyhedron_3.h>  #include <CGAL/Nef_polyhedron_3.h> +#include <CGAL_Nef3_workaround.h>  #include <CGAL/IO/Polyhedron_iostream.h>  #include <CGAL/Exact_predicates_exact_constructions_kernel.h>  #include <CGAL/Polygon_2.h> diff --git a/src/export.cc b/src/export.cc index ec6e576..cef323e 100644 --- a/src/export.cc +++ b/src/export.cc @@ -42,7 +42,12 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output)  	CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);  	try {  	CGAL_Polyhedron P; -	root_N->p3->convert_to_Polyhedron(P); +	//root_N->p3->convert_to_Polyhedron(P); +	bool err = nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>( *(root_N->p3), P ); +	if (err) { +	        PRINT("ERROR: CGAL NefPolyhedron->Polyhedron conversion failed"); +		return; +	}  	typedef CGAL_Polyhedron::Vertex                                 Vertex;  	typedef CGAL_Polyhedron::Vertex_const_iterator                  VCI; @@ -114,6 +119,9 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output)  	catch (const CGAL::Assertion_exception &e) {  		PRINTB("CGAL error in CGAL_Nef_polyhedron3::convert_to_Polyhedron(): %s", e.what());  	} +	catch (...) { +		PRINT("CGAL unknown error in CGAL_Nef_polyhedron3::convert_to_Polyhedron()"); +	}  	CGAL::set_error_behaviour(old_behaviour);  } | 
