Panda3D
Classes | Public Member Functions | Static Public Member Functions | Public Attributes | Friends | List of all members
TransformBlend Class Reference

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

#include "transformBlend.h"

Public Member Functions

 TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0)
 
 TransformBlend (const VertexTransform *transform0, PN_stdfloat weight0, const VertexTransform *transform1, PN_stdfloat weight1)
 
 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 TransformBlend &copy)
 
void add_transform (const VertexTransform *transform, PN_stdfloat weight)
 Adds a new transform to the blend. More...
 
int compare_to (const TransformBlend &other) const
 Defines an arbitrary ordering for TransformBlend objects. More...
 
int complete_pointers (TypedWritable **plist, BamReader *manager)
 Receives an array of pointers, one for each time manager->read_pointer() was called in fillin(). More...
 
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. More...
 
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. More...
 
UpdateSeq get_modified (Thread *current_thread=Thread::get_current_thread()) const
 
size_t get_num_transforms () const
 
const VertexTransformget_transform (size_t n) const
 
PN_stdfloat get_weight (const VertexTransform *transform) const
 
PN_stdfloat get_weight (size_t n) const
 
bool has_transform (const VertexTransform *transform) const
 
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. More...
 
void normalize_weights ()
 Rescales all of the weights on the various transforms so that they sum to 1.0. More...
 
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 (std::ostream &out) const
 
void remove_transform (const VertexTransform *transform)
 
void remove_transform (size_t n)
 
void set_transform (size_t n, const VertexTransform *transform)
 
void set_weight (size_t n, PN_stdfloat weight)
 Replaces the weight associated with the nth transform stored in the blend object. More...
 
void transform_point (LPoint4f &point, Thread *current_thread) const
 Transforms the indicated point by the blend matrix. More...
 
void transform_point (LPoint3f &point, Thread *current_thread) const
 Transforms the indicated point by the blend matrix. More...
 
void transform_point (LPoint4d &point, Thread *current_thread) const
 Transforms the indicated point by the blend matrix. More...
 
void transform_point (LPoint3d &point, Thread *current_thread) const
 Transforms the indicated point by the blend matrix. More...
 
void transform_vector (LVector3f &point, Thread *current_thread) const
 Transforms the indicated vector by the blend matrix. More...
 
void transform_vector (LVector3d &point, Thread *current_thread) const
 Transforms the indicated vector by the blend matrix. More...
 
void update_blend (Thread *current_thread) const
 Recomputes the internal representation of the blend value, if necessary. More...
 
void write (std::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. More...
 

Static Public Member Functions

static TypeHandle get_class_type ()
 
static void init_type ()
 

Public Attributes

 get_modified
 Returns a counter which is guaranteed to increment at least as often as the result of get_blend() changes. More...
 
 get_num_transforms
 Returns the number of transforms stored in the blend object. More...
 
 get_transform
 Returns the nth transform stored in the blend object. More...
 
 get_weight
 Returns the weight associated with the indicated transform, or 0 if there is no entry for the transform. More...
 
 has_transform
 Returns true if the blend has the indicated transform, false otherwise. More...
 
 remove_transform
 Removes the indicated transform from the blend. More...
 
 set_transform
 Replaces the nth transform stored in the blend object. More...
 

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 32 of file transformBlend.h.

Member Function Documentation

◆ add_transform()

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 52 of file transformBlend.cxx.

◆ compare_to()

int TransformBlend::compare_to ( const TransformBlend other) const

◆ complete_pointers()

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 268 of file transformBlend.cxx.

◆ fillin()

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 287 of file transformBlend.cxx.

References DatagramIterator::get_uint16(), and ordered_vector< Key, Compare, Vector >::reserve().

◆ get_blend()

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 196 of file transformBlend.I.

◆ limit_transforms()

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 95 of file transformBlend.cxx.

References ordered_vector< Key, Compare, Vector >::clear(), and ordered_vector< Key, Compare, Vector >::size().

◆ normalize_weights()

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 124 of file transformBlend.cxx.

References ordered_vector< Key, Compare, Vector >::begin(), and ordered_vector< Key, Compare, Vector >::end().

◆ set_weight()

void TransformBlend::set_weight ( size_t  n,
PN_stdfloat  weight 
)
inline

Replaces the weight associated with the nth transform stored in the blend object.

Definition at line 170 of file transformBlend.I.

◆ transform_point() [1/4]

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 208 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ transform_point() [2/4]

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 222 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ transform_point() [3/4]

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 251 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ transform_point() [4/4]

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 281 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ transform_vector() [1/2]

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 236 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ transform_vector() [2/2]

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 311 of file transformBlend.I.

References ordered_vector< Key, Compare, Vector >::empty().

◆ update_blend()

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 180 of file transformBlend.I.

References VertexTransform::get_global_modified().

◆ write_datagram()

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

Member Data Documentation

◆ get_modified

UpdateSeq TransformBlend::get_modified
inline

Returns a counter which is guaranteed to increment at least as often as the result of get_blend() changes.

Definition at line 87 of file transformBlend.h.

◆ get_num_transforms

size_t TransformBlend::get_num_transforms
inline

Returns the number of transforms stored in the blend object.

Definition at line 63 of file transformBlend.h.

Referenced by TransformBlendTable::add_blend().

◆ get_transform

const VertexTransform * TransformBlend::get_transform
inline

Returns the nth transform stored in the blend object.

Definition at line 63 of file transformBlend.h.

◆ get_weight

PN_stdfloat TransformBlend::get_weight
inline

Returns the weight associated with the indicated transform, or 0 if there is no entry for the transform.

Returns the weight associated with the nth transform stored in the blend object.

Definition at line 71 of file transformBlend.h.

◆ has_transform

bool TransformBlend::has_transform

Returns true if the blend has the indicated transform, false otherwise.

Definition at line 71 of file transformBlend.h.

◆ remove_transform

void TransformBlend::remove_transform
inline

Removes the indicated transform from the blend.

Removes the nth transform stored in the blend object.

Definition at line 70 of file transformBlend.h.

◆ set_transform

void TransformBlend::set_transform
inline

Replaces the nth transform stored in the blend object.

Definition at line 70 of file transformBlend.h.


The documentation for this class was generated from the following files: