Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 26444) +++ trunk/src/draw.c (revision 26445) @@ -77,6 +77,7 @@ static void pcb_draw_pstk_labels(pcb_draw_info_t *info); static void pcb_draw_pstk_holes(pcb_draw_info_t *info, pcb_layergrp_id_t group, pcb_pstk_draw_hole_t holetype); static void pcb_draw_ppv(pcb_draw_info_t *info, pcb_layergrp_id_t group); +static void xform_setup(pcb_draw_info_t *info, pcb_xform_t *dst, const pcb_layer_t *Layer); /* In draw_ly_spec.c: */ static void pcb_draw_paste(pcb_draw_info_t *info, int side); @@ -507,12 +508,18 @@ static void pcb_draw_pstk_holes(pcb_draw_info_t *info, pcb_layergrp_id_t group, pcb_pstk_draw_hole_t holetype) { + pcb_xform_t tmp; + + if (!PCB->hole_on) return; + xform_setup(info, &tmp, NULL); info->objcb.pstk.gid = group; info->objcb.pstk.holetype = holetype; pcb_r_search(PCB->Data->padstack_tree, info->drawn_area, NULL, pcb_pstk_draw_hole_callback, info, NULL); + info->xform = NULL; + info->layer = NULL; } static void pcb_draw_pstk_slots(pcb_draw_info_t *info, pcb_layergrp_id_t group, pcb_pstk_draw_hole_t holetype) @@ -1006,6 +1013,7 @@ if (!pcb_draw_inhibit) { pcb_output_t save; pcb_draw_info_t info; + pcb_xform_t xform_main_exp; expose_begin(&save, hid); info.pcb = PCB; @@ -1013,6 +1021,16 @@ info.xform_caller = xform_caller; info.xform = info.xform_exporter = NULL; info.layer = NULL; + + if ((hid->exporter) && (xform_caller == NULL)) { + /* exporters without xform should automatically inherit the default xform for exporting, which differs from what GUI does */ + memset(&xform_main_exp, 0, sizeof(xform_main_exp)); + info.xform = info.xform_exporter = &xform_main_exp; + + xform_main_exp.omit_overlay = 1; /* normally exporters shouldn't draw overlays */ + info.xform_caller = &xform_main_exp; + } + draw_everything(&info); expose_end(&save); } Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 26444) +++ trunk/src/obj_common.h (revision 26445) @@ -96,11 +96,11 @@ typedef double pcb_xform_mx_t[9]; #define PCB_XFORM_MX_IDENT {1,0,0, 0,1,0, 0,0,1} -struct pcb_xform_s { /* generic object transformation */ +struct pcb_xform_s { /* generic object transformation; all-zero means no transformation */ pcb_coord_t bloat; /* if non-zero, bloat (positive) or shrink (negative) by this value */ unsigned layer_faded:1; /* draw layer colors faded */ - + unsigned omit_overlay:1; /* do not draw overlays (which are useful on screen but normally omitted on exports, except if --as-shown is specified */ /* WARNING: After adding new fields, make sure to update pcb_xform_add() and pcb_xform_is_nop() below */ }; @@ -112,9 +112,14 @@ const pcb_xform_t *__src__ = src; \ __dst__->bloat += __src__->bloat; \ __dst__->layer_faded |= __src__->layer_faded; \ + __dst__->omit_overlay |= __src__->omit_overlay; \ } while(0) -#define pcb_xform_is_nop(src) (((src)->bloat == 0) && ((src)->layer_faded == 0)) +#define pcb_xform_is_nop(src) (((src)->bloat == 0) && ((src)->layer_faded == 0) && ((src)->omit_overlay == 0)) +/* Returns true if overlay drawing should be omitted */ +#define pcb_xform_omit_overlay(info) \ + ((info != NULL) && (info->xform != NULL) && (info->xform->omit_overlay != 0)) + /* Standard 2d matrix transformation using mx as pcb_xform_mx_t */ #define pcb_xform_x(mx, x_in, y_in) ((double)(x_in) * mx[0] + (double)(y_in) * mx[1] + mx[2]) #define pcb_xform_y(mx, x_in, y_in) ((double)(x_in) * mx[3] + (double)(y_in) * mx[4] + mx[5]) Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 26444) +++ trunk/src/obj_pstk.c (revision 26445) @@ -657,7 +657,7 @@ /* indicate unplated holes with an arc; unplated holes are more rare than plated holes, thus unplated holes are indicated */ - if (!proto->hplated) { + if (!proto->hplated && !pcb_xform_omit_overlay(info)) { pcb_coord_t r = proto->hdia / 2; r -= r/8; /* +12.5% */ pcb_gui->set_color(pcb_draw_out.fgGC, PCB_FLAG_TEST(PCB_FLAG_SELECTED, ps) ? &conf_core.appearance.color.selected : &conf_core.appearance.color.subc);