Index: trunk/src/libcschem/cnc_grp.c =================================================================== --- trunk/src/libcschem/cnc_grp.c (revision 585) +++ trunk/src/libcschem/cnc_grp.c (revision 586) @@ -29,6 +29,7 @@ #include "concrete.h" #include "cnc_grp.h" #include "cnc_obj.h" +#include "cnc_loop.h" csch_cgrp_t *csch_cgrp_init(csch_sheet_t *sheet, csch_cgrp_t *grp, csch_cgrp_t *parent, csch_oid_t oid) { @@ -67,6 +68,22 @@ } +void csch_cgrp_bbox_update(csch_sheet_t *sheet, csch_cgrp_t *grp) +{ + csch_chdr_t *h; + csch_grpo_iter_t it; + + csch_bbox_reset(&grp->hdr.bbox); + for(h = csch_grpo_first(&it, sheet, grp); h != NULL; h = csch_grpo_next(&it)) { + if (csch_bbox_is_invalid(&h->bbox)) + continue; + csch_bbox_bump(&grp->hdr.bbox, x, h->bbox.x1); + csch_bbox_bump(&grp->hdr.bbox, x, h->bbox.x2); + csch_bbox_bump(&grp->hdr.bbox, y, h->bbox.y1); + csch_bbox_bump(&grp->hdr.bbox, y, h->bbox.y2); + } +} + /****************************************************************************/ csch_cgrp_ref_t *csch_cgrp_ref_alloc(csch_sheet_t *sheet, csch_cgrp_t *parent, csch_oid_t oid) Index: trunk/src/libcschem/cnc_grp.h =================================================================== --- trunk/src/libcschem/cnc_grp.h (revision 585) +++ trunk/src/libcschem/cnc_grp.h (revision 586) @@ -59,4 +59,6 @@ void csch_cgrp_remove_(csch_cgrp_t *grp, csch_chdr_t *hdr); void csch_cgrp_remove(csch_cgrp_t *grp, csch_oid_t oid); +void csch_cgrp_bbox_update(csch_sheet_t *sheet, csch_cgrp_t *grp); + #endif Index: trunk/src/libcschem/concrete.c =================================================================== --- trunk/src/libcschem/concrete.c (revision 585) +++ trunk/src/libcschem/concrete.c (revision 586) @@ -30,7 +30,6 @@ #include #include "concrete.h" #include "cnc_obj.h" -#include "cnc_loop.h" csch_sheet_t *csch_sheet_alloc(csch_oid_t oid) { @@ -57,25 +56,10 @@ free(sheet); } -static void csch_sheet_bbox_update_(csch_sheet_t *sheet, csch_cgrp_t *grp) -{ - csch_chdr_t *h; - csch_grpo_iter_t it; - - csch_bbox_reset(&sheet->bbox); - for(h = csch_grpo_first(&it, sheet, grp); h != NULL; h = csch_grpo_next(&it)) { - if (csch_bbox_is_invalid(&h->bbox)) - continue; - csch_bbox_bump(&sheet->bbox, x, h->bbox.x1); - csch_bbox_bump(&sheet->bbox, x, h->bbox.x2); - csch_bbox_bump(&sheet->bbox, y, h->bbox.y1); - csch_bbox_bump(&sheet->bbox, y, h->bbox.y2); - } -} - void csch_sheet_bbox_update(csch_sheet_t *sheet) { - csch_sheet_bbox_update_(sheet, &sheet->direct); + csch_cgrp_bbox_update(sheet, &sheet->direct); + sheet->bbox = sheet->direct.hdr.bbox; } csch_oid_t csch_oid_new(csch_sheet_t *sheet, csch_cgrp_t *grp) Index: trunk/src/plugins/io_lihata/read.c =================================================================== --- trunk/src/plugins/io_lihata/read.c (revision 585) +++ trunk/src/plugins/io_lihata/read.c (revision 586) @@ -420,6 +420,7 @@ static int parse_group(read_ctx_t *ctx, csch_cgrp_t *parent, lht_node_t *subtree, csch_oid_t oid) { csch_cgrp_t *grp = csch_cgrp_alloc(ctx->sheet, parent, oid); + int res; if (grp == NULL) { error(subtree, ("failed to allocate group\n")); @@ -443,7 +444,11 @@ if (parse_double(ctx, &grp->rot, lht_dom_hash_get(subtree, "rot")) != 0) return -1; - return dispatch_subtree(ctx, grp, lht_dom_hash_get(subtree, "objects"), objs_tbl, 0); + res = dispatch_subtree(ctx, grp, lht_dom_hash_get(subtree, "objects"), objs_tbl, 0); + + csch_cgrp_bbox_update(ctx->sheet, grp); + + return res; } static int parse_root_group(read_ctx_t *ctx, csch_cgrp_t *grp, lht_node_t *subtree, csch_oid_t oid)