Commit 08f8dfb8 authored by hengli's avatar hengli
Browse files

Added additional roll/pitch parameters to terrain offset dialog.

parent d5c30100
...@@ -72,16 +72,28 @@ GlobalViewParams::frame(void) const ...@@ -72,16 +72,28 @@ GlobalViewParams::frame(void) const
return mFrame; return mFrame;
} }
QVector4D& QVector3D&
GlobalViewParams::terrainOffset(void) GlobalViewParams::terrainPositionOffset(void)
{ {
return mTerrainOffset; return mTerrainPositionOffset;
} }
QVector4D QVector3D
GlobalViewParams::terrainOffset(void) const GlobalViewParams::terrainPositionOffset(void) const
{ {
return mTerrainOffset; return mTerrainPositionOffset;
}
QVector3D&
GlobalViewParams::terrainAttitudeOffset(void)
{
return mTerrainPositionOffset;
}
QVector3D
GlobalViewParams::terrainAttitudeOffset(void) const
{
return mTerrainPositionOffset;
} }
void void
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QVector4D> #include <QVector3D>
#include "QGCMAVLink.h" #include "QGCMAVLink.h"
#include "Imagery.h" #include "Imagery.h"
...@@ -30,8 +30,11 @@ public: ...@@ -30,8 +30,11 @@ public:
MAV_FRAME& frame(void); MAV_FRAME& frame(void);
MAV_FRAME frame(void) const; MAV_FRAME frame(void) const;
QVector4D& terrainOffset(void); QVector3D& terrainPositionOffset(void);
QVector4D terrainOffset(void) const; QVector3D terrainPositionOffset(void) const;
QVector3D& terrainAttitudeOffset(void);
QVector3D terrainAttitudeOffset(void) const;
public slots: public slots:
void followCameraChanged(const QString& text); void followCameraChanged(const QString& text);
...@@ -49,7 +52,8 @@ private: ...@@ -49,7 +52,8 @@ private:
Imagery::Type mImageryType; Imagery::Type mImageryType;
int mFollowCameraId; int mFollowCameraId;
MAV_FRAME mFrame; MAV_FRAME mFrame;
QVector4D mTerrainOffset; QVector3D mTerrainPositionOffset;
QVector3D mTerrainAttitudeOffset;
}; };
typedef QSharedPointer<GlobalViewParams> GlobalViewParamsPtr; typedef QSharedPointer<GlobalViewParams> GlobalViewParamsPtr;
......
...@@ -416,12 +416,13 @@ Pixhawk3DWidget::showTerrainParamWindow(void) ...@@ -416,12 +416,13 @@ Pixhawk3DWidget::showTerrainParamWindow(void)
{ {
TerrainParamDialog::getTerrainParams(mGlobalViewParams); TerrainParamDialog::getTerrainParams(mGlobalViewParams);
const QVector4D& terrainOffset = mGlobalViewParams->terrainOffset(); const QVector3D& positionOffset = mGlobalViewParams->terrainPositionOffset();
const QVector3D& attitudeOffset = mGlobalViewParams->terrainAttitudeOffset();
mTerrainPAT->setPosition(osg::Vec3d(terrainOffset.y(), terrainOffset.x(), -terrainOffset.z())); mTerrainPAT->setPosition(osg::Vec3d(positionOffset.y(), positionOffset.x(), -positionOffset.z()));
mTerrainPAT->setAttitude(osg::Quat(M_PI_2 - terrainOffset.w(), osg::Vec3d(0.0f, 0.0f, 1.0f), mTerrainPAT->setAttitude(osg::Quat(M_PI_2 - attitudeOffset.z(), osg::Vec3d(0.0f, 0.0f, 1.0f),
0.0, osg::Vec3d(1.0f, 0.0f, 0.0f), attitudeOffset.y(), osg::Vec3d(1.0f, 0.0f, 0.0f),
0.0, osg::Vec3d(0.0f, 1.0f, 0.0f))); attitudeOffset.x(), osg::Vec3d(0.0f, 1.0f, 0.0f)));
} }
void void
...@@ -534,7 +535,8 @@ Pixhawk3DWidget::loadTerrainModel(void) ...@@ -534,7 +535,8 @@ Pixhawk3DWidget::loadTerrainModel(void)
mTerrainNode->setName("terrain"); mTerrainNode->setName("terrain");
mTerrainPAT->addChild(mTerrainNode); mTerrainPAT->addChild(mTerrainNode);
mGlobalViewParams->terrainOffset() = QVector4D(); mGlobalViewParams->terrainPositionOffset() = QVector3D();
mGlobalViewParams->terrainAttitudeOffset() = QVector3D();
mTerrainPAT->setPosition(osg::Vec3d(0.0, 0.0, 0.0)); mTerrainPAT->setPosition(osg::Vec3d(0.0, 0.0, 0.0));
mTerrainPAT->setAttitude(osg::Quat(M_PI_2, osg::Vec3d(0.0f, 0.0f, 1.0f), mTerrainPAT->setAttitude(osg::Quat(M_PI_2, osg::Vec3d(0.0f, 0.0f, 1.0f),
......
...@@ -61,7 +61,7 @@ Q3DWidget::Q3DWidget(QWidget* parent) ...@@ -61,7 +61,7 @@ Q3DWidget::Q3DWidget(QWidget* parent)
mOsgGW = new osgViewer::GraphicsWindowEmbedded(0, 0, width(), height()); mOsgGW = new osgViewer::GraphicsWindowEmbedded(0, 0, width(), height());
setThreadingModel(osgViewer::Viewer::SingleThreaded); setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext);
setMouseTracking(true); setMouseTracking(true);
} }
......
...@@ -19,20 +19,25 @@ TerrainParamDialog::TerrainParamDialog(QWidget* parent) ...@@ -19,20 +19,25 @@ TerrainParamDialog::TerrainParamDialog(QWidget* parent)
void void
TerrainParamDialog::getTerrainParams(GlobalViewParamsPtr &globalViewParams) TerrainParamDialog::getTerrainParams(GlobalViewParamsPtr &globalViewParams)
{ {
QVector4D& terrainOffset = globalViewParams->terrainOffset(); QVector3D& positionOffset = globalViewParams->terrainPositionOffset();
QVector3D& attitudeOffset = globalViewParams->terrainAttitudeOffset();
TerrainParamDialog dialog; TerrainParamDialog dialog;
dialog.mXOffsetSpinBox->setValue(terrainOffset.x()); dialog.mXOffsetSpinBox->setValue(positionOffset.x());
dialog.mYOffsetSpinBox->setValue(terrainOffset.y()); dialog.mYOffsetSpinBox->setValue(positionOffset.y());
dialog.mZOffsetSpinBox->setValue(terrainOffset.z()); dialog.mZOffsetSpinBox->setValue(positionOffset.z());
dialog.mYawOffsetSpinBox->setValue(osg::RadiansToDegrees(terrainOffset.w())); dialog.mRollOffsetSpinBox->setValue(osg::RadiansToDegrees(attitudeOffset.x()));
dialog.mPitchOffsetSpinBox->setValue(osg::RadiansToDegrees(attitudeOffset.y()));
dialog.mYawOffsetSpinBox->setValue(osg::RadiansToDegrees(attitudeOffset.z()));
if (dialog.exec() == QDialog::Accepted) if (dialog.exec() == QDialog::Accepted)
{ {
terrainOffset.setX(dialog.mXOffsetSpinBox->value()); positionOffset.setX(dialog.mXOffsetSpinBox->value());
terrainOffset.setY(dialog.mYOffsetSpinBox->value()); positionOffset.setY(dialog.mYOffsetSpinBox->value());
terrainOffset.setZ(dialog.mZOffsetSpinBox->value()); positionOffset.setZ(dialog.mZOffsetSpinBox->value());
terrainOffset.setW(osg::DegreesToRadians(dialog.mYawOffsetSpinBox->value())); attitudeOffset.setX(osg::DegreesToRadians(dialog.mRollOffsetSpinBox->value()));
attitudeOffset.setY(osg::DegreesToRadians(dialog.mPitchOffsetSpinBox->value()));
attitudeOffset.setZ(osg::DegreesToRadians(dialog.mYawOffsetSpinBox->value()));
} }
} }
...@@ -68,6 +73,16 @@ TerrainParamDialog::buildLayout(QVBoxLayout* layout) ...@@ -68,6 +73,16 @@ TerrainParamDialog::buildLayout(QVBoxLayout* layout)
mZOffsetSpinBox->setRange(-100.0, 100.0); mZOffsetSpinBox->setRange(-100.0, 100.0);
mZOffsetSpinBox->setValue(0.0); mZOffsetSpinBox->setValue(0.0);
mRollOffsetSpinBox = new QDoubleSpinBox(this);
mRollOffsetSpinBox->setDecimals(0);
mRollOffsetSpinBox->setRange(-180.0, 180.0);
mRollOffsetSpinBox->setValue(0.0);
mPitchOffsetSpinBox = new QDoubleSpinBox(this);
mPitchOffsetSpinBox->setDecimals(0);
mPitchOffsetSpinBox->setRange(-180.0, 180.0);
mPitchOffsetSpinBox->setValue(0.0);
mYawOffsetSpinBox = new QDoubleSpinBox(this); mYawOffsetSpinBox = new QDoubleSpinBox(this);
mYawOffsetSpinBox->setDecimals(0); mYawOffsetSpinBox->setDecimals(0);
mYawOffsetSpinBox->setRange(-180.0, 180.0); mYawOffsetSpinBox->setRange(-180.0, 180.0);
...@@ -77,6 +92,8 @@ TerrainParamDialog::buildLayout(QVBoxLayout* layout) ...@@ -77,6 +92,8 @@ TerrainParamDialog::buildLayout(QVBoxLayout* layout)
formLayout->addRow(tr("x (m)"), mXOffsetSpinBox); formLayout->addRow(tr("x (m)"), mXOffsetSpinBox);
formLayout->addRow(tr("y (m)"), mYOffsetSpinBox); formLayout->addRow(tr("y (m)"), mYOffsetSpinBox);
formLayout->addRow(tr("z (m)"), mZOffsetSpinBox); formLayout->addRow(tr("z (m)"), mZOffsetSpinBox);
formLayout->addRow(tr("Roll (deg)"), mRollOffsetSpinBox);
formLayout->addRow(tr("Pitch (deg)"), mPitchOffsetSpinBox);
formLayout->addRow(tr("Yaw (deg)"), mYawOffsetSpinBox); formLayout->addRow(tr("Yaw (deg)"), mYawOffsetSpinBox);
offsetGroupBox->setLayout(formLayout); offsetGroupBox->setLayout(formLayout);
......
...@@ -26,6 +26,8 @@ private: ...@@ -26,6 +26,8 @@ private:
QDoubleSpinBox* mXOffsetSpinBox; QDoubleSpinBox* mXOffsetSpinBox;
QDoubleSpinBox* mYOffsetSpinBox; QDoubleSpinBox* mYOffsetSpinBox;
QDoubleSpinBox* mZOffsetSpinBox; QDoubleSpinBox* mZOffsetSpinBox;
QDoubleSpinBox* mRollOffsetSpinBox;
QDoubleSpinBox* mPitchOffsetSpinBox;
QDoubleSpinBox* mYawOffsetSpinBox; QDoubleSpinBox* mYawOffsetSpinBox;
}; };
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment