summaryrefslogtreecommitdiff
path: root/dxfdata.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-07-17 00:34:15 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-07-17 00:34:15 (GMT)
commit6de5c3dc35d7ea78738cde12fa99eace2a9209bc (patch)
tree5465b4adb468605829ee5f68c260e95858a02a2b /dxfdata.cc
parentd05ea4453b875870375884d6671ca4f0cea624d8 (diff)
Clifford Wolf:
Added rotation extrude Added dxf extrude example git-svn-id: http://svn.clifford.at/openscad/trunk@58 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'dxfdata.cc')
-rw-r--r--dxfdata.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/dxfdata.cc b/dxfdata.cc
index 06c2c3f..a6d2cd8 100644
--- a/dxfdata.cc
+++ b/dxfdata.cc
@@ -176,12 +176,18 @@ DxfData::DxfData(double /* fn */, double /* fs */, double /* fa */, QString file
}
// rotate points if the path is not in non-standard rotation
int b = min_x_point;
- int a = b == 0 ? paths[i].points.count() - 1 : b - 1;
- int c = b == paths[i].points.count() - 1 ? 0 : b + 1;
+ int a = b == 0 ? paths[i].points.count() - 2 : b - 1;
+ int c = b == paths[i].points.count() - 1 ? 1 : b + 1;
double ax = paths[i].points[a]->x - paths[i].points[b]->x;
double ay = paths[i].points[a]->y - paths[i].points[b]->y;
- double cx = paths[i].points[c]->x - paths[i].points[c]->x;
- double cy = paths[i].points[c]->y - paths[i].points[c]->y;
+ double cx = paths[i].points[c]->x - paths[i].points[b]->x;
+ double cy = paths[i].points[c]->y - paths[i].points[b]->y;
+#if 0
+ printf("Rotate check:\n");
+ printf(" a/b/c indices = %d %d %d\n", a, b, c);
+ printf(" b->a vector = %f %f (%f)\n", ax, ay, atan2(ax, ay));
+ printf(" b->c vector = %f %f (%f)\n", cx, cy, atan2(cx, cy));
+#endif
if (atan2(ax, ay) < atan2(cx, cy)) {
for (int j = 0; j < paths[i].points.count()/2; j++)
paths[i].points.swap(j, paths[i].points.count()-1-j);
@@ -193,7 +199,8 @@ DxfData::DxfData(double /* fn */, double /* fs */, double /* fa */, QString file
#if 0
printf("----- DXF Data -----\n");
for (int i = 0; i < paths.count(); i++) {
- printf("Path %d (%s, %s):\n", i, paths[i].is_closed ? "closed" : "open", paths[i].is_inner ? "inner" : "outer");
+ printf("Path %d (%s, %s):\n", i, paths[i].is_closed ? "closed" : "open",
+ paths[i].is_inner ? "inner" : "outer");
for (int j = 0; j < paths[i].points.count(); j++)
printf(" %f %f\n", paths[i].points[j]->x, paths[i].points[j]->y);
}
contact: Jan Huwald // Impressum