Salome HOME
fix previous wrong integration
authorana <ana@opencascade.com>
Thu, 7 May 2015 09:35:19 +0000 (12:35 +0300)
committerana <ana@opencascade.com>
Thu, 7 May 2015 09:35:19 +0000 (12:35 +0300)
src/StdMeshers/StdMeshers_Projection_2D.cxx

index f69c3a5..44e7c11 100644 (file)
@@ -394,15 +394,16 @@ namespace {
   {
     double f,l;
     Handle(Geom2d_Curve) c1 = BRep_Tool::CurveOnSurface( E1, F, f, l );
-    gp_Pnt2d uvLast1 = c1->Value( E1.Orientation() == TopAbs_REVERSED ? f : l );
+    gp_Pnt2d uvFirst1 = c1->Value( f );
+    gp_Pnt2d uvLast1  = c1->Value( l );
 
     Handle(Geom2d_Curve) c2 = BRep_Tool::CurveOnSurface( E2, F, f, l );
-    gp_Pnt2d uvFirst2 = c2->Value( f );
-    gp_Pnt2d uvLast2  = c2->Value( l );
-    double tol2 = 1e-5 * uvLast2.SquareDistance( uvFirst2 );
+    gp_Pnt2d uvFirst2 = c2->Value( E2.Orientation() == TopAbs_REVERSED ? l : f );
+    double tol2 = Max( Precision::PConfusion() * Precision::PConfusion(),
+                       1e-5 * uvLast1.SquareDistance( uvFirst1 ));
 
-    return (( uvLast1.SquareDistance( uvFirst2 ) < tol2 ) ||
-            ( uvLast1.SquareDistance( uvLast2 ) < tol2 ));
+    return (( uvFirst2.SquareDistance( uvFirst1 ) < tol2 ) ||
+            ( uvFirst2.SquareDistance( uvLast1  ) < tol2 ));
   }
 
   //================================================================================
@@ -441,7 +442,7 @@ namespace {
     for ( size_t iW = 0; iW < srcWires.size(); ++iW )
     {
       // check ori
-      bool reverse = false;
+      //bool reverse = false;
       StdMeshers_FaceSidePtr srcWire = srcWires[iW];
       // for ( int iE = 0; iE < srcWire->NbEdges(); ++iE )
       // {
@@ -486,7 +487,8 @@ namespace {
           {
             list< TopoDS_Edge >::iterator eIt = tgtEdges.begin();
             std::advance( eIt, index-1 );
-            eIt->Reverse();
+            if ( are2dConnected( tgtEdges.back(), *eIt, tgtFace ))
+              eIt->Reverse();
           }
           else
           {