summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-06-27 01:34:46 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-06-27 01:34:46 (GMT)
commit2a793422cad6215100c2ab0aff515bb5e9a11d69 (patch)
treecc97ae8d98d9179c42a2ec0e61e56e46d155460a
parent7ecdd8e75eb5a994c620e242ee6a9a4cc5e04b57 (diff)
Catch some more CGAL exceptions which were encountered
git-svn-id: http://svn.clifford.at/openscad/trunk@564 b57f626f-c46c-0410-a088-ec61d464b74c
-rw-r--r--src/csgops.cc11
-rw-r--r--src/polyset.cc1
-rw-r--r--src/projection.cc22
3 files changed, 29 insertions, 5 deletions
diff --git a/src/csgops.cc b/src/csgops.cc
index 508eecc..ae97085 100644
--- a/src/csgops.cc
+++ b/src/csgops.cc
@@ -30,6 +30,8 @@
#include "printutils.h"
#ifdef ENABLE_CGAL
# include "cgal.h"
+# include <CGAL/assertions_behaviour.h>
+# include <CGAL/exceptions.h>
#endif
enum csg_type_e {
@@ -82,8 +84,10 @@ CGAL_Nef_polyhedron CsgNode::render_cgal_nef_polyhedron() const
print_messages_push();
+ CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
bool first = true;
CGAL_Nef_polyhedron N;
+ try {
foreach (AbstractNode *v, children) {
if (v->modinst->tag_background)
continue;
@@ -110,8 +114,13 @@ CGAL_Nef_polyhedron CsgNode::render_cgal_nef_polyhedron() const
}
v->progress_report();
}
-
cgal_nef_cache.insert(cache_id, new cgal_nef_cache_entry(N), N.weight());
+ }
+ catch (CGAL::Assertion_exception e) {
+ PRINTF("ERROR: Illegal polygonal object - make sure all polygons are defined with the same winding order. Skipping affected object.");
+ }
+ CGAL::set_error_behaviour(old_behaviour);
+
print_messages_pop();
progress_report();
diff --git a/src/polyset.cc b/src/polyset.cc
index b8e77f4..47d858c 100644
--- a/src/polyset.cc
+++ b/src/polyset.cc
@@ -667,6 +667,7 @@ CGAL_Nef_polyhedron PolySet::render_cgal_nef_polyhedron() const
CGAL::set_error_behaviour(old_behaviour);
return CGAL_Nef_polyhedron();
}
+ CGAL::set_error_behaviour(old_behaviour);
}
return CGAL_Nef_polyhedron();
}
diff --git a/src/projection.cc b/src/projection.cc
index 1fb036c..7a3f77a 100644
--- a/src/projection.cc
+++ b/src/projection.cc
@@ -34,6 +34,11 @@
#include "export.h"
#include "progress.h"
+#ifdef ENABLE_CGAL
+# include <CGAL/assertions_behaviour.h>
+# include <CGAL/exceptions.h>
+#endif
+
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -106,17 +111,26 @@ PolySet *ProjectionNode::render_polyset(render_mode_e) const
print_messages_push();
+ PolySet *ps = new PolySet();
+ ps->convexity = this->convexity;
+ ps->is2d = true;
+
CGAL_Nef_polyhedron N;
N.dim = 3;
+ CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION);
+ try {
foreach(AbstractNode *v, this->children) {
if (v->modinst->tag_background)
continue;
N.p3 += v->render_cgal_nef_polyhedron().p3;
}
-
- PolySet *ps = new PolySet();
- ps->convexity = this->convexity;
- ps->is2d = true;
+ }
+ catch (CGAL::Assertion_exception e) {
+ PRINTF("ERROR: Illegal polygonal object - make sure all polygons are defined with the same winding order. Skipping affected object.");
+ CGAL::set_error_behaviour(old_behaviour);
+ return ps;
+ }
+ CGAL::set_error_behaviour(old_behaviour);
if (cut_mode)
{
contact: Jan Huwald // Impressum