Catch CGAL assert on certain minkowski operations

stl_dim
Marius Kintel 2011-09-08 09:24:10 +02:00
parent a18dd3961d
commit a23edb4adc
2 changed files with 20 additions and 2 deletions

View File

@ -1,10 +1,13 @@
#include "CGAL_Nef_polyhedron.h" #include "CGAL_Nef_polyhedron.h"
#include "cgal.h" #include "cgal.h"
#include "cgalutils.h" #include "cgalutils.h"
#include "printutils.h"
#include "polyset.h" #include "polyset.h"
#include "dxfdata.h" #include "dxfdata.h"
#include "dxftess.h" #include "dxftess.h"
#include <CGAL/minkowski_sum_3.h> #include <CGAL/minkowski_sum_3.h>
#include <CGAL/assertions_behaviour.h>
#include <CGAL/exceptions.h>
CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator+=(const CGAL_Nef_polyhedron &other) CGAL_Nef_polyhedron& CGAL_Nef_polyhedron::operator+=(const CGAL_Nef_polyhedron &other)
{ {
@ -31,8 +34,15 @@ extern CGAL_Nef_polyhedron2 minkowski2(const CGAL_Nef_polyhedron2 &a, const CGAL
CGAL_Nef_polyhedron &CGAL_Nef_polyhedron::minkowski(const CGAL_Nef_polyhedron &other) CGAL_Nef_polyhedron &CGAL_Nef_polyhedron::minkowski(const CGAL_Nef_polyhedron &other)
{ {
if (this->dim == 2) (*this->p2) = minkowski2(*this->p2, *other.p2); CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
else if (this->dim == 3) (*this->p3) = CGAL::minkowski_sum_3(*this->p3, *other.p3); try {
if (this->dim == 2) (*this->p2) = minkowski2(*this->p2, *other.p2);
else if (this->dim == 3) (*this->p3) = CGAL::minkowski_sum_3(*this->p3, *other.p3);
}
catch (CGAL::Assertion_exception e) {
PRINTF("CGAL error in minkowski %s", e.what());
CGAL::set_error_behaviour(old_behaviour);
}
return *this; return *this;
} }

View File

@ -0,0 +1,8 @@
minkowski() {
cube(20, center=true);
rotate([20, 30, 40])
difference() {
cube(5, center=true);
cube([1, 1, 10], center=true);
}
}