#undef OBJECT_CAST #define OBJECT_CAST dynamic_cast #include #include #include #include namespace osgAnimation_AnimationManagerBaseWrapper { static bool checkAnimations( const osgAnimation::AnimationManagerBase& manager ) { return manager.getAnimationList().size()>0; } static bool readAnimations( osgDB::InputStream& is, osgAnimation::AnimationManagerBase& manager ) { unsigned int size = is.readSize(); is >> is.BEGIN_BRACKET; for ( unsigned int i=0; i ani = is.readObjectOfType(); if ( ani ) manager.registerAnimation( ani.get() ); } is >> is.END_BRACKET; return true; } static bool writeAnimations( osgDB::OutputStream& os, const osgAnimation::AnimationManagerBase& manager ) { const osgAnimation::AnimationList& animations = manager.getAnimationList(); os.writeSize(animations.size()); os << os.BEGIN_BRACKET << std::endl; for ( osgAnimation::AnimationList::const_iterator itr=animations.begin(); itr!=animations.end(); ++itr ) { os << itr->get(); } os << os.END_BRACKET << std::endl; return true; } struct osgAnimation_AnimationManagerBasegetnumAnimations : public osgDB::MethodObject { virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const { osgAnimation::AnimationManagerBase* group = dynamic_cast(reinterpret_cast(objectPtr)); outputParameters.push_back(new osg::UIntValueObject("return",group->getNumRegisteredAnimations())); return true; } }; struct osgAnimation_AnimationManagerBasegetAnimation : public osgDB::MethodObject { virtual bool run(void* objectPtr, osg::Parameters& inputParameters, osg::Parameters& outputParameters) const { if (inputParameters.empty()) return false; osg::Object* indexObject = inputParameters[0].get(); unsigned int index = 0; osg::DoubleValueObject* dvo = dynamic_cast(indexObject); if (dvo) index = static_cast(dvo->getValue()); else { osg::UIntValueObject* uivo = dynamic_cast(indexObject); if (uivo) index = uivo->getValue(); } osgAnimation::AnimationManagerBase* group = dynamic_cast(reinterpret_cast(objectPtr)); outputParameters.push_back(group->getRegisteredAnimation(index)); return true; } }; REGISTER_OBJECT_WRAPPER( osgAnimation_AnimationManagerBase, /*new osgAnimation::AnimationManagerBase*/NULL, osgAnimation::AnimationManagerBase, "osg::Object osg::NodeCallback osgAnimation::AnimationManagerBase" ) { ADD_USER_SERIALIZER( Animations ); // _animations ADD_BOOL_SERIALIZER( AutomaticLink, true ); // _automaticLink { UPDATE_TO_VERSION_SCOPED( 152 ) ADD_METHOD_OBJECT( "getRegisteredAnimation", osgAnimation_AnimationManagerBasegetAnimation ); ADD_METHOD_OBJECT( "getNumRegisteredAnimations", osgAnimation_AnimationManagerBasegetnumAnimations ); } } } #undef OBJECT_CAST #define OBJECT_CAST static_cast