Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 9150) +++ trunk/src/obj_poly.c (revision 9151) @@ -227,6 +227,13 @@ return (polygon); } +pcb_polygon_t *pcb_poly_dup(pcb_layer_t *dst, pcb_polygon_t *src) +{ + pcb_polygon_t *p = pcb_poly_new(dst, src->Flags); + pcb_poly_copy(p, src); + return p; +} + /* creates a new point in a polygon */ pcb_point_t *pcb_poly_point_new(pcb_polygon_t *Polygon, pcb_coord_t X, pcb_coord_t Y) { Index: trunk/src/obj_poly.h =================================================================== --- trunk/src/obj_poly.h (revision 9150) +++ trunk/src/obj_poly.h (revision 9151) @@ -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_flag_t Flags); pcb_polygon_t *pcb_poly_new(pcb_layer_t *Layer, pcb_flag_t Flags); +pcb_polygon_t *pcb_poly_dup(pcb_layer_t *dst, pcb_polygon_t *src); pcb_point_t *pcb_poly_point_new(pcb_polygon_t *Polygon, pcb_coord_t X, pcb_coord_t Y); pcb_polygon_t *pcb_poly_hole_new(pcb_polygon_t * Polygon); void *pcb_poly_remove(pcb_layer_t *Layer, pcb_polygon_t *Polygon); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 9150) +++ trunk/src/obj_subc.c (revision 9151) @@ -150,7 +150,7 @@ pcb_layer_t *dl = sc->data->Layer + n; pcb_line_t *line, *nline; pcb_text_t *text, *ntext; - pcb_polygon_t *poly; + pcb_polygon_t *poly, *npoly; pcb_arc_t *arc, *narc; gdl_iterator_t it; @@ -185,7 +185,9 @@ } polylist_foreach(&sl->Polygon, &it, poly) { -/* PCB_SET_PARENT(poly, layer, dl);*/ + npoly = pcb_poly_dup(dl, poly); + if (npoly != NULL) + PCB_SET_PARENT(npoly, layer, dl); } }