Salome HOME
Fix regressions bugs_14/P9 (Prism 3D) and bugs_19/X1 (Projection 2D)
authoreap <eap@opencascade.com>
Wed, 6 May 2015 17:05:12 +0000 (20:05 +0300)
committereap <eap@opencascade.com>
Wed, 6 May 2015 17:05:12 +0000 (20:05 +0300)
src/StdMeshers/StdMeshers_Prism_3D.cxx
src/StdMeshers/StdMeshers_Projection_2D.cxx

index 0bd7070dccd561493064de7769a756afa1f10d30..6e58555e1828b93af54789620d6b29eb236fe3ab 100644 (file)
@@ -905,7 +905,7 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh
       return error( err );
     }
   }
       return error( err );
     }
   }
-  return true;
+  return error( COMPERR_OK );
 }
 
 //================================================================================
 }
 
 //================================================================================
index 70833b1b4f10c3c7752c24ea11fc4694e44bb8b5..b1fab93625e44d24ff6a49453dc83ccd2bb17fb6 100644 (file)
@@ -394,15 +394,16 @@ namespace {
   {
     double f,l;
     Handle(Geom2d_Curve) c1 = BRep_Tool::CurveOnSurface( E1, F, f, l );
   {
     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 );
 
     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
     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 )
       // {
       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 );
           {
             list< TopoDS_Edge >::iterator eIt = tgtEdges.begin();
             std::advance( eIt, index-1 );
-            eIt->Reverse();
+            if ( are2dConnected( tgtEdges.back(), *eIt, tgtFace ))
+              eIt->Reverse();
           }
           else
           {
           }
           else
           {