]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/opengl/penguin/dxfrenderer.cpp
focus propagation, fixes #10047
[wxWidgets.git] / samples / opengl / penguin / dxfrenderer.cpp
index 35481f884d7000ab8993b0cf27876177b22b358f..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>
+#include "wx/listimpl.cpp"
 WX_DEFINE_LIST(DXFEntityList)
 WX_DEFINE_LIST(DXFLayerList)
 
 // Conversion table from AutoCAD ACI colours to RGB values
 static const struct { unsigned char r, g, b; } aci_to_rgb[256] = {
-/*   0 */ 255, 255, 255,
-/*   1 */ 255,   0,   0,
-/*   2 */ 255, 255,   0,
-/*   3 */   0, 255,   0,
-/*   4 */   0, 255, 255,
-/*   5 */   0,   0, 255,
-/*   6 */ 255,   0, 255,
-/*   7 */ 255, 255, 255,
-/*   8 */ 128, 128, 128,
-/*   9 */ 192, 192, 192,
-/*  10 */ 255,   0,   0,
-/*  11 */ 255, 127, 127,
-/*  12 */ 204,   0,   0,
-/*  13 */ 204, 102, 102,
-/*  14 */ 153,   0,   0,
-/*  15 */ 153,  76,  76,
-/*  16 */ 127,   0,   0,
-/*  17 */ 127,  63,  63,
-/*  18 */  76,   0,   0,
-/*  19 */  76,  38,  38,
-/*  20 */ 255,  63,   0,
-/*  21 */ 255, 159, 127,
-/*  22 */ 204,  51,   0,
-/*  23 */ 204, 127, 102,
-/*  24 */ 153,  38,   0,
-/*  25 */ 153,  95,  76,
-/*  26 */ 127,  31,   0,
-/*  27 */ 127,  79,  63,
-/*  28 */  76,  19,   0,
-/*  29 */  76,  47,  38,
-/*  30 */ 255, 127,   0,
-/*  31 */ 255, 191, 127,
-/*  32 */ 204, 102,   0,
-/*  33 */ 204, 153, 102,
-/*  34 */ 153,  76,   0,
-/*  35 */ 153, 114,  76,
-/*  36 */ 127,  63,   0,
-/*  37 */ 127,  95,  63,
-/*  38 */  76,  38,   0,
-/*  39 */  76,  57,  38,
-/*  40 */ 255, 191,   0,
-/*  41 */ 255, 223, 127,
-/*  42 */ 204, 153,   0,
-/*  43 */ 204, 178, 102,
-/*  44 */ 153, 114,   0,
-/*  45 */ 153, 133,  76,
-/*  46 */ 127,  95,   0,
-/*  47 */ 127, 111,  63,
-/*  48 */  76,  57,   0,
-/*  49 */  76,  66,  38,
-/*  50 */ 255, 255,   0,
-/*  51 */ 255, 255, 127,
-/*  52 */ 204, 204,   0,
-/*  53 */ 204, 204, 102,
-/*  54 */ 153, 153,   0,
-/*  55 */ 153, 153,  76,
-/*  56 */ 127, 127,   0,
-/*  57 */ 127, 127,  63,
-/*  58 */  76,  76,   0,
-/*  59 */  76,  76,  38,
-/*  60 */ 191, 255,   0,
-/*  61 */ 223, 255, 127,
-/*  62 */ 153, 204,   0,
-/*  63 */ 178, 204, 102,
-/*  64 */ 114, 153,   0,
-/*  65 */ 133, 153,  76,
-/*  66 */  95, 127,   0,
-/*  67 */ 111, 127,  63,
-/*  68 */  57,  76,   0,
-/*  69 */  66,  76,  38,
-/*  70 */ 127, 255,   0,
-/*  71 */ 191, 255, 127,
-/*  72 */ 102, 204,   0,
-/*  73 */ 153, 204, 102,
-/*  74 */  76, 153,   0,
-/*  75 */ 114, 153,  76,
-/*  76 */  63, 127,   0,
-/*  77 */  95, 127,  63,
-/*  78 */  38,  76,   0,
-/*  79 */  57,  76,  38,
-/*  80 */  63, 255,   0,
-/*  81 */ 159, 255, 127,
-/*  82 */  51, 204,   0,
-/*  83 */ 127, 204, 102,
-/*  84 */  38, 153,   0,
-/*  85 */  95, 153,  76,
-/*  86 */  31, 127,   0,
-/*  87 */  79, 127,  63,
-/*  88 */  19,  76,   0,
-/*  89 */  47,  76,  38,
-/*  90 */   0, 255,   0,
-/*  91 */ 127, 255, 127,
-/*  92 */   0, 204,   0,
-/*  93 */ 102, 204, 102,
-/*  94 */   0, 153,   0,
-/*  95 */  76, 153,  76,
-/*  96 */   0, 127,   0,
-/*  97 */  63, 127,  63,
-/*  98 */   0,  76,   0,
-/*  99 */  38,  76,  38,
-/* 100 */   0, 255,  63,
-/* 101 */ 127, 255, 159,
-/* 102 */   0, 204,  51,
-/* 103 */ 102, 204, 127,
-/* 104 */   0, 153,  38,
-/* 105 */  76, 153,  95,
-/* 106 */   0, 127,  31,
-/* 107 */  63, 127,  79,
-/* 108 */   0,  76,  19,
-/* 109 */  38,  76,  47,
-/* 110 */   0, 255, 127,
-/* 111 */ 127, 255, 191,
-/* 112 */   0, 204, 102,
-/* 113 */ 102, 204, 153,
-/* 114 */   0, 153,  76,
-/* 115 */  76, 153, 114,
-/* 116 */   0, 127,  63,
-/* 117 */  63, 127,  95,
-/* 118 */   0,  76,  38,
-/* 119 */  38,  76,  57,
-/* 120 */   0, 255, 191,
-/* 121 */ 127, 255, 223,
-/* 122 */   0, 204, 153,
-/* 123 */ 102, 204, 178,
-/* 124 */   0, 153, 114,
-/* 125 */  76, 153, 133,
-/* 126 */   0, 127,  95,
-/* 127 */  63, 127, 111,
-/* 128 */   0,  76,  57,
-/* 129 */  38,  76,  66,
-/* 130 */   0, 255, 255,
-/* 131 */ 127, 255, 255,
-/* 132 */   0, 204, 204,
-/* 133 */ 102, 204, 204,
-/* 134 */   0, 153, 153,
-/* 135 */  76, 153, 153,
-/* 136 */   0, 127, 127,
-/* 137 */  63, 127, 127,
-/* 138 */   0,  76,  76,
-/* 139 */  38,  76,  76,
-/* 140 */   0, 191, 255,
-/* 141 */ 127, 223, 255,
-/* 142 */   0, 153, 204,
-/* 143 */ 102, 178, 204,
-/* 144 */   0, 114, 153,
-/* 145 */  76, 133, 153,
-/* 146 */   0,  95, 127,
-/* 147 */  63, 111, 127,
-/* 148 */   0,  57,  76,
-/* 149 */  38,  66,  76,
-/* 150 */   0, 127, 255,
-/* 151 */ 127, 191, 255,
-/* 152 */   0, 102, 204,
-/* 153 */ 102, 153, 204,
-/* 154 */   0,  76, 153,
-/* 155 */  76, 114, 153,
-/* 156 */   0,  63, 127,
-/* 157 */  63,  95, 127,
-/* 158 */   0,  38,  76,
-/* 159 */  38,  57,  76,
-/* 160 */   0,  63, 255,
-/* 161 */ 127, 159, 255,
-/* 162 */   0,  51, 204,
-/* 163 */ 102, 127, 204,
-/* 164 */   0,  38, 153,
-/* 165 */  76,  95, 153,
-/* 166 */   0,  31, 127,
-/* 167 */  63,  79, 127,
-/* 168 */   0,  19,  76,
-/* 169 */  38,  47,  76,
-/* 170 */   0,   0, 255,
-/* 171 */ 127, 127, 255,
-/* 172 */   0,   0, 204,
-/* 173 */ 102, 102, 204,
-/* 174 */   0,   0, 153,
-/* 175 */  76,  76, 153,
-/* 176 */   0,   0, 127,
-/* 177 */  63,  63, 127,
-/* 178 */   0,   0,  76,
-/* 179 */  38,  38,  76,
-/* 180 */  63,   0, 255,
-/* 181 */ 159, 127, 255,
-/* 182 */  51,   0, 204,
-/* 183 */ 127, 102, 204,
-/* 184 */  38,   0, 153,
-/* 185 */  95,  76, 153,
-/* 186 */  31,   0, 127,
-/* 187 */  79,  63, 127,
-/* 188 */  19,   0,  76,
-/* 189 */  47,  38,  76,
-/* 190 */ 127,   0, 255,
-/* 191 */ 191, 127, 255,
-/* 192 */ 102,   0, 204,
-/* 193 */ 153, 102, 204,
-/* 194 */  76,   0, 153,
-/* 195 */ 114,  76, 153,
-/* 196 */  63,   0, 127,
-/* 197 */  95,  63, 127,
-/* 198 */  38,   0,  76,
-/* 199 */  57,  38,  76,
-/* 200 */ 191,   0, 255,
-/* 201 */ 223, 127, 255,
-/* 202 */ 153,   0, 204,
-/* 203 */ 178, 102, 204,
-/* 204 */ 114,   0, 153,
-/* 205 */ 133,  76, 153,
-/* 206 */  95,   0, 127,
-/* 207 */ 111,  63, 127,
-/* 208 */  57,   0,  76,
-/* 209 */  66,  38,  76,
-/* 210 */ 255,   0, 255,
-/* 211 */ 255, 127, 255,
-/* 212 */ 204,   0, 204,
-/* 213 */ 204, 102, 204,
-/* 214 */ 153,   0, 153,
-/* 215 */ 153,  76, 153,
-/* 216 */ 127,   0, 127,
-/* 217 */ 127,  63, 127,
-/* 218 */  76,   0,  76,
-/* 219 */  76,  38,  76,
-/* 220 */ 255,   0, 191,
-/* 221 */ 255, 127, 223,
-/* 222 */ 204,   0, 153,
-/* 223 */ 204, 102, 178,
-/* 224 */ 153,   0, 114,
-/* 225 */ 153,  76, 133,
-/* 226 */ 127,   0,  95,
-/* 227 */ 127,  63, 111,
-/* 228 */  76,   0,  57,
-/* 229 */  76,  38,  66,
-/* 230 */ 255,   0, 127,
-/* 231 */ 255, 127, 191,
-/* 232 */ 204,   0, 102,
-/* 233 */ 204, 102, 153,
-/* 234 */ 153,   0,  76,
-/* 235 */ 153,  76, 114,
-/* 236 */ 127,   0,  63,
-/* 237 */ 127,  63,  95,
-/* 238 */  76,   0,  38,
-/* 239 */  76,  38,  57,
-/* 240 */ 255,   0,  63,
-/* 241 */ 255, 127, 159,
-/* 242 */ 204,   0,  51,
-/* 243 */ 204, 102, 127,
-/* 244 */ 153,   0,  38,
-/* 245 */ 153,  76,  95,
-/* 246 */ 127,   0,  31,
-/* 247 */ 127,  63,  79,
-/* 248 */  76,   0,  19,
-/* 249 */  76,  38,  47,
-/* 250 */  51,  51,  51,
-/* 251 */  91,  91,  91,
-/* 252 */ 132, 132, 132,
-/* 253 */ 173, 173, 173,
-/* 254 */ 214, 214, 214,
-/* 255 */ 255, 255, 255,
+/*   0 */ {255, 255, 255},
+/*   1 */ {255,   0,   0},
+/*   2 */ {255, 255,   0},
+/*   3 */ {  0, 255,   0},
+/*   4 */ {  0, 255, 255},
+/*   5 */ {  0,   0, 255},
+/*   6 */ {255,   0, 255},
+/*   7 */ {255, 255, 255},
+/*   8 */ {128, 128, 128},
+/*   9 */ {192, 192, 192},
+/*  10 */ {255,   0,   0},
+/*  11 */ {255, 127, 127},
+/*  12 */ {204,   0,   0},
+/*  13 */ {204, 102, 102},
+/*  14 */ {153,   0,   0},
+/*  15 */ {153,  76,  76},
+/*  16 */ {127,   0,   0},
+/*  17 */ {127,  63,  63},
+/*  18 */ { 76,   0,   0},
+/*  19 */ { 76,  38,  38},
+/*  20 */ {255,  63,   0},
+/*  21 */ {255, 159, 127},
+/*  22 */ {204,  51,   0},
+/*  23 */ {204, 127, 102},
+/*  24 */ {153,  38,   0},
+/*  25 */ {153,  95,  76},
+/*  26 */ {127,  31,   0},
+/*  27 */ {127,  79,  63},
+/*  28 */ { 76,  19,   0},
+/*  29 */ { 76,  47,  38},
+/*  30 */ {255, 127,   0},
+/*  31 */ {255, 191, 127},
+/*  32 */ {204, 102,   0},
+/*  33 */ {204, 153, 102},
+/*  34 */ {153,  76,   0},
+/*  35 */ {153, 114,  76},
+/*  36 */ {127,  63,   0},
+/*  37 */ {127,  95,  63},
+/*  38 */ { 76,  38,   0},
+/*  39 */ { 76,  57,  38},
+/*  40 */ {255, 191,   0},
+/*  41 */ {255, 223, 127},
+/*  42 */ {204, 153,   0},
+/*  43 */ {204, 178, 102},
+/*  44 */ {153, 114,   0},
+/*  45 */ {153, 133,  76},
+/*  46 */ {127,  95,   0},
+/*  47 */ {127, 111,  63},
+/*  48 */ { 76,  57,   0},
+/*  49 */ { 76,  66,  38},
+/*  50 */ {255, 255,   0},
+/*  51 */ {255, 255, 127},
+/*  52 */ {204, 204,   0},
+/*  53 */ {204, 204, 102},
+/*  54 */ {153, 153,   0},
+/*  55 */ {153, 153,  76},
+/*  56 */ {127, 127,   0},
+/*  57 */ {127, 127,  63},
+/*  58 */ { 76,  76,   0},
+/*  59 */ { 76,  76,  38},
+/*  60 */ {191, 255,   0},
+/*  61 */ {223, 255, 127},
+/*  62 */ {153, 204,   0},
+/*  63 */ {178, 204, 102},
+/*  64 */ {114, 153,   0},
+/*  65 */ {133, 153,  76},
+/*  66 */ { 95, 127,   0},
+/*  67 */ {111, 127,  63},
+/*  68 */ { 57,  76,   0},
+/*  69 */ { 66,  76,  38},
+/*  70 */ {127, 255,   0},
+/*  71 */ {191, 255, 127},
+/*  72 */ {102, 204,   0},
+/*  73 */ {153, 204, 102},
+/*  74 */ { 76, 153,   0},
+/*  75 */ {114, 153,  76},
+/*  76 */ { 63, 127,   0},
+/*  77 */ { 95, 127,  63},
+/*  78 */ { 38,  76,   0},
+/*  79 */ { 57,  76,  38},
+/*  80 */ { 63, 255,   0},
+/*  81 */ {159, 255, 127},
+/*  82 */ { 51, 204,   0},
+/*  83 */ {127, 204, 102},
+/*  84 */ { 38, 153,   0},
+/*  85 */ { 95, 153,  76},
+/*  86 */ { 31, 127,   0},
+/*  87 */ { 79, 127,  63},
+/*  88 */ { 19,  76,   0},
+/*  89 */ { 47,  76,  38},
+/*  90 */ {  0, 255,   0},
+/*  91 */ {127, 255, 127},
+/*  92 */ {  0, 204,   0},
+/*  93 */ {102, 204, 102},
+/*  94 */ {  0, 153,   0},
+/*  95 */ { 76, 153,  76},
+/*  96 */ {  0, 127,   0},
+/*  97 */ { 63, 127,  63},
+/*  98 */ {  0,  76,   0},
+/*  99 */ { 38,  76,  38},
+/* 100 */ {  0, 255,  63},
+/* 101 */ {127, 255, 159},
+/* 102 */ {  0, 204,  51},
+/* 103 */ {102, 204, 127},
+/* 104 */ {  0, 153,  38},
+/* 105 */ { 76, 153,  95},
+/* 106 */ {  0, 127,  31},
+/* 107 */ { 63, 127,  79},
+/* 108 */ {  0,  76,  19},
+/* 109 */ { 38,  76,  47},
+/* 110 */ {  0, 255, 127},
+/* 111 */ {127, 255, 191},
+/* 112 */ {  0, 204, 102},
+/* 113 */ {102, 204, 153},
+/* 114 */ {  0, 153,  76},
+/* 115 */ { 76, 153, 114},
+/* 116 */ {  0, 127,  63},
+/* 117 */ { 63, 127,  95},
+/* 118 */ {  0,  76,  38},
+/* 119 */ { 38,  76,  57},
+/* 120 */ {  0, 255, 191},
+/* 121 */ {127, 255, 223},
+/* 122 */ {  0, 204, 153},
+/* 123 */ {102, 204, 178},
+/* 124 */ {  0, 153, 114},
+/* 125 */ { 76, 153, 133},
+/* 126 */ {  0, 127,  95},
+/* 127 */ { 63, 127, 111},
+/* 128 */ {  0,  76,  57},
+/* 129 */ { 38,  76,  66},
+/* 130 */ {  0, 255, 255},
+/* 131 */ {127, 255, 255},
+/* 132 */ {  0, 204, 204},
+/* 133 */ {102, 204, 204},
+/* 134 */ {  0, 153, 153},
+/* 135 */ { 76, 153, 153},
+/* 136 */ {  0, 127, 127},
+/* 137 */ { 63, 127, 127},
+/* 138 */ {  0,  76,  76},
+/* 139 */ { 38,  76,  76},
+/* 140 */ {  0, 191, 255},
+/* 141 */ {127, 223, 255},
+/* 142 */ {  0, 153, 204},
+/* 143 */ {102, 178, 204},
+/* 144 */ {  0, 114, 153},
+/* 145 */ { 76, 133, 153},
+/* 146 */ {  0,  95, 127},
+/* 147 */ { 63, 111, 127},
+/* 148 */ {  0,  57,  76},
+/* 149 */ { 38,  66,  76},
+/* 150 */ {  0, 127, 255},
+/* 151 */ {127, 191, 255},
+/* 152 */ {  0, 102, 204},
+/* 153 */ {102, 153, 204},
+/* 154 */ {  0,  76, 153},
+/* 155 */ { 76, 114, 153},
+/* 156 */ {  0,  63, 127},
+/* 157 */ { 63,  95, 127},
+/* 158 */ {  0,  38,  76},
+/* 159 */ { 38,  57,  76},
+/* 160 */ {  0,  63, 255},
+/* 161 */ {127, 159, 255},
+/* 162 */ {  0,  51, 204},
+/* 163 */ {102, 127, 204},
+/* 164 */ {  0,  38, 153},
+/* 165 */ { 76,  95, 153},
+/* 166 */ {  0,  31, 127},
+/* 167 */ { 63,  79, 127},
+/* 168 */ {  0,  19,  76},
+/* 169 */ { 38,  47,  76},
+/* 170 */ {  0,   0, 255},
+/* 171 */ {127, 127, 255},
+/* 172 */ {  0,   0, 204},
+/* 173 */ {102, 102, 204},
+/* 174 */ {  0,   0, 153},
+/* 175 */ { 76,  76, 153},
+/* 176 */ {  0,   0, 127},
+/* 177 */ { 63,  63, 127},
+/* 178 */ {  0,   0,  76},
+/* 179 */ { 38,  38,  76},
+/* 180 */ { 63,   0, 255},
+/* 181 */ {159, 127, 255},
+/* 182 */ { 51,   0, 204},
+/* 183 */ {127, 102, 204},
+/* 184 */ { 38,   0, 153},
+/* 185 */ { 95,  76, 153},
+/* 186 */ { 31,   0, 127},
+/* 187 */ { 79,  63, 127},
+/* 188 */ { 19,   0,  76},
+/* 189 */ { 47,  38,  76},
+/* 190 */ {127,   0, 255},
+/* 191 */ {191, 127, 255},
+/* 192 */ {102,   0, 204},
+/* 193 */ {153, 102, 204},
+/* 194 */ { 76,   0, 153},
+/* 195 */ {114,  76, 153},
+/* 196 */ { 63,   0, 127},
+/* 197 */ { 95,  63, 127},
+/* 198 */ { 38,   0,  76},
+/* 199 */ { 57,  38,  76},
+/* 200 */ {191,   0, 255},
+/* 201 */ {223, 127, 255},
+/* 202 */ {153,   0, 204},
+/* 203 */ {178, 102, 204},
+/* 204 */ {114,   0, 153},
+/* 205 */ {133,  76, 153},
+/* 206 */ { 95,   0, 127},
+/* 207 */ {111,  63, 127},
+/* 208 */ { 57,   0,  76},
+/* 209 */ { 66,  38,  76},
+/* 210 */ {255,   0, 255},
+/* 211 */ {255, 127, 255},
+/* 212 */ {204,   0, 204},
+/* 213 */ {204, 102, 204},
+/* 214 */ {153,   0, 153},
+/* 215 */ {153,  76, 153},
+/* 216 */ {127,   0, 127},
+/* 217 */ {127,  63, 127},
+/* 218 */ { 76,   0,  76},
+/* 219 */ { 76,  38,  76},
+/* 220 */ {255,   0, 191},
+/* 221 */ {255, 127, 223},
+/* 222 */ {204,   0, 153},
+/* 223 */ {204, 102, 178},
+/* 224 */ {153,   0, 114},
+/* 225 */ {153,  76, 133},
+/* 226 */ {127,   0,  95},
+/* 227 */ {127,  63, 111},
+/* 228 */ { 76,   0,  57},
+/* 229 */ { 76,  38,  66},
+/* 230 */ {255,   0, 127},
+/* 231 */ {255, 127, 191},
+/* 232 */ {204,   0, 102},
+/* 233 */ {204, 102, 153},
+/* 234 */ {153,   0,  76},
+/* 235 */ {153,  76, 114},
+/* 236 */ {127,   0,  63},
+/* 237 */ {127,  63,  95},
+/* 238 */ { 76,   0,  38},
+/* 239 */ { 76,  38,  57},
+/* 240 */ {255,   0,  63},
+/* 241 */ {255, 127, 159},
+/* 242 */ {204,   0,  51},
+/* 243 */ {204, 102, 127},
+/* 244 */ {153,   0,  38},
+/* 245 */ {153,  76,  95},
+/* 246 */ {127,   0,  31},
+/* 247 */ {127,  63,  79},
+/* 248 */ { 76,   0,  19},
+/* 249 */ { 76,  38,  47},
+/* 250 */ { 51,  51,  51},
+/* 251 */ { 91,  91,  91},
+/* 252 */ {132, 132, 132},
+/* 253 */ {173, 173, 173},
+/* 254 */ {214, 214, 214},
+/* 255 */ {255, 255, 255}
 };
 
 inline DXFVector Cross(const DXFVector& v1, const DXFVector& v2)
@@ -348,7 +346,7 @@ void DXFRenderer::Clear()
 {
     m_loaded = false;
     {
-        for (DXFLayerList::Node *node = m_layers.GetFirst(); node; node = node->GetNext())
+        for (DXFLayerList::compatibility_iterator node = m_layers.GetFirst(); node; node = node->GetNext())
         {
             DXFLayer *current = node->GetData();
             delete current;
@@ -356,7 +354,7 @@ void DXFRenderer::Clear()
     }
     m_layers.Clear();
     {
-        for (DXFEntityList::Node *node = m_entities.GetFirst(); node; node = node->GetNext())
+        for (DXFEntityList::compatibility_iterator node = m_entities.GetFirst(); node; node = node->GetNext())
         {
             DXFEntity *current = node->GetData();
             delete current;
@@ -367,7 +365,7 @@ void DXFRenderer::Clear()
 
 int DXFRenderer::GetLayerColour(const wxString& layer) const
 {
-    for (DXFLayerList::Node *node = m_layers.GetFirst(); node; node = node->GetNext())
+    for (DXFLayerList::compatibility_iterator node = m_layers.GetFirst(); node; node = node->GetNext())
     {
         DXFLayer *current = node->GetData();
         if (current->name == layer)
@@ -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"))
@@ -557,7 +571,7 @@ bool DXFRenderer::Load(wxInputStream& stream)
                         return false;
                 }
                 else if (line2 == wxT("TABLES"))
-                { 
+                {
                     if (!ParseTables(stream))
                         return false;
                 }
@@ -584,7 +598,7 @@ void DXFRenderer::NormalizeEntities()
     // calculate current min and max boundings of object
     DXFVector minv(10e20f, 10e20f, 10e20f);
     DXFVector maxv(-10e20f, -10e20f, -10e20f);
-    for (DXFEntityList::Node *node = m_entities.GetFirst(); node; node = node->GetNext())
+    for (DXFEntityList::compatibility_iterator node = m_entities.GetFirst(); node; node = node->GetNext())
     {
         DXFEntity *p = node->GetData();
         if (p->type == DXFEntity::Line)
@@ -619,7 +633,7 @@ void DXFRenderer::NormalizeEntities()
     // rescale object down to [-5,5]
     DXFVector span(maxv.x - minv.x, maxv.y - minv.y, maxv.z - minv.z);
     float factor = mymin(mymin(10.0f / span.x, 10.0f / span.y), 10.0f / span.z);
-    for (DXFEntityList::Node *node2 = m_entities.GetFirst(); node2; node2 = node2->GetNext())
+    for (DXFEntityList::compatibility_iterator node2 = m_entities.GetFirst(); node2; node2 = node2->GetNext())
     {
         DXFEntity *p = node2->GetData();
         if (p->type == DXFEntity::Line)
@@ -652,7 +666,7 @@ void DXFRenderer::Render() const
     if (!m_loaded)
         return;
 
-    for (DXFEntityList::Node *node = m_entities.GetFirst(); node; node = node->GetNext())
+    for (DXFEntityList::compatibility_iterator node = m_entities.GetFirst(); node; node = node->GetNext())
     {
         DXFEntity *p = node->GetData();
         wxColour c = ACIColourToRGB(p->colour);