Hi Jean Sebastien,

In the trunk it seems to be already fixed on the revision 10361
A svn update should resolve the problem.

Cheers,
Cedric

On Fri, 2009-06-19 at 12:56 -0400, Jean-Sébastien Guay wrote:
> Hi Robert, Cedric,
> 
> There's a linker error in osganimationtimeline, caused by a missing 
> OSGANIMATION_EXPORT on a class in osgAnimation/Action (StripAnimation). 
> Fix included. Other classes in that file will probably require exports 
> too so I've added them...
> 
> See http://www.cdash.org/CDashPublic/viewBuildError.php?buildid=26732
> 
> J-S
> plain text document attachment (Action)
> /*  -*-c++-*- 
>  *  Copyright (C) 2009 Cedric Pinson <[email protected]>
>  *
>  * This library is open source and may be redistributed and/or modified under 
>  
>  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or 
>  * (at your option) any later version.  The full license is in LICENSE file
>  * included with this distribution, and on the openscenegraph.org website.
>  * 
>  * This library is distributed in the hope that it will be useful,
>  * but WITHOUT ANY WARRANTY; without even the implied warranty of
>  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
>  * OpenSceneGraph Public License for more details.
> */
> 
> #ifndef OSGANIMATION_ACTION_H
> #define OSGANIMATION_ACTION_H
> 
> #include <osgAnimation/Export>
> #include <osgAnimation/Animation>
> #include <osgAnimation/ActionVisitor>
> #include <osgAnimation/FrameAction>
> #include <iostream>
> 
> #define META_Action(library,name) \
>         virtual osg::Object* cloneType() const { return new name (); } \
>         virtual osg::Object* clone(const osg::CopyOp& copyop) const { return 
> new name (*this,copyop); } \
>         virtual bool isSameKindAs(const osg::Object* obj) const { return 
> dynamic_cast<const name *>(obj)!=NULL; } \
>         virtual const char* className() const { return #name; } \
>         virtual const char* libraryName() const { return #library; } \
>         virtual void accept(osgAnimation::ActionVisitor& nv) { 
> nv.apply(*this); } \
> 
> 
> namespace osgAnimation
> {
> 
>     class OSGANIMATION_EXPORT Action : public osg::Object
>     {
>     public:
> 
>         class Callback : public osg::Object
>         {
>         public:
>             Callback(){}
>             Callback(const Callback& nc,const osg::CopyOp&) :
>                 _nestedCallback(nc._nestedCallback) {}
> 
>             META_Object(osgAnimation,Callback);
>         
>             virtual void operator()(Action* action, 
> osgAnimation::ActionVisitor* nv) {}
>             
>             Callback* getNestedCallback() { return _nestedCallback.get(); } 
>             void addNestedCallback(Callback* callback) 
>             { 
>                 if (_nestedCallback.valid())
>                     _nestedCallback->addNestedCallback(callback);
>                 else
>                     _nestedCallback = callback;
>             }
> 
>         protected:
>             osg::ref_ptr<Callback> _nestedCallback;
>         };
> 
> 
>         typedef std::map<unsigned int, osg::ref_ptr<Callback> > FrameCallback;
> 
>         META_Action(osgAnimation, Action);
>         
>         Action();
>         Action(const Action&,const osg::CopyOp&);
> 
>         void setCallback(double when, Callback* callback)
>         {
>             setCallback(static_cast<unsigned int>(floor(when*_fps)), 
> callback);
>         }
> 
>         void setCallback(unsigned int frame, Callback* callback)
>         {
>             if (_framesCallback[frame].valid())
>                 _framesCallback[frame]->addNestedCallback(callback);
>             else
>                 _framesCallback[frame] = callback;
>         }
>         Callback* getCallback(unsigned int frame)
>         {
>             if (_framesCallback.find(frame) == _framesCallback.end())
>                 return 0;
>             return _framesCallback[frame].get();
>         }
>         
>         Callback* getFrameCallback(unsigned int frame);
>         Callback* getFrameCallback(double time);
>         unsigned int getFramesPerSecond() const { return _fps; }
> 
>         void setNumFrames(unsigned int numFrames) { _numberFrame = numFrames;}
>         void setDuration(double duration) { _numberFrame = 
> static_cast<unsigned int>(floor(duration * _fps)); }
>         unsigned int getNumFrames() const { return _numberFrame;}
>         double getDuration() const { return _numberFrame * 1.0 / _fps; }
> 
>         // 0 means infini else it's the number of loop
>         virtual void setLoop(int nb) { _loop = nb; }
>         virtual unsigned int getLoop() const { return _loop;}
> 
>         // get the number of loop, the frame relative to loop.
>         // return true if in range, and false if out of range.
>         bool evaluateFrame(unsigned int frame, unsigned int& resultframe, 
> unsigned int& nbloop );
>         virtual void traverse(ActionVisitor& visitor) {}
>         //virtual void evaluate(unsigned int frame);
> 
>     protected:
>         FrameCallback _framesCallback;
> 
>         double _speed;
>         unsigned int _fps;
>         unsigned int _numberFrame;
>         unsigned int _loop;
> 
>         enum Status
>         {
>             Play,
>             Stop
>         };
>         
>         Status _state;
>     };
> 
> 
> 
> 
>     // blend in from 0 to weight in duration
>     class OSGANIMATION_EXPORT BlendIn : public Action
>     {
>         double _weight;
>         osg::ref_ptr<Animation> _animation;
> 
>     public:
>         META_Action(osgAnimation, BlendIn);
>         BlendIn() : _weight(0) {}
>         BlendIn(const BlendIn& a, const osg::CopyOp& c) : Action(a,c) { 
> _weight = a._weight; _animation = a._animation;}
>         BlendIn(Animation* animation, double duration, double weight);
>         double getWeight() const { return _weight;}
>         Animation* getAnimation() { return _animation.get(); }
>         void computeWeight(unsigned int frame);
>     };
> 
>     // blend in from 0 to weight in duration
>     class OSGANIMATION_EXPORT BlendOut : public Action
>     {
>         double _weight;
>         osg::ref_ptr<Animation> _animation;
>     public:
>         META_Action(osgAnimation, BlendOut);
>         BlendOut() : _weight(0) {}
>         BlendOut(const BlendOut& a, const osg::CopyOp& c) : Action(a,c) { 
> _weight = a._weight; _animation = a._animation;}
>         BlendOut(Animation* animation, double duration);
>         Animation* getAnimation() { return _animation.get(); }
>         double getWeight() const { return _weight;}
>         void computeWeight(unsigned int frame);
>     };
> 
> 
>     class OSGANIMATION_EXPORT ActionAnimation : public Action
>     {
>     public:
>         META_Action(osgAnimation, ActionAnimation);
>         ActionAnimation() {}
>         ActionAnimation(const ActionAnimation& a, const osg::CopyOp& c) : 
> Action(a,c) { _animation = a._animation;}
>         ActionAnimation(Animation* animation);
>         void updateAnimation(unsigned int frame);
>         Animation* getAnimation() { return _animation.get(); }
> 
>     protected:
>         osg::ref_ptr<Animation> _animation;
>     };
> 
> 
>     // encapsulate animation with blend in blend out for classic usage
>     class OSGANIMATION_EXPORT StripAnimation : public Action
>     {
>     public:
>         META_Action(osgAnimation, StripAnimation);
>         StripAnimation() {}
>         StripAnimation(const StripAnimation& a, const osg::CopyOp& c);
>         StripAnimation(Animation* animation, double blendInDuration = 0.0, 
> double blendOutDuration = 0.0, double blendInWeightTarget = 1.0  );
>         ActionAnimation* getActionAnimation() { return _animation.get(); }
>         BlendIn* getBlendIn() { return _blendIn.get(); }
>         BlendOut* getBlendOut() { return _blendOut.second.get(); }
>         const ActionAnimation* getActionAnimation() const { return 
> _animation.get(); }
>         const BlendIn* getBlendIn() const { return _blendIn.get(); }
>         const BlendOut* getBlendOut() const { return _blendOut.second.get(); }
>         unsigned int getBlendOutStartFrame() const { return _blendOut.first; }
>         
>         unsigned int getLoop() const { return _animation->getLoop(); }
>         void setLoop(unsigned int loop);
>         void computeWeightAndUpdateAnimation(unsigned int frame);
> 
>     protected:
>         typedef std::pair<unsigned int, osg::ref_ptr<BlendOut> > 
> FrameBlendOut;
>         osg::ref_ptr<BlendIn> _blendIn;
>         FrameBlendOut _blendOut;
>         osg::ref_ptr<ActionAnimation> _animation;
>     };
> 
> 
> 
> }
> 
> #endif
> _______________________________________________
> osg-submissions mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
-- 
+33 (0) 6 63 20 03 56  Cedric Pinson mailto:[email protected]
http://www.plopbyte.net

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to