BoundingVolume
-
class BoundingVolume
Bases:
TypedReferenceCount
This is an abstract class for any volume in any sense which can be said to define the locality of reference of a node in a graph, along with all of its descendants. It is not necessarily a geometric volume (although see
GeometricBoundingVolume
); this is simply an abstract interface for bounds of any sort.Inheritance diagram
-
enum BoundsType
This enum is used to control the automatic generation of bounding volumes.
-
enumerator BT_default = 0
-
enumerator BT_best = 1
-
enumerator BT_sphere = 2
-
enumerator BT_box = 3
-
enumerator BT_fastest = 4
-
enumerator BT_default = 0
-
enum IntersectionFlags
The
contains()
functions return the union of one or more of these bits.-
enumerator IF_no_intersection = 0
If no bits are set, it is known that there is no intersection.
-
enumerator IF_possible = 1
IF_possible is set if there might be an intersection.
-
enumerator IF_some = 2
IF_some is set if there is definitely an intersection. In this case, IF_possible will also be set.
-
enumerator IF_all = 4
When IF_all is set, both IF_possible and IF_some will also be set.
-
enumerator IF_dont_understand = 8
IF_dont_understand is set if the particular volumevolume intersection test has not been implemented.
-
enumerator IF_no_intersection = 0
-
int contains(BoundingVolume const *vol) const
Returns the appropriate set of
IntersectionFlags
to indicate the amount of intersection with the indicated volume.
-
bool extend_by(BoundingVolume const *vol)
Increases the size of the volume to include the given volume.
-
static TypeHandle get_class_type(void)
-
bool is_empty(void) const
Any kind of volume might be empty. This is a degenerate volume that contains no points; it’s not the same as, for instance, a sphere with radius zero, since that contains one point (the center). It intersects with no other volumes.
-
bool is_infinite(void) const
The other side of the empty coin is an infinite volume. This is a degenerate state of a normally finite volume that contains all points. (Note that some kinds of infinite bounding volumes, like binary separating planes, do not contain all points and thus correctly return is_infinite() == false, even though they are technically infinite. This is a special case of the word ‘infinite’ meaning the volume covers all points in space.)
It completely intersects with all other volumes except empty volumes.
-
virtual BoundingVolume *make_copy(void) const = 0
-
virtual void output(std::ostream &out) const = 0
-
void set_infinite(void)
Marks the volume as infinite, even if it is normally finite. You can think of this as an infinite
extend_by()
operation.
-
virtual void write(std::ostream &out, int indent_level = 0) const
-
enum BoundsType