void Object3D::addDragger(osgManipulator::Dragger *dragger)
{
    if(_isPickable)
    {
        removeDragger();

        this->getOrCreateStateSet()->setMode(GL_NORMALIZE, osg::StateAttribute::ON);
        dragger->setupDefaultGeometry();

        ref_ptr<osgManipulator::Selection> selection = _selNode;
#if 0
        int mask = dragger->getNodeMask();
        mask = mask & ~SHADOW_CASTER_MASK;
        mask = mask & ~SHADOW_RECEIVER_MASK;
        dragger->setNodeMask(mask);
        SceneGraph* sg = *(_sgList.begin());
        sg->getSceneGraph()->addChild(dragger);
#else
        ref_ptr<Group> parent = new Group;
        // the dragger is added to the scenegraph of the viewer in which the add is made, and only this one
        Group* group = this->getParent(0)->getParent(0)->getParent(0)
        #if USE_SHADOWS
                ->getParent(0)
        #endif
                ;
        parent->addChild(dragger);
        group->addChild(parent);
#endif

        float scale = this->getOriginalNode()->getBound().radius() * 1.6;
        dragger->setMatrix(this->getFrameMatrix() *
                           Matrix::inverse(Matrix::translate(this->getFrameMatrix().getTrans())) *
                           Matrix::inverse(Matrix::rotate(this->getTransformationMatrix().getRotate())) *
                           Matrix::scale(scale, scale, scale) *
                           Matrix::translate(this->getOriginalNode()->getBound().center()));

        dragger->postMult(selection->getMatrix());

        ref_ptr<osgManipulator::CommandManager> commandManager = new osgManipulator::CommandManager();
        commandManager->connect(*dragger, *selection);
        _dragger = dragger;
        int mask = _dragger->getNodeMask();
        mask = mask & ~SHADOW_CASTER_MASK;
        mask = mask & ~SHADOW_RECEIVER_MASK;
        _dragger->setNodeMask(mask);
    }
    else printNonPickable();
}
void Object3D::removeDragger()
{
    if(_dragger.valid())
    {
#if 0
        SceneGraph* sg = *(_sgList.begin());
        sg->getSceneGraph()->removeChild(_dragger.get());
#else
        osg::Group* group = this->getParent(0)->getParent(0)->getParent(0)
        #if USE_SHADOWS
                ->getParent(0)
        #endif
                ;
        group->removeChild(_dragger->getParent(0));
#endif
        _dragger = NULL;
    }
}