Thanks J-S, Fix now merged, I also added a setDataVariance(DYNAMIC) to the Material as well.
Robert. On Mon, Oct 6, 2008 at 4:22 PM, Jean-Sébastien Guay <[EMAIL PROTECTED]> wrote: > oops... > > -------- Original Message -------- > Subject: Re: [osg-users] osgmanipulator and osgUtil::Optimizer > Date: Mon, 06 Oct 2008 11:21:55 -0400 > From: Jean-Sébastien Guay <[EMAIL PROTECTED]> > To: OpenSceneGraph Users <[EMAIL PROTECTED]> > References: <[EMAIL PROTECTED]> > <[EMAIL PROTECTED]> > <[EMAIL PROTECTED]> <[EMAIL PROTECTED]> > > Hi Robert, > >> Well, flagging the osgManipulator::Dragger's stateSet as DYNAMIC did the >> trick. Will send the fixed file to osg-submissions. > > As promised on osg-users. The modification is in the base class so it > applies to all draggers. > > J-S > -- > ______________________________________________________ > Jean-Sebastien Guay [EMAIL PROTECTED] > http://www.cm-labs.com/ > http://whitestar02.webhop.org/ > > > -- > ______________________________________________________ > Jean-Sebastien Guay [EMAIL PROTECTED] > http://www.cm-labs.com/ > http://whitestar02.webhop.org/ > > /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield > * > * 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. > */ > //osgManipulator - Copyright (C) 2007 Fugro-Jason B.V. > > #include <osgManipulator/Dragger> > #include <osg/Material> > > using namespace osgManipulator; > > PointerInfo::PointerInfo(): > _nearPoint(osg::Vec3()), > _farPoint(osg::Vec3()), > _eyeDir(osg::Vec3(0,0,1)) > { > _hitIter = _hitList.begin(); > } > > bool PointerInfo::contains(const osg::Node* node) const > { > if (node && _hitIter!=_hitList.end()) return > std::find((*_hitIter).first.begin(), (*_hitIter).first.end(), node) != > (*_hitIter).first.end(); > else return false; > } > > bool PointerInfo::projectWindowXYIntoObject(const osg::Vec2& windowCoord, > osg::Vec3& nearPoint, osg::Vec3& farPoint) const > { > nearPoint = osg::Vec3(windowCoord.x(),windowCoord.y(),0.0f)*_inverseMVPW; > farPoint = osg::Vec3(windowCoord.x(),windowCoord.y(),1.0f)*_inverseMVPW; > > return true; > } > > Dragger::Dragger() : _commandManager(0) > { > _parentDragger = this; > this->getOrCreateStateSet()->setDataVariance(osg::Object::DYNAMIC); > } > > Dragger::~Dragger() > { > } > > > bool CompositeDragger::handle(const PointerInfo& pi, const > osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) > { > // Check if the dragger node is in the nodepath. > if (!pi.contains(this)) > return false; > > for (DraggerList::iterator itr=_draggerList.begin(); > itr!=_draggerList.end(); ++itr) > { > if ((*itr)->handle(pi, ea, aa)) > return true; > } > return false; > } > > bool CompositeDragger::containsDragger( const Dragger* dragger ) const > { > for (DraggerList::const_iterator itr = _draggerList.begin(); itr != > _draggerList.end(); ++itr) > { > if (itr->get() == dragger) return true; > } > return false; > } > > CompositeDragger::DraggerList::iterator CompositeDragger::findDragger( const > Dragger* dragger ) > { > for (DraggerList::iterator itr = _draggerList.begin(); itr != > _draggerList.end(); ++itr) > { > if (itr->get() == dragger) return itr; > } > return _draggerList.end(); > } > > bool CompositeDragger::addDragger(Dragger *dragger) > { > if (dragger && !containsDragger(dragger)) > { > _draggerList.push_back(dragger); > return true; > } > else return false; > > } > > bool CompositeDragger::removeDragger(Dragger *dragger) > { > DraggerList::iterator itr = findDragger(dragger); > if (itr != _draggerList.end()) > { > _draggerList.erase(itr); > return true; > } > else return false; > > } > void CompositeDragger::setCommandManager(CommandManager* cm) > { > for (DraggerList::iterator itr = _draggerList.begin(); itr != > _draggerList.end(); ++itr) > { > (*itr)->setCommandManager(cm); > } > Dragger::setCommandManager(cm); > } > > void CompositeDragger::setParentDragger(Dragger* dragger) > { > for (DraggerList::iterator itr = _draggerList.begin(); itr != > _draggerList.end(); ++itr) > { > (*itr)->setParentDragger(dragger); > } > Dragger::setParentDragger(dragger); > } > > class ForceCullCallback : public osg::Drawable::CullCallback > { > public: > virtual bool cull(osg::NodeVisitor*, osg::Drawable*, osg::State*) > const > { > return true; > } > }; > > void osgManipulator::setDrawableToAlwaysCull(osg::Drawable& drawable) > { > ForceCullCallback* cullCB = new ForceCullCallback; > drawable.setCullCallback (cullCB); > } > > void osgManipulator::setMaterialColor(const osg::Vec4& color, osg::Node& > node) > { > osg::Material* mat = > dynamic_cast<osg::Material*>(node.getOrCreateStateSet()->getAttribute(osg::StateAttribute::MATERIAL)); > if (! mat) > { > mat = new osg::Material; > node.getOrCreateStateSet()->setAttribute(mat); > } > mat->setDiffuse(osg::Material::FRONT_AND_BACK, color); > } > > > _______________________________________________ > 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
