TransformationModifierFactory Class Reference

#include <TransformationModifierFactory.h>

Inherited by ApplyAngularVelocityModifierFactory, ApplyCursorTransformationModifierFactory, ApplyForceModifierFactory, ApplyNavigationModifierFactory, ApplyUserTransformationModifierFactory, AssociatedEntityInterrupterFactory, AvatarAnimationWriterFactory, AvatarTransformationWriterFactory, CameraTransformationWriterFactory, CheckCollisionModifierFactory, CursorTransformationWriterFactory, EntityTransformationWriterFactory, HeightMapModifierFactory, ManipulationOffsetModifierFactory, MultiPipeInterrupterFactory, PhysicsEntityTransformationWriterModifierFactory, RunAtPhysicsServerModifierFactory, TargetPipeTransformationWriterFactory, TrackingDataWriterFactory, TrackingOffsetModifierFactory, TransformationDistributionModifierFactory, TransformationLoggerModifierFactory, and UserTransformationWriterFactory.

Collaboration diagram for TransformationModifierFactory:

List of all members.


Classes

struct  GROUPMODIFIER

Public Member Functions

 TransformationModifierFactory ()
virtual ~TransformationModifierFactory ()
virtual TransformationModifiercreate (ArgumentVector *args, PipeSelector *sel)
std::string getClassName ()
virtual bool releaseModifier (TransformationModifier *modifier)

Protected Member Functions

virtual TransformationModifiercreateInternal (ArgumentVector *args)=0
virtual bool needInstanceForEachPipe ()
virtual bool needInstanceForEachPipeConfiguration ()
 create a modifier instance for each group of pipes with equal configuration
virtual bool needSingleton ()
 create one global modifier instance

Protected Attributes

std::string className
TransformationModifiersingleton
std::vector< GROUPMODIFIERgroupModifiersList

Detailed Description

The Factory-class for TransformationModifier.

For each subclass of TransformationModifier, there has to be a corresponding TransformationModifierFactory class. If you want to create your own modifier you must therefore provide a factory class inheriting from TransformationModifierFactory.

When writing your own modifier class, the corresponding factory class needs to:

A factor has to be registered before loading the config file (i.e. before TransformationManager::loadModifier() is invoked).

See also:
TransformationModifier

Constructor & Destructor Documentation

TransformationModifierFactory::TransformationModifierFactory (  ) 

Constructor. When inheriting, don't forget to set the className here!

TransformationModifierFactory::~TransformationModifierFactory (  )  [virtual]

Delete the factory itself, and all created TransformationModifer.


Member Function Documentation

TransformationModifier * TransformationModifierFactory::create ( ArgumentVector args,
PipeSelector sel 
) [virtual]

Create (or reuse) a TransformationModifier matching the PipeSelector. If an existing modifier is reused, the ArgumentVector will be ignored.

Parameters:
args contains parameters read from the Configuration file.
sel the configuration of the TransformationPipe, in which the modifier will be executed.
See also:
needInstanceForEachPipe()

needInstanceForEachPipeConfiguration()

needSingleton()

virtual TransformationModifier* TransformationModifierFactory::createInternal ( ArgumentVector args  )  [protected, pure virtual]

Create a TransformationModifier instance.

Parameters:
args can be used to pass configuration-data for the modifier.
Here is a sample xml-snippet showing how to pass configuration-data for a modifier:
<modifier type="ConfiguredTransformationModifier">
  <arguments>
    <arg key="intArg"    type="int"    value="1"/>
    <arg key="floatArg"  type="float"  value="0.125"/>
    <arg key="stringArg" type="string" value="a string"/>
  </arguments>
</modifier>
<modifier type="UnconfiguredTransformationModifier"/>

Implemented in ApplyAngularVelocityModifierFactory, ApplyForceModifierFactory, PhysicsEntityTransformationWriterModifierFactory, ManipulationOffsetModifierFactory, ApplyCursorTransformationModifierFactory, ApplyNavigationModifierFactory, ApplyUserTransformationModifierFactory, AssociatedEntityInterrupterFactory, AvatarTransformationWriterFactory, CameraTransformationWriterFactory, CursorTransformationWriterFactory, EntityTransformationWriterFactory, MultiPipeInterrupterFactory, TargetPipeTransformationWriterFactory, TrackingDataWriterFactory, TrackingOffsetModifierFactory, TransformationDistributionModifierFactory, TransformationLoggerModifierFactory, UserTransformationWriterFactory, AvatarAnimationWriterFactory, CheckCollisionModifierFactory, and HeightMapModifierFactory.

std::string TransformationModifierFactory::getClassName (  ) 

The class name of the TransformationModifier. NOT the class name of the factory! This is used by the TransformationModifier to know its own name.

bool TransformationModifierFactory::needInstanceForEachPipe (  )  [protected, virtual]

the following three methods specify when a separate instance the modifier has to be created by default each method returns false at least one of the methods has to be overriden and has to return true

Todo:
make these three functions an enumeration: create a modifier instance for each pipe

Reimplemented in ApplyCursorTransformationModifierFactory, ApplyUserTransformationModifierFactory, AvatarTransformationWriterFactory, CameraTransformationWriterFactory, CursorTransformationWriterFactory, MultiPipeInterrupterFactory, TargetPipeTransformationWriterFactory, TrackingOffsetModifierFactory, TransformationLoggerModifierFactory, UserTransformationWriterFactory, AvatarAnimationWriterFactory, CheckCollisionModifierFactory, and HeightMapModifierFactory.

bool TransformationModifierFactory::needInstanceForEachPipeConfiguration (  )  [protected, virtual]

create a modifier instance for each group of pipes with equal configuration

Reimplemented in TransformationDistributionModifierFactory.

bool TransformationModifierFactory::releaseModifier ( TransformationModifier modifier  )  [virtual]

Mark the given TransformationModifier as no longer needed. Depending on the (re)usage pattern, the modifier may or may not be deleted when calling this function.

Note:
Do NOT delete a modifier yourself. This will wreak havoc, if it is a shared instance! (If it is not shared, you gain nothing by deleting it yourself and not using this method.)
See also:
~TransformationModifierFactory


Member Data Documentation


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

Generated on Wed Oct 20 16:12:01 2010 for inVRs by doxygen 1.5.8