Salome HOME
Make SetNodeOnEdge() tell a valid range if U is invalid
[modules/smesh.git] / src / SMESHUtils / SMESH_MAT2d.cxx
index 8e3eaeb6481d4b44f0c31cd2c705641b30f5664d..5469f476c6a70c901c0b5af5caf315739ce038bf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -673,14 +673,12 @@ namespace
     // make 'scale' such that to have coordinates precise enough when converted to int
 
     gp_XY uvMin = uvBox.CornerMin(), uvMax = uvBox.CornerMax();
-    uvMin.ChangeCoord(1) = uvMin.X() * scale[0];
-    uvMin.ChangeCoord(2) = uvMin.Y() * scale[1];
-    uvMax.ChangeCoord(1) = uvMax.X() * scale[0];
-    uvMax.ChangeCoord(2) = uvMax.Y() * scale[1];
+    uvMin *= gp_XY( scale[0], scale[1] );
+    uvMax *= gp_XY( scale[0], scale[1] );
     double vMax[2] = { Max( Abs( uvMin.X() ), Abs( uvMax.X() )),
                        Max( Abs( uvMin.Y() ), Abs( uvMax.Y() )) };
     int iMax = ( vMax[0] > vMax[1] ) ? 0 : 1;
-    const double precision = Min( 1e-5, minSegLen * 1e-2 );
+    const double precision = Min( 1e-5, Min( minSegLen * 1e-2, vMax[iMax] * 1e-5 ));
     double preciScale = Min( vMax[iMax] / precision,
                              std::numeric_limits<int>::max() / vMax[iMax] );
     preciScale /= scale[iMax];