NAME SoLOD SoLOD "" {
distance-based level-of-detail  switching group node
}

INCLUDE nodes/SoLOD.h

DESC {
This group node is used to allow applications to switch between
various representations of objects automatically. The children of this
node typically represent the same object or objects at varying levels
of detail, from highest detail to lowest. 
The distance from the world-space
eye point to the transformed center of the LOD is computed, and one
child is drawn, based on the values in the ranges field.
\p
More precisely, if the distance from the world-space eyepoint to the
transformed center is D and the ranges array contains LAST_RANGE+1
values (numbered 0...LAST_RANGE), then:
\p
\b
    if D < ranges[0]                    : Child 0 is drawn
    else if ranges[i-1] < D < ranges[i] : Child i is drawn
    else if D > ranges[LAST_RANGE]      : Child LAST_RANGE+1 is drawn
\.
\p
Thus, N ranges and N+1 children should be specified.  If you specify
too few children, the last child will be used for the extra
ranges.  If you specify too few ranges, the extra children will
never be used.
\p
It is often useful to define the lowest detail child to be an SoInfo
node.  This causes the object to completely disappear if it is far enough
away from the eyepoint.  Defining the highest detail child to be an
SoInfo node can also be useful if you want the object to disappear if
it gets too close to the eyepoint.
}

FIELD range { World-space distances to use as switching criteria. }
FIELD center { Object-space center of the model. }

METHOD "" SoLOD() {
Creates a distance-based level-of-detail node with default settings.
}

METHOD "" static SoType getClassTypeId() {
Returns type identifier for this class.
}

ACTION SoGLRenderAction, SoRayPickAction, SoCallbackAction {
Only the child with the appropriate level of detail is traversed.
}

ACTION others {
All implemented as for \cSoGroup\..
}

ALSO { SoSwitch, SoGroup }
