summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/TODO.txt5
-rw-r--r--src/export.cc53
-rw-r--r--src/lexer.l1
-rw-r--r--testdata/scad/include test6.scad4
-rw-r--r--testdata/scad/include-test.scad40
-rw-r--r--testdata/scad/include-test5.scad4
-rw-r--r--testdata/scad/string-test.scad1
-rw-r--r--testdata/scad/sub1/sub2/sub3/include-test4.scad4
-rw-r--r--testdata/scad/sub1/sub2/sub3/sub4/include-test2.scad10
-rw-r--r--testdata/scad/sub1/sub2/sub3/sub4/include-test3.scad4
10 files changed, 107 insertions, 19 deletions
diff --git a/doc/TODO.txt b/doc/TODO.txt
index 6d608ee..182a7b7 100644
--- a/doc/TODO.txt
+++ b/doc/TODO.txt
@@ -175,6 +175,11 @@ o Hollow donut problem
+IDEAS FOR LANGUAGE CHANGES
+--------------------------
+o More strict checking of module parameters to make e.g. this fail:
+ module test(a,b) { a=1; b=2; echo(a,b,c); } test(c=3);
+
CODE
----
diff --git a/src/export.cc b/src/export.cc
index 71ebe8f..215f936 100644
--- a/src/export.cc
+++ b/src/export.cc
@@ -154,6 +154,20 @@ void export_off(CGAL_Nef_polyhedron*, QTextStream&, QProgressDialog*)
void export_dxf(CGAL_Nef_polyhedron *root_N, QTextStream &output, QProgressDialog *)
{
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
+
+ // Some importers (e.g. QCAD) needs a HEADER section specifying AutoCAD 2000 as
+ // the file format for LWPOLYLINE entities to work
+ output << " 0\n"
+ << "SECTION\n"
+ << " 2\n"
+ << "HEADER\n"
+ << " 9\n"
+ << "$ACADVER\n"
+ << " 1\n"
+ << "AC1015\n"
+ << " 0\n"
+ << "ENDSEC\n";
+
// Some importers (e.g. Inkscape) needs a BLOCKS section to be present
output << " 0\n"
<< "SECTION\n"
@@ -169,26 +183,27 @@ void export_dxf(CGAL_Nef_polyhedron *root_N, QTextStream &output, QProgressDialo
DxfData dd(*root_N);
for (int i=0; i<dd.paths.size(); i++)
{
- for (int j=1; j<dd.paths[i].points.size(); j++) {
- DxfData::Point *p1 = dd.paths[i].points[j-1];
- DxfData::Point *p2 = dd.paths[i].points[j];
- double x1 = p1->x;
- double y1 = p1->y;
- double x2 = p2->x;
- double y2 = p2->y;
- output << " 0\n"
- << "LINE\n";
- // Some importers (e.g. Inkscape) needs a layer to be specified
- output <<" 8\n"
- << "0\n"
- << " 10\n"
- << x1 << "\n"
- << " 11\n"
- << x2 << "\n"
+ if (dd.paths[i].points.size() < 2) {
+ // not a valid polygon
+ continue;
+ }
+ // Use the LWPOLYLINE class - this makes it easier to handle complete
+ // objects (as paths) in Inkscape.
+ output << " 0\n"
+ << "LWPOLYLINE\n"
+ << " 8\n" // Some importers (e.g. Inkscape) need a layer to be specified
+ << "0\n"
+ << " 90\n" // number of vertices
+ << dd.paths[i].points.size() << "\n"
+ << " 70\n" // polygon flag (closed, ...)
+ << (dd.paths[i].is_closed ? 1 : 0) << "\n";
+ // add all points
+ for (int j=0; j<dd.paths[i].points.size(); j++) {
+ DxfData::Point *p = dd.paths[i].points[j];
+ output <<" 10\n"
+ << p->x << "\n"
<< " 20\n"
- << y1 << "\n"
- << " 21\n"
- << y2 << "\n";
+ << p->y << "\n";
}
}
diff --git a/src/lexer.l b/src/lexer.l
index 9e8aaf8..932711b 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -202,6 +202,7 @@ void includefile()
yyin = fopen(finfo.absoluteFilePath().toLocal8Bit(), "r");
if (!yyin) {
PRINTA("WARNING: Can't open input file `%1'.", filename);
+ path_stack.pop();
return;
}
filename.clear();
diff --git a/testdata/scad/include test6.scad b/testdata/scad/include test6.scad
new file mode 100644
index 0000000..7a79456
--- /dev/null
+++ b/testdata/scad/include test6.scad
@@ -0,0 +1,4 @@
+module test6()
+{
+ echo("included from include test6.scad");
+}
diff --git a/testdata/scad/include-test.scad b/testdata/scad/include-test.scad
new file mode 100644
index 0000000..5db02d7
--- /dev/null
+++ b/testdata/scad/include-test.scad
@@ -0,0 +1,40 @@
+//Test that the entire path is pushed onto the stack upto the last '/'
+include <sub1/sub2/sub3/sub4/include-test2.scad>
+
+//Test that a non existent path/file doesn't screw things up
+include <non/existent/path/non-file>
+
+//Test with empty path
+include <include-test5.scad>
+
+//Test without preceeding space
+include<include-test5.scad>
+
+//Test with other strange character that is allowed
+include>>>>><include-test5.scad>
+
+//Test that filenames with spaces work
+include <include test6.scad>
+
+//Test with empty file
+include<test/>
+
+//Test with empty path and file
+include </>
+
+//Test with empty
+include <>
+
+module test1()
+{
+ test2();
+ test3();
+ test4();
+ test5();
+ test6();
+
+ //Just to give a top level object
+ sphere(1);
+}
+
+test1();
diff --git a/testdata/scad/include-test5.scad b/testdata/scad/include-test5.scad
new file mode 100644
index 0000000..4f6e656
--- /dev/null
+++ b/testdata/scad/include-test5.scad
@@ -0,0 +1,4 @@
+module test5()
+{
+ echo("included from include-test5.scad");
+}
diff --git a/testdata/scad/string-test.scad b/testdata/scad/string-test.scad
new file mode 100644
index 0000000..5ec4cfb
--- /dev/null
+++ b/testdata/scad/string-test.scad
@@ -0,0 +1 @@
+echo("The quick brown fox \tjumps \"over\" the lazy dog.\rThe quick brown fox.\nThe \\lazy\\ dog.");
diff --git a/testdata/scad/sub1/sub2/sub3/include-test4.scad b/testdata/scad/sub1/sub2/sub3/include-test4.scad
new file mode 100644
index 0000000..1cb7eab
--- /dev/null
+++ b/testdata/scad/sub1/sub2/sub3/include-test4.scad
@@ -0,0 +1,4 @@
+module test4()
+{
+ echo("included from include-test4.scad");
+}
diff --git a/testdata/scad/sub1/sub2/sub3/sub4/include-test2.scad b/testdata/scad/sub1/sub2/sub3/sub4/include-test2.scad
new file mode 100644
index 0000000..9f4c963
--- /dev/null
+++ b/testdata/scad/sub1/sub2/sub3/sub4/include-test2.scad
@@ -0,0 +1,10 @@
+//Test nested include
+include <include-test3.scad>
+
+//Test relative file location
+include <../include-test4.scad>
+
+module test2 ()
+{
+ echo("included from include-test2.scad");
+}
diff --git a/testdata/scad/sub1/sub2/sub3/sub4/include-test3.scad b/testdata/scad/sub1/sub2/sub3/sub4/include-test3.scad
new file mode 100644
index 0000000..2f67e93
--- /dev/null
+++ b/testdata/scad/sub1/sub2/sub3/sub4/include-test3.scad
@@ -0,0 +1,4 @@
+module test3()
+{
+ echo("included from include-test3.scad");
+}
contact: Jan Huwald // Impressum