NL3D::CPSMesh Class Reference

#include <ps_mesh.h>

Inheritance diagram for NL3D::CPSMesh:

NL3D::CPSParticle NL3D::CPSSizedParticle NL3D::CPSRotated3DPlaneParticle NL3D::CPSRotated2DParticle NL3D::CPSShapeParticle NL3D::CPSLocatedBindable NLMISC::IStreamable NLMISC::IClassable

Detailed Description

This class is for mesh handling. It operates with any mesh, but it must insert them in the scene... It is not very adapted for lots of little meshs.. To create the mesh basis, we use CPlaneBasis here. It give us the I and J vector of the basis for each mesh and compute K ( K = I ^ J)

Definition at line 73 of file ps_mesh.h.

Public Member Functions

virtual void basisChanged (TPSMatrixMode systemBasis)
virtual bool completeBBox (NLMISC::CAABBox &box) const
NLMISC::CVector computeI (void) const
NLMISC::CVector computeJ (void) const
NLMISC::CVector computeK (void) const
 CPSMesh (const std::string &shape="")
 construct the system by using the given shape for mesh

void disableAutoLOD (bool disable=true)
 Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used.

virtual bool doesProduceBBox (void) const
virtual void draw (bool opaque)
 derivers draw the particles here

void enableGlobalColorLighting (bool enabled)
virtual void enumTexs (std::vector< NLMISC::CSmartPtr< ITexture > > &dest, IDriver &drv)
float getAngle2D (void) const
 get the constant

const CPSAttribMaker< float > * getAngle2DScheme (void) const
 get the angle 2D scheme (NULL if none) const version

CPSAttribMaker< float > * getAngle2DScheme (void)
 get the angle 2D scheme (NULL if none)

virtual std::string getClassName ()=0
IDrivergetDriver () const
 shortcut to get an instance of the driver

uint32 getExternID (void) const
 get the extern ID of this located bindable

const CFontGeneratorgetFontGenerator (void) const
 Shortcut to get the font generator if one was set (const version).

CFontGeneratorgetFontGenerator (void)
 Shortcut to get the font generator if one was set.

const CFontManagergetFontManager (void) const
 Shortcut to get the font manager if one was set (const version).

CFontManagergetFontManager (void)
 ***************************************************************************************

const NLMISC::CMatrixgetInvertedSysMat (void) const
 shortcut to get the inverted matrix of the system

const NLMISC::CMatrixgetInvertedViewMat (void) const
 shortcut to get the inverted view matrix

const NLMISC::CMatrixgetLocalToWorldMatrix () const
 Shortcut to get the local to world matrix.

TPSLod getLOD (void) const
 get the valid lods for that object

virtual uint32 getMaxNumFaces (void) const
 return the max number of faces needed for display. This is needed for LOD balancing

std::string getName (void) const
 get the located bindable name (edition purpose)

const CPSLocatedgetOwner (void) const
 get the located that owns this bindable (const version)

CPSLocatedgetOwner (void)
 get the located that owns this bindable

CPlaneBasis getPlaneBasis (void) const
 get the constant basis

const CPSAttribMaker< CPlaneBasis > * getPlaneBasisScheme (void) const
 get the plane basis scheme, (NULL if none) const version

CPSAttribMaker< CPlaneBasis > * getPlaneBasisScheme (void)
 get the plane basis scheme, (NULL if none)

virtual uint32 getPriority (void) const
 return priority

std::string getShape (void) const
 get the shape used for those particles

float getSize (void) const
 get the constant size

const CPSAttribMaker< float > * getSizeScheme (void) const
 get the size scheme (NULL if none) const version

CPSAttribMaker< float > * getSizeScheme (void)
 get the size scheme (NULL if none)

const NLMISC::CMatrixgetSysMat (void) const
 ***************************************************************************************

uint32 getType (void) const
 return this bindable type

virtual bool getUserMatrixUsageCount () const
const NLMISC::CMatrixgetViewMat (void) const
 shortcut to get the view matrix

virtual bool hasEmitters (void) const
 tells wether there are alive emitters

virtual bool hasLightableFaces ()
 from CPSParticle : return true if there are lightable faces in the object

virtual bool hasOpaqueFaces (void)
 return true if there are Opaque faces in the object

virtual bool hasParticles (void) const
 return true if this located bindable derived class holds alive particles

virtual bool hasTransparentFaces (void)
 return true if there are transparent faces in the object

void invalidate ()
bool isActive () const
bool isAutoLODDisabled () const
 Test wether Auto-LOD is disabled.

virtual void motionTypeChanged (bool parametric)
 called when a located has switch between incrmental / parametric motion. The default does nothing

 NLMISC_DECLARE_CLASS (CPSMesh)
virtual void notifyTargetRemoved (CPSLocated *ptr)
 ***************************************************************************************

virtual void releaseRefTo (const CParticleSystemProcess *other)
virtual void serial (NLMISC::IStream &f) throw (NLMISC::EStream)
 serialisation. Derivers must override this, and call their parent version

void serialAngle2DScheme (NLMISC::IStream &f) throw (NLMISC::EStream)
 ===================================================================================

void serialPlaneBasisScheme (NLMISC::IStream &f) throw (NLMISC::EStream)
 ===================================================================================

void serialSizeScheme (NLMISC::IStream &f) throw (NLMISC::EStream)
 serialization. We choose a different name because of multiple-inheritance

void setActive (bool active)
 Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method.

void setAngle2D (float angle)
 ===================================================================================

void setAngle2DScheme (CPSAttribMaker< float > *scheme)
 ===================================================================================

void setExternID (uint32 id)
 ***************************************************************************************

void setLOD (TPSLod lod)
void setName (const std::string &name)
 set the located bindable name (edition purpose)

void setPlaneBasis (const CPlaneBasis &basis)
 ===================================================================================

void setPlaneBasisScheme (CPSAttribMaker< CPlaneBasis > *basisMaker)
 ===================================================================================

void setShape (const std::string &shape)
 set a new shape for that kind of particles

void setSize (float size)
 Set a constant size for the particles.

void setSizeScheme (CPSAttribMaker< float > *size)
void setupDriverModelMatrix (void)
 shortcut to setup the model matrix (system basis or world basis)

virtual void setZBias (float value)
virtual void showTool ()
 draw the particles for edition mode. The default behaviour just draw a wireframe model

virtual bool supportGlobalColorLighting () const
virtual void systemDateChanged ()
bool usesGlobalColorLighting ()
virtual ~CPSMesh ()

Static Public Member Functions

const float * getRotTable (void)
void initRotTable (void)
 ===================================================================================


Protected Types

typedef CPSAttrib< CTransformShape * > TInstanceCont

Protected Member Functions

virtual void bounceOccured (uint32 index)
void computeSrcStep (uint32 &step, uint &numToProcess)
void deleteAngle2DElement (uint32 index)
virtual void deleteElement (uint32 index)
void deletePlaneBasisElement (uint32 index)
void deleteSizeElement (uint32 index)
void displayIcon2d (const NLMISC::CVector tab[], uint nbSegs, float scale)
 ***************************************************************************************

virtual CPSLocatedgetAngle2DOwner (void)
 deriver must return their owner there

virtual CPSLocatedgetPlaneBasisOwner (void)
 if this is false, constant size will be used instead of a scheme deriver must return their owner there

virtual CPSLocatedgetSizeOwner (void)
 deriver must return their owner there

void newAngle2DElement (CPSLocated *emitterLocated, uint32 emitterIndex)
virtual void newElement (CPSLocated *emitterLocated, uint32 emitterIndex)
void newPlaneBasisElement (CPSLocated *emitterLocated, uint32 emitterIndex)
void newSizeElement (CPSLocated *emitterLocated, uint32 emitterIndex)
void notifyOwnerMaxNumFacesChanged (void) const
void releaseAllRef ()
 ***************************************************************************************

virtual void resize (uint32 size)
void resizeAngle2D (uint32 size)
void resizePlaneBasis (uint32 size)
void resizeSize (uint32 size)
virtual void setOwner (CPSLocated *psl)
 ***************************************************************************************

virtual void step (TPSProcessPass pass, TAnimationTime ellapsedTime, TAnimationTime realEt)
virtual void updatePos ()
 in fact we don't draw the meshs, we just update their pos...


Protected Attributes

bool _Active
float _Angle2D
CPSAttribMaker< float > * _Angle2DScheme
uint32 _ExternID
TInstanceCont _Instances
bool _Invalidated
TPSLod _LOD
 tells when this object must be dealt with

std::string _Name
CPSLocated_Owner
float _ParticleSize
CPlaneBasis _PlaneBasis
CPSAttribMaker< CPlaneBasis > * _PlaneBasisScheme
std::string _Shape
CPSAttribMaker< float > * _SizeScheme

Static Protected Attributes

bool _InitializedRotTab = false
 it is true if the table has been initialized, for debug purposes

float _RotTable [4 *256]

Friends

class CPSLocated


Member Typedef Documentation

typedef CPSAttrib<CTransformShape *> NL3D::CPSMesh::TInstanceCont [protected]
 

Definition at line 155 of file ps_mesh.h.


Constructor & Destructor Documentation

NL3D::CPSMesh::CPSMesh const std::string &  shape = ""  )  [inline]
 

construct the system by using the given shape for mesh

Definition at line 81 of file ps_mesh.h.

References _Shape.

00081                                              : _Invalidated(false)
00082         {
00083                 _Shape = shape;
00084                 if (CParticleSystem::getSerializeIdentifierFlag()) _Name = std::string("Mesh");
00085         }

NL3D::CPSMesh::~CPSMesh  )  [virtual]
 

Definition at line 434 of file ps_mesh.cpp.

References NL3D::CPSAttrib< T >::begin(), NL3D::CScene::deleteInstance(), NL3D::CPSAttrib< T >::end(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), and nlassert.

00435 {       
00436         if (_Owner && _Owner->getOwner())
00437         {       
00438                 CScene *scene = _Owner->getScene();
00439                 nlassert(scene); // the setScene method of the particle system should have been called
00440 
00441                 for (TInstanceCont::iterator it = _Instances.begin(); it != _Instances.end(); ++it)
00442                 {
00443                         if (*it) scene->deleteInstance(*it);
00444                 }
00445         }
00446         else
00447         {
00448                 #ifdef NL_DEBUG
00449                         for (TInstanceCont::iterator it = _Instances.begin(); it != _Instances.end(); ++it)
00450                         {
00451                                 nlassert(*it == NULL); // there's a leak..:(
00452                         }
00453                 #endif
00454         }
00455 }


Member Function Documentation

virtual void NL3D::CPSLocatedBindable::basisChanged TPSMatrixMode  systemBasis  )  [inline, virtual, inherited]
 

Called when the basis of the owner changed. the default behaviour does nothing

Parameters:
newBasis : True if in the system basis, false for the world basis.

Reimplemented in NL3D::CPSForce.

Definition at line 968 of file ps_located.h.

00968 {}

virtual void NL3D::CPSLocatedBindable::bounceOccured uint32  index  )  [inline, protected, virtual, inherited]
 

a bounce occured, so some action could be done. The default behaviour does nothing

Parameters:
index the index of the element that bounced

Reimplemented in NL3D::CPSEmitter.

Definition at line 1011 of file ps_located.h.

References index, and uint32.

01011 {}

virtual bool NL3D::CPSLocatedBindable::completeBBox NLMISC::CAABBox box  )  const [inline, virtual, inherited]
 

Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, and NL3D::CPSShockWave.

Definition at line 884 of file ps_located.h.

00884 { return false ;}

NLMISC::CVector NL3D::CPSLocatedBindable::computeI void   )  const [inline, inherited]
 

Compute a vector that will map to (1 0 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in

Definition at line 931 of file ps_located.h.

References NL3D::CPSLocated::computeI().

Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSGravity::show(), and NL3D::CPSEmitter::showTool().

00931 { return _Owner->computeI(); }

NLMISC::CVector NL3D::CPSLocatedBindable::computeJ void   )  const [inline, inherited]
 

Compute a vector that will map to (0 1 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in

Definition at line 936 of file ps_located.h.

References NL3D::CPSLocated::computeJ().

Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt().

00936 { return _Owner->computeJ(); }

NLMISC::CVector NL3D::CPSLocatedBindable::computeK void   )  const [inline, inherited]
 

Compute a vector that will map to (0 0 1) after view and model transform. This allow to have object that always faces the user, whatever basis they are in

Definition at line 940 of file ps_located.h.

References NL3D::CPSLocated::computeK().

Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), and NL3D::CPSEmitter::showTool().

00940 { return _Owner->computeK(); }

void NL3D::CPSParticle::computeSrcStep uint32 step,
uint numToProcess
[protected, inherited]
 

System may have hand-tuned LOD, or auto LOD. This compute the number of particles that must really be displayed, and the src step that allow to go through the whole collection. The step in the source is in a fixed point 16:16 format

Definition at line 82 of file ps_particle_basic.cpp.

References NL3D::CPSParticle::_DisableAutoLOD, NLMISC::clamp(), NL3D::CParticleSystem::getAutoLODDegradationExponent(), NL3D::CParticleSystem::getAutoLODMode(), NL3D::CParticleSystem::getAutoLODStartDistPercent(), NL3D::CParticleSystem::getOneMinusCurrentLODRatio(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CParticleSystem::isAutoLODEnabled(), NL3D::CParticleSystem::isSharingEnabled(), nlassert, r, uint, and uint32.

Referenced by NL3D::CPSShockWave::draw(), NL3D::CPSConstraintMesh::draw(), NL3D::CPSFanLight::draw(), NL3D::CPSFaceLookAt::draw(), NL3D::CPSDot::draw(), NL3D::CPSTailDot::step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), and NL3D::CPSFace::step().

00083 {               
00084         nlassert(_Owner && _Owner->getOwner());
00085         const CParticleSystem &ps = *(_Owner->getOwner());
00086         if (_DisableAutoLOD || !ps.isAutoLODEnabled() || !ps.isSharingEnabled() || _Owner->getSize() == 0) // Should Auto-LOD be used ?
00087         {
00088                 step = (1 << 16);
00089                 numToProcess = _Owner->getSize();
00090         }
00091         else
00092         {
00093                 float oneMinusLODRatio = ps.getOneMinusCurrentLODRatio();
00094                 float LODRatio = 1.f - oneMinusLODRatio;  
00095                 if (LODRatio > ps.getAutoLODStartDistPercent())
00096                 {
00097                         float factor = (LODRatio - 1.f) / (ps.getAutoLODStartDistPercent() - 1.f);
00098                         NLMISC::clamp(factor, 0.f, 1.f);
00099                         float r = factor;
00100                         for (uint k = 1; k < ps.getAutoLODDegradationExponent(); ++k)
00101                         {
00102                                 r *= factor;
00103                         }
00104                         numToProcess = (uint) (_Owner->getSize() * r);
00105                         if (numToProcess < 1) { numToProcess = 1; }
00106 
00107                         step =   ps.getAutoLODMode() ?                             // skip or limit number, depending on the mode
00108                                 (_Owner->getSize() << 16) / numToProcess : // skip particles
00109                                 (1 << 16);                                                         // just display less particles
00110                 }
00111                 else
00112                 {
00113                         step = (1 << 16);
00114                         numToProcess = _Owner->getSize();
00115                 }
00116         }
00117 
00118 }

void NL3D::CPSRotated2DParticle::deleteAngle2DElement uint32  index  )  [inline, protected, inherited]
 

Definition at line 380 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSAttribMaker< float >::deleteElement(), NL3D::CPSAttribMaker< float >::hasMemory(), index, and uint32.

Referenced by NL3D::CPSShockWave::deleteElement(), deleteElement(), NL3D::CPSFanLight::deleteElement(), and NL3D::CPSFaceLookAt::deleteElement().

00381                 {
00382                         if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->deleteElement(index);
00383                 }

void NL3D::CPSMesh::deleteElement uint32  index  )  [protected, virtual]
 

Delete an element given its index Attributes of the located that hold this bindable are still accessible for the index given index out of range -> nl_assert

Implements NL3D::CPSParticle.

Definition at line 260 of file ps_mesh.cpp.

References NL3D::CPSRotated2DParticle::deleteAngle2DElement(), NL3D::CScene::deleteInstance(), NL3D::CPSRotated3DPlaneParticle::deletePlaneBasisElement(), NL3D::CPSSizedParticle::deleteSizeElement(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), index, nlassert, NL3D::CPSAttrib< T >::remove(), and uint32.

00261 {       
00262         deleteSizeElement(index);
00263         deleteAngle2DElement(index);
00264         deletePlaneBasisElement(index);
00265 
00266         // check wether CTransformShape have been instanciated
00267         if (_Invalidated) return;
00268 
00269         nlassert(_Owner);
00270         nlassert(_Owner->getOwner());
00271 
00272         CScene *scene = _Owner->getScene();
00273         nlassert(scene); // the setScene method of the particle system should have been called
00274 
00275         scene->deleteInstance(_Instances[index]);
00276         _Instances.remove(index);
00277 }

void NL3D::CPSRotated3DPlaneParticle::deletePlaneBasisElement uint32  index  )  [inline, protected, inherited]
 

Definition at line 703 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSAttribMaker< CPlaneBasis >::deleteElement(), NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), index, and uint32.

Referenced by NL3D::CPSConstraintMesh::deleteElement(), deleteElement(), and NL3D::CPSFace::deleteElement().

00704                 {
00705                         if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->deleteElement(index);
00706                 }

void NL3D::CPSSizedParticle::deleteSizeElement uint32  index  )  [inline, protected, inherited]
 

Definition at line 295 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSAttribMaker< float >::deleteElement(), NL3D::CPSAttribMaker< float >::hasMemory(), index, and uint32.

Referenced by NL3D::CPSShockWave::deleteElement(), NL3D::CPSRibbonLookAt::deleteElement(), NL3D::CPSRibbon::deleteElement(), NL3D::CPSQuad::deleteElement(), NL3D::CPSConstraintMesh::deleteElement(), deleteElement(), and NL3D::CPSFanLight::deleteElement().

00296                 {
00297                         if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->deleteElement(index);
00298                 }

void NL3D::CPSParticle::disableAutoLOD bool  disable = true  )  [inline, inherited]
 

Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used.

Definition at line 137 of file ps_particle_basic.h.

References NL3D::CPSParticle::_DisableAutoLOD.

00137 { _DisableAutoLOD = disable; }

void NL3D::CPSLocatedBindable::displayIcon2d const NLMISC::CVector  tab[],
uint  nbSegs,
float  scale
[protected, inherited]
 

***************************************************************************************

show an drawing to represent the object, and in red if it is selected

Parameters:
tab : a table of 2 * nbSeg vector. only the x and y coordinates are used
nbSeg : the number of segment
scale : the scale to use for drawing

Definition at line 2038 of file ps_located.cpp.

References NL3D::CPSLocatedBindable::computeI(), NL3D::CPSLocatedBindable::computeK(), NL3D::CParticleSystem::getCurrentEditedElement(), NL3D::CPSLocatedBindable::getDriver(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getSize(), index, NL3D::CMaterial::setBlend(), NL3D::CMaterial::setBlendFunc(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setLighting(), NL3D::CPSLocatedBindable::setupDriverModelMatrix(), NL3D::CMaterial::setZFunc(), NL3D::CMaterial::setZWrite(), size, uint, uint32, NLMISC::CLine::V0, NLMISC::CLine::V1, NLMISC::CVector::x, and NLMISC::CVector::y.

Referenced by NL3D::CPSSpring::show(), NL3D::CPSCentralGravity::show(), and NL3D::CPSParticle::showTool().

02039 {
02040         uint32 size = _Owner->getSize();
02041         if (!size) return;              
02042         setupDriverModelMatrix();       
02043 
02044         const CVector I = computeI();
02045         const CVector K = computeK();
02046 
02047         static std::vector<NLMISC::CLine> lines;
02048         
02049         lines.clear();
02050 
02051         // ugly slow code, but not for runtime
02052         for (uint  k = 0; k < size; ++k)
02053         {
02054                 // center of the current particle
02055                 const CVector p = _Owner->getPos()[k];
02056                 
02057                 
02058 
02059                 for (uint l = 0; l < nbSegs; ++l)
02060                 {
02061                         NLMISC::CLine li;
02062                         li.V0 = p + scale * (tab[l << 1].x * I + tab[l << 1].y * K);
02063                         li.V1 = p + scale * (tab[(l << 1) + 1].x * I + tab[(l << 1) + 1].y * K);
02064                         lines.push_back(li);
02065                 }
02066         
02067                 CMaterial mat;
02068 
02069                 mat.setBlendFunc(CMaterial::one, CMaterial::one);
02070                 mat.setZWrite(false);
02071                 mat.setLighting(false);
02072                 mat.setBlend(true);
02073                 mat.setZFunc(CMaterial::less);
02074                 
02075         
02076 
02077                 CPSLocated *loc;
02078                 uint32 index;           
02079                 CPSLocatedBindable *lb;
02080                 _Owner->getOwner()->getCurrentEditedElement(loc, index, lb);
02081         
02082                 mat.setColor((lb == NULL || this == lb) && loc == _Owner && index == k  ? CRGBA::Red : CRGBA(127, 127, 127));
02083                 
02084 
02085                 CDRU::drawLinesUnlit(lines, mat, *getDriver() );
02086         }
02087 
02088 }

virtual bool NL3D::CPSLocatedBindable::doesProduceBBox void   )  const [inline, virtual, inherited]
 

Reimplemented in NL3D::CPSForce.

Definition at line 888 of file ps_located.h.

00888 { return true; }

virtual void NL3D::CPSParticle::draw bool  opaque  )  [inline, virtual, inherited]
 

derivers draw the particles here

Reimplemented in NL3D::CPSDot, NL3D::CPSFaceLookAt, NL3D::CPSFanLight, and NL3D::CPSShockWave.

Definition at line 110 of file ps_particle_basic.h.

Referenced by NL3D::CPSParticle::step().

00110 {}

void NL3D::CPSParticle::enableGlobalColorLighting bool  enabled  )  [inline, inherited]
 

Definition at line 105 of file ps_particle_basic.h.

References NL3D::CPSParticle::_UsesGlobalColorLighting.

00105 { _UsesGlobalColorLighting = enabled; }         

virtual void NL3D::CPSLocatedBindable::enumTexs std::vector< NLMISC::CSmartPtr< ITexture > > &  dest,
IDriver drv
[inline, virtual, inherited]
 

Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, NL3D::CPSRibbon, NL3D::CPSRibbonLookAt, and NL3D::CPSShockWave.

Definition at line 977 of file ps_located.h.

00977 {}

void NL3D::CPSLocatedBindable::finalize void   )  [virtual, inherited]
 

***************************************************************************************

this should be called before to delete any bindable inserted in a system, but this is done by the system, so you should never need calling it. This has been introduced because calls in dtor are not polymorphic to derived class (which are already destroyed anyway), and some infos are needed in some dtor. The default behaviour does nothing

Reimplemented in NL3D::CPSTargetLocatedBindable.

Definition at line 1975 of file ps_located.cpp.

References NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), and NL3D::CParticleSystem::releaseRefForUserSysCoordInfo().

01976 {
01977         if (_Owner && _Owner->getOwner())
01978         {
01979                 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount());
01980         }
01981 }       

float NL3D::CPSRotated2DParticle::getAngle2D void   )  const [inline, inherited]
 

get the constant

Definition at line 336 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2D.

00336 { return _Angle2D; }

virtual CPSLocated* NL3D::CPSMesh::getAngle2DOwner void   )  [inline, protected, virtual]
 

deriver must return their owner there

Implements NL3D::CPSRotated2DParticle.

Definition at line 164 of file ps_mesh.h.

00164 { return _Owner; }

const CPSAttribMaker<float>* NL3D::CPSRotated2DParticle::getAngle2DScheme void   )  const [inline, inherited]
 

get the angle 2D scheme (NULL if none) const version

Definition at line 326 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2DScheme.

00326 { return _Angle2DScheme; }

CPSAttribMaker<float>* NL3D::CPSRotated2DParticle::getAngle2DScheme void   )  [inline, inherited]
 

get the angle 2D scheme (NULL if none)

Definition at line 323 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2DScheme.

00323 { return _Angle2DScheme; }

virtual std::string NLMISC::IClassable::getClassName  )  [pure virtual, inherited]
 

Implemented in NLAIAGENT::CNumericIndex, NLAIC::IPointerGestion, NLAIC::CIdentType, and CAutomataDesc.

Referenced by NLMISC::CClassRegistry::checkObject(), and NL3D::GetTextureSize().

IDriver* NL3D::CPSLocatedBindable::getDriver void   )  const [inline, inherited]
 

shortcut to get an instance of the driver

Definition at line 890 of file ps_located.h.

References NL3D::CPSLocated::getDriver(), and nlassert.

Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSTailDot::displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSRibbon::displayRibbons(), NL3D::CPSDot::draw(), NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs(), NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZoneSphere::show(), NL3D::CPSZonePlane::show(), NL3D::CPSLight::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), NL3D::CPSDirectionnalForce::show(), NL3D::CPSSphericalEmitter::showTool(), NL3D::CPSEmitterRectangle::showTool(), and NL3D::CPSEmitter::showTool().

00891          { 
00892                  nlassert(_Owner);
00893                  nlassert(_Owner->getDriver());
00894                  return _Owner->getDriver();
00895          }              

uint32 NL3D::CPSLocatedBindable::getExternID void   )  const [inline, inherited]
 

get the extern ID of this located bindable

Definition at line 964 of file ps_located.h.

References NL3D::CPSLocatedBindable::_ExternID, and uint32.

Referenced by NL3D::CPSLocated::bind(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().

00964 { return _ExternID; }

const CFontGenerator* NL3D::CPSLocatedBindable::getFontGenerator void   )  const [inline, inherited]
 

Shortcut to get the font generator if one was set (const version).

Definition at line 904 of file ps_located.h.

References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert.

00905          {
00906                 nlassert(_Owner);
00907                 return _Owner->getFontGenerator();
00908          }

CFontGenerator* NL3D::CPSLocatedBindable::getFontGenerator void   )  [inline, inherited]
 

Shortcut to get the font generator if one was set.

Definition at line 897 of file ps_located.h.

References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert.

Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().

00898          {
00899                 nlassert(_Owner);
00900                 return _Owner->getFontGenerator();
00901          }

const CFontManager * NL3D::CPSLocatedBindable::getFontManager void   )  const [inherited]
 

Shortcut to get the font manager if one was set (const version).

Definition at line 2099 of file ps_located.cpp.

References NL3D::CParticleSystemProcess::getFontManager(), and nlassert.

02100 {
02101         nlassert(_Owner);
02102         return _Owner->getFontManager();
02103 }

CFontManager * NL3D::CPSLocatedBindable::getFontManager void   )  [inherited]
 

***************************************************************************************

Definition at line 2091 of file ps_located.cpp.

References NL3D::CParticleSystemProcess::getFontManager(), and nlassert.

Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().

02092 {
02093         nlassert(_Owner);
02094         return _Owner->getFontManager();
02095 }

const NLMISC::CMatrix & NL3D::CPSLocatedBindable::getInvertedSysMat void   )  const [inherited]
 

shortcut to get the inverted matrix of the system

Definition at line 2116 of file ps_located.cpp.

References NL3D::CParticleSystem::getInvertedSysMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.

02117 {
02118         nlassert(_Owner);
02119                 return _Owner->getOwner()->getInvertedSysMat();
02120 
02121 }

const NLMISC::CMatrix & NL3D::CPSLocatedBindable::getInvertedViewMat void   )  const [inherited]
 

shortcut to get the inverted view matrix

Definition at line 2134 of file ps_located.cpp.

References NL3D::CParticleSystem::getInvertedViewMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.

02135 {
02136         nlassert(_Owner);
02137         return _Owner->getOwner()->getInvertedViewMat();        
02138 }       

const NLMISC::CMatrix & NL3D::CPSLocatedBindable::getLocalToWorldMatrix  )  const [inline, inherited]
 

Shortcut to get the local to world matrix.

Definition at line 1144 of file ps_located.h.

References NL3D::CPSLocated::getLocalToWorldMatrix(), and nlassert.

Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSSound::newElement(), NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSLight::show(), NL3D::CPSGravity::show(), NL3D::CPSEmitterRectangle::showTool(), NL3D::CPSLight::step(), and updatePos().

01145 {
01146         nlassert(_Owner);
01147         return _Owner->getLocalToWorldMatrix();
01148 }

TPSLod NL3D::CPSLocatedBindable::getLOD void   )  const [inline, inherited]
 

get the valid lods for that object

Definition at line 954 of file ps_located.h.

References NL3D::CPSLocatedBindable::_LOD, and NL3D::TPSLod.

00954 { return _LOD; }

uint32 NL3D::CPSMesh::getMaxNumFaces void   )  const [virtual]
 

return the max number of faces needed for display. This is needed for LOD balancing

we don't draw any face ! (the meshs are drawn by the scene)

Implements NL3D::CPSParticle.

Definition at line 182 of file ps_mesh.cpp.

References uint32.

00183 {
00185         return 0;
00186 }

std::string NL3D::CPSLocatedBindable::getName void   )  const [inline, inherited]
 

get the located bindable name (edition purpose)

Definition at line 948 of file ps_located.h.

00948 { return _Name; }       

const CPSLocated* NL3D::CPSLocatedBindable::getOwner void   )  const [inline, inherited]
 

get the located that owns this bindable (const version)

Definition at line 944 of file ps_located.h.

00944 { return _Owner; }              

CPSLocated* NL3D::CPSLocatedBindable::getOwner void   )  [inline, inherited]
 

get the located that owns this bindable

Definition at line 942 of file ps_located.h.

Referenced by NL3D::CPSLocated::deleteElement(), NL3D::CParticleSystemInstanceUser::emit(), NL3D::CPSFaceLookAt::CSecondSize::getSizeOwner(), NL3D::CPSSound::newElement(), NL3D::CPSLocated::registerIntegrableForce(), NL3D::CParticleSystem::registerLocatedBindableExternID(), NL3D::CParticleSystemInstanceUser::removeByID(), NL3D::CPSSound::resize(), NL3D::CPSLight::resize(), NL3D::CPSSound::step(), NL3D::CPSLocated::unregisterIntegrableForce(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().

00942 { return _Owner; }

CPlaneBasis NL3D::CPSRotated3DPlaneParticle::getPlaneBasis void   )  const [inline, inherited]
 

get the constant basis

Definition at line 678 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasis.

00678 { return _PlaneBasis; }

virtual CPSLocated* NL3D::CPSMesh::getPlaneBasisOwner void   )  [inline, protected, virtual]
 

if this is false, constant size will be used instead of a scheme deriver must return their owner there

Implements NL3D::CPSRotated3DPlaneParticle.

Definition at line 165 of file ps_mesh.h.

00165 { return _Owner; }

const CPSAttribMaker<CPlaneBasis>* NL3D::CPSRotated3DPlaneParticle::getPlaneBasisScheme void   )  const [inline, inherited]
 

get the plane basis scheme, (NULL if none) const version

Definition at line 673 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.

00673 { return _PlaneBasisScheme; }

CPSAttribMaker<CPlaneBasis>* NL3D::CPSRotated3DPlaneParticle::getPlaneBasisScheme void   )  [inline, inherited]
 

get the plane basis scheme, (NULL if none)

Set a constant basis for all particles

See also:
setPlaneBasisSchemeScheme()

Definition at line 670 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.

00670 { return _PlaneBasisScheme; }

virtual uint32 NL3D::CPSParticle::getPriority void   )  const [inline, virtual, inherited]
 

return priority

Implements NL3D::CPSLocatedBindable.

Definition at line 66 of file ps_particle_basic.h.

References uint32.

00066 { return 1000; }

const float* NL3D::CPSRotated2DParticle::getRotTable void   )  [inline, static, inherited]
 

this return a float table used to speed up rotations of face look at and the like for each angle, there are 4 float : 2 couple of float : a1, b1, a2, b2 a1 * I + b1 * K = up left corner, a2 * I + b2 * K = up right corner, This table must have been initialized with initRotTable

Definition at line 354 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_InitializedRotTab, NL3D::CPSRotated2DParticle::_RotTable, and nlassert.

00355                 {
00356                         nlassert(_InitializedRotTab); // must have called initRotTable at the start of the apply
00357                         return _RotTable;
00358                 }

std::string NL3D::CPSMesh::getShape void   )  const [inline, virtual]
 

get the shape used for those particles

Implements NL3D::CPSShapeParticle.

Definition at line 91 of file ps_mesh.h.

References _Shape.

00091 { return _Shape; }

float NL3D::CPSSizedParticle::getSize void   )  const [inline, inherited]
 

get the constant size

Definition at line 274 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_ParticleSize.

Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSSizedParticle::resizeSize(), and NL3D::CPSSizedParticle::setSizeScheme().

00274 { return _ParticleSize; }

virtual CPSLocated* NL3D::CPSMesh::getSizeOwner void   )  [inline, protected, virtual]
 

deriver must return their owner there

Implements NL3D::CPSSizedParticle.

Definition at line 163 of file ps_mesh.h.

00163 { return _Owner; }

const CPSAttribMaker<float>* NL3D::CPSSizedParticle::getSizeScheme void   )  const [inline, inherited]
 

get the size scheme (NULL if none) const version

Definition at line 268 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_SizeScheme.

00268 { return _SizeScheme; }

CPSAttribMaker<float>* NL3D::CPSSizedParticle::getSizeScheme void   )  [inline, inherited]
 

get the size scheme (NULL if none)

Definition at line 265 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_SizeScheme.

Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt(), and NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion().

00265 { return _SizeScheme; }

const NLMISC::CMatrix & NL3D::CPSLocatedBindable::getSysMat void   )  const [inherited]
 

***************************************************************************************

Definition at line 2108 of file ps_located.cpp.

References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getSysMat(), and nlassert.

02109 {
02110         nlassert(_Owner);               
02111         return _Owner->getOwner()->getSysMat();
02112 }

uint32 NL3D::CPSParticle::getType void   )  const [inline, virtual, inherited]
 

return this bindable type

Implements NL3D::CPSLocatedBindable.

Definition at line 63 of file ps_particle_basic.h.

References NL3D::PSParticle, and uint32.

00063 { return PSParticle; }

virtual bool NL3D::CPSLocatedBindable::getUserMatrixUsageCount  )  const [inline, virtual, inherited]
 

Reimplemented in NL3D::CPSEmitter.

Definition at line 974 of file ps_located.h.

Referenced by NL3D::CPSLocatedBindable::finalize(), and NL3D::CPSLocatedBindable::setOwner().

00974 { return 0; }

const NLMISC::CMatrix & NL3D::CPSLocatedBindable::getViewMat void   )  const [inherited]
 

shortcut to get the view matrix

Definition at line 2125 of file ps_located.cpp.

References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getViewMat(), and nlassert.

Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), and NL3D::CPSFaceLookAtHelper::drawLookAt().

02126 {
02127         nlassert(_Owner);
02128         return _Owner->getOwner()->getViewMat();        
02129 }       

virtual bool NL3D::CPSLocatedBindable::hasEmitters void   )  const [inline, virtual, inherited]
 

tells wether there are alive emitters

Definition at line 958 of file ps_located.h.

00958 { return false; }

bool NL3D::CPSMesh::hasLightableFaces  )  [virtual]
 

from CPSParticle : return true if there are lightable faces in the object

we don't draw any tri ! (the meshs are drawn by the scene)

Implements NL3D::CPSParticle.

Definition at line 203 of file ps_mesh.cpp.

00204 {
00206         return false;
00207 }

bool NL3D::CPSMesh::hasOpaqueFaces void   )  [virtual]
 

return true if there are Opaque faces in the object

we don't draw any tri ! (the meshs are drawn by the scene)

Implements NL3D::CPSParticle.

Definition at line 196 of file ps_mesh.cpp.

00197 {
00199         return false;
00200 }

virtual bool NL3D::CPSParticle::hasParticles void   )  const [inline, virtual, inherited]
 

return true if this located bindable derived class holds alive particles

Reimplemented from NL3D::CPSLocatedBindable.

Definition at line 69 of file ps_particle_basic.h.

References NL3D::CPSLocated::getSize(), and nlassert.

00069 { nlassert(_Owner); return _Owner->getSize() != 0; }

bool NL3D::CPSMesh::hasTransparentFaces void   )  [virtual]
 

return true if there are transparent faces in the object

we don't draw any tri ! (the meshs are drawn by the scene)

Implements NL3D::CPSParticle.

Definition at line 189 of file ps_mesh.cpp.

00190 {
00192         return false;
00193 }

void NL3D::CPSRotated2DParticle::initRotTable void   )  [static, inherited]
 

===================================================================================

Definition at line 294 of file ps_particle_basic.cpp.

References NL3D::CPSRotated2DParticle::_InitializedRotTab, NL3D::CPSRotated2DParticle::_RotTable, and uint32.

00295 {
00296         float *ptFloat = _RotTable;
00297         for (uint32 k = 0; k < 256; ++k)
00298         {
00299                 const float ca = (float) cos(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi);
00300                 const float sa = (float) sin(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi);
00301 
00302                 *ptFloat++ = -ca - sa;
00303                 *ptFloat++ = -sa + ca;
00304 
00305                 *ptFloat++ = ca - sa;
00306                 *ptFloat++ = sa + ca;
00307         }
00308         _InitializedRotTab = true;
00309 }

void NL3D::CPSMesh::invalidate  )  [inline]
 

invalidate the transformShapes that were inserted in the scene, so they need to be rebuilt during the next rendering. This is useful for clipping, or when the system has been loaded

Definition at line 105 of file ps_mesh.h.

References NL3D::CPSAttrib< T >::clear().

00106         { 
00107                 _Invalidated = true; 
00108                 _Instances.clear();
00109         }

bool NL3D::CPSLocatedBindable::isActive  )  const [inline, inherited]
 

Definition at line 844 of file ps_located.h.

References NL3D::CPSLocatedBindable::_Active.

Referenced by NL3D::CParticleSystem::hasActiveEmitters().

00844 { return _Active; }                             

bool NL3D::CPSParticle::isAutoLODDisabled  )  const [inline, inherited]
 

Test wether Auto-LOD is disabled.

Definition at line 140 of file ps_particle_basic.h.

References NL3D::CPSParticle::_DisableAutoLOD.

00140 { return _DisableAutoLOD; }     

virtual void NL3D::CPSLocatedBindable::motionTypeChanged bool  parametric  )  [inline, virtual, inherited]
 

called when a located has switch between incrmental / parametric motion. The default does nothing

Reimplemented in NL3D::CPSRibbonBase.

Definition at line 971 of file ps_located.h.

Referenced by NL3D::CPSLocated::bind().

00971 {}

void NL3D::CPSRotated2DParticle::newAngle2DElement CPSLocated emitterLocated,
uint32  emitterIndex
[inline, protected, inherited]
 

Definition at line 376 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSAttribMaker< float >::hasMemory(), NL3D::CPSAttribMaker< float >::newElement(), and uint32.

Referenced by NL3D::CPSShockWave::newElement(), newElement(), NL3D::CPSFanLight::newElement(), and NL3D::CPSFaceLookAt::newElement().

00377                 {
00378                         if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->newElement(emitterLocated, emitterIndex);
00379                 }       

void NL3D::CPSMesh::newElement CPSLocated emitterLocated,
uint32  emitterIndex
[protected, virtual]
 

Generate a new element for this bindable. They are generated according to the properties of the class

Implements NL3D::CPSParticle.

Definition at line 225 of file ps_mesh.cpp.

References _Shape, NL3D::CShapeBank::add(), NL3D::CreateDummyMesh(), NL3D::CScene::createInstance(), NL3D::DummyShapeName(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), NL3D::CScene::getShapeBank(), NL3D::CTransform::hide(), NL3D::CPSAttrib< T >::insert(), NL3D::CPSRotated2DParticle::newAngle2DElement(), NL3D::CPSRotated3DPlaneParticle::newPlaneBasisElement(), NL3D::CPSSizedParticle::newSizeElement(), nlassert, NL3D::ITransformable::setTransformMode(), and uint32.

00226 {
00227         newPlaneBasisElement(emitterLocated, emitterIndex);
00228         newAngle2DElement(emitterLocated, emitterIndex);
00229         newSizeElement(emitterLocated, emitterIndex);
00230 
00231         nlassert(_Owner);
00232         nlassert(_Owner->getOwner());
00233 
00234         CScene *scene = _Owner->getScene();
00235         nlassert(scene); // the setScene method of the particle system should have been called
00236         //CTransformShape *instance = _Shape->createInstance(*scene);
00237 
00238         CTransformShape *instance = scene->createInstance(_Shape);
00239 
00240         if (!instance)
00241         {
00242                 
00243                 // mesh not found ...
00244                 IShape *is = CreateDummyMesh();
00245                 scene->getShapeBank()->add(DummyShapeName, is);
00246                 instance = scene->createInstance(DummyShapeName);
00247                 nlassert(instance);
00248         }
00249 
00250 
00251         instance->setTransformMode(CTransform::DirectMatrix);
00252 
00253         instance->hide(); // the object hasn't the right matrix yet so we hide it. It'll be shown once it is computed
00254         nlassert(instance);
00255 
00256         _Instances.insert(instance);
00257 }

void NL3D::CPSRotated3DPlaneParticle::newPlaneBasisElement CPSLocated emitterLocated,
uint32  emitterIndex
[inline, protected, inherited]
 

Definition at line 699 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), NL3D::CPSAttribMaker< CPlaneBasis >::newElement(), and uint32.

Referenced by NL3D::CPSConstraintMesh::newElement(), newElement(), and NL3D::CPSFace::newElement().

00700                 {
00701                         if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->newElement(emitterLocated, emitterIndex);
00702                 }       

void NL3D::CPSSizedParticle::newSizeElement CPSLocated emitterLocated,
uint32  emitterIndex
[inline, protected, inherited]
 

Definition at line 291 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSAttribMaker< float >::hasMemory(), NL3D::CPSAttribMaker< float >::newElement(), and uint32.

Referenced by NL3D::CPSShockWave::newElement(), NL3D::CPSRibbonLookAt::newElement(), NL3D::CPSRibbon::newElement(), NL3D::CPSQuad::newElement(), NL3D::CPSConstraintMesh::newElement(), newElement(), and NL3D::CPSFanLight::newElement().

00292                 {
00293                         if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->newElement(emitterLocated, emitterIndex);
00294                 }       

NL3D::CPSMesh::NLMISC_DECLARE_CLASS CPSMesh   ) 
 

void NL3D::CPSParticle::notifyOwnerMaxNumFacesChanged void   )  const [inline, protected, inherited]
 

Shortcut to notify that the max number of faces has changed This must be called when a geometric property of the particle has been modified This needn't to be called during CPSParticle::resize overrides

Definition at line 151 of file ps_particle_basic.h.

References NL3D::CPSLocated::notifyMaxNumFacesChanged().

Referenced by NL3D::CPSFanLight::setNbFans(), NL3D::CPSShockWave::setNbSegs(), and NL3D::CPSConstraintMesh::update().

00152         {
00153                 if (_Owner)
00154                 {
00155                         _Owner->notifyMaxNumFacesChanged();
00156                 }
00157         }

void NL3D::CPSLocatedBindable::notifyTargetRemoved CPSLocated ptr  )  [virtual, inherited]
 

***************************************************************************************

Can be used by located bindable that have located as targets (emitter, collision zone, forces) to be notified that one of their target has been removed. To do this : The object that focus the target must call registerDTorObserver on the target, with himself as a parameter When the target is removed, this target will call this method for all registered CPSLocated The default behaviour remove this object as an observer

See also:
CPSLocated::registerDTorObserver()

Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable.

Definition at line 1996 of file ps_located.cpp.

References NL3D::CPSLocated::unregisterDtorObserver().

Referenced by NL3D::CPSLocated::releaseRefTo().

01997 {
01998         ptr->unregisterDtorObserver(this);
01999 }

void NL3D::CPSMesh::releaseAllRef  )  [protected, virtual]
 

***************************************************************************************

Release any reference this obj may have to other process of the system For example, this is used when detaching a located bindable from a system.

Reimplemented from NL3D::CPSLocatedBindable.

Definition at line 210 of file ps_mesh.cpp.

References NL3D::CScene::deleteInstance(), NL3D::CPSLocated::getScene(), NL3D::CPSAttrib< T >::getSize(), nlassert, and uint.

00211 {
00212         CPSParticle::releaseAllRef();
00213         nlassert(_Owner && _Owner->getScene());
00214         for(uint k = 0; k < _Instances.getSize(); ++k)
00215         {
00216                 if (_Instances[k])
00217                 {
00218                         _Owner->getScene()->deleteInstance(_Instances[k]);
00219                         _Instances[k] = NULL;
00220                 }
00221         }
00222 }

virtual void NL3D::CPSLocatedBindable::releaseRefTo const CParticleSystemProcess other  )  [inline, virtual, inherited]
 

Release any reference this obj may have on the given process. For example, this is used when detaching a located bindable from a system.

Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable.

Definition at line 871 of file ps_located.h.

00871 {}

void NL3D::CPSMesh::resize uint32  size  )  [protected, virtual]
 

Resize the bindable attributes containers. Size is the max number of element to be contained. DERIVERS MUST CALL THEIR PARENT VERSION should not be called directly. Call CPSLocated::resize instead

Implements NL3D::CPSParticle.

Definition at line 423 of file ps_mesh.cpp.

References nlassert, NL3D::CPSAttrib< T >::resize(), NL3D::CPSRotated2DParticle::resizeAngle2D(), NL3D::CPSRotated3DPlaneParticle::resizePlaneBasis(), NL3D::CPSSizedParticle::resizeSize(), size, and uint32.

Referenced by updatePos().

00424 {
00425         nlassert(size < (1 << 16));
00426         resizeSize(size);
00427         resizeAngle2D(size);
00428         resizePlaneBasis(size);
00429         _Instances.resize(size);
00430 }

void NL3D::CPSRotated2DParticle::resizeAngle2D uint32  size  )  [inline, protected, inherited]
 

Definition at line 384 of file ps_particle_basic.h.

References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSRotated2DParticle::getAngle2DOwner(), NL3D::CPSAttribMaker< float >::hasMemory(), nlassert, NL3D::CPSAttribMaker< float >::resize(), size, and uint32.

Referenced by NL3D::CPSShockWave::resize(), resize(), NL3D::CPSFanLight::resize(), and NL3D::CPSFaceLookAt::resize().

00385                 {
00386                         nlassert(size < (1 << 16));
00387                         if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->resize(size, getAngle2DOwner()->getSize());
00388                 }

void NL3D::CPSRotated3DPlaneParticle::resizePlaneBasis uint32  size  )  [inline, protected, inherited]
 

Definition at line 707 of file ps_particle_basic.h.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSRotated3DPlaneParticle::getPlaneBasisOwner(), NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), nlassert, NL3D::CPSAttribMaker< CPlaneBasis >::resize(), size, and uint32.

Referenced by NL3D::CPSConstraintMesh::resize(), resize(), and NL3D::CPSFace::resize().

00708                 {
00709                         nlassert(size < (1 << 16));
00710                         if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->resize(size, getPlaneBasisOwner()->getSize());
00711                 }

void NL3D::CPSSizedParticle::resizeSize uint32  size  )  [inline, protected, inherited]
 

Definition at line 299 of file ps_particle_basic.h.

References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSSizedParticle::getSize(), NL3D::CPSSizedParticle::getSizeOwner(), NL3D::CPSAttribMaker< float >::hasMemory(), nlassert, NL3D::CPSAttribMaker< float >::resize(), size, and uint32.

Referenced by NL3D::CPSShockWave::resize(), NL3D::CPSRibbonLookAt::resize(), NL3D::CPSRibbon::resize(), NL3D::CPSQuad::resize(), NL3D::CPSConstraintMesh::resize(), resize(), and NL3D::CPSFanLight::resize().

00300                 {
00301                         nlassert(size < (1 << 16));
00302                         if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->resize(size, getSizeOwner()->getSize());
00303                 }

void NL3D::CPSMesh::serial NLMISC::IStream f  )  throw (NLMISC::EStream) [virtual]
 

serialisation. Derivers must override this, and call their parent version

Reimplemented from NL3D::CPSParticle.

Definition at line 166 of file ps_mesh.cpp.

00167 {       
00168         (void)f.serialVersion(3);       
00169         CPSParticle::serial(f);
00170         CPSSizedParticle::serialSizeScheme(f);
00171         CPSRotated3DPlaneParticle::serialPlaneBasisScheme(f);
00172         CPSRotated2DParticle::serialAngle2DScheme(f);
00173         f.serial(_Shape);
00174         if (f.isReading())
00175         {
00176                 invalidate();
00177         }
00178 }

void NL3D::CPSRotated2DParticle::serialAngle2DScheme NLMISC::IStream f  )  throw (NLMISC::EStream) [inherited]
 

===================================================================================

Definition at line 270 of file ps_particle_basic.cpp.

Referenced by NL3D::CPSRibbon::serial().

00271 {
00272         f.serialVersion(1);     
00273         if (f.isReading())
00274         {
00275                 if (_Angle2DScheme)
00276                 {
00277                         delete _Angle2DScheme;
00278                         _Angle2DScheme = NULL;
00279                 }
00280         }
00281         bool useAngle2DScheme = _Angle2DScheme != NULL;
00282         f.serial(useAngle2DScheme);
00283         if (useAngle2DScheme)
00284         {
00285                 f.serialPolyPtr(_Angle2DScheme);
00286         }
00287         else
00288         {               
00289                 f.serial(_Angle2D);
00290         }       
00291 }

void NL3D::CPSRotated3DPlaneParticle::serialPlaneBasisScheme NLMISC::IStream f  )  throw (NLMISC::EStream) [inherited]
 

===================================================================================

Definition at line 469 of file ps_particle_basic.cpp.

00470 {
00471         f.serialVersion(1);     
00472         f.serialPolyPtr(_PlaneBasisScheme);     
00473         bool usePlaneBasisScheme = _PlaneBasisScheme != NULL;   
00474         if (!usePlaneBasisScheme)
00475         {
00476                 f.serial(_PlaneBasis);
00477         }
00478 }

void NL3D::CPSSizedParticle::serialSizeScheme NLMISC::IStream f  )  throw (NLMISC::EStream) [inherited]
 

serialization. We choose a different name because of multiple-inheritance

Definition at line 211 of file ps_particle_basic.cpp.

00212 {
00213         f.serialVersion(1);     
00214         if (f.isReading())
00215         {
00216                 if (_SizeScheme)
00217                 {
00218                         delete _SizeScheme;
00219                         _SizeScheme = NULL;
00220                 }
00221         }
00222         bool useSizeScheme = _SizeScheme != NULL;
00223         f.serial(useSizeScheme);
00224         if (useSizeScheme)
00225         {               
00226                 f.serialPolyPtr(_SizeScheme);
00227         }
00228         else
00229         {
00230                 f.serial(_ParticleSize);
00231         }       
00232 };

void NL3D::CPSLocatedBindable::setActive bool  active  )  [inline, inherited]
 

Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method.

Definition at line 843 of file ps_located.h.

References NL3D::CPSLocatedBindable::_Active.

Referenced by NL3D::CParticleSystem::activateEmitters(), and NL3D::CParticleSystemInstanceUser::setActive().

00843 { _Active = active; }

void NL3D::CPSRotated2DParticle::setAngle2D float  angle  )  [inherited]
 

===================================================================================

Set a constant angle for the particle. Angles range from 0.0f to 256.0f (2 pi) This discrad any previous scheme

See also:
setAngle2DScheme()

Definition at line 251 of file ps_particle_basic.cpp.

References NL3D::CPSRotated2DParticle::_Angle2D, and NL3D::CPSRotated2DParticle::_Angle2DScheme.

00252 {       
00253         delete _Angle2DScheme;
00254         _Angle2DScheme = NULL;  
00255         _Angle2D = angle2DScheme;
00256 }

void NL3D::CPSRotated2DParticle::setAngle2DScheme CPSAttribMaker< float > *  scheme  )  [inherited]
 

===================================================================================

Set an attribute maker that produce a float It must have been allocated by new It will be deleted by this object Output angles must range from 0.0f to 256.0f

Definition at line 242 of file ps_particle_basic.cpp.

References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSRotated2DParticle::getAngle2DOwner(), nlassert, and NL3D::CPSAttribMaker< T >::resize().

00243 {
00244         nlassert(angle2DScheme);
00245         delete _Angle2DScheme;  
00246         _Angle2DScheme = angle2DScheme;
00247         if (getAngle2DOwner() && angle2DScheme->hasMemory()) angle2DScheme->resize(getAngle2DOwner()->getMaxSize(), getAngle2DOwner()->getSize());
00248 }

void NL3D::CPSLocatedBindable::setExternID uint32  id  )  [inherited]
 

***************************************************************************************

set the extern ID of this located bindable. 0 means no extern access. The map of ID-locatedBindable. Is in th particle system, so this located bindable must have been attached to a particle system, otherwise an assertion is raised

Definition at line 2149 of file ps_located.cpp.

References NL3D::CPSLocatedBindable::_ExternID, NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::registerLocatedBindableExternID(), uint32, and NL3D::CParticleSystem::unregisterLocatedBindableExternID().

02150 {
02151         if (id == _ExternID) return;
02152         CParticleSystem *ps = NULL;
02153         if (_Owner && _Owner->getOwner())
02154         {
02155                 ps = _Owner->getOwner();
02156         }       
02157         if (ps) 
02158         {
02159                 ps->unregisterLocatedBindableExternID(this);
02160                 _ExternID = 0;          
02161         }
02162         if (id != 0)
02163         {       
02164                 if (ps) ps->registerLocatedBindableExternID(id, this);
02165                 _ExternID = id;
02166         }       
02167 }

void NL3D::CPSLocatedBindable::setLOD TPSLod  lod  )  [inline, inherited]
 

set the LODs that apply to that object (warning : it is based on the position of the system, and don't act on a per instance basis ...) To have per instance precision, you must use an attribute maker that has LOD as its input

Definition at line 952 of file ps_located.h.

References NL3D::CPSLocatedBindable::_LOD.

00952 { _LOD = lod; }

void NL3D::CPSLocatedBindable::setName const std::string &  name  )  [inline, inherited]
 

set the located bindable name (edition purpose)

Definition at line 946 of file ps_located.h.

00946 { _Name = name; }

void NL3D::CPSLocatedBindable::setOwner CPSLocated psl  )  [protected, virtual, inherited]
 

***************************************************************************************

Reimplemented in NL3D::CPSEmitter.

Definition at line 1948 of file ps_located.cpp.

References NL3D::CParticleSystem::addRefForUserSysCoordInfo(), NL3D::CPSLocatedBindable::deleteElement(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), NL3D::CPSLocatedBindable::releaseAllRef(), NL3D::CParticleSystem::releaseRefForUserSysCoordInfo(), and uint.

Referenced by NL3D::CPSLocated::bind(), and NL3D::CPSLocated::unbind().

01949 { 
01950         if (psl == _Owner) return;
01951         if (psl == NULL)
01952         {
01953                 releaseAllRef();
01954                 if (_Owner)
01955                 {
01956                         // empty this located bindable. Need to be empty if it must be rebound to another located.
01957                         for (uint k = 0; k < _Owner->getSize(); ++k)
01958                         {
01959                                 deleteElement(0);
01960                         }
01961                 }                               
01962         }       
01963         if (_Owner && _Owner->getOwner())
01964         {
01965                 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount());
01966         }
01967         _Owner = psl;
01968         if (_Owner && _Owner->getOwner())
01969         {
01970                 _Owner->getOwner()->addRefForUserSysCoordInfo(getUserMatrixUsageCount());
01971         } 
01972 }

void NL3D::CPSRotated3DPlaneParticle::setPlaneBasis const CPlaneBasis basis  )  [inherited]
 

===================================================================================

Definition at line 448 of file ps_particle_basic.cpp.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasis, and NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.

00449 {       
00450         delete _PlaneBasisScheme;               
00451         _PlaneBasisScheme = NULL;       
00452         _PlaneBasis = basis;
00453 }

void NL3D::CPSRotated3DPlaneParticle::setPlaneBasisScheme CPSAttribMaker< CPlaneBasis > *  basisMaker  )  [inherited]
 

===================================================================================

Set an attribute maker that produce a basis It must have been allocated by new It will be deleted by this object

Definition at line 439 of file ps_particle_basic.cpp.

References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSRotated3DPlaneParticle::getPlaneBasisOwner(), nlassert, and NL3D::CPSAttribMaker< T >::resize().

00440 {
00441         nlassert(basisMaker);
00442         delete _PlaneBasisScheme;       
00443         _PlaneBasisScheme = basisMaker;
00444         if (getPlaneBasisOwner() && basisMaker->hasMemory()) basisMaker->resize(getPlaneBasisOwner()->getMaxSize(), getPlaneBasisOwner()->getSize());
00445 }

void NL3D::CPSMesh::setShape const std::string &  shape  )  [inline, virtual]
 

set a new shape for that kind of particles

Implements NL3D::CPSShapeParticle.

Definition at line 88 of file ps_mesh.h.

References _Shape.

00088 { _Shape = shape; }

void NL3D::CPSSizedParticle::setSize float  size  )  [inherited]
 

Set a constant size for the particles.

Definition at line 192 of file ps_particle_basic.cpp.

References NL3D::CPSSizedParticle::_ParticleSize, NL3D::CPSSizedParticle::_SizeScheme, and size.

00193 {       
00194         delete _SizeScheme;
00195         _SizeScheme = NULL;     
00196         _ParticleSize = size;
00197 }

void NL3D::CPSSizedParticle::setSizeScheme CPSAttribMaker< float > *  size  )  [inherited]
 

Set an attribute maker that produce a size It must have been allocated by new It will be deleted by this object

Definition at line 183 of file ps_particle_basic.cpp.

References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSSizedParticle::getSize(), NL3D::CPSSizedParticle::getSizeOwner(), nlassert, and size.

00184 {       
00185         nlassert(size != NULL);
00186         delete _SizeScheme;     
00187         _SizeScheme = size;
00188         if (getSizeOwner() && size->hasMemory()) size->resize(getSizeOwner()->getMaxSize(), getSizeOwner()->getSize());
00189 }

void NL3D::CPSLocatedBindable::setupDriverModelMatrix void   )  [inherited]
 

shortcut to setup the model matrix (system basis or world basis)

Definition at line 2142 of file ps_located.cpp.

References nlassert, and NL3D::CPSLocated::setupDriverModelMatrix().

Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSTailDot::displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSRibbon::displayRibbons(), NL3D::CPSDot::draw(), NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs(), NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZoneSphere::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSDirectionnalForce::show(), NL3D::CPSSphericalEmitter::showTool(), NL3D::CPSEmitterRectangle::showTool(), and NL3D::CPSEmitter::showTool().

02143 {
02144         nlassert(_Owner);
02145         _Owner->setupDriverModelMatrix();
02146 }

virtual void NL3D::CPSMesh::setZBias float  value  )  [inline, virtual]
 

Implements NL3D::CPSParticle.

Definition at line 127 of file ps_mesh.h.

References value.

00127 {}

void NL3D::CPSParticle::showTool  )  [virtual, inherited]
 

draw the particles for edition mode. The default behaviour just draw a wireframe model

Definition at line 55 of file ps_particle_basic.cpp.

References NL3D::CPSLocatedBindable::displayIcon2d(), PARTICLES_CHECK_MEM, and uint.

Referenced by NL3D::CPSParticle::step(), NL3D::CPSConstraintMesh::step(), step(), and NL3D::CPSFace::step().

00056 {
00057         PARTICLES_CHECK_MEM;
00058 
00059         CVector I = CVector::I;
00060         CVector J = CVector::J;
00061 
00062         const CVector tab[] = { 2 * J, I + J
00063                                                         , I + J, 2 * I + J
00064                                                         , 2 * I + J, I
00065                                                         , I,  2 * I - J
00066                                                         , 2 * I - J, - .5f * J
00067                                                         , - .5f * J, -2 * I - J
00068                                                         , -2 * I - J, - I
00069                                                         , - I, -2 * I + J
00070                                                         , -2 * I + J, - I + J
00071                                                         , - I + J, 2 * J
00072                                                 };
00073         const uint tabSize = sizeof(tab) / (2 * sizeof(CVector));
00074 
00075         const float sSize = 0.1f;
00076         displayIcon2d(tab, tabSize, sSize);
00077 
00078         PARTICLES_CHECK_MEM;
00079 }

void NL3D::CPSMesh::step TPSProcessPass  pass,
TAnimationTime  ellapsedTime,
TAnimationTime  realEt
[protected, virtual]
 

process one pass for the particles. The default behaviour shows the particles

Reimplemented from NL3D::CPSParticle.

Definition at line 280 of file ps_mesh.cpp.

References NL3D::PSSolidRender, NL3D::PSToolRender, NL3D::CPSParticle::showTool(), NL3D::TAnimationTime, and updatePos().

00281 {
00282                 if (pass == PSSolidRender)                      
00283                 {
00284                         updatePos();
00285                 }
00286                 else 
00287                 if (pass == PSToolRender) // edition mode only
00288                 {                       
00289                         showTool();
00290                 }
00291 
00292 }

virtual bool NL3D::CPSMesh::supportGlobalColorLighting  )  const [inline, virtual]
 

Implements NL3D::CPSParticle.

Definition at line 124 of file ps_mesh.h.

00124 { return false; }

virtual void NL3D::CPSLocatedBindable::systemDateChanged  )  [inline, virtual, inherited]
 

PRIVATE USE : called by the system when its date has been manually changed. This his usually for object that expect time to be always increasing, so that they can reset their datas

Reimplemented in NL3D::CPSRibbonBase.

Definition at line 1038 of file ps_located.h.

01038 {}

void NL3D::CPSMesh::updatePos  )  [protected, virtual]
 

in fact we don't draw the meshs, we just update their pos...

Definition at line 295 of file ps_mesh.cpp.

References _Shape, NL3D::CPSAttrib< T >::begin(), NL3D::CScene::createInstance(), NL3D::CPSLocatedBindable::getLocalToWorldMatrix(), NL3D::CPSLocated::getMaxSize(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getScene(), NL3D::CPSLocated::getSize(), NL3D::CTransform::hide(), NLMISC::CMatrix::identity(), NL3D::CPSLocated::incrementNbDrawnParticles(), NL3D::CPSAttrib< T >::insert(), NL3D::CPSAttribMaker< CPlaneBasis >::make(), NL3D::CPSAttribMaker< float >::make(), nlassert, PARTICLES_CHECK_MEM, resize(), NLMISC::CMatrix::scale(), NLMISC::CMatrix::setRot(), NL3D::ITransformable::setTransformMode(), sint32, size, NLMISC::CMatrix::translate(), uint, uint32, NL3D::CPlaneBasis::X, and NL3D::CPlaneBasis::Y.

Referenced by step().

00296 {
00297         const uint MeshBufSize = 512;
00298         PARTICLES_CHECK_MEM;
00299         nlassert(_Owner);
00300         const uint32 size = _Owner->getSize();
00301         if (!size) return;
00302 
00303 
00304         _Owner->incrementNbDrawnParticles(size); // for benchmark purpose       
00305 
00306 
00307         if (_Invalidated)
00308         {
00309                 // need to rebuild all the transform shapes
00310                 nlassert(_Owner);
00311                 nlassert(_Owner->getOwner());
00312 
00313                 CScene *scene = _Owner->getScene();
00314                 nlassert(scene); // the setScene method of the particle system should have been called
00315         
00316 
00317                 resize(_Owner->getMaxSize());
00318 
00319                 for (uint k = 0; k < size; ++k)
00320                 {
00321                         CTransformShape *instance = scene->createInstance(_Shape);
00322                         instance->setTransformMode(CTransform::DirectMatrix);
00323                         instance->hide();
00324                         _Instances.insert(instance);
00325                 }
00326 
00327                 _Invalidated = false;
00328         }
00329         
00330         float sizes[MeshBufSize];
00331         float angles[MeshBufSize];
00332         static CPlaneBasis planeBasis[MeshBufSize];
00333 
00334         uint32 leftToDo = size, toProcess;
00335 
00336 
00337         float *ptCurrSize;
00338         const uint  ptCurrSizeIncrement = _SizeScheme ? 1 : 0;
00339 
00340         float *ptCurrAngle;
00341         const uint  ptCurrAngleIncrement = _Angle2DScheme ? 1 : 0;
00342 
00343         CPlaneBasis *ptBasis;
00344         const uint  ptCurrPlaneBasisIncrement = _PlaneBasisScheme ? 1 : 0;
00345 
00346         TPSAttribVector::const_iterator posIt = _Owner->getPos().begin(), endPosIt;
00347 
00348 
00349         TInstanceCont::iterator instanceIt = _Instances.begin();
00350 
00351         do
00352         {
00353                 toProcess = leftToDo < MeshBufSize ? leftToDo : MeshBufSize;
00354 
00355                 if (_SizeScheme)
00356                 {
00357                         ptCurrSize  = (float *) (_SizeScheme->make(_Owner, size - leftToDo, &sizes[0], sizeof(float), toProcess, true));                        
00358                 }
00359                 else
00360                 {
00361                         ptCurrSize =& _ParticleSize;
00362                 }
00363 
00364                 if (_Angle2DScheme)
00365                 {
00366                         ptCurrAngle  = (float *) (_Angle2DScheme->make(_Owner, size - leftToDo, &angles[0], sizeof(float), toProcess, true));                   
00367                 }
00368                 else
00369                 {
00370                         ptCurrAngle =& _Angle2D;
00371                 }
00372 
00373 
00374                 if (_PlaneBasisScheme)
00375                 {
00376                         ptBasis  = (CPlaneBasis *) (_PlaneBasisScheme->make(_Owner, size - leftToDo, &planeBasis[0], sizeof(CPlaneBasis), toProcess, true));                    
00377                 }
00378                 else
00379                 {
00380                         ptBasis = &_PlaneBasis;
00381                 }
00382 
00383                 endPosIt = posIt + toProcess;           
00384                 CMatrix mat, tmat;              
00385 
00386                 // the matrix used to get in the right basis
00387                 const CMatrix &transfo = getLocalToWorldMatrix();
00388                 do
00389                 {
00390                         (*instanceIt)->show();
00391 
00392                         tmat.identity();
00393                         mat.identity();
00394 
00395                         tmat.translate(*posIt);
00396 
00397                         
00398 
00399                         mat.setRot( ptBasis->X * CPSUtil::getCos((sint32) *ptCurrAngle) + ptBasis->Y * CPSUtil::getSin((sint32) *ptCurrAngle)
00400                                                 , ptBasis->X * CPSUtil::getCos((sint32) *ptCurrAngle + 64) + ptBasis->Y * CPSUtil::getSin((sint32) *ptCurrAngle + 64)
00401                                                 , ptBasis->X ^ ptBasis->Y
00402                                           );
00403 
00404                         mat.scale(*ptCurrSize);                 
00405                         
00406                         (*instanceIt)->setMatrix(transfo * tmat * mat);                 
00407 
00408                         ++instanceIt;
00409                         ++posIt;
00410                         ptCurrSize += ptCurrSizeIncrement;
00411                         ptCurrAngle += ptCurrAngleIncrement;
00412                         ptBasis += ptCurrPlaneBasisIncrement;
00413                 }
00414                 while (posIt != endPosIt);
00415                 leftToDo -= toProcess;
00416         }
00417         while (leftToDo);
00418 
00419         PARTICLES_CHECK_MEM;
00420 }

bool NL3D::CPSParticle::usesGlobalColorLighting  )  [inline, inherited]
 

Returns true if the object can use global lighting color. (example : 'lookat' particle do not have normals, so they use global lighting color instead

Definition at line 103 of file ps_particle_basic.h.

References NL3D::CPSParticle::_UsesGlobalColorLighting.

Referenced by NL3D::CPSTailDot::displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSRibbon::displayRibbons(), NL3D::CPSShockWave::draw(), NL3D::CPSDot::draw(), NL3D::CPSTailDot::setupGlobalColor(), NL3D::CPSFanLight::setupMaterial(), NL3D::CPSRibbon::setupTexturedGlobalColor(), NL3D::CPSRibbon::setupUntexturedGlobalColor(), NL3D::CPSTailDot::step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), NL3D::CPSQuad::updateMatBeforeRendering(), NL3D::CPSTailDot::updateMaterial(), NL3D::CPSRibbon::updateTexturedMaterial(), and NL3D::CPSRibbon::updateUntexturedMaterial().

00103 { return _UsesGlobalColorLighting; }


Friends And Related Function Documentation

friend class CPSLocated [friend, inherited]
 

Reimplemented in NL3D::CPSForce.

Definition at line 986 of file ps_located.h.


Field Documentation

bool NL3D::CPSLocatedBindable::_Active [protected, inherited]
 

Definition at line 1033 of file ps_located.h.

Referenced by NL3D::CPSLocatedBindable::isActive(), and NL3D::CPSLocatedBindable::setActive().

float NL3D::CPSRotated2DParticle::_Angle2D [protected, inherited]
 

Definition at line 367 of file ps_particle_basic.h.

Referenced by NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSRotated2DParticle::getAngle2D(), and NL3D::CPSRotated2DParticle::setAngle2D().

CPSAttribMaker<float>* NL3D::CPSRotated2DParticle::_Angle2DScheme [protected, inherited]
 

Definition at line 368 of file ps_particle_basic.h.

Referenced by NL3D::CPSRotated2DParticle::deleteAngle2DElement(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSRotated2DParticle::getAngle2DScheme(), NL3D::CPSRotated2DParticle::newAngle2DElement(), NL3D::CPSRotated2DParticle::resizeAngle2D(), NL3D::CPSRotated2DParticle::setAngle2D(), NL3D::CPSRotated2DParticle::setAngle2DScheme(), and NL3D::CPSRotated2DParticle::~CPSRotated2DParticle().

uint32 NL3D::CPSLocatedBindable::_ExternID [protected, inherited]
 

Definition at line 1027 of file ps_located.h.

Referenced by NL3D::CPSLocatedBindable::getExternID(), NL3D::CPSLocatedBindable::setExternID(), and NL3D::CPSLocatedBindable::~CPSLocatedBindable().

bool NL3D::CPSRotated2DParticle::_InitializedRotTab = false [static, protected, inherited]
 

it is true if the table has been initialized, for debug purposes

Definition at line 239 of file ps_particle_basic.cpp.

Referenced by NL3D::CPSRotated2DParticle::getRotTable(), and NL3D::CPSRotated2DParticle::initRotTable().

TInstanceCont NL3D::CPSMesh::_Instances [protected]
 

Definition at line 157 of file ps_mesh.h.

bool NL3D::CPSMesh::_Invalidated [protected]
 

Definition at line 161 of file ps_mesh.h.

TPSLod NL3D::CPSLocatedBindable::_LOD [protected, inherited]
 

tells when this object must be dealt with

Definition at line 1029 of file ps_located.h.

Referenced by NL3D::CPSLocatedBindable::getLOD(), and NL3D::CPSLocatedBindable::setLOD().

std::string NL3D::CPSLocatedBindable::_Name [protected, inherited]
 

Definition at line 1031 of file ps_located.h.

CPSLocated* NL3D::CPSLocatedBindable::_Owner [protected, inherited]
 

Definition at line 1026 of file ps_located.h.

Referenced by NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSConstraintMeshHelper::drawMeshs(), and NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs().

float NL3D::CPSSizedParticle::_ParticleSize [protected, inherited]
 

Definition at line 289 of file ps_particle_basic.h.

Referenced by NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs(), NL3D::CPSSizedParticle::getSize(), and NL3D::CPSSizedParticle::setSize().

CPlaneBasis NL3D::CPSRotated3DPlaneParticle::_PlaneBasis [protected, inherited]
 

Definition at line 697 of file ps_particle_basic.h.

Referenced by NL3D::CPSRotated3DPlaneParticle::CPSRotated3DPlaneParticle(), NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSRotated3DPlaneParticle::getPlaneBasis(), and NL3D::CPSRotated3DPlaneParticle::setPlaneBasis().

CPSAttribMaker<CPlaneBasis>* NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme [protected, inherited]
 

Definition at line 695 of file ps_particle_basic.h.

Referenced by NL3D::CPSRotated3DPlaneParticle::deletePlaneBasisElement(), NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSRotated3DPlaneParticle::getPlaneBasisScheme(), NL3D::CPSRotated3DPlaneParticle::newPlaneBasisElement(), NL3D::CPSRotated3DPlaneParticle::resizePlaneBasis(), NL3D::CPSRotated3DPlaneParticle::setPlaneBasis(), NL3D::CPSRotated3DPlaneParticle::setPlaneBasisScheme(), and NL3D::CPSRotated3DPlaneParticle::~CPSRotated3DPlaneParticle().

float NL3D::CPSRotated2DParticle::_RotTable [static, protected, inherited]
 

Definition at line 238 of file ps_particle_basic.cpp.

Referenced by NL3D::CPSRotated2DParticle::getRotTable(), and NL3D::CPSRotated2DParticle::initRotTable().

std::string NL3D::CPSMesh::_Shape [protected]
 

Definition at line 152 of file ps_mesh.h.

Referenced by CPSMesh(), getShape(), newElement(), setShape(), and updatePos().

CPSAttribMaker<float>* NL3D::CPSSizedParticle::_SizeScheme [protected, inherited]
 

Definition at line 290 of file ps_particle_basic.h.

Referenced by NL3D::CPSSizedParticle::deleteSizeElement(), NL3D::CPSFaceHelper::drawFaces(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSConstraintMeshHelper::drawMeshs(), NL3D::CPSConstraintMeshHelper::drawPrerotatedMeshs(), NL3D::CPSSizedParticle::getSizeScheme(), NL3D::CPSSizedParticle::newSizeElement(), NL3D::CPSSizedParticle::resizeSize(), NL3D::CPSSizedParticle::setSize(), NL3D::CPSSizedParticle::setSizeScheme(), and NL3D::CPSSizedParticle::~CPSSizedParticle().


The documentation for this class was generated from the following files:
Generated on Tue Mar 16 07:18:29 2004 for NeL by doxygen 1.3.6