diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp index 52b56e0b8e9a16c6ef2b8c758b49f8b93ec686e8..98cab7305e5de4af0145dcfba0366d54ccc687c5 100644 --- a/Geo/Geo.cpp +++ b/Geo/Geo.cpp @@ -304,9 +304,20 @@ void End_Curve(Curve *c) norme(dir32); double n[3]; prodve(dir12, dir32, n); - norme(n); + + bool isValid = true; + if (norm3(n) < 1.e-15) { + isValid = false; + } + else { + norme(n); + if ((fabs(n[0]) < 1.e-5 && fabs(n[1]) < 1.e-5 && fabs(n[2]) < 1.e-5)) { + isValid = false; + } + } + // use provided plane if unable to compute it from input points... - if(fabs(n[0]) < 1.e-5 && fabs(n[1]) < 1.e-5 && fabs(n[2]) < 1.e-5) { + if(!isValid) { n[0] = c->Circle.n[0]; n[1] = c->Circle.n[1]; n[2] = c->Circle.n[2];