]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Ubuntu problem correction: zero deflection was used because of another system local...
authornds <nds@opencascade.com>
Fri, 12 May 2017 14:11:00 +0000 (17:11 +0300)
committernds <nds@opencascade.com>
Fri, 12 May 2017 14:11:24 +0000 (17:11 +0300)
src/Config/Config_PropManager.cpp
src/Config/Config_PropManager.h
src/GeomValidators/CMakeLists.txt
src/GeomValidators/GeomValidators_Positive.cpp

index 205f9b503973fd8269461cd89849114173bf7712..a1e2e6b03a03ee34b4ef6afdcdd6d483c599e413 100644 (file)
@@ -8,7 +8,6 @@
 
 std::vector<int> stringToRGB(const std::string& theColor);
 int stringToInteger(const std::string& theInt);
-double stringToDouble(const std::string& theDouble);
 bool stringToBoolean(const std::string& theInt);
 
 Config_Properties Config_PropManager::myProps;
@@ -176,10 +175,23 @@ int stringToInteger(const std::string& theInt)
   return atoi(theInt.c_str());
 }
 
-double stringToDouble(const std::string& theDouble)
+double Config_PropManager::stringToDouble(const std::string& theDouble)
 {
+  std::string aStr = theDouble;
+
+  // change locale and convert "," to "." if exists
+  std::string aCurLocale = setlocale(LC_NUMERIC, 0);
+  setlocale(LC_NUMERIC, "C");
+  int dotpos = (int)aStr.find(',');
+  if (dotpos != std::string::npos)
+    aStr.replace(dotpos, 1, ".");
+
   char* p;
-  return strtod(theDouble.c_str(), &p);
+  double aValue = strtod(aStr.c_str(), &p);
+
+  // restore locale
+  setlocale(LC_NUMERIC, aCurLocale.c_str());
+  return aValue;
 }
 
 bool stringToBoolean(const std::string& theBoolean)
index 8ae5cf84c07572b85ffe34c109716ee2eb055095..e4ed9aaa9379a5ff71013de592f1e54f92c97f8a 100644 (file)
@@ -61,6 +61,11 @@ class Config_PropManager
   //! Returns boolean by given section and name
   CONFIG_EXPORT static bool boolean(const std::string& theSection,
                                    const std::string& theName);
+  //! Returns convertion of the string to double value. Temporary changes locale to process
+  //! values contained "," or "." separator.
+  //! \param theDouble a value to be converted
+  //! \return double result or zero
+  CONFIG_EXPORT static double stringToDouble(const std::string& theDouble);
 
  private:
   CONFIG_EXPORT static Config_Properties myProps; ///< List of all stored properties
index f7f7d29e030018018a58814ad059ba06500ec9da..db014d5c98c4c04e4aa3e939c623910a3ed33e54 100644 (file)
@@ -44,6 +44,7 @@ SET(PROJECT_SOURCES
 SET(PROJECT_LIBRARIES
     ModelAPI
     Events
+    Config
     GeomAPI
 )
 
@@ -54,6 +55,7 @@ TARGET_LINK_LIBRARIES(GeomValidators ${PROJECT_LIBRARIES})
 INCLUDE_DIRECTORIES(
   ${CAS_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/ModelAPI
+  ${PROJECT_SOURCE_DIR}/src/Config
   ${PROJECT_SOURCE_DIR}/src/Events
   ${PROJECT_SOURCE_DIR}/src/GeomAPI
   ${PROJECT_SOURCE_DIR}/src/GeomDataAPI
index 6737f289aaba4e180b893edfb664971858f2c7ee..1690b116e8ad0304e363dea4762e315253bb6b3a 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "GeomValidators_Positive.h"
 
+#include <Config_PropManager.h>
 #include <Events_InfoMessage.h>
 
 #include <ModelAPI_AttributeDouble.h>
@@ -34,8 +35,8 @@ bool GeomValidators_Positive::isValid(const AttributePtr& theAttribute,
   if(theArguments.size() == 1) {
     std::list<std::string>::const_iterator anIt = theArguments.begin();
     char *aErr;
-    double aValue = strtod((*anIt).c_str(), &aErr);
-    if(*aErr == 0) {
+    double aValue = Config_PropManager::stringToDouble((*anIt).c_str());
+    if(aValue != 0) {
       // very probably ok
       aMinValue = aValue;
     }