Index: trunk/src_plugins/io_kicad/read.c =================================================================== --- trunk/src_plugins/io_kicad/read.c (revision 28669) +++ trunk/src_plugins/io_kicad/read.c (revision 28670) @@ -1614,42 +1614,6 @@ htpp_uninit(&poly_upd); } -void pcb_shape_roundrect(pcb_pstk_shape_t *shape, pcb_coord_t width, pcb_coord_t height, double roundness) -{ - pcb_pstk_poly_t *dst = &shape->data.poly; - pcb_poly_t *p; - pcb_layer_t *layer; - static pcb_data_t data = {0}; - int inited = 0, n; - pcb_coord_t rr, minor = MIN(width, height); - pcb_shape_corner_t corner[4] = { PCB_CORN_ROUND, PCB_CORN_ROUND, PCB_CORN_ROUND, PCB_CORN_ROUND}; - - - if (!inited) { - pcb_data_init(&data); - data.LayerN = 1; - layer = &data.Layer[0]; - memset(layer, 0, sizeof(pcb_layer_t)); - layer->parent.data = &data; - layer->parent_type = PCB_PARENT_DATA; - inited = 1; - } - else - layer = &data.Layer[0]; - - rr = pcb_round(minor * roundness); - p = pcb_genpoly_roundrect(layer, width, height, rr, rr, 0, 0, 0, corner, 4.0); - pcb_pstk_shape_alloc_poly(dst, p->PointN); - shape->shape = PCB_PSSH_POLY; - - for(n = 0; n < p->PointN; n++) { - dst->x[n] = p->Points[n].X; - dst->y[n] = p->Points[n].Y; - } - pcb_poly_free_fields(p); - free(p); -} - typedef struct { pcb_layer_type_t want[PCB_LYT_INTERN+1]; /* indexed by location, contains OR'd bitmask of PCB_LYT_COPPER, PCB_LYT_MASK, PCB_LYT_PASTE */ } kicad_padly_t; Index: trunk/src_plugins/shape/shape.c =================================================================== --- trunk/src_plugins/shape/shape.c (revision 28669) +++ trunk/src_plugins/shape/shape.c (revision 28670) @@ -204,6 +204,43 @@ } #undef CORNER +void pcb_shape_roundrect(pcb_pstk_shape_t *shape, pcb_coord_t width, pcb_coord_t height, double roundness) +{ + pcb_pstk_poly_t *dst = &shape->data.poly; + pcb_poly_t *p; + pcb_layer_t *layer; + static pcb_data_t data = {0}; + int inited = 0, n; + pcb_coord_t rr, minor = MIN(width, height); + pcb_shape_corner_t corner[4] = { PCB_CORN_ROUND, PCB_CORN_ROUND, PCB_CORN_ROUND, PCB_CORN_ROUND}; + + + if (!inited) { + pcb_data_init(&data); + data.LayerN = 1; + layer = &data.Layer[0]; + memset(layer, 0, sizeof(pcb_layer_t)); + layer->parent.data = &data; + layer->parent_type = PCB_PARENT_DATA; + inited = 1; + } + else + layer = &data.Layer[0]; + + rr = pcb_round(minor * roundness); + p = pcb_genpoly_roundrect(layer, width, height, rr, rr, 0, 0, 0, corner, 4.0); + pcb_pstk_shape_alloc_poly(dst, p->PointN); + shape->shape = PCB_PSSH_POLY; + + for(n = 0; n < p->PointN; n++) { + dst->x[n] = p->Points[n].X; + dst->y[n] = p->Points[n].Y; + } + pcb_poly_free_fields(p); + free(p); +} + + static pcb_poly_t *any_poly_place(pcb_data_t *data, pcb_layer_t *layer, pcb_poly_t *p) { if (p == NULL) Index: trunk/src_plugins/shape/shape.h =================================================================== --- trunk/src_plugins/shape/shape.h (revision 28669) +++ trunk/src_plugins/shape/shape.h (revision 28670) @@ -45,6 +45,9 @@ pcb_poly_t *pcb_genpoly_roundrect(pcb_layer_t *layer, pcb_coord_t w, pcb_coord_t h, pcb_coord_t rx, pcb_coord_t ry, double rot_deg, pcb_coord_t cx, pcb_coord_t cy, pcb_shape_corner_t corner[4], double roundres); +/* shorthand rounded rectangle: rounding radius is roundness * smaller_size */ +void pcb_shape_roundrect(pcb_pstk_shape_t *shape, pcb_coord_t width, pcb_coord_t height, double roundness); + #endif