osgManipulator.Rotate3DCommand
是用于在OpenSceneGraph中进行物体旋转的命令类。
osg::Referenced
#include <osgManipulator/Rotate3DCommand>
Rotate3DCommand();
bool doCommand(const osgManipulator::PointerInfo& pointerInfo, const osgGA::GUIEventAdapter& eventAdapter) override;
bool undoCommand(const osgManipulator::PointerInfo& pointerInfo) override;
bool updateCommand(const osgManipulator::PointerInfo& pointerInfo, const osgGA::GUIEventAdapter& eventAdapter) override;
osgManipulator.Rotate3DCommand
中的三个重要函数可分别表示为doCommand、undoCommand和 updateCommand。使用 osgManipulator.Rotate3DCommand
进行物体旋转的过程如下:
1.检测用户输入事件,进入 updateCommand
函数。
2.updateCommand
函数会更新旋转命令的状态。
3.根据用户事件的预期结果(旋转物体),确定是否需要执行旋转操作。如果需要旋转,则进入 doCommand
函数。如果不需要旋转,则返回第 2 步。
4.执行旋转操作。如果旋转完成,退出函数并返回操作结果。如果未完成,则返回第 2 步。
5.如果需要撤消操作,则进入 undoCommand
函数。
6.执行旋转的撤销操作。如果撤销完成,则退出函数并返回操作结果。
osg::ref_ptr<osgManipulator::Rotate3DCommand> rotate = new osgManipulator::Rotate3DCommand;
osg::ref_ptr<osgManipulator::TranslateInLineCommand> translateLine = new osgManipulator::TranslateInLineCommand;
osg::ref_ptr<osgManipulator::TranslatePlaneDragger> translatePlane = new osgManipulator::TranslatePlaneDragger;
//Add commands
manipulator->addCommand(rotate.get());
manipulator->addCommand(translateLine.get());
manipulator->addCommand(translatePlane.get());