Main Page | Directories | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

vtkWeightedTransformFilter Class Reference

#include <vtkWeightedTransformFilter.h>

Inheritance diagram for vtkWeightedTransformFilter:

Inheritance graph
[legend]
Collaboration diagram for vtkWeightedTransformFilter:

Collaboration graph
[legend]
List of all members.

Detailed Description

transform based on per-point or per-cell weighting functions.

vtkWeightedTransformFilter is a filter that can be used to "skin" structures and to create new and complex shapes. Unlike a traditional transform filter (which has one transform for a data set) or an assembly (which has one transform per part or group of parts), a weighted transform produces the weighted sum of transforms on a per-point or per-cell basis.

Each point or cell in the filter's input has an attached DataArray that contains tuples of weighting functions, one per point or cell. The filter also has a set of fixed transforms. When the filter executes, each input point/cell is transformed by each of the transforms. These results are weighted by the point/cell's weighting factors to produce final output data.

Linear transforms are performance-optimized. Using arbitrary transforms will work, but performance may suffer.

As an example of the utility of weighted transforms, here's how this filter can be used for "skinning." Skinning is the process of putting a mesh cover over an underlying structure, like skin over bone. Joints are difficult to skin because deformation is hard to do. Visualize skin over an elbow joint. Part of the skin moves with one bone, part of the skin moves with the other bone, and the skin in the middle moves a little with each.

Weighted filtering can be used for a simple and efficient kind of skinning. Begin with a cylindrical mesh. Create a FloatArray with two components per tuple, and one tuple for each point in the mesh. Assign transform weights that linear interpolate the distance along the cylinder (one component is the distance along the cylinder, the other is one minus that distance). Set the filter up to use two transforms, the two used to transform the two bones. Now, when the transforms change, the mesh will deform so as to, hopefully, continue to cover the bones.

vtkWeightedTransformFilter is also useful for creating "strange and complex" shapes using pinching, bending, and blending.

Warning:
Weighted combination of normals and vectors are probably not appropriate in many cases. Surface normals are treated somewhat specially, but in many cases you may need to regenerate the surface normals.

Cell data can only be transformed if all transforms are linear.

See also:
vtkAbstractTransform vtkLinearTransform vtkTransformPolyDataFilter vtkActor
Created by:
  • Halle, Michael
CVS contributions (if > 5%):
  • Halle, Michael (75%)
  • Geveci, Berk (18%)
CVS logs (CVSweb):
  • .h (/Hybrid/vtkWeightedTransformFilter.h)
  • .cxx (/Hybrid/vtkWeightedTransformFilter.cxx)
Tests:
vtkWeightedTransformFilter (Tests)

Definition at line 91 of file vtkWeightedTransformFilter.h.

Public Types

typedef vtkPointSetToPointSetFilter Superclass

Public Member Functions

virtual const char * GetClassName ()
virtual int IsA (const char *type)
void PrintSelf (ostream &os, vtkIndent indent)
unsigned long GetMTime ()
virtual void SetWeightArray (const char *)
virtual char * GetWeightArray ()
virtual void SetTransformIndexArray (const char *)
virtual char * GetTransformIndexArray ()
virtual void SetCellDataWeightArray (const char *)
virtual char * GetCellDataWeightArray ()
virtual void SetCellDataTransformIndexArray (const char *)
virtual char * GetCellDataTransformIndexArray ()
virtual void SetTransform (vtkAbstractTransform *transform, int num)
virtual vtkAbstractTransformGetTransform (int num)
virtual void SetNumberOfTransforms (int num)
virtual int GetNumberOfTransforms ()
virtual void AddInputValuesOn ()
virtual void AddInputValuesOff ()
virtual void SetAddInputValues (int)
virtual int GetAddInputValues ()

Static Public Member Functions

vtkWeightedTransformFilterNew ()
int IsTypeOf (const char *type)
vtkWeightedTransformFilterSafeDownCast (vtkObject *o)

Protected Member Functions

 vtkWeightedTransformFilter ()
 ~vtkWeightedTransformFilter ()
void Execute ()

Protected Attributes

vtkAbstractTransform ** Transforms
int NumberOfTransforms
int AddInputValues
char * CellDataWeightArray
char * WeightArray
char * CellDataTransformIndexArray
char * TransformIndexArray


Member Typedef Documentation

typedef vtkPointSetToPointSetFilter vtkWeightedTransformFilter::Superclass
 

Reimplemented from vtkPointSetToPointSetFilter.

Definition at line 95 of file vtkWeightedTransformFilter.h.


Constructor & Destructor Documentation

vtkWeightedTransformFilter::vtkWeightedTransformFilter  )  [protected]
 

vtkWeightedTransformFilter::~vtkWeightedTransformFilter  )  [protected]
 


Member Function Documentation

vtkWeightedTransformFilter* vtkWeightedTransformFilter::New  )  [static]
 

Create an object with Debug turned off, modified time initialized to zero, and reference counting on.

Reimplemented from vtkAlgorithm.

virtual const char* vtkWeightedTransformFilter::GetClassName  )  [virtual]
 

Reimplemented from vtkPointSetToPointSetFilter.

int vtkWeightedTransformFilter::IsTypeOf const char *  type  )  [static]
 

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkPointSetToPointSetFilter.

virtual int vtkWeightedTransformFilter::IsA const char *  type  )  [virtual]
 

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkPointSetToPointSetFilter.

vtkWeightedTransformFilter* vtkWeightedTransformFilter::SafeDownCast vtkObject o  )  [static]
 

Reimplemented from vtkPointSetToPointSetFilter.

void vtkWeightedTransformFilter::PrintSelf ostream &  os,
vtkIndent  indent
[virtual]
 

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkPointSetToPointSetFilter.

unsigned long vtkWeightedTransformFilter::GetMTime  )  [virtual]
 

Return the MTime also considering the filter's transforms.

Reimplemented from vtkObject.

virtual void vtkWeightedTransformFilter::SetWeightArray const char *   )  [virtual]
 

WeightArray is the string name of the DataArray in the input's FieldData that holds the weighting coefficients for each point. The filter will first look for the array in the input's PointData FieldData. If the array isn't there, the filter looks in the input's FieldData. The WeightArray can have tuples of any length, but must have a tuple for every point in the input data set. This array transforms points, normals, and vectors.

virtual char* vtkWeightedTransformFilter::GetWeightArray  )  [virtual]
 

WeightArray is the string name of the DataArray in the input's FieldData that holds the weighting coefficients for each point. The filter will first look for the array in the input's PointData FieldData. If the array isn't there, the filter looks in the input's FieldData. The WeightArray can have tuples of any length, but must have a tuple for every point in the input data set. This array transforms points, normals, and vectors.

virtual void vtkWeightedTransformFilter::SetTransformIndexArray const char *   )  [virtual]
 

TransformIndexArray is the string name of the DataArray in the input's FieldData that holds the indices for the transforms for each point. These indices are used to select which transforms each weight of the DataArray refers. If the TransformIndexArray is not specified, the weights of each point are assumed to map directly to a transform. This DataArray must be of type UnsignedShort, which effectively limits the number of transforms to 65536 if a transform index array is used. The filter will first look for the array in the input's PointData FieldData. If the array isn't there, the filter looks in the input's FieldData. The TransformIndexArray can have tuples of any length, but must have a tuple for every point in the input data set. This array transforms points, normals, and vectors.

virtual char* vtkWeightedTransformFilter::GetTransformIndexArray  )  [virtual]
 

TransformIndexArray is the string name of the DataArray in the input's FieldData that holds the indices for the transforms for each point. These indices are used to select which transforms each weight of the DataArray refers. If the TransformIndexArray is not specified, the weights of each point are assumed to map directly to a transform. This DataArray must be of type UnsignedShort, which effectively limits the number of transforms to 65536 if a transform index array is used. The filter will first look for the array in the input's PointData FieldData. If the array isn't there, the filter looks in the input's FieldData. The TransformIndexArray can have tuples of any length, but must have a tuple for every point in the input data set. This array transforms points, normals, and vectors.

virtual void vtkWeightedTransformFilter::SetCellDataWeightArray const char *   )  [virtual]
 

The CellDataWeightArray is analogous to the WeightArray, except for CellData. The array is searched for first in the CellData FieldData, then in the input's FieldData. The data array must have a tuple for each cell. This array is used to transform only normals and vectors.

virtual char* vtkWeightedTransformFilter::GetCellDataWeightArray  )  [virtual]
 

The CellDataWeightArray is analogous to the WeightArray, except for CellData. The array is searched for first in the CellData FieldData, then in the input's FieldData. The data array must have a tuple for each cell. This array is used to transform only normals and vectors.

virtual void vtkWeightedTransformFilter::SetCellDataTransformIndexArray const char *   )  [virtual]
 

The CellDataTransformIndexArray is like a TransformIndexArray, except for cell data. The array must have type UnsignedShort.

virtual char* vtkWeightedTransformFilter::GetCellDataTransformIndexArray  )  [virtual]
 

The CellDataTransformIndexArray is like a TransformIndexArray, except for cell data. The array must have type UnsignedShort.

virtual void vtkWeightedTransformFilter::SetTransform vtkAbstractTransform transform,
int  num
[virtual]
 

Set or Get one of the filter's transforms. The transform number must be less than the number of transforms allocated for the object. Setting a transform slot to NULL is equivalent to assigning an overriding weight of zero to that filter slot.

virtual vtkAbstractTransform* vtkWeightedTransformFilter::GetTransform int  num  )  [virtual]
 

Set or Get one of the filter's transforms. The transform number must be less than the number of transforms allocated for the object. Setting a transform slot to NULL is equivalent to assigning an overriding weight of zero to that filter slot.

virtual void vtkWeightedTransformFilter::SetNumberOfTransforms int  num  )  [virtual]
 

Set the number of transforms for the filter. References to non-existent filter numbers in the data array is equivalent to a weight of zero (i.e., no contribution of that filter or weight). The maximum number of transforms is limited to 65536 if transform index arrays are used.

virtual int vtkWeightedTransformFilter::GetNumberOfTransforms  )  [virtual]
 

Set the number of transforms for the filter. References to non-existent filter numbers in the data array is equivalent to a weight of zero (i.e., no contribution of that filter or weight). The maximum number of transforms is limited to 65536 if transform index arrays are used.

virtual void vtkWeightedTransformFilter::AddInputValuesOn  )  [virtual]
 

If AddInputValues is true, the output values of this filter will be offset from the input values. The effect is exactly equivalent to having an identity transform of weight 1 added into each output point.

virtual void vtkWeightedTransformFilter::AddInputValuesOff  )  [virtual]
 

If AddInputValues is true, the output values of this filter will be offset from the input values. The effect is exactly equivalent to having an identity transform of weight 1 added into each output point.

virtual void vtkWeightedTransformFilter::SetAddInputValues int   )  [virtual]
 

If AddInputValues is true, the output values of this filter will be offset from the input values. The effect is exactly equivalent to having an identity transform of weight 1 added into each output point.

virtual int vtkWeightedTransformFilter::GetAddInputValues  )  [virtual]
 

If AddInputValues is true, the output values of this filter will be offset from the input values. The effect is exactly equivalent to having an identity transform of weight 1 added into each output point.

void vtkWeightedTransformFilter::Execute  )  [protected, virtual]
 

This method is the old style execute method

Reimplemented from vtkSource.


Member Data Documentation

vtkAbstractTransform** vtkWeightedTransformFilter::Transforms [protected]
 

Definition at line 176 of file vtkWeightedTransformFilter.h.

int vtkWeightedTransformFilter::NumberOfTransforms [protected]
 

Definition at line 177 of file vtkWeightedTransformFilter.h.

int vtkWeightedTransformFilter::AddInputValues [protected]
 

Definition at line 178 of file vtkWeightedTransformFilter.h.

char* vtkWeightedTransformFilter::CellDataWeightArray [protected]
 

Definition at line 180 of file vtkWeightedTransformFilter.h.

char* vtkWeightedTransformFilter::WeightArray [protected]
 

Definition at line 181 of file vtkWeightedTransformFilter.h.

char* vtkWeightedTransformFilter::CellDataTransformIndexArray [protected]
 

Definition at line 183 of file vtkWeightedTransformFilter.h.

char* vtkWeightedTransformFilter::TransformIndexArray [protected]
 

Definition at line 184 of file vtkWeightedTransformFilter.h.


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