Index: export_openscad.c =================================================================== --- export_openscad.c (revision 11199) +++ export_openscad.c (revision 11200) @@ -151,6 +151,7 @@ openscad_hid_export_to_file(f, options); + scad_draw_drills(); scad_draw_finish(); pcb_hid_restore_layer_ons(save_ons); @@ -180,10 +181,10 @@ } if (flags & PCB_LYT_PDRILL) - return 1; + return 0; if (flags & PCB_LYT_UDRILL) - return 1; + return 0; return 0; } Index: scad_draw.c =================================================================== --- scad_draw.c (revision 11199) +++ scad_draw.c (revision 11200) @@ -38,13 +38,48 @@ return 0; } +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, " cylinder(r=%mm, h=4, center=true, $fn=30);\n", pin->DrillingHole/2); +} + +static void scad_draw_drills(void) +{ + pcb_rtree_it_t it; + pcb_box_t *obj; + + fprintf(f, "module pcb_drill() {\n"); + + for(obj = pcb_r_first(PCB->Data->via_tree, &it); obj != NULL; obj = pcb_r_next(&it)) + scad_draw_drill((pcb_pin_t *)obj); + pcb_r_end(&it); + + PCB_PIN_ALL_LOOP(PCB->Data); { + scad_draw_drill(pin); + } PCB_ENDALL_LOOP; + + + fprintf(f, "}\n"); +} + static void scad_draw_finish() { - fprintf(f, "module pcb_board() {\n"); + fprintf(f, "module pcb_board_main() {\n"); fprintf(f, " translate ([0, 0, -0.8])\n"); fprintf(f, " linear_extrude(height=1.6)\n"); fprintf(f, " pcb_outline();\n"); fprintf(f, "}\n"); fprintf(f, "\n"); + + fprintf(f, "module pcb_board() {\n"); + fprintf(f, " difference() {\n"); + fprintf(f, " pcb_board_main();\n"); + fprintf(f, " pcb_drill();\n"); + fprintf(f, " }\n"); + fprintf(f, "}\n"); + fprintf(f, "\n"); + + fprintf(f, "pcb_board();\n"); }