Commit 08f8dfb8 authored by hengli's avatar hengli

Added additional roll/pitch parameters to terrain offset dialog.

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