Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 11707) +++ trunk/src/obj_poly.c (revision 11708) @@ -209,6 +209,32 @@ return (polygon); } +pcb_polygon_t *pcb_poly_new_from_poly(pcb_layer_t *Layer, pcb_polygon_t *src, pcb_coord_t offs, pcb_coord_t Clearance, pcb_flag_t Flags) +{ + pcb_coord_t x, y; + pcb_poly_it_t it; + pcb_pline_t *pl; + int go; + pcb_polygon_t *polygon = pcb_poly_new(Layer, Clearance, Flags); + + if (!polygon) + return (polygon); + + it.pa = src->Clipped; + pcb_poly_island_first(src, &it); + pl = pcb_poly_contour(&it); + it.cntr = pcb_pline_dup_offset(pl, offs); + for(go = pcb_poly_vect_first(&it, &x, &y); go; go = pcb_poly_vect_next(&it, &x, &y)) + pcb_poly_point_new(polygon, x, y); + + pcb_poly_contours_free(&it.cntr); + + pcb_add_polygon_on_layer(Layer, polygon); + return (polygon); +} + + + void pcb_add_polygon_on_layer(pcb_layer_t *Layer, pcb_polygon_t *polygon) { pcb_poly_bbox(polygon); Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 11707) +++ trunk/src/obj_poly.h (revision 11708) @@ -57,6 +57,7 @@ void pcb_poly_bbox(pcb_polygon_t *Polygon); pcb_polygon_t *pcb_poly_new_from_rectangle(pcb_layer_t *Layer, pcb_coord_t X1, pcb_coord_t Y1, pcb_coord_t X2, pcb_coord_t Y2, pcb_coord_t Clearance, pcb_flag_t Flags); +pcb_polygon_t *pcb_poly_new_from_poly(pcb_layer_t *Layer, pcb_polygon_t *src, pcb_coord_t offs, pcb_coord_t Clearance, pcb_flag_t Flags); pcb_polygon_t *pcb_poly_new(pcb_layer_t *Layer, pcb_coord_t Clearance, pcb_flag_t Flags); pcb_polygon_t *pcb_poly_dup(pcb_layer_t *dst, pcb_polygon_t *src); pcb_polygon_t *pcb_poly_dup_at(pcb_layer_t *dst, pcb_polygon_t *src, pcb_coord_t dx, pcb_coord_t dy);