The MatrixBuilder has been modified to allow expressions to be used in many more places. In many cases this can enable much more compact and expressive models. For example, a conditional expression could be used to determine the factor to apply to an attribute:
factor="if(SI='Present',0.96,1)"
Previously this would have required two sets of attributes (one for each SI category). Used in combination, the size the ForestModel XML file can be reduced substantially without changing the values in the resulting matrix.
Expressions can now be used in:
The 'factor' attribute on curves. In this context the expressions must resolve to literal values, such as literal numbers or defined constants.
The 'factor' attribute on Attribute or Attributes elements. These expressions will be evaluated in the context of the block that they will be applied to, so in most cases the full suite of functions may be used in forming expressions.
The breakup age and renewal ages in Succession elements. These are evaluated in the context of the block that the succession rules apply to, but do not have feature attributes available. Curves may be looked up by curve id, and Attribute values may be looked up by attribute id.
The minimum and maximum operable ages, offsets, regen curve and retention values on the Treatment element. These values are evaluated in the context of the block that the treatment applies to.
This update has resulted in a single backwards incompatible change to one of the little used attributes in the ForestModel XML language. The "curveid" attribute of the "treatment" element used to provide a curve id literal that would be used to determine the renewal age after the treatment. This attribute has been eliminated, and is replaced with a "renewalcurve" attribute that specifies an expression that will be evaluated to determine the renewal curve. Whereas the previous syntax looked like:
<treatment label="Reglr" adjust="R" curveid="HD1.renewAge">
The new syntax looks like:
<treatment label="Reglr" adjust="R" renewalcurve="curveid('HD1.renewAge')">