Index: trunk/src/libcschem/cnc_arc.h =================================================================== --- trunk/src/libcschem/cnc_arc.h (revision 597) +++ trunk/src/libcschem/cnc_arc.h (revision 598) @@ -35,8 +35,9 @@ typedef struct csch_arc_s { csch_chdr_t hdr; - g2d_sarc_t prim; - csch_coord_t sx, sy, ex, ey; /* cached start/end coords */ + g2d_sarc_t inst; /* as installed: group-transformed version (in absolute sheet coordinates) */ + g2d_carc_t spec; /* as specified: file format version (in relative group coordinates) */ + csch_coord_t spec_sx, spec_sy, spec_ex, spec_ey; /* cached start/end coords */ unsigned svalid:1; unsigned evalid:1; } csch_arc_t; Index: trunk/src/libcschem/cnc_bitmap.h =================================================================== --- trunk/src/libcschem/cnc_bitmap.h (revision 597) +++ trunk/src/libcschem/cnc_bitmap.h (revision 598) @@ -32,7 +32,8 @@ /* type=CSCH_CTYPE_BITMAP */ typedef struct csch_cbitmap_s { csch_chdr_t hdr; - csch_coord_t x1, y1; + csch_coord_t inst_x1, inst_y1; + csch_coord_t spec_x1, spec_y1; csch_pixel_t transp; int sx, sy; /* size in pixels */ csch_pixel_t *bitmap; Index: trunk/src/libcschem/cnc_line.c =================================================================== --- trunk/src/libcschem/cnc_line.c (revision 597) +++ trunk/src/libcschem/cnc_line.c (revision 598) @@ -59,12 +59,17 @@ } -void csch_line_update(csch_line_t *line) +void csch_line_update(csch_line_t *line, int do_xform) { g2d_box_t gb; + if (do_xform) { +#warning TODO: apply transformations from parent group + line->inst.c = line->spec; + } + csch_obj_bbox_reset(line); - gb = g2d_sline_bbox(&line->prim); + gb = g2d_sline_bbox(&line->inst); line->hdr.bbox.x1 = gb.p1.x; line->hdr.bbox.y1 = gb.p1.y; line->hdr.bbox.x2 = gb.p2.x; line->hdr.bbox.y2 = gb.p2.y; csch_cobj_update(&line->hdr); Index: trunk/src/libcschem/cnc_line.h =================================================================== --- trunk/src/libcschem/cnc_line.h (revision 597) +++ trunk/src/libcschem/cnc_line.h (revision 598) @@ -35,12 +35,13 @@ typedef struct csch_line_s { csch_chdr_t hdr; - g2d_sline_t prim; + g2d_sline_t inst; /* as installed: group-transformed version (in absolute sheet coordinates) */ + g2d_cline_t spec; /* as specified: file format version (in relative group coordinates) */ } csch_line_t; csch_line_t *csch_line_alloc(csch_sheet_t *sheet, csch_cgrp_t *parent, csch_oid_t oid); void csch_line_free(csch_line_t *line); csch_line_t *csch_line_get(csch_sheet_t *sheet, csch_cgrp_t *grp, csch_oid_t oid); -void csch_line_update(csch_line_t *line); +void csch_line_update(csch_line_t *line, int do_xform); #endif Index: trunk/src/plugins/export_animator/export_animator.c =================================================================== --- trunk/src/plugins/export_animator/export_animator.c (revision 597) +++ trunk/src/plugins/export_animator/export_animator.c (revision 598) @@ -81,7 +81,7 @@ case CSCH_CTYPE_LINE: { csch_line_t *l = (csch_line_t *)h; - csch_coord_t x1 = l->prim.c.p1.x, y1 = l->prim.c.p1.y, x2 = l->prim.c.p2.x, y2 = l->prim.c.p2.y; + csch_coord_t x1 = l->inst.c.p1.x, y1 = l->inst.c.p1.y, x2 = l->inst.c.p2.x, y2 = l->inst.c.p2.y; int verts = 10; switch(ctx->pen->shape) { case CSCH_PSHP_ROUND: Index: trunk/src/plugins/io_lihata/read.c =================================================================== --- trunk/src/plugins/io_lihata/read.c (revision 597) +++ trunk/src/plugins/io_lihata/read.c (revision 598) @@ -389,13 +389,13 @@ line = csch_line_alloc(ctx->sheet, parent, oid); - if (parse_coord(ctx, &line->prim.c.p1.x, lht_dom_hash_get(subtree, "x1")) != 0) + if (parse_coord(ctx, &line->spec.p1.x, lht_dom_hash_get(subtree, "x1")) != 0) return -1; - if (parse_coord(ctx, &line->prim.c.p1.y, lht_dom_hash_get(subtree, "y1")) != 0) + if (parse_coord(ctx, &line->spec.p1.y, lht_dom_hash_get(subtree, "y1")) != 0) return -1; - if (parse_coord(ctx, &line->prim.c.p2.x, lht_dom_hash_get(subtree, "x2")) != 0) + if (parse_coord(ctx, &line->spec.p2.x, lht_dom_hash_get(subtree, "x2")) != 0) return -1; - if (parse_coord(ctx, &line->prim.c.p2.y, lht_dom_hash_get(subtree, "y2")) != 0) + if (parse_coord(ctx, &line->spec.p2.y, lht_dom_hash_get(subtree, "y2")) != 0) return -1; if (parse_oid(ctx, &line->hdr.pen_oid, lht_dom_hash_get(subtree, "pen")) != 0) return -1;