Index: trunk/src_plugins/io_pads/delay_create.c =================================================================== --- trunk/src_plugins/io_pads/delay_create.c (revision 34543) +++ trunk/src_plugins/io_pads/delay_create.c (revision 34544) @@ -267,6 +267,28 @@ return obj; } +pcb_dlcr_draw_t *pcb_dlcr_poly_new(pcb_dlcr_t *dlcr, int hole, long prealloc_len) +{ + pcb_dlcr_draw_t *obj = dlcr_new(dlcr, DLCR_OBJ); + obj->val.obj.obj.poly.type = PCB_OBJ_DLCR_POLY; + + memset(&obj->val.obj.obj.poly.xy, 0, sizeof(vtc0_t)); + if (prealloc_len > 0) + vtc0_enlarge(&obj->val.obj.obj.poly.xy, prealloc_len); + return obj; +} + +pcb_dlcr_draw_t *pcb_dlcr_poly_lineto(pcb_dlcr_t *dlcr, pcb_dlcr_draw_t *poly, rnd_coord_t x, rnd_coord_t y) +{ + vtc0_append(&poly->val.obj.obj.poly.xy, x); + vtc0_append(&poly->val.obj.obj.poly.xy, y); + if (dlcr->subc_begin != NULL) + rnd_box_bump_point(&dlcr->subc_begin->val.subc_begin.subc->bbox_naked, x, y); + else + rnd_box_bump_point(&dlcr->board_bbox, x, y); + return poly; +} + pcb_dlcr_draw_t *pcb_dlcr_call_on(pcb_dlcr_t *dlcr, void (*cb)(void *rctx, pcb_any_obj_t *obj, void *callctx), void *rctx, void *callctx, int on_next) { pcb_dlcr_draw_t *obj = dlcr_new(dlcr, DLCR_CALL); Index: trunk/src_plugins/io_pads/delay_create.h =================================================================== --- trunk/src_plugins/io_pads/delay_create.h (revision 34543) +++ trunk/src_plugins/io_pads/delay_create.h (revision 34544) @@ -1,6 +1,7 @@ #include #include #include +#include #include "board.h" #include "data.h" @@ -42,6 +43,8 @@ } pcb_dlcr_type_t; +#define PCB_OBJ_DLCR_POLY 0x0000801 + typedef struct { pcb_dlcr_type_t type; union { @@ -52,6 +55,10 @@ pcb_arc_t arc; pcb_text_t text; pcb_pstk_t pstk; + struct { + PCB_ANY_PRIMITIVE_FIELDS; + vtc0_t xy; + } poly; } obj; long layer_id; pcb_layer_type_t lyt; @@ -118,6 +125,8 @@ pcb_dlcr_draw_t *pcb_dlcr_arc_new(pcb_dlcr_t *dlcr, rnd_coord_t cx, rnd_coord_t cy, rnd_coord_t r, double start_deg, double delta_deg, rnd_coord_t width, rnd_coord_t clearance); pcb_dlcr_draw_t *pcb_dlcr_text_new(pcb_dlcr_t *dlcr, rnd_coord_t x, rnd_coord_t y, double rot, int scale, rnd_coord_t thickness, const char *str, long flags); pcb_dlcr_draw_t *pcb_dlcr_via_new(pcb_dlcr_t *dlcr, rnd_coord_t x, rnd_coord_t y, rnd_coord_t clearance, long id, const char *name); +pcb_dlcr_draw_t *pcb_dlcr_poly_new(pcb_dlcr_t *dlcr, int hole, long prealloc_len); +pcb_dlcr_draw_t *pcb_dlcr_poly_lineto(pcb_dlcr_t *dlcr, pcb_dlcr_draw_t *poly, rnd_coord_t x, rnd_coord_t y); /* Call back cb() on the previous (last created) or next object after the object is created */