OSG点选操作的思路是从osgGA::GUIEventHandler继承,并重新实现虚函数virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);。获取到点选信息后,此处我们不进行处理,而是单一的传出去,由外部需要此点选信息的地方进行处理。对于传出信息,我选择了Qt的信号槽操作,因而,在继承osgGA::GUIEventHandler的同时,我们还需要继承QObject。
代码如下:pickhandle.h
class PickHandle : public QObject, public osgGA::GUIEventHandler
{
Q_OBJECT
public:
PickHandle(const osgEarth::SpatialReference* srs);
~PickHandle();
protected:
virtual bool handle(const osgGA::GUIEventAdapter& ea,
osgGA::GUIActionAdapter& aa);
private:
osg::Vec3d getPos(const osgGA::GUIEventAdapter& ea,
osgGA::GUIActionAdapter&

这篇博客介绍了如何在OpenSceneGraph (OSG) 中实现鼠标点选事件的获取,通过继承并重写虚函数来捕捉点选信息。然后利用Qt的信号槽机制将这些信息传递到外部进行处理。在实现过程中,类同时继承了QObject以利用其信号槽功能。代码示例分别展示了世界坐标和经纬度坐标的获取方法,点选操作的确认条件是PUSH和RELEASE事件发生时点的位置相同。

594

被折叠的 条评论
为什么被折叠?



