Adjusting a Preset Shape

While specifying a preset shape is convenient and looks good most of the time. There may also be the need for the user to adjust this preset to more closely suit the needs of their document. For this we introduce the notion of adjust values. The preset shape is built using lines, curves and calculations, just as a custom shape would be defined. To allow for the adjusting of these preset shapes we have based certain properties of shapes on adjust values rather than concrete dimensions. This means that they can be modified which will in turn modify the geometry of the shape.

A simple arrow would be specified using the following DrawingML code.

<p:sp>
  <p:spPr>
    <a:xfrm>
      <a:off x="3276600" y="990600"/>
      <a:ext cx="978408" cy="484632"/>
    </a:xfrm>
    <a:prstGeom prst="rightArrow">
      <a:avLst>
        <a:gd name="adj1" fmla="val 50000"/>
        <a:gd name="adj2" fmla="val 50000"/>
      </a:avLst>
    </a:prstGeom>
  </p:spPr>
</p:sp>

This will specify the basic arrow shown above which might be sufficient for the document needs of the user but it also may not. If this standard arrow is not sufficient then the two adjust values for this shape may be adjusted. For instance, if the body of the arrow is too large then the value for <adj1> can be decreased. The following DrawingML code would specify such a case.

<a:gd name="adj1" fmla="val 18553"/>

Similarly, if the arrow head itself was too short then the value of adj2 can be increased. The following DrawingML code would specify such a case.

<a:gd name="adj2" fmla="val 81447"/>

Thus, it can be seen that while each preset is indeed a preset with a pre-defined geometry, it can be modified. Through the use of adjust values, the user is able to custom fit a preset shape to their document needs without having to specify an entirely custom shape.

Note that the values used here for adjust values have no real units as they are simply input parameters into the equations that make up the shape geometry. More on these equations and their parameters will be discussed in §5.9.4.2.