]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/opengl/penguin/dxfrenderer.cpp
Fix return value of wxGenericTreeCtrl::FindItem().
[wxWidgets.git] / samples / opengl / penguin / dxfrenderer.cpp
index d68eca6cf0a540267a53219dc0838c33a92782a5..e03a3624361519418a0287960bdd8bd76606577e 100644 (file)
     #error "OpenGL required: set wxUSE_GLCANVAS to 1 and rebuild the library"
 #endif
 
-#ifdef __WXMAC__
-#  ifdef __DARWIN__
-#    include <OpenGL/glu.h>
-#  else
-#    include <glu.h>
-#  endif
+#ifdef __DARWIN__
+    #include <OpenGL/glu.h>
 #else
-#  include <GL/glu.h>
+    #include <GL/glu.h>
 #endif
 
+#include <sstream>
+
 #include "dxfrenderer.h"
 
 #include "wx/listimpl.cpp"
@@ -439,6 +437,22 @@ bool DXFRenderer::ParseTables(wxInputStream& stream)
     return false;
 }
 
+// This method is used instead of numStr.ToDouble(d) because the latter
+// (wxString::ToDouble()) takes the systems proper locale into account,
+// whereas the implementation below works with the default locale.
+// (Converting numbers that are formatted in the default locale can fail
+//  with system locales that use e.g. the comma as the decimal separator.)
+static double ToDouble(const wxString& numStr)
+{
+    double             d;
+    std::string        numStr_(numStr.c_str());
+    std::istringstream iss(numStr_);
+
+    iss >> d;
+
+    return d;
+}
+
 // parse entities section: save 3DFACE and LINE entities
 bool DXFRenderer::ParseEntities(wxInputStream& stream)
 {
@@ -494,8 +508,8 @@ bool DXFRenderer::ParseEntities(wxInputStream& stream)
             state = 2;
         else if (state > 0)
         {
-            double d;
-            line2.ToDouble(&d);
+            const double d=ToDouble(line2);
+
             if (line1 == wxT("10"))
                 v[0].x = d;
             else if (line1 == wxT("20"))