[osg-users] osgManipulator error bug? in removeTransformUpdating

Matthias Asselborn matthias.asselborn at gmx.de
Sun Nov 1 03:40:43 PST 2009


Hi,

iam using the trunk of OSG 
i ve a simple code snipped 
a Group with a dragger and two transformmatrix objects 
and their childs 

there is no problem to call the method 
pDragger->addTransformUpdating( pTransformBrick1 );
pDragger->addTransformUpdating( pTransformBrick2 );

but when i call the methods

pDragger->removeTransformUpdating( pTransformBrick1 );
pDragger->removeTransformUpdating( pTransformBrick2 );

the code crashes with "Expression: ("This->_has_container()",0)
in dragger.cpp line 204

Code:

void Dragger::removeTransformUpdating(osg::MatrixTransform* transform)
{
    for(Dragger::DraggerCallbacks::iterator itr = _draggerCallbacks.begin();
        itr != _draggerCallbacks.end();
        ++itr)




here is my test programm 


Code:

int main( int argc, char **argv )
{
	osgViewer::Viewer viewer;

	osg::ref_ptr<osg::Group> pRoot = new osg::Group;

	osg::ref_ptr<osg::Node> pBrick1 = osgDB::readNodeFile( "D:\\bricks\\obj\\3001.obj" );
	osg::ref_ptr<osg::Node> pBrick2 = osgDB::readNodeFile( "D:\\bricks\\obj\\3005.obj" );

	osg::MatrixTransform* pTransformBrick1 = new osg::MatrixTransform;
    pTransformBrick1->addChild( pBrick1 );

	osg::MatrixTransform* pTransformBrick2 = new osg::MatrixTransform;
    pTransformBrick2->addChild( pBrick2 );

   	osgManipulator::Dragger* pDragger = 0;
	osg::ref_ptr<osgManipulator::TabBoxDragger> pTabBoxDragger = new osgManipulator::TabBoxDragger();
    pTabBoxDragger->setupDefaultGeometry();
    pDragger = pTabBoxDragger;

	pRoot->addChild(pTransformBrick1);
	pRoot->addChild(pTransformBrick2);
	pRoot->addChild( pDragger );

     float scale = pBrick1->getBound().radius() * 1.6;
     pDragger->setMatrix(osg::Matrix::scale( scale, scale, scale ) *
                        osg::Matrix::translate( pBrick1->getBound().center() ) );

    pDragger->addTransformUpdating( pTransformBrick1 );
	pDragger->addTransformUpdating( pTransformBrick2 );
	pDragger->removeTransformUpdating( pTransformBrick1 );
	pDragger->removeTransformUpdating( pTransformBrick2 );

    pDragger->setHandleEvents(true);
   
    osgUtil::Optimizer optimizer;
    optimizer.optimize( pRoot.get() );

	viewer.setSceneData( pRoot.get() );
    return viewer.run();
}



Why doesnt it work?
Is there another way to activate and deactivate the dragger to the nodes?

Thank you!

Cheers,
Matthias

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=18996#18996







More information about the osg-users mailing list