|
本帖最后由 267270476 于 2013-10-22 17:13 编辑
跪求帮助:TabPlaneTrackballDragger默认在XOZ平台下,现在项目需要在XOY平台下实现跟TabPlaneTrackballDragger一样的功能,因此重写了TabPlaneTrackballDragger类,投为C。自己写的类A模拟TrackballDragger类,但只保留了类TrackballDragger的_zDragger,其他跟TrackballDragger类的代码一致。自己写的类B模拟TabPlaneDragger类,重写了
setupDefaultGeometry方法,代码如下:
osg::ref_ptr<osg::Node> handleNode = createHandleNode(_cornerScaleDragger.get(), _handleScaleFactor, twoSidedHandle);
createCornerScaleDraggerGeometry(_cornerScaleDragger.get(), handleNode.get(), _handleScaleFactor);
createEdgeScaleDraggerGeometry(_horzEdgeScaleDragger.get(), _vertEdgeScaleDragger.get(), handleNode.get(), _handleScaleFactor);
createTranslateDraggerGeometry(_cornerScaleDragger.get(), _translateDragger.get());
//自己添加的
osg::Quat rotation0;
rotation0.makeRotate(osg::Vec3(0.0f, 0.0f, 1.0f), osg::Vec3(0.0f, 1.0f, 0.0f));
_vertEdgeScaleDragger->setMatrix(osg::Matrix(rotation0));
osg::Quat rotation1;
rotation1.makeRotate(osg::Vec3(0.0f, 0.0f, 1.0f), osg::Vec3(0.0f, 1.0f, 0.0f));
_horzEdgeScaleDragger->setMatrix(osg::Matrix(rotation1));
osg::Quat rotation2;
rotation2.makeRotate(osg::Vec3(0.0f, 0.0f, 1.0f), osg::Vec3(0.0f, 1.0f, 0.0f));
_translateDragger->setMatrix(osg::Matrix(rotation2));
osg::Quat rotation3;
rotation3.makeRotate(osg::Vec3(0.0f, 0.0f, 1.0f), osg::Vec3(0.0f, 1.0f, 0.0f));
_cornerScaleDragger->setMatrix(osg::Matrix(rotation3));
最后,把自己写的这两个类A,B的对象作为类C的成员变量,类似TabPlaneTrackballDragger类与TrackballDragger、TabPlaneDragger的关系,现在有三个问题:
1、把类C生成的dragger(坐标为-12.68,-3.75,0)作为一个MatrixTransform类对象(坐标355090,2769699,0)的Child时,
,有两个用于拖拽的点没有出现
2、其他拖拽的点特别难以点到
3、选中中间的拖拽球进行拖拽时有时会转得特别快,无法控制。
但是把该类用于控制cow.osg时,问题1仍然存在,2、3却没有了。
这三个问题困扰一天了,求各种大神帮帮忙,给点意见,不胜感激了! |
|