0022809: BRepIntCS does not find intersections of an ellipsoid and a line passing...
authorjgv <jgv@opencascade.com>
Mon, 19 Mar 2012 12:12:21 +0000 (16:12 +0400)
committerbugmaster <bugmaster@opencascade.com>
Wed, 21 Mar 2012 14:43:22 +0000 (18:43 +0400)
src/BRepTools/BRepTools.cxx
src/TopClass/TopClass_FaceClassifier.gxx

index 3540528..00b09da 100755 (executable)
@@ -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);
   }
 }
 
index 9f02192..b186ac3 100755 (executable)
@@ -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.