Index: trunk/src/libcschem/cnc_poly.c =================================================================== --- trunk/src/libcschem/cnc_poly.c (revision 1360) +++ trunk/src/libcschem/cnc_poly.c (revision 1361) @@ -26,6 +26,9 @@ #include "config.h" + +#include + #include "concrete.h" #include "cnc_obj.h" #include "cnc_poly.h" @@ -65,3 +68,37 @@ return poly; } +void csch_poly_update(csch_sheet_t *sheet, csch_cpoly_t *poly, int do_xform) +{ + csch_cobj_update_pen(&poly->hdr); + long n; + csch_coutline_t *o; + + if (do_xform) { + for(n = 0, o = poly->outline.array; n < poly->outline.used; n++, o++) { + o->hdr = poly->hdr; + switch(o->hdr.type) { + case CSCH_CTYPE_LINE: csch_line_update_xform(sheet, &o->line); break; + case CSCH_CTYPE_ARC: csch_arc_update_xform(sheet, &o->arc); break; + default: rnd_message(RND_MSG_ERROR, "Polygon #%ld contains an invalid object in its contour\n", poly->hdr.oid); break; + } + } + } + + csch_cobj_rtree_del(sheet, &poly->hdr); + + csch_obj_bbox_reset(poly); + for(n = 0, o = poly->outline.array; n < poly->outline.used; n++, o++) { + switch(o->hdr.type) { + case CSCH_CTYPE_LINE: csch_line_update_bbox(sheet, &o->line); break; + case CSCH_CTYPE_ARC: csch_arc_update_bbox(sheet, &o->arc); break; + default: break; /* already warned above */ + } + csch_bbox_bump(&poly->hdr.bbox, x, o->hdr.bbox.x1); + csch_bbox_bump(&poly->hdr.bbox, x, o->hdr.bbox.x2); + csch_bbox_bump(&poly->hdr.bbox, y, o->hdr.bbox.y1); + csch_bbox_bump(&poly->hdr.bbox, y, o->hdr.bbox.y2); + } + + csch_cobj_rtree_add(sheet, &poly->hdr); +} Index: trunk/src/libcschem/cnc_poly.h =================================================================== --- trunk/src/libcschem/cnc_poly.h (revision 1360) +++ trunk/src/libcschem/cnc_poly.h (revision 1361) @@ -34,7 +34,7 @@ typedef struct csch_cpoly_s { csch_chdr_t hdr; - csch_vtcoutline_t outline; + csch_vtcoutline_t outline; /* since it is made of lines and arcs, each object contains its spec and inst */ } csch_cpoly_t; csch_cpoly_t *csch_cpoly_alloc(csch_sheet_t *sheet, csch_cgrp_t *parent, csch_oid_t oid); @@ -41,5 +41,7 @@ csch_cpoly_t *csch_cpoly_dup(csch_sheet_t *sheet, csch_cgrp_t *parent, const csch_cpoly_t *src); void csch_cpoly_free(csch_cpoly_t *poly); csch_cpoly_t *csch_cpoly_get(csch_sheet_t *sheet, csch_cgrp_t *grp, csch_oid_t oid); +void csch_poly_update(csch_sheet_t *sheet, csch_cpoly_t *poly, int do_xform); + #endif