Show:
/**
A `Tree` object allows accessing individual trees (>4m height) in iLand via Javascript.

Note that using Javascript with individual trees can be slow.

Accessing a tree
----------------
Trees can be accessed via the {{#crossLink "Management"}}{{/crossLink}} object or {{#crossLink "TreeList"}}{{/crossLink}} list within ABE.
The {{#crossLink "Management"}}{{/crossLink}} object provides {{#crossLink "Management/tree:method"}}{{/crossLink}} and
 {{#crossLink "Management/treeObject:method"}}{{/crossLink}} functions. Similarly, the TreeList includes
{{#crossLink "TreeList/tree:method"}}{{/crossLink}} and {{#crossLink "TreeList/treeObject:method"}}{{/crossLink}}.



Reference vs object
-------------------
iLand provides two distinct ways to access trees, namely as reference (to an internal object) or as a Javascript object.
Access via reference is faster, but tree references can not be used for later access. See the example:

    // load all trees of resource unit 0:
    management.loadResourceUnit(0);
    // access via reference: every call to the tree() functions modifies the reference:
    var t1=management.tree(0); // the first tree (dbh=10)
    var t2=management.tree(1); // the second tree (dbh=20)
    console.log("Tree1: " + t1.dbh + ", Tree2: " + t2.dbh); // -> yields "Tree1: 20, Tree2: 20"!!!!

    // access via object:
    var t1=management.treeObject(0); // the first tree (dbh=10)
    var t2=management.treeObject(1); // the second tree (dbh=20)
    console.log("Tree1: " + t1.dbh + ", Tree2: " + t2.dbh); // -> yields "Tree1: 10, Tree2: 20"

    // References are, however, useful for iterating over a list of trees:
    var sum_dbh=0;
    for (var i=0;i<management.count;++i)
        sum_dbh += management.tree(i).dbh;
    console.log("Mean dbh: " + sum_dbh / management.count);



@module iLand
@class Tree
*/

Tree = {

/**
The species (4-character species ID), e.g. 'piab'.

@property species
@type string
*/
/**
The dbh (diamter at breast height), in cm.

@property dbh
@type double
*/

/**
The x-coordinate of the tree, in m.

@property x
@type double
*/
/**
The y-coordinate of the tree, in m.

@property y
@type double
*/
/**
`false` if the tree object is not valid, `true` otherwise.

@property valid
@type bool
*/

/**
`flags` is a binary encoded set of tree flags (see https://iland-model.org/outputs#Tree_Removed_Output for a list of all flags).

@property flags
@type int
*/

/**
`flag` returns true or false for the given `aflag` for the current tree.

@method flag
@param {Flags} aflag the flag to check
@return bool
*/

/**
The function sets the the flag `aflag` to the provided value.
Note that not all flags are setable.
Possible values are currently: `TreeAffectedBite` and `TreeNoHarvest`.

@method setFlag
@param {Flags} aflag the flag to check
@param {bool} value value to set the flag, defaults to true
@Example
    for (let i=0;i<stand.trees.count;++i)
      if( i % 17 == 0) {
        let t = stand.trees.tree(i);
        t.setFlag(Tree.TreeNoHarvest);
      }
*/

/**
A string with memory address, Id, dbh, height, and coordinates of the tree.

@method info
@return {string} A human-readable string with key characteristics of the tree.
*/

/**
`expr()` can be used to retrieve the value of an iLand expression iland-model.org/Expression. All tree variables can be accessed via the expression. Note that
the `expression` is a string and can contain mathematical operations and a set of pre-defined functions.

See also: {{#crossLink "TreeExpr"}}{{/crossLink}}


@method expr
@param {string} expression iLand tree expression
@return {double} value of the `expression` for the tree.
@Example
    var tree = trees.tree(0); // trees is a TreeList
    console.log( tree.expr("dbh*dbh") ); // print the squared dbh
*/
}