2

This is a groupShape with a child shape:

<p:nvgrpsppr> 
   <p:cnvpr name="Group 256" id="260" /> 
   <p:cnvgrpsppr> 
    <a:grpsplocks nochangeaspect="1" /> 
   </p:cnvgrpsppr> 
   <p:nvpr /> 
  </p:nvgrpsppr> 
  <p:grpsppr bwmode="auto"> 
   <a:xfrm> 
    <a:off y="1940518" x="2952779" /> 
    <a:ext cy="2209679" cx="1219680" /> 
    <a:choff y="1052" x="1972" /> 
    <a:chext cy="1116" cx="616" /> 
   </a:xfrm> 
   <a:solidfill> 
    <a:srgbclr val="F7B63E" /> 
   </a:solidfill> 
  </p:grpsppr> 
  <p:sp> 
   <p:nvsppr> 
    <p:cnvpr name="Freeform 257" id="262" /> 
    <p:cnvsppr> 
     <a:splocks noeditpoints="1" /> 
    </p:cnvsppr> 
    <p:nvpr /> 
   </p:nvsppr> 
   <p:sppr bwmode="auto"> 
    <a:xfrm> 
     <a:off y="1160" x="2161" /> 
     <a:ext cy="287" cx="288" /> 
    </a:xfrm>
   </p:sppr>
  </p:sp>

When I ungroup, get this:

  <p:grpsppr> 
   <a:xfrm> 
    <a:off y="0" x="0" /> 
    <a:ext cy="0" cx="0" /> 
    <a:choff y="0" x="0" /> 
    <a:chext cy="0" cx="0" /> 
   </a:xfrm> 
  </p:grpsppr> 
  <p:sp> 
   <p:nvsppr> 
    <p:cnvpr name="Freeform 257" id="262" /> 
    <p:cnvsppr> 
     <a:splocks noeditpoints="1" /> 
    </p:cnvsppr> 
    <p:nvpr /> 
   </p:nvsppr> 
   <p:sppr bwmode="auto"> 
    <a:xfrm> 
     <a:off y="2154358" x="3326999" /> 
     <a:ext cy="568260" cx="570240" /> 
    </a:xfrm>
   </p:sppr>
  </p:sp>

The childShape converted to absolute positioning.

<a:xfrm> 
 <a:off y="1160" x="2161" /> 
 <a:ext cy="287" cx="288" /> 
</a:xfrm>

converted to:

<a:xfrm> 
 <a:off y="2154358" x="3326999" /> 
 <a:ext cy="568260" cx="570240" /> 
</a:xfrm>

I calculated the length and width by calculation.

width = (group a:ext:cx) / (group a:chExt:cx) * (child a:ext:x);

height = (group a:ext:cy) / (group a:chExt:cy) * (child a:ext:y);

But I tried many kinds of operations, and I couldn't get how to convert the x coordinate and y coordinate.

What operation should I pass to convert y:1160 to y:2154358.

please give me some advices.

Olaf Kock
  • 46,930
  • 8
  • 59
  • 90
we1
  • 71
  • 7

1 Answers1

7

In your group XML

<a:off y="1940518" x="2952779" /> 
<a:ext cy="2209679" cx="1219680" /> 

means: The group starts at y 1940518, x 2952779 and has extent of height 2209679 and width 1219680.

The

<a:choff y="1052" x="1972" /> 
<a:chext cy="1116" cx="616" /> 

means: The child section of the group starts at y 1052, x 1972 and has extent of height 1116 and width 616. This are the original values of the shapes while grouping.

This shows that your group shape is heavily scaled. It was small and then was scaled with factor 1980.

scale_factor_y = ext_cy / chext_cy 
               = 2209679 / 1116 
               ≈ 1980

scale_factor_x = ext_cx / chext_cx 
               = 1219680 / 616
               = 1980

For your child in the group

 <a:off y="1160" x="2161" /> 
 <a:ext cy="287" cx="288" /> 

means: The not scaled offset is y 1160, x 2161. And the not scaled extent is height 287 and width 288.

If ungrouped, the scaled offset is:

off_y = (not_scaled_off_y - choff_y) * scale_factor_y + group_off_y
      = (1160  - 1052) * 1980 + 1940518
      = 2154358

off_x = (not_scaled_off_x - choff_x) * scale_factor_x + group_off_x
      = (2161  - 1972) * 1980 + 2952779
      = 3326999

and the scaled extent is:

ext_cy = not_scaled_ext_cy * scale_factor_y
       = 287 * 1980
       = 568260

ext_cx = not_scaled_ext_cx * scale_factor_x
       = 288 * 1980
       = 570240

This leads to your

<a:off y="2154358" x="3326999" /> 
<a:ext cy="568260" cx="570240" /> 

for the child out of the group which is now in same scaled size as the group was before.

Axel Richter
  • 56,077
  • 6
  • 60
  • 87
  • Thank you for your answer. By the way, does Microsoft have documentation to explain the meaning of nodes in xml. – we1 Mar 22 '20 at 15:12
  • @wei: Not really. There is [Standard ECMA-376 Office Open XML File Formats](https://www.ecma-international.org/publications/standards/Ecma-376.htm). There `5.1.9.5 xfrm(2D Transform for Grouped Objects)` is described on [Office Open XML Part 4 - Markup Language Reference.pdf](http://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf) -> page 3590 (3596 of PDF). But the relations of `chExt(Child Extents)` §5.1.9.1, `chOff(Child Offset)` §5.1.9.2, `ext(Extents)` §5.1.9.3 and `off(Offset)` §5.1.9.4 are not described. – Axel Richter Mar 22 '20 at 16:02