#pragma once // Include dependencies #include #include #include #include #include namespace osgWidget { //! The subclass of osgViewer::CompositeViewer we use /*! * This subclassing allows us to remove the annoying automatic * setting of the CPU affinity to core 0 by osgViewer::ViewerBase, * osgViewer::CompositeViewer's base class. */ class Viewer: public osgViewer::CompositeViewer { public: virtual void setupThreading(); }; } class PickHandler; // Forward declaration class TrackPointRenderer; // Forward declaration class OSGWidget : public QOpenGLWidget { Q_OBJECT public: static void fixMaterialState(osg::ref_ptr node); OSGWidget(QWidget* parent = nullptr); virtual ~OSGWidget(); void renderBaseMesh(const osg::ref_ptr vertices, const osg::ref_ptr normals); osg::ref_ptr getMesh(); PickHandler* getPicker(); TrackPointRenderer* getPointRenderer(); protected: virtual void paintEvent(QPaintEvent* paintEvent); virtual void paintGL(); virtual void resizeGL(int width, int height); virtual void keyPressEvent(QKeyEvent* event); virtual void keyReleaseEvent(QKeyEvent* event); virtual void mouseMoveEvent(QMouseEvent* event); virtual void mousePressEvent(QMouseEvent* event); virtual void mouseReleaseEvent(QMouseEvent* event); virtual void wheelEvent(QWheelEvent* event); virtual bool event(QEvent* event); private: virtual void onHome(); virtual void onResize(int width, int height); osg::ref_ptr createAxesPreview(); osgGA::EventQueue* getEventQueue() const; PickHandler* _picker; TrackPointRenderer* _pointRenderer; osg::ref_ptr graphicsWindow_; osg::ref_ptr _viewer; osgViewer::View* _view; osg::ref_ptr _root; osg::ref_ptr _pointRoot; osg::ref_ptr _coordinateAxes; osg::ref_ptr _mesh; QPoint selectionStart_; QPoint selectionEnd_; bool selectionActive_; bool selectionFinished_; };