0030100: Modeling Algorithms - ShapeUpgrade_UnifySameDomain is unable to unify faces...
[occt.git] / src / IntAna / IntAna_QuadQuadGeo.cxx
index eeeb586..79a3ed2 100644 (file)
@@ -125,8 +125,8 @@ class AxeOperator {
 //=======================================================================
 AxeOperator::AxeOperator(const gp_Ax1& A1,const gp_Ax1& A2) 
 {
-  myEPSILON_DISTANCE=0.00000000000001;
-  myEPSILON_AXES_PARA=0.000000000001;
+  myEPSILON_DISTANCE=1.0e-14;
+  myEPSILON_AXES_PARA=Precision::Angular();
   Axe1=A1; 
   Axe2=A2;
   //---------------------------------------------------------------------
@@ -275,12 +275,12 @@ IntAna_QuadQuadGeo::IntAna_QuadQuadGeo(void)
 //=======================================================================
 void IntAna_QuadQuadGeo::InitTolerances()
 {
-  myEPSILON_DISTANCE               = 0.00000000000001;
-  myEPSILON_ANGLE_CONE             = 0.000000000001;
-  myEPSILON_MINI_CIRCLE_RADIUS     = 0.000000001;
-  myEPSILON_CYLINDER_DELTA_RADIUS  = 0.0000000000001;
-  myEPSILON_CYLINDER_DELTA_DISTANCE= 0.0000001;
-  myEPSILON_AXES_PARA              = 0.000000000001;
+  myEPSILON_DISTANCE               = 1.0e-14;
+  myEPSILON_ANGLE_CONE             = Precision::Angular();
+  myEPSILON_MINI_CIRCLE_RADIUS     = 0.01*Precision::Confusion();
+  myEPSILON_CYLINDER_DELTA_RADIUS  = 1.0e-13;
+  myEPSILON_CYLINDER_DELTA_DISTANCE= Precision::Confusion();
+  myEPSILON_AXES_PARA              = Precision::Angular();
 }
 //=======================================================================
 //function : IntAna_QuadQuadGeo
@@ -2473,33 +2473,32 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
   aRMaj1 = Tor1.MajorRadius();
   aRMin2 = Tor2.MinorRadius();
   aRMaj2 = Tor2.MajorRadius();
-  if (aRMin1 >= aRMaj1 || aRMin2 >= aRMaj2) {
-    typeres = IntAna_NoGeometricSolution;
-    return;
-  }
   //
-  const gp_Ax1 anAx1 = Tor1.Axis();
-  const gp_Ax1 anAx2 = Tor2.Axis();
+  const gp_Ax1& anAx1 = Tor1.Axis();
+  const gp_Ax1& anAx2 = Tor2.Axis();
+  //
+  const gp_Pnt& aLoc1 = anAx1.Location();
+  const gp_Pnt& aLoc2 = anAx2.Location();
   //
   gp_Lin aL1(anAx1);
   if (!anAx1.IsParallel(anAx2, myEPSILON_AXES_PARA) ||
-      (aL1.Distance(anAx2.Location()) > myEPSILON_DISTANCE)) {
+      (aL1.Distance(aLoc2) > myEPSILON_DISTANCE)) {
     typeres = IntAna_NoGeometricSolution;
     return;
   }
   //
-  gp_Pnt aLoc1, aLoc2;
-  //
-  aLoc1 = anAx1.Location();
-  aLoc2 = anAx2.Location();
-  //
   if (aLoc1.IsEqual(aLoc2, Tol) &&
-      (Abs(aRMin1 - aRMin2) <= Tol) && 
+      (Abs(aRMin1 - aRMin2) <= Tol) &&
       (Abs(aRMaj1 - aRMaj2) <= Tol)) {
     typeres = IntAna_Same;
     return;
   }
   //
+  if (aRMin1 >= aRMaj1 || aRMin2 >= aRMaj2) {
+    typeres = IntAna_NoGeometricSolution;
+    return;
+  }
+  //
   Standard_Real aDist;
   gp_Pnt aP1, aP2;
   //
@@ -2549,10 +2548,10 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
 //=======================================================================
   gp_Pnt IntAna_QuadQuadGeo::Point(const Standard_Integer n) const 
 {
-  if(!done)          {    StdFail_NotDone::Raise();        }
-  if(n>nbint || n<1) {    Standard_DomainError::Raise();   }
+  if(!done)          {    throw StdFail_NotDone();        }
+  if(n>nbint || n<1) {    throw Standard_DomainError();   }
   if(typeres==IntAna_PointAndCircle) {
-    if(n!=1) { Standard_DomainError::Raise();  }
+    if(n!=1) { throw Standard_DomainError();  }
     if(param1==0.0) return(pt1);
     return(pt2);
   }
@@ -2570,9 +2569,9 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
 //=======================================================================
   gp_Lin IntAna_QuadQuadGeo::Line(const Standard_Integer n) const 
 {
-  if(!done)        {   StdFail_NotDone::Raise();   }
+  if(!done)        {   throw StdFail_NotDone();   }
   if((n>nbint) || (n<1) || (typeres!=IntAna_Line)) {
-    Standard_DomainError::Raise();
+    throw Standard_DomainError();
     }
   if(n==1) {  return(gp_Lin(pt1,dir1));   }
   else {      return(gp_Lin(pt2,dir2));   }
@@ -2583,14 +2582,14 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
 //=======================================================================
   gp_Circ IntAna_QuadQuadGeo::Circle(const Standard_Integer n) const 
 {
-  if(!done) {    StdFail_NotDone::Raise();     }
+  if(!done) {    throw StdFail_NotDone();     }
   if(typeres==IntAna_PointAndCircle) {
-    if(n!=1) { Standard_DomainError::Raise();  }
+    if(n!=1) { throw Standard_DomainError();  }
     if(param2==0.0) return(gp_Circ(DirToAx2(pt1,dir1),param1));
     return(gp_Circ(DirToAx2(pt2,dir2),param2));
   }
   else if((n>nbint) || (n<1) || (typeres!=IntAna_Circle)) {
-    Standard_DomainError::Raise();
+    throw Standard_DomainError();
     }
   if      (n==1) { return(gp_Circ(DirToAx2(pt1,dir1),param1));}
   else if (n==2) { return(gp_Circ(DirToAx2(pt2,dir2),param2));}
@@ -2604,9 +2603,9 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
 //=======================================================================
   gp_Elips IntAna_QuadQuadGeo::Ellipse(const Standard_Integer n) const
 {
-  if(!done) {     StdFail_NotDone::Raise();     }
+  if(!done) {     throw StdFail_NotDone();     }
   if((n>nbint) || (n<1) || (typeres!=IntAna_Ellipse)) {
-    Standard_DomainError::Raise();
+    throw Standard_DomainError();
   }
 
   if(n==1) {
@@ -2635,13 +2634,13 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
   gp_Parab IntAna_QuadQuadGeo::Parabola(const Standard_Integer n) const 
 {
   if(!done) {
-    StdFail_NotDone::Raise();
+    throw StdFail_NotDone();
     }
   if (typeres!=IntAna_Parabola) {
-    Standard_DomainError::Raise();
+    throw Standard_DomainError();
   }
   if((n>nbint) || (n!=1)) {
-    Standard_OutOfRange::Raise();
+    throw Standard_OutOfRange();
   }
   return(gp_Parab(gp_Ax2( pt1
                          ,dir1
@@ -2655,10 +2654,10 @@ void IntAna_QuadQuadGeo::Perform(const gp_Torus& Tor1,
   gp_Hypr IntAna_QuadQuadGeo::Hyperbola(const Standard_Integer n) const 
 {
   if(!done) {
-    StdFail_NotDone::Raise();
+    throw StdFail_NotDone();
     }
   if((n>nbint) || (n<1) || (typeres!=IntAna_Hyperbola)) {
-    Standard_DomainError::Raise();
+    throw Standard_DomainError();
     }
   if(n==1) {
     return(gp_Hypr(gp_Ax2( pt1