From cf8366718cae7020d36f853517c121e0c634098b Mon Sep 17 00:00:00 2001 From: jgv Date: Mon, 19 Mar 2012 16:12:21 +0400 Subject: [PATCH] 0022809: BRepIntCS does not find intersections of an ellipsoid and a line passing through it's apex (and near it) --- src/BRepTools/BRepTools.cxx | 17 ++++++++++++++++- src/TopClass/TopClass_FaceClassifier.gxx | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/BRepTools/BRepTools.cxx b/src/BRepTools/BRepTools.cxx index 35405286b9..00b09dadd0 100755 --- a/src/BRepTools/BRepTools.cxx +++ b/src/BRepTools/BRepTools.cxx @@ -216,7 +216,22 @@ void BRepTools::AddUVBounds(const TopoDS_Face& F, } P.SetCoord(u0,v0) ; Baux.Add(P); P.SetCoord(u1,v1) ; Baux.Add(P); - B.Add(Baux); + + Bnd_Box2d FinalBox; + Standard_Real aXmin, aYmin, aXmax, aYmax; + Baux.Get(aXmin, aYmin, aXmax, aYmax); + Standard_Real Tol2d = Precision::PConfusion(); + if (Abs(aXmin - Umin) <= Tol2d) + aXmin = Umin; + if (Abs(aYmin - Vmin) <= Tol2d) + aYmin = Vmin; + if (Abs(aXmax - Umax) <= Tol2d) + aXmax = Umax; + if (Abs(aYmax - Vmax) <= Tol2d) + aYmax = Vmax; + FinalBox.Update(aXmin, aYmin, aXmax, aYmax); + + B.Add(FinalBox); } } diff --git a/src/TopClass/TopClass_FaceClassifier.gxx b/src/TopClass/TopClass_FaceClassifier.gxx index 9f02192b28..b186ac3712 100755 --- a/src/TopClass/TopClass_FaceClassifier.gxx +++ b/src/TopClass/TopClass_FaceClassifier.gxx @@ -120,7 +120,7 @@ void TopClass_FaceClassifier::Perform(TheFaceExplorer& Fexp, } } - if (!myClassifier.IsHeadOrEnd()) + if (!myClassifier.IsHeadOrEnd() && aState != TopAbs_UNKNOWN) break; // Bad case for classification. Trying to get another segment. -- 2.20.1