#include <OgreNode.h>
Inheritance diagram for Ogre::Node:
Public Types | |
typedef HashMap< String, Node * > | ChildNodeMap |
typedef MapIterator< ChildNodeMap > | ChildNodeIterator |
typedef ConstMapIterator< ChildNodeMap > | ConstChildNodeIterator |
enum | TransformSpace { TS_LOCAL, TS_PARENT, TS_WORLD } |
Enumeration denoting the spaces which a transform can be relative to. More... | |
Public Member Functions | |
Node () | |
Constructor, should only be called by parent, not directly. | |
Node (const String &name) | |
Constructor, should only be called by parent, not directly. | |
virtual | ~Node () |
const String & | getName (void) const |
Returns the name of the node. | |
virtual Node * | getParent (void) const |
Gets this node's parent (NULL if this is the root). | |
virtual const Quaternion & | getOrientation () const |
Returns a quaternion representing the nodes orientation. | |
virtual void | setOrientation (const Quaternion &q) |
Sets the orientation of this node via a quaternion. | |
virtual void | setOrientation (Real w, Real x, Real y, Real z) |
Sets the orientation of this node via quaternion parameters. | |
virtual void | resetOrientation (void) |
Resets the nodes orientation (local axes as world axes, no rotation). | |
virtual void | setPosition (const Vector3 &pos) |
Sets the position of the node relative to it's parent. | |
virtual void | setPosition (Real x, Real y, Real z) |
Sets the position of the node relative to it's parent. | |
virtual const Vector3 & | getPosition (void) const |
Gets the position of the node relative to it's parent. | |
virtual void | setScale (const Vector3 &scale) |
Sets the scaling factor applied to this node. | |
virtual void | setScale (Real x, Real y, Real z) |
Sets the scaling factor applied to this node. | |
virtual const Vector3 & | getScale (void) const |
Gets the scaling factor of this node. | |
virtual void | setInheritOrientation (bool inherit) |
Tells the node whether it should inherit orientation from it's parent node. | |
virtual bool | getInheritOrientation (void) const |
Returns true if this node is affected by orientation applied to the parent node. | |
virtual void | setInheritScale (bool inherit) |
Tells the node whether it should inherit scaling factors from it's parent node. | |
virtual bool | getInheritScale (void) const |
Returns true if this node is affected by scaling factors applied to the parent node. | |
virtual void | scale (const Vector3 &scale) |
Scales the node, combining it's current scale with the passed in scaling factor. | |
virtual void | scale (Real x, Real y, Real z) |
Scales the node, combining it's current scale with the passed in scaling factor. | |
virtual void | translate (const Vector3 &d, TransformSpace relativeTo=TS_PARENT) |
Moves the node along the Cartesian axes. | |
virtual void | translate (Real x, Real y, Real z, TransformSpace relativeTo=TS_PARENT) |
Moves the node along the Cartesian axes. | |
virtual void | translate (const Matrix3 &axes, const Vector3 &move, TransformSpace relativeTo=TS_PARENT) |
Moves the node along arbitrary axes. | |
virtual void | translate (const Matrix3 &axes, Real x, Real y, Real z, TransformSpace relativeTo=TS_PARENT) |
Moves the node along arbitrary axes. | |
virtual void | roll (const Radian &angle, TransformSpace relativeTo=TS_LOCAL) |
Rotate the node around the Z-axis. | |
virtual void | pitch (const Radian &angle, TransformSpace relativeTo=TS_LOCAL) |
Rotate the node around the X-axis. | |
virtual void | yaw (const Radian &angle, TransformSpace relativeTo=TS_LOCAL) |
Rotate the node around the Y-axis. | |
virtual void | rotate (const Vector3 &axis, const Radian &angle, TransformSpace relativeTo=TS_LOCAL) |
Rotate the node around an arbitrary axis. | |
virtual void | rotate (const Quaternion &q, TransformSpace relativeTo=TS_LOCAL) |
Rotate the node around an aritrary axis using a Quarternion. | |
virtual Matrix3 | getLocalAxes (void) const |
Gets a matrix whose columns are the local axes based on the nodes orientation relative to it's parent. | |
virtual Node * | createChild (const Vector3 &translate=Vector3::ZERO, const Quaternion &rotate=Quaternion::IDENTITY) |
Creates an unnamed new Node as a child of this node. | |
virtual Node * | createChild (const String &name, const Vector3 &translate=Vector3::ZERO, const Quaternion &rotate=Quaternion::IDENTITY) |
Creates a new named Node as a child of this node. | |
virtual void | addChild (Node *child) |
Adds a (precreated) child scene node to this node. | |
virtual unsigned short | numChildren (void) const |
Reports the number of child nodes under this one. | |
virtual Node * | getChild (unsigned short index) const |
Gets a pointer to a child node. | |
virtual Node * | getChild (const String &name) const |
Gets a pointer to a named child node. | |
virtual ChildNodeIterator | getChildIterator (void) |
Retrieves an iterator for efficiently looping through all children of this node. | |
virtual ConstChildNodeIterator | getChildIterator (void) const |
Retrieves an iterator for efficiently looping through all children of this node. | |
virtual Node * | removeChild (unsigned short index) |
Drops the specified child from this node. | |
virtual Node * | removeChild (Node *child) |
Drops the specified child from this node. | |
virtual Node * | removeChild (const String &name) |
Drops the named child from this node. | |
virtual void | removeAllChildren (void) |
Removes all child Nodes attached to this node. | |
virtual const Quaternion & | _getDerivedOrientation (void) const |
Gets the orientation of the node as derived from all parents. | |
virtual const Vector3 & | _getDerivedPosition (void) const |
Gets the position of the node as derived from all parents. | |
virtual const Vector3 & | _getDerivedScale (void) const |
Gets the scaling factor of the node as derived from all parents. | |
virtual const Matrix4 & | _getFullTransform (void) const |
Gets the full transformation matrix for this node. | |
virtual void | _update (bool updateChildren, bool parentHasChanged) |
Internal method to update the Node. | |
virtual void | setListener (Listener *listener) |
Sets a listener for this Node. | |
virtual Listener * | getListener (void) const |
Gets the current listener for this Node. | |
const MaterialPtr & | getMaterial (void) const |
Overridden from Renderable. | |
void | getRenderOperation (RenderOperation &op) |
Overridden from Renderable. | |
void | getWorldTransforms (Matrix4 *xform) const |
Overridden from Renderable. | |
virtual void | setInitialState (void) |
Sets the current transform of this node to be the 'initial state' ie that position / orientation / scale to be used as a basis for delta values used in keyframe animation. | |
virtual void | resetToInitialState (void) |
Resets the position / orientation / scale of this node to it's initial state, see setInitialState for more info. | |
virtual const Vector3 & | getInitialPosition (void) const |
Gets the initial position of this node, see setInitialState for more info. | |
virtual const Quaternion & | getInitialOrientation (void) const |
Gets the initial orientation of this node, see setInitialState for more info. | |
virtual const Vector3 & | getInitialScale (void) const |
Gets the initial position of this node, see setInitialState for more info. | |
Real | getSquaredViewDepth (const Camera *cam) const |
Overridden, see Renderable. | |
virtual void | needUpdate (bool forceParentUpdate=false) |
To be called in the event of transform changes to this node that require it's recalculation. | |
virtual void | requestUpdate (Node *child, bool forceParentUpdate=false) |
Called by children to notify their parent that they need an update. | |
virtual void | cancelUpdate (Node *child) |
Called by children to notify their parent that they no longer need an update. | |
const LightList & | getLights (void) const |
| |
virtual Technique * | getTechnique (void) const |
Retrieves a pointer to the Material Technique this renderable object uses. | |
virtual bool | preRender (SceneManager *sm, RenderSystem *rsys) |
Called just prior to the Renderable being rendered. | |
virtual void | postRender (SceneManager *sm, RenderSystem *rsys) |
Called immediately after the Renderable has been rendered. | |
virtual unsigned short | getNumWorldTransforms (void) const |
Returns the number of world transform matrices this renderable requires. | |
void | setUseIdentityProjection (bool useIdentityProjection) |
Sets whether or not to use an 'identity' projection. | |
bool | getUseIdentityProjection (void) const |
Returns whether or not to use an 'identity' projection. | |
void | setUseIdentityView (bool useIdentityView) |
Sets whether or not to use an 'identity' view. | |
bool | getUseIdentityView (void) const |
Returns whether or not to use an 'identity' view. | |
virtual bool | getCastsShadows (void) const |
Method which reports whether this renderable would normally cast a shadow. | |
void | setCustomParameter (size_t index, const Vector4 &value) |
Sets a custom parameter for this Renderable, which may be used to drive calculations for this specific Renderable, like GPU program parameters. | |
const Vector4 & | getCustomParameter (size_t index) const |
Gets the custom value associated with this Renderable at the given index. | |
virtual void | _updateCustomGpuParameter (const GpuProgramParameters::AutoConstantEntry &constantEntry, GpuProgramParameters *params) const |
Update a custom GpuProgramParameters constant which is derived from information only this Renderable knows. | |
virtual void | setPolygonModeOverrideable (bool override) |
Sets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting. | |
virtual bool | getPolygonModeOverrideable (void) const |
Gets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting. | |
virtual void | setUserAny (const Any &anything) |
Sets any kind of user value on this object. | |
virtual const Any & | getUserAny (void) const |
Retrieves the custom user value associated with this object. | |
virtual RenderSystemData * | getRenderSystemData () const |
Sets render system private data. | |
virtual void | setRenderSystemData (RenderSystemData *val) const |
gets render system private data | |
void * | operator new (size_t sz, const char *file, int line, const char *func) |
operator new, with debug line info | |
void * | operator new (size_t sz) |
void * | operator new (size_t sz, void *ptr) |
placement operator new | |
void * | operator new[] (size_t sz, const char *file, int line, const char *func) |
array operator new, with debug line info | |
void * | operator new[] (size_t sz) |
void | operator delete (void *ptr) |
void | operator delete (void *ptr, void *) |
void | operator delete (void *ptr, const char *, int, const char *) |
void | operator delete[] (void *ptr) |
void | operator delete[] (void *ptr, const char *, int, const char *) |
Static Public Member Functions | |
static void | queueNeedUpdate (Node *n) |
Queue a 'needUpdate' call to a node safely. | |
static void | processQueuedUpdates (void) |
Process queued 'needUpdate' calls. | |
Protected Types | |
typedef std::set< Node * > | ChildUpdateSet |
typedef std::vector< Node * > | QueuedUpdates |
typedef std::map< size_t, Vector4 > | CustomParameterMap |
Protected Member Functions | |
virtual void | setParent (Node *parent) |
Only available internally - notification of parent. | |
virtual void | _updateFromParent (void) const |
Triggers the node to update it's combined transforms. | |
virtual void | updateFromParentImpl (void) const |
Class-specific implementation of _updateFromParent. | |
virtual Node * | createChildImpl (void)=0 |
Internal method for creating a new child node - must be overridden per subclass. | |
virtual Node * | createChildImpl (const String &name)=0 |
Internal method for creating a new child node - must be overridden per subclass. | |
Protected Attributes | |
Node * | mParent |
Pointer to parent node. | |
ChildNodeMap | mChildren |
Collection of pointers to direct children; hashmap for efficiency. | |
ChildUpdateSet | mChildrenToUpdate |
List of children which need updating, used if self is not out of date but children are. | |
bool | mNeedParentUpdate |
Flag to indicate own transform from parent is out of date. | |
bool | mNeedChildUpdate |
Flag indicating that all children need to be updated. | |
bool | mParentNotified |
Flag indicating that parent has been notified about update request. | |
bool | mQueuedForUpdate |
Flag indicating that the node has been queued for update. | |
String | mName |
Friendly name of this node, can be automatically generated if you don't care. | |
Quaternion | mOrientation |
Stores the orientation of the node relative to it's parent. | |
Vector3 | mPosition |
Stores the position/translation of the node relative to its parent. | |
Vector3 | mScale |
Stores the scaling factor applied to this node. | |
bool | mInheritOrientation |
Stores whether this node inherits orientation from it's parent. | |
bool | mInheritScale |
Stores whether this node inherits scale from it's parent. | |
MaterialPtr | mpMaterial |
Material pointer should this node be rendered. | |
Quaternion | mDerivedOrientation |
Cached combined orientation. | |
Vector3 | mDerivedPosition |
Cached combined position. | |
Vector3 | mDerivedScale |
Cached combined scale. | |
Vector3 | mInitialPosition |
The position to use as a base for keyframe animation. | |
Quaternion | mInitialOrientation |
The orientation to use as a base for keyframe animation. | |
Vector3 | mInitialScale |
The scale to use as a base for keyframe animation. | |
Matrix4 | mCachedTransform |
Cached derived transform as a 4x4 matrix. | |
bool | mCachedTransformOutOfDate |
Listener * | mListener |
Node listener - only one allowed (no list) for size & performance reasons. | |
CustomParameterMap | mCustomParameters |
bool | mPolygonModeOverrideable |
bool | mUseIdentityProjection |
bool | mUseIdentityView |
Any | mUserAny |
RenderSystemData * | mRenderSystemData |
Static Protected Attributes | |
static unsigned long | msNextGeneratedNameExt |
Incremented count for next name extension. | |
static QueuedUpdates | msQueuedUpdates |
Classes | |
class | Listener |
Listener which gets called back on Node events. More... |
Definition at line 54 of file OgreNode.h.
|
Definition at line 69 of file OgreNode.h. |
|
Definition at line 68 of file OgreNode.h. |
|
Definition at line 101 of file OgreNode.h. |
|
Definition at line 70 of file OgreNode.h. |
|
Definition at line 371 of file OgreRenderable.h. |
|
Definition at line 204 of file OgreNode.h. |
|
Enumeration denoting the spaces which a transform can be relative to.
Definition at line 59 of file OgreNode.h. |
|
Constructor, should only be called by parent, not directly.
|
|
Constructor, should only be called by parent, not directly.
|
|
|
|
Gets the orientation of the node as derived from all parents.
|
|
Gets the position of the node as derived from all parents.
|
|
Gets the scaling factor of the node as derived from all parents.
|
|
Gets the full transformation matrix for this node.
|
|
Internal method to update the Node.
Reimplemented in Ogre::SceneNode. |
|
Update a custom GpuProgramParameters constant which is derived from information only this Renderable knows.
Reimplemented in Ogre::SubEntity. Definition at line 279 of file OgreRenderable.h. References Ogre::GpuProgramParameters::_writeRawConstant(), Ogre::GpuProgramParameters::AutoConstantEntry::data, Ogre::GpuProgramParameters::AutoConstantEntry::elementCount, and Ogre::GpuProgramParameters::AutoConstantEntry::physicalIndex. |
|
Triggers the node to update it's combined transforms.
|
|
Adds a (precreated) child scene node to this node. If it is attached to another node, it must be detached first.
|
|
Called by children to notify their parent that they no longer need an update.
|
|
Creates a new named Node as a child of this node.
|
|
Creates an unnamed new Node as a child of this node.
|
|
Internal method for creating a new child node - must be overridden per subclass.
Implemented in Ogre::Bone, and Ogre::SceneNode. |
|
Internal method for creating a new child node - must be overridden per subclass.
Implemented in Ogre::Bone, and Ogre::SceneNode. |
|
Method which reports whether this renderable would normally cast a shadow.
Reimplemented in Ogre::InstancedGeometry::GeometryBucket, Ogre::StaticGeometry::GeometryBucket, and Ogre::SubEntity. Definition at line 214 of file OgreRenderable.h. |
|
Gets a pointer to a named child node.
|
|
Gets a pointer to a child node.
|
|
Retrieves an iterator for efficiently looping through all children of this node.
|
|
Retrieves an iterator for efficiently looping through all children of this node.
|
|
Gets the custom value associated with this Renderable at the given index.
Definition at line 240 of file OgreRenderable.h. References Ogre::Exception::ERR_ITEM_NOT_FOUND, and OGRE_EXCEPT. |
|
Returns true if this node is affected by orientation applied to the parent node.
|
|
Returns true if this node is affected by scaling factors applied to the parent node.
|
|
Gets the initial orientation of this node, see setInitialState for more info.
|
|
Gets the initial position of this node, see setInitialState for more info.
|
|
Gets the initial position of this node, see setInitialState for more info.
|
|
Implements Ogre::Renderable. Reimplemented in Ogre::TagPoint. |
|
Gets the current listener for this Node.
Definition at line 622 of file OgreNode.h. |
|
Gets a matrix whose columns are the local axes based on the nodes orientation relative to it's parent.
|
|
Overridden from Renderable.
Implements Ogre::Renderable. |
|
Returns the name of the node.
|
|
Returns the number of world transform matrices this renderable requires.
Reimplemented in Ogre::BorderRenderable, Ogre::InstancedGeometry::GeometryBucket, and Ogre::SubEntity. Definition at line 143 of file OgreRenderable.h. |
|
Returns a quaternion representing the nodes orientation.
|
|
Gets this node's parent (NULL if this is the root).
|
|
Gets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting.
Reimplemented in Ogre::BorderRenderable. Definition at line 304 of file OgreRenderable.h. |
|
Gets the position of the node relative to it's parent.
|
|
Overridden from Renderable.
Implements Ogre::Renderable. |
|
Sets render system private data.
Definition at line 356 of file OgreRenderable.h. |
|
Gets the scaling factor of this node.
|
|
Overridden, see Renderable.
Implements Ogre::Renderable. |
|
Retrieves a pointer to the Material Technique this renderable object uses.
Reimplemented in Ogre::InstancedGeometry::GeometryBucket, Ogre::StaticGeometry::GeometryBucket, and Ogre::SubEntity. Definition at line 87 of file OgreRenderable.h. |
|
Returns whether or not to use an 'identity' projection.
Definition at line 168 of file OgreRenderable.h. |
|
Returns whether or not to use an 'identity' view.
Definition at line 193 of file OgreRenderable.h. |
|
Retrieves the custom user value associated with this object.
Definition at line 319 of file OgreRenderable.h. |
|
Overridden from Renderable.
Implements Ogre::Renderable. |
|
To be called in the event of transform changes to this node that require it's recalculation.
Reimplemented in Ogre::Bone, and Ogre::TagPoint. |
|
Reports the number of child nodes under this one.
|
|
Definition at line 101 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 95 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 89 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 112 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 106 of file OgreMemoryAllocatedObject.h. |
|
placement operator new
Definition at line 73 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 67 of file OgreMemoryAllocatedObject.h. |
|
operator new, with debug line info
Definition at line 62 of file OgreMemoryAllocatedObject.h. |
|
Definition at line 84 of file OgreMemoryAllocatedObject.h. |
|
array operator new, with debug line info
Definition at line 79 of file OgreMemoryAllocatedObject.h. |
|
Rotate the node around the X-axis.
|
|
Called immediately after the Renderable has been rendered.
Definition at line 119 of file OgreRenderable.h. |
|
Called just prior to the Renderable being rendered.
Definition at line 116 of file OgreRenderable.h. |
|
Process queued 'needUpdate' calls.
|
|
Queue a 'needUpdate' call to a node safely.
|
|
Removes all child Nodes attached to this node. Does not delete the nodes, just detaches them from this parent, potentially to be reattached elsewhere. |
|
Drops the named child from this node.
|
|
Drops the specified child from this node.
|
|
Drops the specified child from this node.
|
|
Called by children to notify their parent that they need an update.
|
|
Resets the nodes orientation (local axes as world axes, no rotation).
|
|
Resets the position / orientation / scale of this node to it's initial state, see setInitialState for more info.
|
|
Rotate the node around the Z-axis.
|
|
Rotate the node around an aritrary axis using a Quarternion.
|
|
Rotate the node around an arbitrary axis.
|
|
Scales the node, combining it's current scale with the passed in scaling factor.
|
|
Scales the node, combining it's current scale with the passed in scaling factor.
|
|
Sets a custom parameter for this Renderable, which may be used to drive calculations for this specific Renderable, like GPU program parameters.
Definition at line 231 of file OgreRenderable.h. |
|
Tells the node whether it should inherit orientation from it's parent node.
|
|
Tells the node whether it should inherit scaling factors from it's parent node.
|
|
Sets the current transform of this node to be the 'initial state' ie that position / orientation / scale to be used as a basis for delta values used in keyframe animation.
|
|
Sets a listener for this Node.
Definition at line 618 of file OgreNode.h. |
|
Sets the orientation of this node via quaternion parameters.
|
|
Sets the orientation of this node via a quaternion.
|
|
Only available internally - notification of parent.
Reimplemented in Ogre::SceneNode. |
|
Sets whether this renderable's chosen detail level can be overridden (downgraded) by the camera setting.
Definition at line 296 of file OgreRenderable.h. |
|
Sets the position of the node relative to it's parent.
|
|
Sets the position of the node relative to it's parent.
|
|
gets render system private data
Definition at line 364 of file OgreRenderable.h. |
|
Sets the scaling factor applied to this node.
|
|
Sets the scaling factor applied to this node.
|
|
Sets whether or not to use an 'identity' projection.
Definition at line 154 of file OgreRenderable.h. |
|
Sets whether or not to use an 'identity' view.
Definition at line 179 of file OgreRenderable.h. |
|
Sets any kind of user value on this object.
Definition at line 315 of file OgreRenderable.h. |
|
Moves the node along arbitrary axes.
|
|
Moves the node along arbitrary axes.
|
|
Moves the node along the Cartesian axes.
|
|
Moves the node along the Cartesian axes.
|
|
Class-specific implementation of _updateFromParent.
Reimplemented in Ogre::SceneNode, and Ogre::TagPoint. |
|
Rotate the node around the Y-axis.
Reimplemented in Ogre::SceneNode. |
|
Cached derived transform as a 4x4 matrix.
Definition at line 198 of file OgreNode.h. |
|
Definition at line 199 of file OgreNode.h. |
|
Collection of pointers to direct children; hashmap for efficiency.
Definition at line 99 of file OgreNode.h. |
|
List of children which need updating, used if self is not out of date but children are.
Definition at line 103 of file OgreNode.h. |
|
Definition at line 372 of file OgreRenderable.h. |
|
Cached combined orientation.
Definition at line 147 of file OgreNode.h. |
|
Cached combined position.
Definition at line 156 of file OgreNode.h. |
|
Cached combined scale.
Definition at line 165 of file OgreNode.h. |
|
Stores whether this node inherits orientation from it's parent.
Definition at line 129 of file OgreNode.h. |
|
Stores whether this node inherits scale from it's parent.
Definition at line 132 of file OgreNode.h. |
|
The orientation to use as a base for keyframe animation.
Definition at line 193 of file OgreNode.h. |
|
The position to use as a base for keyframe animation.
Definition at line 191 of file OgreNode.h. |
|
The scale to use as a base for keyframe animation.
Definition at line 195 of file OgreNode.h. |
|
Node listener - only one allowed (no list) for size & performance reasons.
Definition at line 202 of file OgreNode.h. |
|
Friendly name of this node, can be automatically generated if you don't care.
Definition at line 114 of file OgreNode.h. |
|
Flag indicating that all children need to be updated.
Definition at line 107 of file OgreNode.h. |
|
Flag to indicate own transform from parent is out of date.
Definition at line 105 of file OgreNode.h. |
|
Stores the orientation of the node relative to it's parent.
Definition at line 120 of file OgreNode.h. |
|
Pointer to parent node.
Definition at line 97 of file OgreNode.h. |
|
Flag indicating that parent has been notified about update request.
Definition at line 109 of file OgreNode.h. |
|
Material pointer should this node be rendered.
Definition at line 135 of file OgreNode.h. |
|
Definition at line 373 of file OgreRenderable.h. |
|
Stores the position/translation of the node relative to its parent.
Definition at line 123 of file OgreNode.h. |
|
Flag indicating that the node has been queued for update.
Definition at line 111 of file OgreNode.h. |
|
Definition at line 377 of file OgreRenderable.h. |
|
Stores the scaling factor applied to this node.
Definition at line 126 of file OgreNode.h. |
|
Incremented count for next name extension.
Definition at line 117 of file OgreNode.h. |
|
Definition at line 205 of file OgreNode.h. |
|
Definition at line 374 of file OgreRenderable.h. |
|
Definition at line 375 of file OgreRenderable.h. |
|
Definition at line 376 of file OgreRenderable.h. |
Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sat Apr 11 13:49:53 2009