Index: trunk/doc/user/09_appendix/layer_addr.html =================================================================== --- trunk/doc/user/09_appendix/layer_addr.html (revision 29451) +++ trunk/doc/user/09_appendix/layer_addr.html (revision 29452) @@ -64,6 +64,7 @@
  • thin_draw_poly: draw layer with thin contour polygons instead of solid polygons
  • check_planes: draw only (clipped) polygons
  • flag_color: if the exporter supports colors, highlight objects that are found, selected or warned with screen color +
  • hide_floaters: omit rendering subcircuit floaters; warning: floaters are not only silk refdes text
  • (TODO: supplement for inversion)

    Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 29451) +++ trunk/src/draw.c (revision 29452) @@ -413,6 +413,7 @@ */ if ((info->xform_exporter != NULL) && !info->xform_exporter->check_planes && pcb_layer_gui_set_vlayer(PCB, PCB_VLY_INVISIBLE, 0, &info->xform_exporter)) { pcb_layer_type_t side = PCB_LYT_INVISIBLE_SIDE(); + pcb_draw_silk_doc(info, side, PCB_LYT_DOC, 0, 1); pcb_draw_silk_doc(info, side, PCB_LYT_SILK, 0, 1); @@ -542,7 +543,10 @@ static void pcb_draw_pstks(pcb_draw_info_t *info, pcb_layergrp_id_t group, int is_current, pcb_layer_combining_t comb) { pcb_layergrp_t *g = PCB->LayerGroups.grp + group; + pcb_xform_t tmp; + xform_setup(info, &tmp, NULL); + info->objcb.pstk.gid = group; info->objcb.pstk.is_current = is_current; info->objcb.pstk.comb = comb; @@ -551,8 +555,10 @@ else info->objcb.pstk.layer1 = NULL; - if ((info->xform == NULL) || (!info->xform->check_planes)) + if (!info->xform->check_planes) pcb_r_search(info->pcb->Data->padstack_tree, info->drawn_area, NULL, pcb_pstk_draw_callback, info, NULL); + + info->xform = NULL; info->layer = NULL; } static void pcb_draw_pstk_marks(pcb_draw_info_t *info) @@ -939,7 +945,7 @@ void pcb_erase_obj(int type, void *lptr, void *ptr) { - if (pcb_hidden_floater((pcb_any_obj_t *)ptr)) + if (pcb_hidden_floater_gui((pcb_any_obj_t *)ptr)) return; switch (type) { @@ -971,7 +977,7 @@ void pcb_draw_obj(pcb_any_obj_t *obj) { - if (pcb_hidden_floater(obj)) + if (pcb_hidden_floater_gui(obj)) return; switch (obj->type) { @@ -1011,7 +1017,7 @@ static void pcb_draw_obj_label(pcb_draw_info_t *info, pcb_layergrp_id_t gid, pcb_any_obj_t *obj) { - if (pcb_hidden_floater(obj)) + if (pcb_hidden_floater(obj, info)) return; /* do not show layer-object labels of the other side on non-pinout views */ @@ -1095,6 +1101,7 @@ dst->thin_draw = conf_core.editor.thin_draw; dst->thin_draw_poly = conf_core.editor.thin_draw_poly; dst->check_planes = conf_core.editor.check_planes; + dst->hide_floaters = conf_core.editor.hide_names; dst->flag_color = 1; } Index: trunk/src/layer_addr.c =================================================================== --- trunk/src/layer_addr.c (revision 29451) +++ trunk/src/layer_addr.c (revision 29452) @@ -186,6 +186,10 @@ if (xf_ != NULL) xf_->flag_color = 1; if (xf != NULL) *xf = xf_; } + else if (strcmp(key, "hide_floaters") == 0) { + if (xf_ != NULL) xf_->hide_floaters = 1; + if (xf != NULL) *xf = xf_; + } else pcb_message(PCB_MSG_ERROR, "CAM: ignoring unknown layer supplement key '%s'\n", key); } Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 29451) +++ trunk/src/obj_arc.c (revision 29452) @@ -1077,7 +1077,7 @@ pcb_arc_t *arc = (pcb_arc_t *)b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(arc->parent_type, &arc->parent)) @@ -1092,7 +1092,7 @@ pcb_arc_t *arc = (pcb_arc_t *)b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(arc->parent_type, &arc->parent)) Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 29451) +++ trunk/src/obj_common.h (revision 29452) @@ -103,6 +103,7 @@ unsigned thin_draw_poly:1; /* when 1, draw thin countour instead of solid polygons */ unsigned check_planes:1; /* when 1, draw polygons only */ unsigned flag_color:1; /* when zero, ignore colors that would be derived from object flags (i.e. selection, warn, found) */ + unsigned hide_floaters:1; /* when 1 omit drawing floaters (typically refdes text on silk) */ /* WARNING: After adding new fields, make sure to update pcb_xform_add() and pcb_xform_is_nop() below */ }; @@ -122,6 +123,7 @@ __dst__->thin_draw_poly |= __src__->thin_draw_poly; \ __dst__->check_planes |= __src__->check_planes; \ __dst__->flag_color |= __src__->flag_color; \ + __dst__->hide_floaters |= __src__->hide_floaters; \ } while(0) #define pcb_xform_is_nop(src) (\ ((src)->bloat == 0) && \ @@ -132,7 +134,8 @@ ((src)->thin_draw == 0) && \ ((src)->thin_draw_poly == 0) && \ ((src)->check_planes == 0) && \ - ((src)->flag_color == 0) \ + ((src)->flag_color == 0) && \ + ((src)->hide_floaters == 0) \ ) /* Returns true if overlay drawing should be omitted */ @@ -303,7 +306,8 @@ pcb_render->draw_line(pcb_draw_out.fgGC, cx+radius, cy-radius, cx-radius, cy+radius); \ } while(0) -#define pcb_hidden_floater(obj) (conf_core.editor.hide_names && PCB_FLAG_TEST(PCB_FLAG_FLOATER, (obj))) +#define pcb_hidden_floater(obj,info) ((info)->xform->hide_floaters && PCB_FLAG_TEST(PCB_FLAG_FLOATER, (obj))) +#define pcb_hidden_floater_gui(obj) (conf_core.editor.hide_names && PCB_FLAG_TEST(PCB_FLAG_FLOATER, (obj))) #define pcb_partial_export(obj,info) (((info)->xform != NULL) && (info)->xform->partial_export && (!PCB_FLAG_TEST(PCB_FLAG_EXPORTSEL, (obj)))) /* Returns whether a subc part object is editable (not under the subc lock) */ Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 29451) +++ trunk/src/obj_line.c (revision 29452) @@ -1192,7 +1192,7 @@ pcb_line_t *line = (pcb_line_t *)b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(line->parent_type, &line->parent)) @@ -1207,7 +1207,7 @@ pcb_line_t *line = (pcb_line_t *)b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(line->parent_type, &line->parent)) Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 29451) +++ trunk/src/obj_poly.c (revision 29452) @@ -1308,7 +1308,7 @@ pcb_draw_info_t *i = cl; pcb_poly_t *polygon = (pcb_poly_t *) b; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, i)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, i) || pcb_partial_export((pcb_any_obj_t*)b, i)) return PCB_R_DIR_FOUND_CONTINUE; if (!polygon->Clipped) @@ -1327,7 +1327,7 @@ pcb_draw_info_t *i = cl; pcb_poly_t *polygon = (pcb_poly_t *) b; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, i)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, i) || pcb_partial_export((pcb_any_obj_t*)b, i)) return PCB_R_DIR_FOUND_CONTINUE; if (polygon->Clipped == NULL) { Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 29451) +++ trunk/src/obj_pstk.c (revision 29452) @@ -537,7 +537,7 @@ pcb_obj_noexport(info, ps, return PCB_R_DIR_NOT_FOUND); - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_gobj_parent_subc(ps->parent_type, &ps->parent)) @@ -633,7 +633,7 @@ pcb_obj_noexport(info, ps, return PCB_R_DIR_NOT_FOUND); - if (pcb_hidden_floater(ps) || pcb_partial_export(ps, info)) + if (pcb_hidden_floater(ps, info) || pcb_partial_export(ps, info)) return PCB_R_DIR_FOUND_CONTINUE; /* hide subc parts if requested */ @@ -691,7 +691,7 @@ pcb_obj_noexport(info, ps, return PCB_R_DIR_NOT_FOUND); - if (pcb_hidden_floater(ps) || pcb_partial_export(ps, info)) + if (pcb_hidden_floater(ps, info) || pcb_partial_export(ps, info)) return PCB_R_DIR_FOUND_CONTINUE; /* hide subc parts if requested */ Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 29451) +++ trunk/src/obj_text.c (revision 29452) @@ -1380,7 +1380,7 @@ pcb_text_t *text = (pcb_text_t *) b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(text->parent_type, &text->parent)) @@ -1395,7 +1395,7 @@ pcb_text_t *text = (pcb_text_t *) b; pcb_draw_info_t *info = cl; - if (pcb_hidden_floater((pcb_any_obj_t*)b) || pcb_partial_export((pcb_any_obj_t*)b, info)) + if (pcb_hidden_floater((pcb_any_obj_t*)b, info) || pcb_partial_export((pcb_any_obj_t*)b, info)) return PCB_R_DIR_FOUND_CONTINUE; if (!PCB->SubcPartsOn && pcb_lobj_parent_subc(text->parent_type, &text->parent))