From: <sv...@ww...> - 2005-02-16 14:09:59
|
Author: delta Date: 2005-02-16 06:09:51 -0800 (Wed, 16 Feb 2005) New Revision: 1473 Modified: trunk/CSP/CSPSim/CHANGES.current trunk/CSP/CSPSim/Include/Animation.h trunk/CSP/CSPSim/Source/Animation.cpp Log: * Small changes in the Animation class. Fixed a bug (copy/paste typo) in DrivenRotation::Callback operator. Browse at: https://www.zerobar.net/viewcvs/viewcvs.cgi?view=rev&rev=1473 Modified: trunk/CSP/CSPSim/CHANGES.current =================================================================== --- trunk/CSP/CSPSim/CHANGES.current 2005-02-15 18:19:56 UTC (rev 1472) +++ trunk/CSP/CSPSim/CHANGES.current 2005-02-16 14:09:51 UTC (rev 1473) @@ -1,5 +1,10 @@ Version 0.4.0 (in progress) =========================== + +2005-02-16: delta + * Small changes in the Animation class. Fixed a bug (copy/paste typo) in + DrivenRotation::Callback operator. + 2005-02-15: lologramme * Addes Taxi signalisation Modified: trunk/CSP/CSPSim/Include/Animation.h =================================================================== --- trunk/CSP/CSPSim/Include/Animation.h 2005-02-15 18:19:56 UTC (rev 1472) +++ trunk/CSP/CSPSim/Include/Animation.h 2005-02-16 14:09:51 UTC (rev 1473) @@ -27,6 +27,7 @@ #include <typeinfo> +#include <osg/AnimationPath> #include <osg/Node> #include <SimData/Key.h> @@ -52,7 +53,7 @@ * is not used and the transform is updated after * every callback. */ -class AnimationCallback: public osg::NodeCallback { +class AnimationCallback: public osg::AnimationPathCallback { protected: int m_DirtyCount; std::string m_ChannelName; @@ -109,6 +110,11 @@ float m_Limit1; float m_Gain; + void init(AnimationCallback *callback) const { + assert(callback); + callback->setChannelName(m_ChannelName); + callback->setDefault(m_Default); + } protected: /** * Small template class to reduce & simplify writing. @@ -116,15 +122,15 @@ * virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) * in derived classes. */ - template <class A, class CT, class VT = float> class Callback_A_C: public AnimationCallback { + template <class A, class CT = double, class VT = float> class Callback_A_C: public AnimationCallback { protected: simdata::Ref<const A> m_Parameters; simdata::Ref<const DataChannel<CT> > m_Channel; VT m_Value; virtual void updateValue() = 0; public: - Callback_A_C(const Animation *const param): - m_Parameters(dynamic_cast<const A *const>(param)), + Callback_A_C(const A *const param): + m_Parameters(param), m_Value(0.0f) { assert(param); } @@ -138,7 +144,7 @@ virtual ~Callback_A_C(){} }; - template <class A> class Callback_A: public Callback_A_C<A, double> { + template <class A> class Callback_A: public Callback_A_C<A> { protected: virtual void updateValue() { if (m_Channel.valid()) { @@ -150,37 +156,27 @@ } } public: - Callback_A(const Animation *const param): - Callback_A_C<A,double>(param) {} + Callback_A(const A *const param): + Callback_A_C<A>(param) {} virtual ~Callback_A(){} }; float m_Default; - virtual AnimationCallback *newCallback(osg::Node *node, AnimationCallback *callback) const { + template <class A, class C> AnimationCallback *newCallback_(osg::Node *node) const { + AnimationCallback *callback = new C(dynamic_cast<const A* const>(this)); + init(callback); assert(node); - assert(callback); callback->bind(*node); - callback->setChannelName(m_ChannelName); return callback; } - template <class A, class C> AnimationCallback *newCallback_(osg::Node *node) const { - AnimationCallback *callback = Animation::newCallback(node, new C(dynamic_cast<const A* const>(this))); - callback->setDefault(m_Default); - return callback; - } - virtual AnimationCallback *newCallback(osg::NodeCallback* node_callback, AnimationCallback *callback) const { + template <class A, class C> AnimationCallback *newCallback_(osg::NodeCallback *node_callback) const { + AnimationCallback *callback = new C(dynamic_cast<const A* const>(this)); + init(callback); assert(node_callback); - assert(callback); callback->bind(*node_callback); - callback->setChannelName(m_ChannelName); return callback; } - template <class A, class C> AnimationCallback *newCallback_(osg::NodeCallback *nodeCallback) const { - AnimationCallback *callback = Animation::newCallback(nodeCallback, new C(dynamic_cast<const A* const>(this))); - callback->setDefault(m_Default); - return callback; - } public: BEGIN_SIMDATA_XML_VIRTUAL_INTERFACE(Animation) SIMDATA_XML("model_id", Animation::m_ModelID, true) @@ -212,7 +208,7 @@ /** * Abstract class regrouping usual infos (in its SimData interface) -* to make an Animation behaces like a rotation +* to make an Animation behaves like a rotation */ class Rotation: public Animation { simdata::Vector3 m_Axis; @@ -244,7 +240,7 @@ class DrivenRotation: public Rotation { class Callback: public Callback_A<DrivenRotation> { public: - Callback(const Animation * const param): Callback_A<DrivenRotation>(param){} + Callback(const DrivenRotation * const param): Callback_A<DrivenRotation>(param){} virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); virtual ~Callback(){} }; @@ -258,10 +254,10 @@ virtual ~DrivenRotation(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<DrivenRotation,Callback>(node); + return newCallback_<DrivenRotation,Callback>(node); } virtual AnimationCallback *newCallback(osg::NodeCallback *nodeCallback) const { - return Animation::newCallback_<DrivenRotation,Callback>(nodeCallback); + return newCallback_<DrivenRotation,Callback>(nodeCallback); } }; @@ -304,7 +300,7 @@ class TimedRotation: public Rotation { class Callback: public Callback_A<TimedRotation> { public: - Callback(const Animation * const param): Callback_A<TimedRotation>(param){} + Callback(const TimedRotation * const param): Callback_A<TimedRotation>(param){} virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); virtual ~Callback(){} }; @@ -321,10 +317,10 @@ virtual ~TimedRotation(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<TimedRotation,Callback>(node); + return newCallback_<TimedRotation,Callback>(node); } virtual AnimationCallback *newCallback(osg::NodeCallback *nodeCallback) const { - return Animation::newCallback_<TimedRotation,Callback>(nodeCallback); + return newCallback_<TimedRotation,Callback>(nodeCallback); } double getTimedAngle(double t) const { return getLimit0() + m_TimedAnimationProxy->getRate() * m_TimedAnimationProxy->getDelta_t0(t); @@ -374,7 +370,7 @@ class DrivenMagnitudeTranslation: public Translation { class Callback: public Callback_A<DrivenMagnitudeTranslation> { public: - Callback(const Animation * const param):Callback_A<DrivenMagnitudeTranslation>(param){} + Callback(const DrivenMagnitudeTranslation * const param):Callback_A<DrivenMagnitudeTranslation>(param){} virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); virtual ~Callback(){} }; @@ -388,7 +384,7 @@ virtual ~DrivenMagnitudeTranslation(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<DrivenMagnitudeTranslation,Callback>(node); + return newCallback_<DrivenMagnitudeTranslation,Callback>(node); } }; @@ -421,7 +417,7 @@ virtual ~DrivenVectorialTranslation(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<DrivenVectorialTranslation,Callback>(node); + return newCallback_<DrivenVectorialTranslation,Callback>(node); } }; @@ -450,7 +446,7 @@ virtual ~TimedMagnitudeTranslation(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<TimedMagnitudeTranslation,Callback>(node); + return newCallback_<TimedMagnitudeTranslation,Callback>(node); } osg::Vec3 getTimedTranslation(double t) const { @@ -486,11 +482,10 @@ virtual ~DrivenSwitch(){} virtual AnimationCallback *newCallback(osg::Node *node) const { - return Animation::newCallback_<DrivenSwitch,Callback>(node); + return newCallback_<DrivenSwitch,Callback>(node); } }; - /** * TimedSequence controls TimedAnimation providing a basic time counter. * It exports (registers) 2 channels which can be imported; ReferenceTime Modified: trunk/CSP/CSPSim/Source/Animation.cpp =================================================================== --- trunk/CSP/CSPSim/Source/Animation.cpp 2005-02-15 18:19:56 UTC (rev 1472) +++ trunk/CSP/CSPSim/Source/Animation.cpp 2005-02-16 14:09:51 UTC (rev 1473) @@ -87,8 +87,8 @@ else if (needsUpdate(*node->getUpdateCallback())) { osg::MatrixTransform* t = dynamic_cast<osg::MatrixTransform*>(node); if (t) { - osg::Matrix m = osg::Matrix::rotate(m_Parameters->getGain()*m_Value + m_Parameters->getPhase() - + m_Parameters->getPhase(), m_Parameters->getAxis()); + osg::Matrix m = osg::Matrix::rotate(m_Parameters->getGain()*m_Value + m_Parameters->getPhase(), + m_Parameters->getAxis()); osg::Vec3 translation = t->getMatrix().getTrans(); m.preMult(t->getMatrix()); m.setTrans(translation); @@ -192,3 +192,4 @@ traverse(node, nv); } + |