Hi Zhou, This isn't likely to be something a 3rd party will be able to easily debug as they don't have your code, your data or a debugger to report what is going. Might I suggest you use a debugger and get a stack trace, and have a look at the contents of the data structures that are crashing.
Robert. On 23 October 2012 21:54, Zhou Zhang <[email protected]> wrote: > Hi, > > I am a newbie of the OpenSceneGraph. I am trying to create a sub class > which inherets from teh osgManipulator::Dragger and mimic the similar > behaviour of the osgManipulator::RotateCylinderDragger. > However, I always got crashes on the line computeNodePathToRoot(...) in > the handle(...) function. The error hints that I forgot registering my new > class somewhere. However, I checked source code of the > RotateCylinderDragger and didn't find any way to do it. > Below is my code snippet. It always crashes after it execute the > computeNodePathToRoot and return true in the end. > > I am desparately waiting for some help on this issue now. > Any answers will be greatly appreciated. > > > bool ScaleRotateDragger::handle(const PointerInfo& pointer, const > osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) > { > // Check if the dragger node is in the nodepath. > if (!pointer.contains(this)) return false; > > switch (ea.getEventType()) > { > // Pick start. > case (osgGA::GUIEventAdapter::PUSH): > { > // Get the LocalToWorld matrix for this node and set it > for the projector. > osg::NodePath nodePathToRoot; > computeNodePathToRoot(*this,nodePathToRoot); > osg::Matrix localToWorld = > osg::computeLocalToWorld(nodePathToRoot); > _projector->setLocalToWorld(localToWorld); > > _startLocalToWorld = _projector->getLocalToWorld(); > _startWorldToLocal = _projector->getWorldToLocal(); > > if (_projector->isPointInFront(pointer, > _startLocalToWorld)) > _projector->setFront(true); > else > _projector->setFront(false); > > osg::Vec3d projectedPoint; > if (_projector->project(pointer, projectedPoint)) > { > // Generate the motion command. > osg::ref_ptr<Rotate3DCommand> cmd = new > Rotate3DCommand(); > cmd->setStage(MotionCommand::START); > > cmd->setLocalToWorldAndWorldToLocal(_startLocalToWorld,_startWorldToLocal); > > // Dispatch command. > dispatch(*cmd); > > // Set color to pick color. > setMaterialColor(_pickColor,*this); > > _prevWorldProjPt = projectedPoint * > _projector->getLocalToWorld(); > _prevRotation = osg::Quat(); > _prevPtOnCylinder = > _projector->isProjectionOnCylinder(); > > aa.requestRedraw(); > } > return true; > } > > // Pick move. > case (osgGA::GUIEventAdapter::DRAG): > > thx > ... > > > Thank you! > > Cheers, > Zhou > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=50741#50741 > > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

