Index: trunk/src/find.h =================================================================== --- trunk/src/find.h (revision 15765) +++ trunk/src/find.h (revision 15766) @@ -82,7 +82,9 @@ pcb_bool pcb_is_line_in_poly(pcb_line_t *, pcb_poly_t *); pcb_bool pcb_is_arc_in_poly(pcb_arc_t *, pcb_poly_t *); pcb_bool pcb_intersect_obj_obj(pcb_any_obj_t *a, pcb_any_obj_t *b); +pcb_bool_t pcb_pstk_intersect_line(pcb_pstk_t *ps, pcb_line_t *line); + pcb_cardinal_t pcb_lookup_conn_by_obj(void *ctx, pcb_any_obj_t *obj, pcb_bool AndDraw, pcb_cardinal_t (*cb)(void *ctx, pcb_any_obj_t *obj)); /* find_clear.c */ Index: trunk/src/find_geo.c =================================================================== --- trunk/src/find_geo.c (revision 15765) +++ trunk/src/find_geo.c (revision 15766) @@ -748,7 +748,7 @@ pcb_line.Flags = shape_line.square ? pcb_flag_make(PCB_FLAG_SQUARE) : pcb_no_flags(); \ } while(0) -PCB_INLINE pcb_bool_t pcb_pstk_intersect_line(pcb_pstk_t *ps, pcb_line_t *line) +pcb_bool_t pcb_pstk_intersect_line(pcb_pstk_t *ps, pcb_line_t *line) { pcb_pstk_shape_t *shape = pcb_pstk_shape_at(PCB, ps, line->parent.layer); if (shape == NULL) return pcb_false; Index: trunk/src/obj_line_drcenf.c =================================================================== --- trunk/src/obj_line_drcenf.c (revision 15765) +++ trunk/src/obj_line_drcenf.c (revision 15766) @@ -206,18 +206,15 @@ jmp_buf env; }; -#warning padstack TODO: rewrite this for padstacks -#if 0 -static pcb_r_dir_t drcVia_callback(const pcb_box_t * b, void *cl) +static pcb_r_dir_t drcPstk_callback(const pcb_box_t *b, void *cl) { - pcb_pin_t *via = (pcb_pin_t *) b; - struct drc_info *i = (struct drc_info *) cl; + pcb_pstk_t *ps = (pcb_pstk_t *)b; + struct drc_info *i = (struct drc_info *)cl; - if (!PCB_FLAG_TEST(PCB_FLAG_FOUND, via) && pcb_intersect_line_pin(via, i->line)) + if (!PCB_FLAG_TEST(PCB_FLAG_FOUND, ps) && pcb_pstk_intersect_line(ps, i->line)) longjmp(i->env, 1); return PCB_R_DIR_FOUND_CONTINUE; } -#endif static pcb_r_dir_t drcLine_callback(const pcb_box_t * b, void *cl) { @@ -262,7 +259,10 @@ f = 1.0; s = 0.5; last = -1; + line1.type = line2.type = PCB_OBJ_LINE; line1.Flags = line2.Flags = pcb_no_flags(); + line1.parent_type = line2.parent_type = PCB_PARENT_LAYER; + line1.parent.layer = line2.parent.layer = CURRENT; line1.Thickness = conf_core.design.line_thickness + 2 * (PCB->Bloat + 1); line2.Thickness = line1.Thickness; line1.Clearance = line2.Clearance = 0; @@ -349,14 +349,11 @@ last2 = length2; if (setjmp(info.env) == 0) { info.line = &line1; -#warning padstack TODO: -#if 0 - pcb_r_search(PCB->Data->via_tree, &line1.BoundingBox, NULL, drcVia_callback, &info, NULL); + pcb_r_search(PCB->Data->padstack_tree, &line1.BoundingBox, NULL, drcPstk_callback, &info, NULL); if (two_lines) { info.line = &line2; - pcb_r_search(PCB->Data->via_tree, &line2.BoundingBox, NULL, drcVia_callback, &info, NULL); + pcb_r_search(PCB->Data->padstack_tree, &line2.BoundingBox, NULL, drcPstk_callback, &info, NULL); } -#endif PCB_COPPER_GROUP_LOOP(PCB->Data, group); { info.line = &line1;