-- avoid some divide-by-zero errors/assertions in boolean modifiers which
authorKen Hughes <khughes@pacific.edu>
Tue, 1 Nov 2005 19:42:55 +0000 (19:42 +0000)
committerKen Hughes <khughes@pacific.edu>
Tue, 1 Nov 2005 19:42:55 +0000 (19:42 +0000)
   caused "Trace/BPT trap" errors (don't normalize zero-length vectors)

intern/boolop/intern/BOP_MathUtils.cpp

index 0d84bb1778c51a9bb1eda179b55fd61615d8cef8..00c9515a4863baa4cee40147e12836add86ce589 100644 (file)
@@ -226,6 +226,8 @@ bool BOP_getCircleCenter(const MT_Point3& p1, const MT_Point3& p2, const MT_Poin
        
        // Compute first line vector, perpendicular to plane vector and edge (p1,p2)
        MT_Vector3 vL1 = p1p2.cross(plane);
+       if( MT_fuzzyZero(vL1.length() ) )
+                       return false;
        vL1.normalize();
        
        // Compute first line point, middle point of edge (p1,p2)
@@ -233,6 +235,8 @@ bool BOP_getCircleCenter(const MT_Point3& p1, const MT_Point3& p2, const MT_Poin
 
        // Compute second line vector, perpendicular to plane vector and edge (p1,p3)
        MT_Vector3 vL2 = p1p3.cross(plane);
+       if( MT_fuzzyZero(vL2.length() ) )
+                       return false;
        vL2.normalize();
        
        // Compute second line point, middle point of edge (p1,p3)