TreeLod

class TreeLod

Bases: TypedReferenceCount

Levels of detail from one skeleton, each under a triangle budget.

A level is the cheapest of a fixed ladder of reductions that fits its budget, and always coarser than the level before: fewer rings along a stem (`ring_stride`), fewer sides (`radial_scale`), thin wood pruned on a copy (`min_radius`; the leaves of a pruned twig move to the branch it grew from) and fewer leaf cards (`leaf_keep`, the outer cards first, the rest scaled up so the crown keeps its area). A level added with `cards > 0` is a billboard cloud instead: the leaves clustered (k-means) into that many big crossed cards over the trunk and the thickest limbs.

Inheritance diagram

digraph inheritance8e6c48d01e { bgcolor=transparent; rankdir=BT; size="8.0, 12.0"; "DTOOL_SUPER_BASE" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style=""]; "ReferenceCount" [URL="acron.core.ReferenceCount.html#acron.core.ReferenceCount",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style="",target="_top",tooltip="/**"]; "DTOOL_SUPER_BASE" -> "ReferenceCount" [arrowsize=0.75,style=""]; "TreeLod" [URL="acron.proctree.TreeLod.html#acron.proctree.TreeLod",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style="",target="_top",tooltip="/**"]; "TypedReferenceCount" -> "TreeLod" [arrowsize=0.75,style=""]; "TypedObject" [URL="acron.core.TypedObject.html#acron.core.TypedObject",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style="",target="_top",tooltip="/**"]; "DTOOL_SUPER_BASE" -> "TypedObject" [arrowsize=0.75,style=""]; "TypedReferenceCount" [URL="acron.core.TypedReferenceCount.html#acron.core.TypedReferenceCount",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style="",target="_top",tooltip="/**"]; "TypedObject" -> "TypedReferenceCount" [arrowsize=0.75,style=""]; "ReferenceCount" -> "TypedReferenceCount" [arrowsize=0.75,style=""]; }
TreeLod.__init__()
TreeLod.add_level()

A level under `triangle_budget`; `cards > 0` makes it a billboard cloud of that many cards.

static TreeLod.billboard_cloud()

The leaves clustered into `cards` big crossed cards (deterministic k-means: farthest-point seeds from the top, six rounds), over the wood thicker than `min_radius`.

TreeLod.build()

Builds every level from the skeleton (each the first step of the ladder, past the previous level’s, that meets its budget).

TreeLod.clear_levels()
TreeLod.get_budget()
static TreeLod.get_class_type()
TreeLod.get_geom()
TreeLod.get_leaf_keep()
TreeLod.get_min_radius()
TreeLod.get_num_levels()
TreeLod.get_radial_scale()
TreeLod.get_ring_stride()
TreeLod.get_skeleton()

The (reduced) skeleton the level was meshed from.

TreeLod.get_triangles()
static TreeLod.reduce()

A copy without the wood thinner than `min_radius` (or deeper than `max_level`) and with `leaf_keep` of the leaves – the outer ones first, in a nested order (a smaller keep is a subset of a larger), scaled up so the crown keeps its leaf area. Leaves of pruned twigs move to the branch the twig grew from.