Thanks Chris, fix now merged and submitted to svn/trunk. Welcome back to contributing to the OSG, just checked the ChangeLog, last submission from you was in October 2006. Good to have you back ;-)
On Mon, Apr 13, 2009 at 10:58 PM, Chris 'Xenon' Hanson <[email protected]> wrote: > Fixed case of morphTarget argument in Doxygen comments. > > -- > Chris 'Xenon' Hanson, omo sanza lettere Xenon AlphaPixel.com > PixelSense Landsat processing now available! http://www.alphapixel.com/demos/ > "There is no Truth. There is only Perception. To Perceive is to Exist." - Xen > > /* -*-c++-*- > * Copyright (C) 2008 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_MORPHGEOMETRY_H > #define OSGANIMATION_MORPHGEOMETRY_H > > #include <osgAnimation/Export> > #include <osg/Geometry> > #include <osgAnimation/UpdateCallback> > > namespace osgAnimation > { > > class OSGANIMATION_EXPORT MorphGeometry : public osg::Geometry > { > > public: > > enum Method { > NORMALIZED, > RELATIVE > }; > > class MorphTarget > { > protected: > osg::ref_ptr<osg::Geometry> _geom; > float _weight; > public: > MorphTarget(osg::Geometry* geom, float w = 1.0) : _geom(geom), > _weight(w) {} > void setWeight(float weight) { _weight = weight; } > const float getWeight() const { return _weight; } > osg::Geometry* getGeometry() { return _geom.get(); } > const osg::Geometry* getGeometry() const { return _geom.get(); } > void setGeometry(osg::Geometry* geom) { _geom = geom; } > }; > > typedef std::vector<MorphTarget> MorphTargetList; > > struct UpdateVertex : public osg::Drawable::UpdateCallback > { > virtual void update(osg::NodeVisitor*, osg::Drawable* drw) > { > MorphGeometry* geom = dynamic_cast<MorphGeometry*>(drw); > if (!geom) > return; > > geom->transformSoftwareMethod(); > } > }; > > MorphGeometry(); > MorphGeometry(const osg::Geometry& b); > MorphGeometry(const MorphGeometry& b, const osg::CopyOp& copyop = > osg::CopyOp::SHALLOW_COPY); > > virtual osg::Object* cloneType() const { return new MorphGeometry(); } > virtual osg::Object* clone(const osg::CopyOp& copyop) const { return > new MorphGeometry(*this,copyop); } > virtual bool isSameKindAs(const osg::Object* obj) const { return > dynamic_cast<const MorphGeometry*>(obj)!=NULL; } > virtual const char* libraryName() const { return "osgAnimation"; } > virtual const char* className() const { return "MorphGeometry"; } > > virtual void transformSoftwareMethod(); > > /** Set the morphing method. */ > void setMethod(Method method) { _method = method; } > /** Get the morphing method. */ > inline Method getMethod() const { return _method; } > > /** Set flag for morphing normals. */ > void setMorphNormals(bool morphNormals) { _morphNormals = > morphNormals; } > /** Get the flag for morphing normals. */ > inline bool getMorphNormals() const { return _morphNormals; } > > /** Add a \c MorphTarget to the \c MorphGeometry. > * If \c MorphTarget is not \c NULL and is not contained in the \c > MorphGeometry > * then increment its reference count, add it to the MorphTargets > list and > * dirty the bounding sphere to force it to be recomputed on the next > * call to \c getBound(). > * @param morphTarget The \c MorphTarget to be added to the \c > MorphGeometry. > * @return \c true for success; \c false otherwise. > */ > virtual void addMorphTarget( osg::Geometry *morphTarget, float weight > = 1.0 ) { _morphTargets.push_back(MorphTarget(morphTarget, weight)); _dirty = > true; } > > void setWeight(unsigned int index, float morphWeight) > { > if (index < _morphTargets.size()) > { > _morphTargets[index].setWeight(morphWeight); > dirty(); > } > } > > /** Set the MorphGeometry dirty.*/ > void dirty() { _dirty = true; } > > /** Get the list of MorphTargets.*/ > const MorphTargetList& getMorphTargetList() const { return > _morphTargets; } > > /** Get the list of MorphTargets. Warning if you modify this array you > will have to call dirty() */ > MorphTargetList& getMorphTargetList() { return _morphTargets; } > > /** Return the \c MorphTarget at position \c i.*/ > inline const MorphTarget& getMorphTarget( unsigned int i ) const { > return _morphTargets[i]; } > > /** Return the \c MorphTarget at position \c i.*/ > inline MorphTarget& getMorphTarget( unsigned int i ) { return > _morphTargets[i]; } > > protected: > /// Do we need to recalculate the morphed geometry? > bool _dirty; > > Method _method; > MorphTargetList _morphTargets; > > std::vector<osg::Vec3> _positionSource; > std::vector<osg::Vec3> _normalSource; > > /// Do we also morph between normals? > bool _morphNormals; > }; > > class OSGANIMATION_EXPORT UpdateMorph : public AnimationUpdateCallback > { > protected: > std::map<int, osg::ref_ptr<osgAnimation::FloatTarget> > _weightTargets; > > public: > > META_Object(osgAnimation, UpdateMorph); > > UpdateMorph(const std::string& name = ""); > UpdateMorph(const UpdateMorph& apc,const osg::CopyOp& copyop); > > /** Callback method called by the NodeVisitor when visiting a node.*/ > virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); > bool needLink() const; > bool link(osgAnimation::Channel* channel); > }; > > } > > #endif > > _______________________________________________ > osg-submissions mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org > > _______________________________________________ osg-submissions mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
