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

Reply via email to