///*===================================================================== // //QGroundControl Open Source Ground Control Station // //(c) 2009, 2010 QGROUNDCONTROL PROJECT // //This file is part of the QGROUNDCONTROL project // // QGROUNDCONTROL is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // QGROUNDCONTROL is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with QGROUNDCONTROL. If not, see . // //======================================================================*/ /** * @file * @brief Definition of the class Pixhawk3DWidget. * * @author Lionel Heng * */ #ifndef PIXHAWK3DWIDGET_H #define PIXHAWK3DWIDGET_H #include #include "HUDScaleGeode.h" #include "Imagery.h" #include "ImageWindowGeode.h" #include "WaypointGroupNode.h" #ifdef QGC_PROTOBUF_ENABLED #include "ObstacleGroupNode.h" #endif #include "Q3DWidget.h" class UASInterface; /** * @brief A 3D View widget which displays vehicle-centric information. **/ class Pixhawk3DWidget : public Q3DWidget { Q_OBJECT public: explicit Pixhawk3DWidget(QWidget* parent = 0); ~Pixhawk3DWidget(); public slots: void setActiveUAS(UASInterface* uas); private slots: void selectFrame(QString text); void showLocalGrid(int state); void showWorldGrid(int state); void showTrail(int state); void showWaypoints(int state); void selectMapSource(int index); void selectVehicleModel(int index); void recenter(void); void toggleFollowCamera(int state); void selectTargetHeading(void); void selectTarget(void); void setTarget(void); void insertWaypoint(void); void moveWaypointPosition(void); void moveWaypointHeading(void); void deleteWaypoint(void); void setWaypointAltitude(void); void clearAllWaypoints(void); protected: QVector< osg::ref_ptr > findVehicleModels(void); void buildLayout(void); virtual void resizeGL(int width, int height); virtual void display(void); virtual void keyPressEvent(QKeyEvent* event); virtual void mousePressEvent(QMouseEvent* event); virtual void showEvent(QShowEvent* event); virtual void hideEvent(QHideEvent* event); virtual void mouseMoveEvent(QMouseEvent* event); UASInterface* uas; signals: void visibilityChanged(bool visible); private: void getPose(double& x, double& y, double& z, double& roll, double& pitch, double& yaw, QString& utmZone); void getPose(double& x, double& y, double& z, double& roll, double& pitch, double& yaw); void getPosition(double& x, double& y, double& z, QString& utmZone); void getPosition(double& x, double& y, double& z); osg::ref_ptr createLocalGrid(void); osg::ref_ptr createWorldGrid(void); osg::ref_ptr createTrail(const osg::Vec4& color); osg::ref_ptr createMap(void); osg::ref_ptr createRGBD3D(void); osg::ref_ptr createTarget(void); void setupHUD(void); void resizeHUD(void); void updateHUD(double robotX, double robotY, double robotZ, double robotRoll, double robotPitch, double robotYaw, const QString& utmZone); void updateTrail(double robotX, double robotY, double robotZ); void updateImagery(double originX, double originY, double originZ, const QString& zone); void updateWaypoints(void); void updateTarget(double robotX, double robotY); #ifdef QGC_PROTOBUF_ENABLED void updateRGBD(double robotX, double robotY, double robotZ); void updateObstacles(void); void updatePath(double robotX, double robotY, double robotZ); #endif int findWaypoint(const QPoint& mousePos); bool findTarget(int mouseX, int mouseY); void showInsertWaypointMenu(const QPoint& cursorPos); void showEditWaypointMenu(const QPoint& cursorPos); enum Mode { DEFAULT_MODE, MOVE_WAYPOINT_POSITION_MODE, MOVE_WAYPOINT_HEADING_MODE, SELECT_TARGET_HEADING_MODE }; Mode mode; int selectedWpIndex; bool displayLocalGrid; bool displayWorldGrid; bool displayTrail; bool displayImagery; bool displayWaypoints; bool displayRGBD2D; bool displayRGBD3D; bool displayObstacleList; bool displayPath; bool enableRGBDColor; bool enableTarget; bool followCamera; QVarLengthArray trail; osg::ref_ptr vehicleModel; osg::ref_ptr hudBackgroundGeometry; osg::ref_ptr statusText; osg::ref_ptr scaleGeode; osg::ref_ptr rgb2DGeode; osg::ref_ptr depth2DGeode; osg::ref_ptr rgbImage; osg::ref_ptr depthImage; osg::ref_ptr localGridNode; osg::ref_ptr worldGridNode; osg::ref_ptr trailNode; osg::ref_ptr mapNode; osg::ref_ptr waypointGroupNode; osg::ref_ptr targetNode; osg::ref_ptr rgbd3DNode; #ifdef QGC_PROTOBUF_ENABLED osg::ref_ptr obstacleGroupNode; osg::ref_ptr pathNode; #endif QVector< osg::ref_ptr > vehicleModels; MAV_FRAME frame; osg::Vec3d target; QPoint cachedMousePos; double lastRobotX, lastRobotY, lastRobotZ; }; #endif // PIXHAWK3DWIDGET_H