diff -r 5de9623d6a50 poly2tri/common/shapes.h
--- a/poly2tri/common/shapes.h	Mon Aug 08 22:26:41 2011 -0400
+++ b/poly2tri/common/shapes.h	Tue Jan 17 02:36:52 2012 +0100
@@ -35,6 +35,7 @@
 
 #include <vector>
 #include <cstddef>
+#include <stdexcept>
 #include <assert.h>
 #include <cmath>
 
@@ -136,7 +137,9 @@
         p = &p2;
       } else if (p1.x == p2.x) {
         // Repeat points
-        assert(false);
+		  // ASSIMP_CHANGE (aramis_acg)
+		  throw std::runtime_error("repeat points");
+        //assert(false);
       }
     }
 
diff -r 5de9623d6a50 poly2tri/sweep/sweep.cc
--- a/poly2tri/sweep/sweep.cc	Mon Aug 08 22:26:41 2011 -0400
+++ b/poly2tri/sweep/sweep.cc	Tue Jan 17 02:36:52 2012 +0100
@@ -113,6 +113,8 @@
   Point* p1 = triangle->PointCCW(point);
   Orientation o1 = Orient2d(eq, *p1, ep);
   if (o1 == COLLINEAR) {
+	  // ASSIMP_CHANGE (aramis_acg)
+	  throw std::runtime_error("EdgeEvent - collinear points not supported");
     if( triangle->Contains(&eq, p1)) {
       triangle->MarkConstrainedEdge(&eq, p1 );
       // We are modifying the constraint maybe it would be better to 
@@ -121,8 +123,8 @@
       triangle = &triangle->NeighborAcross(point);
       EdgeEvent( tcx, ep, *p1, triangle, *p1 );
     } else {
+	  // ASSIMP_CHANGE (aramis_acg)
       std::runtime_error("EdgeEvent - collinear points not supported");
-      assert(0);
     }
     return;
   }
@@ -130,6 +132,9 @@
   Point* p2 = triangle->PointCW(point);
   Orientation o2 = Orient2d(eq, *p2, ep);
   if (o2 == COLLINEAR) {
+	  // ASSIMP_CHANGE (aramis_acg)
+	  throw std::runtime_error("EdgeEvent - collinear points not supported");
+
     if( triangle->Contains(&eq, p2)) {
       triangle->MarkConstrainedEdge(&eq, p2 );
       // We are modifying the constraint maybe it would be better to 
@@ -138,8 +143,8 @@
       triangle = &triangle->NeighborAcross(point);
       EdgeEvent( tcx, ep, *p2, triangle, *p2 );
     } else {
-      std::runtime_error("EdgeEvent - collinear points not supported");
-      assert(0);
+      // ASSIMP_CHANGE (aramis_acg)
+      throw std::runtime_error("EdgeEvent - collinear points not supported");
     }
     return;
   }
@@ -712,7 +717,8 @@
     return *ot.PointCW(op);
   } else{
     //throw new RuntimeException("[Unsupported] Opposing point on constrained edge");
-    assert(0);
+	  // ASSIMP_CHANGE (aramis_acg)
+	  throw std::runtime_error("[Unsupported] Opposing point on constrained edge");
   }
 }
 
