Index: export_openscad.c =================================================================== --- export_openscad.c (revision 11831) +++ export_openscad.c (revision 11832) @@ -325,6 +325,9 @@ static void openscad_fill_rect(pcb_hid_gc_t gc, pcb_coord_t x1, pcb_coord_t y1, pcb_coord_t x2, pcb_coord_t y2) { + TRX(x1); TRY(y1); + TRX(x2); TRY(y2); + fix_rect_coords(); pcb_fprintf(f, " pcb_fill_rect(%mm, %mm, %mm, %mm, %f, %f);\n", x1, y1, x2, y2, 0.0, layer_thickness); @@ -335,6 +338,9 @@ double length, angle; const char *cap_style; + TRX(x1); TRY(y1); + TRX(x2); TRY(y2); + length = pcb_distance(x1, y1, x2, y2); angle = atan2((double)y2-y1, (double)x2-x1); @@ -349,6 +355,9 @@ static void openscad_draw_rect(pcb_hid_gc_t gc, pcb_coord_t x1, pcb_coord_t y1, pcb_coord_t x2, pcb_coord_t y2) { + TRX(x1); TRY(y1); + TRX(x2); TRY(y2); + fix_rect_coords(); openscad_draw_line(gc, x1, y1, x2, y1); openscad_draw_line(gc, x2, y1, x2, y2); @@ -389,6 +398,8 @@ static void openscad_fill_circle(pcb_hid_gc_t gc, pcb_coord_t cx, pcb_coord_t cy, pcb_coord_t radius) { + TRX(cx); TRY(cy); + pcb_fprintf(f, " pcb_fcirc(%mm, %mm, %mm, %f);\n", cx, cy, radius, layer_thickness); } @@ -397,8 +408,8 @@ int n; fprintf(f, " pcb_fill_poly(["); for(n = 0; n < n_coords-1; n++) - pcb_fprintf(f, "[%mm,%mm],", x[n], y[n]); - pcb_fprintf(f, "[%mm,%mm]], %f);\n", x[n], y[n], layer_thickness); + pcb_fprintf(f, "[%mm,%mm],", TRX_(x[n]), TRY_(y[n])); + pcb_fprintf(f, "[%mm,%mm]], %f);\n", TRX_(x[n]), TRY_(y[n]), layer_thickness); } static void openscad_calibrate(double xval, double yval) Index: scad_draw.c =================================================================== --- scad_draw.c (revision 11831) +++ scad_draw.c (revision 11832) @@ -22,8 +22,11 @@ #include "../lib_polyhelp/topoly.h" +#define TRX_(x) (x) +#define TRY_(y) (PCB->MaxHeight - (y)) + #define TRX(x) -#define TRY(y) y = (PCB->MaxHeight - (y)) +#define TRY(y) y = TRY_(y) static void scad_draw_primitives(void) { @@ -93,7 +96,7 @@ fprintf(f, " polygon([\n\t\t"); /* we need the as-drawn polygon and we know there are no holes */ for(n = 0; n < poly->PointN; n++) - pcb_fprintf(f, "[%mm,%mm]%s", poly->Points[n].X, poly->Points[n].Y, ((n < (poly->PointN-1)) ? "," : "\n")); + pcb_fprintf(f, "[%mm,%mm]%s", TRX_(poly->Points[n].X), TRY_(poly->Points[n].Y), ((n < (poly->PointN-1)) ? "," : "\n")); fprintf(f, " ]);\n"); fprintf(f, "}\n"); @@ -103,7 +106,7 @@ static void scad_draw_drill(const pcb_pin_t *pin) { - pcb_fprintf(f, " translate([%mm,%mm,0])\n", pin->X, pin->Y); + pcb_fprintf(f, " translate([%mm,%mm,0])\n", TRX_(pin->X), TRY_(pin->Y)); pcb_fprintf(f, " cylinder(r=%mm, h=4, center=true, $fn=30);\n", pin->DrillingHole/2); } Index: scad_models.c =================================================================== --- scad_models.c (revision 11831) +++ scad_models.c (revision 11832) @@ -74,7 +74,7 @@ PCB_ELEMENT_LOOP(PCB->Data); { mod = pcb_attribute_get(&element->Attributes, "openscad"); if (mod != NULL) - scad_insert_model(&models, mod, element->MarkX, element->MarkY); + scad_insert_model(&models, mod, TRX_(element->MarkX), TRY_(element->MarkY)); } PCB_END_LOOP; for (e = htsp_first(&models); e; e = htsp_next(&models, e))