diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CGALEvaluator.cc | 11 | ||||
| -rw-r--r-- | src/CGAL_Nef_polyhedron.cc | 23 | ||||
| -rw-r--r-- | src/CGAL_Nef_polyhedron.h | 4 | ||||
| -rw-r--r-- | src/cgalutils.cc | 4 | 
4 files changed, 34 insertions, 8 deletions
| diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index 7921b85..78b9c78 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -598,19 +598,20 @@ CGAL_Nef_polyhedron CGALEvaluator::evaluateCGALMesh(const PolySet &ps)  	}  	else // not (this->is2d)  	{ +		CGAL_Nef_polyhedron3 *N = NULL;  		CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);  		try { +			// FIXME: Are we leaking memory for the CGAL_Polyhedron object?  			CGAL_Polyhedron *P = createPolyhedronFromPolySet(ps);  			if (P) { -				CGAL_Nef_polyhedron3 *N = new CGAL_Nef_polyhedron3(*P); -				return CGAL_Nef_polyhedron(N); +				N = new CGAL_Nef_polyhedron3(*P);  			}  		}  		catch (CGAL::Assertion_exception e) { -			PRINTF("CGAL error in CGA_Nef_polyhedron3(): %s", e.what()); -			CGAL::set_error_behaviour(old_behaviour); -			return CGAL_Nef_polyhedron(); +			PRINTF("CGAL error in CGAL_Nef_polyhedron3(): %s", e.what());  		} +		CGAL::set_error_behaviour(old_behaviour); +		return CGAL_Nef_polyhedron(N);  	}  	return CGAL_Nef_polyhedron();  } diff --git a/src/CGAL_Nef_polyhedron.cc b/src/CGAL_Nef_polyhedron.cc index 2538b64..61ca2f8 100644 --- a/src/CGAL_Nef_polyhedron.cc +++ b/src/CGAL_Nef_polyhedron.cc @@ -7,6 +7,29 @@  #include "dxftess.h"  #include <CGAL/minkowski_sum_3.h> +CGAL_Nef_polyhedron::CGAL_Nef_polyhedron(CGAL_Nef_polyhedron2 *p) +{ +	if (p) { +		dim = 2; +		p2.reset(p); +	} +	else { +		dim = 0; +	} +} + +CGAL_Nef_polyhedron::CGAL_Nef_polyhedron(CGAL_Nef_polyhedron3 *p) +{ +	if (p) { +		dim = 3; +		p3.reset(p); +	} +	else { +		dim = 0; +	} +} + +  CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator+=(const CGAL_Nef_polyhedron &other)  {  	if (this->dim == 2) (*this->p2) += (*other.p2); diff --git a/src/CGAL_Nef_polyhedron.h b/src/CGAL_Nef_polyhedron.h index fda4bc5..f93905f 100644 --- a/src/CGAL_Nef_polyhedron.h +++ b/src/CGAL_Nef_polyhedron.h @@ -8,8 +8,8 @@ class CGAL_Nef_polyhedron  {  public:  	CGAL_Nef_polyhedron() : dim(0) {} -	CGAL_Nef_polyhedron(CGAL_Nef_polyhedron2 *p) : dim(2), p2(p) {} -	CGAL_Nef_polyhedron(CGAL_Nef_polyhedron3 *p) : dim(3), p3(p) {} +	CGAL_Nef_polyhedron(CGAL_Nef_polyhedron2 *p); +	CGAL_Nef_polyhedron(CGAL_Nef_polyhedron3 *p);  	~CGAL_Nef_polyhedron() {}  	bool empty() const { return (dim == 0 || (!p2 && !p3)); } diff --git a/src/cgalutils.cc b/src/cgalutils.cc index e77f5dd..1de7ab4 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -140,8 +140,10 @@ CGAL_Polyhedron *createPolyhedronFromPolySet(const PolySet &ps)  	}  	catch (CGAL::Assertion_exception e) {  		PRINTF("CGAL error in CGAL_Build_PolySet: %s", e.what()); -		CGAL::set_error_behaviour(old_behaviour); +		delete P; +		P = NULL;  	} +	CGAL::set_error_behaviour(old_behaviour);  	return P;  } | 
