Index: trunk/src/obj_common.c =================================================================== --- trunk/src/obj_common.c (revision 15060) +++ trunk/src/obj_common.c (revision 15061) @@ -39,6 +39,7 @@ #include "error.h" #include "obj_common.h" #include "obj_arc_ui.h" +#include "obj_pstk.h" const char *pcb_obj_type_name(pcb_objtype_t type) { @@ -217,3 +218,27 @@ return res; } + +pcb_coord_t pcb_obj_clearance_at(pcb_board_t *pcb, const pcb_any_obj_t *o, pcb_layer_t *at) +{ + switch(o->type) { + case PCB_OBJ_POLY: + if (!(PCB_POLY_HAS_CLEARANCE((pcb_poly_t *)o))) + return 0; + return ((pcb_poly_t *)o)->Clearance; + case PCB_OBJ_LINE: + if (!(PCB_NONPOLY_HAS_CLEARANCE((pcb_line_t *)o))) + return 0; + return ((pcb_line_t *)o)->Clearance; + case PCB_OBJ_TEXT: + return 0; + case PCB_OBJ_ARC: + if (!(PCB_NONPOLY_HAS_CLEARANCE((pcb_arc_t *)o))) + return 0; + return ((pcb_arc_t *)o)->Clearance; + case PCB_OBJ_PSTK: + return obj_pstk_get_clearance(pcb, (pcb_pstk_t *)o, at); + default: + return 0; + } +} Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 15060) +++ trunk/src/obj_common.h (revision 15061) @@ -166,6 +166,11 @@ but not for an arc) */ void pcb_obj_center(const pcb_any_obj_t *obj, pcb_coord_t *x, pcb_coord_t *y); +/* Return the clearance value of object on the specified layer (in + case of padstack - in case of other objects layer is ignored) */ +pcb_coord_t pcb_obj_clearance_at(pcb_board_t *pcb, const pcb_any_obj_t *o, pcb_layer_t *at); + + /* Update cached attributes (->term) */ void pcb_obj_attrib_post_change(pcb_attribute_list_t *list, const char *name, const char *value); Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 15060) +++ trunk/src/obj_pstk.c (revision 15061) @@ -1065,3 +1065,17 @@ ctx.rotate.sina = sina; pcb_pstkop_rotate(&ctx, pstk); } + +pcb_coord_t obj_pstk_get_clearance(pcb_board_t *pcb, const pcb_pstk_t *ps, pcb_layer_t *layer) +{ + pcb_pstk_shape_t *shp; + + if (!PCB_FLAG_TEST(PCB_FLAG_CLEARLINE, ps)) + return 0; + + if (ps->Clearance > 0) /* global clarance overrides */ + return ps->Clearance; + + shp = pcb_pstk_shape_at(pcb, ps, layer); + return shp->clearance; +} Index: trunk/src/obj_pstk.h =================================================================== --- trunk/src/obj_pstk.h (revision 15060) +++ trunk/src/obj_pstk.h (revision 15061) @@ -109,6 +109,8 @@ /* Copy orientation information (rotatioin and mirror) of an instance */ pcb_pstk_t *pcb_pstk_copy_orient(pcb_pstk_t *dst, pcb_pstk_t *src); +/* Clearance of the padstack on a given layer */ +pcb_coord_t obj_pstk_get_clearance(pcb_board_t *pcb, const pcb_pstk_t *ps, pcb_layer_t *layer); /*** proto ***/