summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/example012.scad12
-rw-r--r--examples/example012.stl450
-rw-r--r--import.cc88
3 files changed, 518 insertions, 32 deletions
diff --git a/examples/example012.scad b/examples/example012.scad
new file mode 100644
index 0000000..d77b391
--- /dev/null
+++ b/examples/example012.scad
@@ -0,0 +1,12 @@
+
+// example012.stl is Mblock.stl, (c) 2009 Will Langford
+// licensed under the Creative Commons - GNU GPL license.
+// http://www.thingiverse.com/thing:753
+
+difference()
+{
+ sphere(20);
+
+ translate([ -2.92 0.5 +20 ]) rotate([180 0 180])
+ import_stl("example012.stl", convexity = 5);
+}
diff --git a/examples/example012.stl b/examples/example012.stl
new file mode 100644
index 0000000..9c5c231
--- /dev/null
+++ b/examples/example012.stl
@@ -0,0 +1,450 @@
+solid ascii
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex 3.422440e+000 -1.067730e+001 5.000000e+000
+ vertex 6.347434e+000 -1.067730e+001 5.000000e+000
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ vertex 6.347434e+000 -1.067730e+001 5.000000e+000
+ vertex 6.347434e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 2.280978e+000 1.133150e+001 5.000000e+000
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ vertex 6.347434e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 2.280978e+000 1.133150e+001 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex -2.320538e+000 -4.613285e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex -4.104071e+000 -4.613285e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -4.104071e+000 -4.613285e+000 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex -8.527233e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.252235e+001 1.133150e+001 5.000000e+000
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ vertex -8.527233e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.252235e+001 1.133150e+001 5.000000e+000
+ vertex -1.252235e+001 -1.067730e+001 5.000000e+000
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ vertex -1.252235e+001 -1.067730e+001 5.000000e+000
+ vertex -9.793542e+000 -1.067730e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -1.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.252235e+001 1.133150e+001 1.500000e+001
+ vertex -1.252235e+001 1.133150e+001 5.000000e+000
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000
+ outer loop
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ vertex -1.252235e+001 1.133150e+001 5.000000e+000
+ vertex -8.527233e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -9.124922e-001 -4.090940e-001 -0.000000e+000
+ outer loop
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ vertex -8.527233e+000 1.133150e+001 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -9.124922e-001 -4.090940e-001 0.000000e+000
+ outer loop
+ vertex -3.033951e+000 -9.213713e-001 1.500000e+001
+ vertex -8.527233e+000 1.133150e+001 5.000000e+000
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 9.174094e-001 -3.979447e-001 0.000000e+000
+ outer loop
+ vertex -3.033951e+000 -9.213713e-001 1.500000e+001
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 9.174094e-001 -3.979447e-001 0.000000e+000
+ outer loop
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ vertex -3.033951e+000 -9.213713e-001 5.000000e+000
+ vertex 2.280978e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -1.000000e+000 0.000000e+000
+ outer loop
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ vertex 2.280978e+000 1.133150e+001 5.000000e+000
+ vertex 6.347434e+000 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000
+ outer loop
+ vertex 6.347434e+000 1.133150e+001 1.500000e+001
+ vertex 2.280978e+000 1.133150e+001 5.000000e+000
+ vertex 6.347434e+000 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
+ outer loop
+ vertex 6.347434e+000 1.133150e+001 1.500000e+001
+ vertex 6.347434e+000 1.133150e+001 5.000000e+000
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
+ outer loop
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ vertex 6.347434e+000 1.133150e+001 5.000000e+000
+ vertex 6.347434e+000 -1.067730e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ vertex 6.347434e+000 -1.067730e+001 5.000000e+000
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ vertex 6.347434e+000 -1.067730e+001 5.000000e+000
+ vertex 3.422440e+000 -1.067730e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 5.000000e+000
+ vertex 3.422440e+000 8.281660e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex 3.422440e+000 8.281660e+000 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 5.000000e+000
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -9.134987e-001 4.068417e-001 0.000000e+000
+ outer loop
+ vertex 3.422440e+000 8.281660e+000 1.500000e+001
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal -9.134987e-001 4.068417e-001 0.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ vertex 3.422440e+000 8.281660e+000 5.000000e+000
+ vertex -2.320538e+000 -4.613285e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -4.979881e-016 1.000000e+000 0.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ vertex -2.320538e+000 -4.613285e+000 5.000000e+000
+ vertex -4.104071e+000 -4.613285e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal -4.979881e-016 1.000000e+000 0.000000e+000
+ outer loop
+ vertex -4.104071e+000 -4.613285e+000 1.500000e+001
+ vertex -2.320538e+000 -4.613285e+000 5.000000e+000
+ vertex -4.104071e+000 -4.613285e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal 9.149041e-001 4.036714e-001 0.000000e+000
+ outer loop
+ vertex -4.104071e+000 -4.613285e+000 1.500000e+001
+ vertex -4.104071e+000 -4.613285e+000 5.000000e+000
+ vertex -9.793542e+000 8.281660e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal 9.149041e-001 4.036714e-001 0.000000e+000
+ outer loop
+ vertex -9.793542e+000 8.281660e+000 1.500000e+001
+ vertex -4.104071e+000 -4.613285e+000 5.000000e+000
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
+ outer loop
+ vertex -9.793542e+000 8.281660e+000 1.500000e+001
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000
+ outer loop
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex -9.793542e+000 8.281660e+000 5.000000e+000
+ vertex -9.793542e+000 -1.067730e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 5.000000e+000
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 5.000000e+000
+ vertex -1.252235e+001 -1.067730e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ vertex -1.252235e+001 -1.067730e+001 5.000000e+000
+ vertex -1.252235e+001 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.252235e+001 1.133150e+001 1.500000e+001
+ vertex -1.252235e+001 -1.067730e+001 5.000000e+000
+ vertex -1.252235e+001 1.133150e+001 5.000000e+000
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex 1.156780e+001 -1.469280e+001 0.000000e+000
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 1.000000e+000 -0.000000e+000 0.000000e+000
+ outer loop
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ vertex 1.156780e+001 -1.469280e+001 0.000000e+000
+ vertex 1.156780e+001 1.530720e+001 0.000000e+000
+ endloop
+ endfacet
+ facet normal 1.184238e-016 -1.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ vertex -1.843220e+001 -1.469280e+001 0.000000e+000
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 1.184238e-016 -1.000000e+000 0.000000e+000
+ outer loop
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex -1.843220e+001 -1.469280e+001 0.000000e+000
+ vertex 1.156780e+001 -1.469280e+001 0.000000e+000
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -1.184238e-016 -0.000000e+000
+ outer loop
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ vertex -1.843220e+001 1.530720e+001 0.000000e+000
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -1.000000e+000 -1.184238e-016 0.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ vertex -1.843220e+001 1.530720e+001 0.000000e+000
+ vertex -1.843220e+001 -1.469280e+001 0.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 0.000000e+000
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 1.000000e+000 0.000000e+000
+ outer loop
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 0.000000e+000
+ vertex -1.843220e+001 1.530720e+001 0.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ vertex -1.252235e+001 1.133150e+001 1.500000e+001
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex -1.252235e+001 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 1.500000e+001
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ vertex 3.422440e+000 8.281660e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -2.320538e+000 -4.613285e+000 1.500000e+001
+ vertex -4.104071e+000 -4.613285e+000 1.500000e+001
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -9.793542e+000 -1.067730e+001 1.500000e+001
+ vertex -4.104071e+000 -4.613285e+000 1.500000e+001
+ vertex -9.793542e+000 8.281660e+000 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex -3.033951e+000 -9.213713e-001 1.500000e+001
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal -0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex -1.843220e+001 1.530720e+001 1.500000e+001
+ vertex -1.252235e+001 1.133150e+001 1.500000e+001
+ vertex -8.527233e+000 1.133150e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 2.280978e+000 1.133150e+001 1.500000e+001
+ vertex 6.347434e+000 1.133150e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ vertex 6.347434e+000 1.133150e+001 1.500000e+001
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 1.000000e+000
+ outer loop
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ vertex 3.422440e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
+ outer loop
+ vertex 1.156780e+001 -1.469280e+001 1.500000e+001
+ vertex 1.156780e+001 1.530720e+001 1.500000e+001
+ vertex 6.347434e+000 -1.067730e+001 1.500000e+001
+ endloop
+ endfacet
+ facet normal 0.000000e+000 -0.000000e+000 -1.000000e+000
+ outer loop
+ vertex -1.843220e+001 1.530720e+001 0.000000e+000
+ vertex 1.156780e+001 1.530720e+001 0.000000e+000
+ vertex -1.843220e+001 -1.469280e+001 0.000000e+000
+ endloop
+ endfacet
+ facet normal 0.000000e+000 0.000000e+000 -1.000000e+000
+ outer loop
+ vertex -1.843220e+001 -1.469280e+001 0.000000e+000
+ vertex 1.156780e+001 1.530720e+001 0.000000e+000
+ vertex 1.156780e+001 -1.469280e+001 0.000000e+000
+ endloop
+ endfacet
+endsolid \ No newline at end of file
diff --git a/import.cc b/import.cc
index c3af27e..3ec7056 100644
--- a/import.cc
+++ b/import.cc
@@ -75,45 +75,69 @@ PolySet *ImportNode::render_polyset(render_mode_e) const
PolySet *p = new PolySet();
p->convexity = convexity;
- QFile f(filename);
- if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
- PRINTF("WARNING: Can't open import file `%s'.", filename.toAscii().data());
- return p;
- }
-
if (type == TYPE_STL)
{
- int i = 0;
- double vdata[3][3];
- QRegExp splitre = QRegExp("\\s*(vertex)?\\s+");
- while (!f.atEnd())
+ QFile f(filename);
+ if (!f.open(QIODevice::ReadOnly)) {
+ PRINTF("WARNING: Can't open import file `%s'.", filename.toAscii().data());
+ return p;
+ }
+
+ QByteArray data = f.read(5);
+ if (data.size() == 5 && QString(data) == QString("solid"))
{
- QString line = QString(f.readLine()).remove("\n");
- if (line.contains("solid") || line.contains("facet") || line.contains("endloop"))
- continue;
- if (line.contains("outer loop")) {
- i = 0;
- continue;
- }
- if (line.contains("vertex")) {
- QStringList tokens = line.split(splitre);
- bool ok[3] = { false, false, false };
- if (tokens.size() == 4) {
- vdata[i][0] = tokens[1].toDouble(&ok[0]);
- vdata[i][1] = tokens[2].toDouble(&ok[1]);
- vdata[i][2] = tokens[3].toDouble(&ok[2]);
+ int i = 0;
+ double vdata[3][3];
+ QRegExp splitre = QRegExp("\\s*(vertex)?\\s+");
+ f.readLine();
+ while (!f.atEnd())
+ {
+ QString line = QString(f.readLine()).remove("\n").remove("\r");
+ if (line.contains("solid") || line.contains("facet") || line.contains("endloop"))
+ continue;
+ if (line.contains("outer loop")) {
+ i = 0;
+ continue;
}
- if (!ok[0] || !ok[1] || !ok[2]) {
- PRINTF("WARNING: Can't parse vertex line `%s'.", line.toAscii().data());
- i = 10;
- } else if (++i == 3) {
- p->append_poly();
- p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]);
- p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]);
- p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]);
+ if (line.contains("vertex")) {
+ QStringList tokens = line.split(splitre);
+ bool ok[3] = { false, false, false };
+ if (tokens.size() == 4) {
+ vdata[i][0] = tokens[1].toDouble(&ok[0]);
+ vdata[i][1] = tokens[2].toDouble(&ok[1]);
+ vdata[i][2] = tokens[3].toDouble(&ok[2]);
+ }
+ if (!ok[0] || !ok[1] || !ok[2]) {
+ PRINTF("WARNING: Can't parse vertex line `%s'.", line.toAscii().data());
+ i = 10;
+ } else if (++i == 3) {
+ p->append_poly();
+ p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]);
+ p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]);
+ p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]);
+ }
}
}
}
+ else
+ {
+ f.read(80-4+4);
+ while (1) {
+ struct {
+ float i, j, k;
+ float x1, y1, z1;
+ float x2, y2, z2;
+ float x3, y3, z3;
+ unsigned short acount;
+ } __attribute__ ((packed)) data;
+ if (f.read((char*)&data, sizeof(data)) != sizeof(data))
+ break;
+ p->append_poly();
+ p->append_vertex(data.x1, data.y1, data.z1);
+ p->append_vertex(data.x2, data.y2, data.z2);
+ p->append_vertex(data.x3, data.y3, data.z3);
+ }
+ }
}
if (type == TYPE_OFF)
contact: Jan Huwald // Impressum