Index: trunk/src/Makefile.dep =================================================================== --- trunk/src/Makefile.dep (revision 12245) +++ trunk/src/Makefile.dep (revision 12246) @@ -5349,9 +5349,9 @@ vtonpoint.h hid.h error.h drc.h route.h buffer.h obj_subc_list.h \ obj_subc.h ../src_3rd/libminuid/libminuid.h rtree.h ht_subc.h \ vtpadstack.h draw.h rotate.h stub_draw.h obj_all.h layer_ui.h \ - obj_pad_draw.h obj_pinvia_draw.h obj_elem_draw.h obj_line_draw.h \ - obj_arc_draw.h obj_rat_draw.h obj_poly_draw.h obj_text_draw.h \ - draw_composite.c draw_ly_spec.c + obj_pad_draw.h obj_pinvia_draw.h obj_padstack_draw.h obj_elem_draw.h \ + obj_line_draw.h obj_arc_draw.h obj_rat_draw.h obj_poly_draw.h \ + obj_text_draw.h draw_composite.c draw_ly_spec.c error.o: error.c ../config.h data.h globalconst.h global_typedefs.h \ pcb_bool.h unit.h layer.h attrib.h obj_all_list.h obj_arc_list.h \ obj_common.h ../src_3rd/genht/hash.h ../src_3rd/genlist/gendlist.h \ @@ -6146,10 +6146,14 @@ ../src_3rd/genht/ht.h obj_poly.h polyarea.h obj_poly_list.h box.h \ math_helper.h move.h misc_util.h ht_element.h ../src_3rd/genht/ht.h \ obj_padstack_list.h obj_padstack.h obj_text_list.h obj_rat_list.h \ - obj_rat.h layer_grp.h library.h rats_patch.h data.h crosshair.h \ - vtonpoint.h hid.h error.h drc.h route.h buffer.h obj_subc_list.h \ - obj_subc.h ../src_3rd/libminuid/libminuid.h ../src_3rd/genht/htsp.h \ - rtree.h ht_subc.h vtpadstack.h data_list.h ../src_3rd/genvector/vtp0.h \ + obj_rat.h layer_grp.h library.h rats_patch.h conf_core.h conf.h \ + pcb-printf.h ../src_3rd/genvector/gds_char.h \ + ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/dom.h \ + ../src_3rd/liblihata/lihata.h ../src_3rd/liblihata/parser.h \ + ../src_3rd/genht/htsp.h ../src_3rd/genvector/vtp0.h list_conf.h data.h \ + crosshair.h vtonpoint.h hid.h error.h drc.h route.h buffer.h \ + obj_subc_list.h obj_subc.h ../src_3rd/libminuid/libminuid.h rtree.h \ + ht_subc.h vtpadstack.h data_list.h draw.h obj_padstack_draw.h \ obj_padstack_inlines.h obj_padstack_act.o: obj_padstack_act.c ../config.h obj_padstack.h \ obj_common.h ../src_3rd/genht/hash.h ../src_3rd/genlist/gendlist.h \ @@ -6165,7 +6169,9 @@ obj_rat.h action_helper.h board.h const.h vtroutestyle.h \ ../src_3rd/genvector/genvector_impl.h \ ../src_3rd/genvector/genvector_undef.h layer_grp.h library.h \ - rats_patch.h hid_actions.h hid.h error.h drc.h + rats_patch.h data.h crosshair.h vtonpoint.h hid.h error.h drc.h route.h \ + buffer.h obj_subc_list.h obj_subc.h ../src_3rd/libminuid/libminuid.h \ + ../src_3rd/genht/htsp.h rtree.h ht_subc.h vtpadstack.h hid_actions.h obj_padstack_list.o: obj_padstack_list.c obj_padstack_list.h \ obj_padstack.h obj_common.h ../src_3rd/genht/hash.h \ ../src_3rd/genlist/gendlist.h flag.h globalconst.h ../config.h attrib.h \ Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 12245) +++ trunk/src/data.h (revision 12246) @@ -53,7 +53,7 @@ pcb_subclist_t subc; elementlist_t Element; /**/ - pcb_rtree_t *via_tree, *subc_tree, *rat_tree; + pcb_rtree_t *via_tree, *padstack_tree, *subc_tree, *rat_tree; pcb_rtree_t *element_tree, *pin_tree, *pad_tree, *name_tree[3]; /* old element support */ pcb_layer_t Layer[PCB_MAX_LAYER]; /* layer TODO: make this dynamic */ pcb_plug_io_t *loader; Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 12245) +++ trunk/src/draw.c (revision 12246) @@ -43,6 +43,7 @@ #include "obj_pad_draw.h" #include "obj_pinvia_draw.h" +#include "obj_padstack_draw.h" #include "obj_elem_draw.h" #include "obj_line_draw.h" #include "obj_arc_draw.h" @@ -432,6 +433,15 @@ } if (PCB->PinOn || pcb_draw_doing_assy) pcb_r_search(PCB->Data->pin_tree, drawn_area, NULL, pcb_hole_draw_callback, NULL, NULL); + + + /* draw padstacks */ + if (PCB->ViaOn || !pcb_gui->gui) { + pcb_padstack_draw_t ctx; + ctx.pcb = PCB; + ctx.gid = group; + pcb_r_search(PCB->Data->padstack_tree, drawn_area, NULL, pcb_padstack_draw_callback, &ctx, NULL); + } } /* --------------------------------------------------------------------------- Index: trunk/src/obj_padstack.c =================================================================== --- trunk/src/obj_padstack.c (revision 12245) +++ trunk/src/obj_padstack.c (revision 12246) @@ -25,14 +25,19 @@ #include #include "board.h" +#include "conf_core.h" #include "data.h" #include "data_list.h" +#include "draw.h" +#include "flag.h" #include "obj_padstack.h" +#include "obj_padstack_draw.h" #include "obj_padstack_list.h" #include "obj_padstack_inlines.h" #include "vtpadstack.h" -#include "flag.h" +#define PS_CROSS_SIZE PCB_MM_TO_COORD(1) + pcb_padstack_t *pcb_padstack_alloc(pcb_data_t *data) { pcb_padstack_t *ps; @@ -68,15 +73,24 @@ ps->y = y; ps->Flags = Flags; ps->ID = pcb_create_ID_get(); - PCB_SET_PARENT(ps, data, data); + pcb_padstack_add(data, ps); return ps; } +void pcb_padstack_add(pcb_data_t *data, pcb_padstack_t *ps) +{ + pcb_padstack_bbox(ps); + if (!data->padstack_tree) + data->padstack_tree = pcb_r_create_tree(NULL, 0, 0); + pcb_r_insert_entry(data->padstack_tree, (pcb_box_t *)ps, 0); + PCB_SET_PARENT(ps, data, data); +} + void pcb_padstack_bbox(pcb_padstack_t *ps) { int n, sn; pcb_line_t line; - pcb_padstack_proto_t *proto = pcb_padstack_get_proto(ps->proto); + pcb_padstack_proto_t *proto = pcb_padstack_get_proto(ps); assert(proto != NULL); ps->BoundingBox.X1 = ps->BoundingBox.X2 = ps->x; @@ -109,3 +123,23 @@ pcb_close_box(&ps->BoundingBox); } + +/*** draw ***/ + +pcb_r_dir_t pcb_padstack_draw_callback(const pcb_box_t *b, void *cl) +{ + pcb_padstack_draw_t *ctx = cl; + pcb_padstack_t *ps = (pcb_padstack_t *)b; + +printf("DRAW %ld!\n", (long int)ctx->gid); + +#warning padstack TODO: have an own color instead of subc_* + pcb_gui->set_color(Output.fgGC, PCB_FLAG_TEST(PCB_FLAG_SELECTED, ps) ? conf_core.appearance.color.subc_selected : conf_core.appearance.color.subc); + pcb_gui->set_line_width(Output.fgGC, 0); + + pcb_gui->set_draw_xor(Output.fgGC, 1); + pcb_gui->draw_line(Output.fgGC, ps->x-PS_CROSS_SIZE, ps->y, ps->x+PS_CROSS_SIZE, ps->y); + pcb_gui->draw_line(Output.fgGC, ps->x, ps->y-PS_CROSS_SIZE, ps->x, ps->y+PS_CROSS_SIZE); + pcb_gui->set_draw_xor(Output.fgGC, 0); + +} Index: trunk/src/obj_padstack.h =================================================================== --- trunk/src/obj_padstack.h (revision 12245) +++ trunk/src/obj_padstack.h (revision 12246) @@ -108,6 +108,7 @@ pcb_padstack_t *pcb_padstack_alloc(pcb_data_t *data); void pcb_padstack_free(pcb_padstack_t *ps); pcb_padstack_t *pcb_padstack_new(pcb_data_t *data, pcb_cardinal_t proto, pcb_coord_t x, pcb_coord_t y, pcb_flag_t Flags); +void pcb_padstack_add(pcb_data_t *data, pcb_padstack_t *ps); void pcb_padstack_bbox(pcb_padstack_t *ps); Index: trunk/src/obj_padstack_draw.h =================================================================== --- trunk/src/obj_padstack_draw.h (revision 12245) +++ trunk/src/obj_padstack_draw.h (revision 12246) @@ -22,8 +22,20 @@ #include "obj_padstack.h" +#ifndef PCB_OBJ_PADSTACK_DRAW_H +#define PCB_OBJ_PADSTACK_DRAW_H + /* Include rtree.h for these */ #ifdef PCB_RTREE_H + +#include "board.h" +#include "layer_grp.h" + +typedef struct { + pcb_board_t *pcb; + pcb_layergrp_id_t gid; +} pcb_padstack_draw_t; + pcb_r_dir_t pcb_padstack_draw_callback(const pcb_box_t *b, void *cl); pcb_r_dir_t pcb_padstack_clear_callback(const pcb_box_t *b, void *cl); #endif @@ -31,3 +43,5 @@ void pcb_padstack_draw(pcb_pin_t *pin, pcb_bool draw_hole); void pcb_padstack_invalidate_erase(pcb_padstack_t *ps); void pcb_padstack_invalidate_draw(pcb_padstack_t *ps); + +#endif