Panda3D
|
This defines a single entry in a TransformBlendTable. More...
#include "transformBlend.h"
Classes | |
class | CData |
class | TransformEntry |
Public Member Functions | |
TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0) | |
TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0, const VertexTransform *transform1, PN_stdfloat weight1, const VertexTransform *transform2, PN_stdfloat weight2) | |
TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0, const VertexTransform *transform1, PN_stdfloat weight1, const VertexTransform *transform2, PN_stdfloat weight2, const VertexTransform *transform3, PN_stdfloat weight3) | |
TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0, const VertexTransform *transform1, PN_stdfloat weight1) | |
TransformBlend (const TransformBlend ©) | |
void | add_transform (const VertexTransform *transform, PN_stdfloat weight) |
Adds a new transform to the blend. | |
int | compare_to (const TransformBlend &other) const |
Defines an arbitrary ordering for TransformBlend objects. | |
int | complete_pointers (TypedWritable **plist, BamReader *manager) |
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin(). | |
void | fillin (DatagramIterator &scan, BamReader *manager) |
This internal function is called by make_from_bam to read in all of the relevant data from the BamFile for the new PandaNode. | |
void | get_blend (LMatrix4 &result, Thread *current_thread) const |
Returns the current value of the blend, based on the current value of all of the nested transform objects and their associated weights. | |
UpdateSeq | get_modified (Thread *current_thread) const |
Returns a counter which is guaranteed to increment at least as often as the result of get_blend() changes. | |
int | get_num_transforms () const |
Returns the number of transforms stored in the blend object. | |
const VertexTransform * | get_transform (int n) const |
Returns the nth transform stored in the blend object. | |
PN_stdfloat | get_weight (const VertexTransform *transform) const |
Returns the weight associated with the indicated transform, or 0 if there is no entry for the transform. | |
PN_stdfloat | get_weight (int n) const |
Returns the weight associated with the nth transform stored in the blend object. | |
bool | has_transform (const VertexTransform *transform) const |
Returns true if the blend has the indicated transform, false otherwise. | |
void | limit_transforms (int max_transforms) |
If the total number of transforms in the blend exceeds max_transforms, removes the n least-important transforms as needed to reduce the number of transforms to max_transforms. | |
MAKE_SEQ (get_transforms, get_num_transforms, get_transform) | |
void | normalize_weights () |
Rescales all of the weights on the various transforms so that they sum to 1.0. | |
bool | operator!= (const TransformBlend &other) const |
bool | operator< (const TransformBlend &other) const |
void | operator= (const TransformBlend ©) |
bool | operator== (const TransformBlend &other) const |
void | output (ostream &out) const |
void | remove_transform (const VertexTransform *transform) |
Removes the indicated transform from the blend. | |
void | set_transform (int n, const VertexTransform *transform) |
Replaces the nth transform stored in the blend object. | |
void | set_weight (int n, PN_stdfloat weight) |
Replaces the weight associated with the nth transform stored in the blend object. | |
void | transform_point (LPoint3f &point, Thread *current_thread) const |
Transforms the indicated point by the blend matrix. | |
void | transform_point (LPoint4f &point, Thread *current_thread) const |
Transforms the indicated point by the blend matrix. | |
void | transform_point (LPoint3d &point, Thread *current_thread) const |
Transforms the indicated point by the blend matrix. | |
void | transform_point (LPoint4d &point, Thread *current_thread) const |
Transforms the indicated point by the blend matrix. | |
void | transform_vector (LVector3d &point, Thread *current_thread) const |
Transforms the indicated vector by the blend matrix. | |
void | transform_vector (LVector3f &point, Thread *current_thread) const |
Transforms the indicated vector by the blend matrix. | |
void | update_blend (Thread *current_thread) const |
Recomputes the internal representation of the blend value, if necessary. | |
void | write (ostream &out, int indent_level) const |
void | write_datagram (BamWriter *manager, Datagram &dg) const |
Writes the contents of this object to the datagram for shipping out to a Bam file. | |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
Friends | |
class | VertexTransform |
This defines a single entry in a TransformBlendTable.
It represents a unique combination of VertexTransform pointers and blend amounts.
Definition at line 36 of file transformBlend.h.
void TransformBlend::add_transform | ( | const VertexTransform * | transform, |
PN_stdfloat | weight | ||
) |
Adds a new transform to the blend.
If the transform already existed, increases its weight factor.
Definition at line 58 of file transformBlend.cxx.
References Thread::get_current_thread().
int TransformBlend::compare_to | ( | const TransformBlend & | other | ) | const |
Defines an arbitrary ordering for TransformBlend objects.
Definition at line 29 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::begin(), ordered_vector< Key, Compare >::end(), and ordered_vector< Key, Compare >::size().
int TransformBlend::complete_pointers | ( | TypedWritable ** | p_list, |
BamReader * | manager | ||
) |
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
Returns the number of pointers processed.
Definition at line 302 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::begin(), ordered_vector< Key, Compare >::end(), and ov_set< Key, Compare >::sort().
void TransformBlend::fillin | ( | DatagramIterator & | scan, |
BamReader * | manager | ||
) |
This internal function is called by make_from_bam to read in all of the relevant data from the BamFile for the new PandaNode.
Definition at line 325 of file transformBlend.cxx.
References DatagramIterator::get_stdfloat(), DatagramIterator::get_uint16(), ordered_vector< Key, Compare >::push_back(), and BamReader::read_pointer().
Referenced by TransformBlendTable::fillin().
Returns the current value of the blend, based on the current value of all of the nested transform objects and their associated weights.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 228 of file transformBlend.I.
Referenced by GeomVertexData::copy_from().
Returns a counter which is guaranteed to increment at least as often as the result of get_blend() changes.
Definition at line 390 of file transformBlend.I.
References VertexTransform::get_global_modified().
int TransformBlend::get_num_transforms | ( | ) | const [inline] |
Returns the number of transforms stored in the blend object.
Definition at line 149 of file transformBlend.I.
References ordered_vector< Key, Compare >::size().
Referenced by TransformBlendTable::add_blend(), and GeomVertexData::copy_from().
const VertexTransform * TransformBlend::get_transform | ( | int | n | ) | const [inline] |
Returns the nth transform stored in the blend object.
Definition at line 160 of file transformBlend.I.
References ordered_vector< Key, Compare >::size().
Referenced by GeomVertexData::copy_from().
PN_stdfloat TransformBlend::get_weight | ( | const VertexTransform * | transform | ) | const |
Returns the weight associated with the indicated transform, or 0 if there is no entry for the transform.
Definition at line 176 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::end().
Referenced by GeomVertexData::copy_from().
PN_stdfloat TransformBlend::get_weight | ( | int | n | ) | const [inline] |
Returns the weight associated with the nth transform stored in the blend object.
Definition at line 172 of file transformBlend.I.
References ordered_vector< Key, Compare >::size().
bool TransformBlend::has_transform | ( | const VertexTransform * | transform | ) | const |
Returns true if the blend has the indicated transform, false otherwise.
Definition at line 160 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::end().
void TransformBlend::limit_transforms | ( | int | max_transforms | ) |
If the total number of transforms in the blend exceeds max_transforms, removes the n least-important transforms as needed to reduce the number of transforms to max_transforms.
Definition at line 106 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::begin(), ordered_vector< Key, Compare >::clear(), ordered_vector< Key, Compare >::empty(), ordered_vector< Key, Compare >::end(), and ordered_vector< Key, Compare >::size().
void TransformBlend::normalize_weights | ( | ) |
Rescales all of the weights on the various transforms so that they sum to 1.0.
It is generally a good idea to call this after adding or removing transforms from the blend.
Definition at line 138 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::begin(), ordered_vector< Key, Compare >::end(), and Thread::get_current_thread().
void TransformBlend::remove_transform | ( | const VertexTransform * | transform | ) |
Removes the indicated transform from the blend.
Definition at line 85 of file transformBlend.cxx.
References ordered_vector< Key, Compare >::end(), and Thread::get_current_thread().
void TransformBlend::set_transform | ( | int | n, |
const VertexTransform * | transform | ||
) | [inline] |
Replaces the nth transform stored in the blend object.
Definition at line 184 of file transformBlend.I.
References ordered_vector< Key, Compare >::size().
void TransformBlend::set_weight | ( | int | n, |
PN_stdfloat | weight | ||
) | [inline] |
Replaces the weight associated with the nth transform stored in the blend object.
Definition at line 196 of file transformBlend.I.
References ordered_vector< Key, Compare >::size().
Transforms the indicated point by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 291 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
Transforms the indicated point by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 258 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
Transforms the indicated point by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 242 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
Transforms the indicated point by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 325 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
void TransformBlend::transform_vector | ( | LVector3d & | vector, |
Thread * | current_thread | ||
) | const [inline] |
Transforms the indicated vector by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 359 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
Transforms the indicated vector by the blend matrix.
You should call update_blend() to ensure that the cache is up-to-date before calling this.
Definition at line 274 of file transformBlend.I.
References ordered_vector< Key, Compare >::empty().
void TransformBlend::update_blend | ( | Thread * | current_thread | ) | const [inline] |
Recomputes the internal representation of the blend value, if necessary.
You should call this before calling get_blend() or transform_point().
Definition at line 209 of file transformBlend.I.
References VertexTransform::get_global_modified().
Writes the contents of this object to the datagram for shipping out to a Bam file.
Definition at line 284 of file transformBlend.cxx.
References Datagram::add_stdfloat(), Datagram::add_uint16(), ordered_vector< Key, Compare >::begin(), ordered_vector< Key, Compare >::end(), ordered_vector< Key, Compare >::size(), and BamWriter::write_pointer().