Panda3D
Classes | Public Member Functions | Static Public Member Functions | Friends

TransformBlend Class Reference

This defines a single entry in a TransformBlendTable. More...

#include "transformBlend.h"

List of all members.

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 &copy)
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 VertexTransformget_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 &copy)
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

Detailed Description

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.


Member Function Documentation

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
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().

void TransformBlend::get_blend ( LMatrix4 result,
Thread current_thread 
) const [inline]

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().

UpdateSeq TransformBlend::get_modified ( Thread current_thread) const [inline]

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().

void TransformBlend::transform_point ( LPoint4d point,
Thread current_thread 
) const [inline]

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().

void TransformBlend::transform_point ( LPoint3f point,
Thread current_thread 
) const [inline]

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().

void TransformBlend::transform_point ( LPoint4f point,
Thread current_thread 
) const [inline]

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().

void TransformBlend::transform_point ( LPoint3d point,
Thread current_thread 
) const [inline]

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().

void TransformBlend::transform_vector ( LVector3f point,
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 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().

void TransformBlend::write_datagram ( BamWriter manager,
Datagram dg 
) const

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().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations