![]() |
VR-Forces 4.0.4 Class Documentation
|
The DtSetSpeedAndHeadingDialog is a Qt Widget-derived object that defines a dialog box. This dialog box allows the user to enter in the heading and speed of the selected objects.
/****************************************************************************** ** Copyright (c) 2008 MAK Technologies, Inc. ** All rights reserved. ******************************************************************************/ /****************************************************************************** ** $RCSfile: DtSetSpeedAndHeadingDialog.h,v $ $Revision: 1.3 $ $State: Exp $ ******************************************************************************/ //\file DtSetSpeedAndHeadingDialog.h //\brief Contains DtSetSpeedAndHeadingDialog class. #pragma once #include <vrfGuiCoreQt/DtBaseTaskSetDialogInterface.h> class QLabel; class QGridLayout; class QLineEdit; class QDoubleValidator; namespace vrfAddSetExample { class DtSetSpeedAndHeadingDialog : public makVrf::DtBaseTaskSetDialogInterface { public: //CTOR DtSetSpeedAndHeadingDialog(makVrv::DtDe& de, QWidget* parent, const Qt::WindowFlags& flags = 0); //DTOR virtual ~DtSetSpeedAndHeadingDialog(); //\brief Returns value in degrees virtual double heading() const; //\brief Expects value in degrees virtual void setHeading(double); //\brief Returns value in meters / second virtual double speed() const; //\brief Expects value in meters / second virtual void setSpeed(double); protected: virtual QWidget* contents(const std::vector<makVrv::DtSimEntry*>& data); virtual void sendRequest(); protected: virtual void setupGui(const std::vector<makVrv::DtSimEntry*>& data); protected: virtual void setupStatement(const DtSimStatement*); public: QWidget* myCanvas; QGridLayout* myContentLayout; QLineEdit* myOrderedSpeed; QLabel* myOrderedSpeedLabel; QLineEdit* myHeading; QLabel* myHeadingLabel; QDoubleValidator* myValidator; }; class DtSetSpeedAndHeadingDialogCreator : public makVrf::DtVrfTaskSetDialogCreator { public: //Creates a TaskSetDialogInterface; called by DtVrfTaskSetDialogManager when set item is selected by user virtual makVrf::DtTaskSetDialogInterface* create(makVrv::DtDe&, QWidget* parent); bool supportsType(int, const DtSimStatement*) const; }; }
/****************************************************************************** ** Copyright (c) 2009 MAK Technologies, Inc. ** All rights reserved. ******************************************************************************/ /****************************************************************************** ** $RCSfile: DtSetSpeedAndHeadingDialog.cxx,v $ $Revision: 1.2 $ $State: Exp $ ******************************************************************************/ //\file DtSetSpeedAndHeadingDialog.cxx //\brief Contains DtSetSpeedAndHeadingDialog set #include "DtSetSpeedAndHeadingDialog.h" #include <vrfGuiCore/DtVrfStateViewCollectionManager.h> #include <QtGui/QLineEdit> #include <QtGui/QLabel> #include <QtGui/QLayout> #include <QtGui/QValidator> #include <vrvCore/DtDe.h> #include <vrvCore/DtEntityState.h> #include <matrix/vlMath.h> #include <matrix/topoCoord.h> //VR-Forces includes #include "../addSetSim/setSpeedAndHeading.h" #include <vrfplan/setStmt.h> #include <vrfplan/simStmtTypes.h> #include <vrftasks/setDataReq.h> #include <boost/bind.hpp> using namespace makVrf; namespace vrfAddSetExample { DtSetSpeedAndHeadingDialog::DtSetSpeedAndHeadingDialog(makVrv::DtDe& de, QWidget* parent, const Qt::WindowFlags& flags) : DtBaseTaskSetDialogInterface(de, parent, flags) , myValidator(0) { setWindowTitle(tr("Speed And Heading")); } DtSetSpeedAndHeadingDialog::~DtSetSpeedAndHeadingDialog() { delete myValidator; } QWidget* DtSetSpeedAndHeadingDialog::contents(const std::vector<makVrv::DtSimEntry*>& data) { myCanvas = new QWidget(this); myContentLayout = new QGridLayout(myCanvas); myOrderedSpeedLabel = new QLabel(tr("Ordered Speed (m/s):"), myCanvas); myContentLayout->addWidget(myOrderedSpeedLabel, 0, 0); myOrderedSpeed = new QLineEdit(myCanvas); myOrderedSpeed->setText("0.00"); myValidator = new QDoubleValidator(myOrderedSpeed); myOrderedSpeed->setValidator(myValidator); myContentLayout->addWidget(myOrderedSpeed, 0, 1); myHeadingLabel = new QLabel(tr("Heading (deg.):"), myCanvas); myContentLayout->addWidget(myHeadingLabel, 1, 0); myHeading = new QLineEdit(myCanvas); myHeading->setText("0.00"); myValidator = new QDoubleValidator(myHeading); myHeading->setValidator(myValidator); myContentLayout->addWidget(myHeading, 1, 1); return myCanvas; } void DtSetSpeedAndHeadingDialog::setHeading(double d) { myHeading->setText(QString::number(d)); } double DtSetSpeedAndHeadingDialog::heading() const { return myHeading->text().toFloat(); } void DtSetSpeedAndHeadingDialog::setSpeed(double d) { myOrderedSpeed->setText(QString::number(d)); } double DtSetSpeedAndHeadingDialog::speed() const { return myOrderedSpeed->text().toFloat(); } DtTaskSetDialogInterface* DtSetSpeedAndHeadingDialogCreator::create(makVrv::DtDe& de, QWidget* parent) { return new DtSetSpeedAndHeadingDialog(de, parent, theTaskSetCreationFlags); } bool DtSetSpeedAndHeadingDialogCreator::supportsType(int t, const DtSimStatement*) const { return (DtSetSpeedAndHeadingRequest().type() == t); } void DtSetSpeedAndHeadingDialog::sendRequest() { DtSetSpeedAndHeadingRequest set; set.init(); set.setHeading(DtDeg2Rad(heading())); set.setSpeed(speed()); sendSetRequest(set); close(); } void DtSetSpeedAndHeadingDialog::setupGui(const std::vector<makVrv::DtSimEntry*>& data) { DtBaseTaskSetDialogInterface::setupGui(data); if (data.size() == 1) { makVrv::DtVrlinkSimulatedEntityState* state = findStateFor<makVrv::DtVrlinkSimulatedEntityState*>(data[0]); if (state) { DtGeodeticCoord geodetic; geodetic.setGeocentric(state->myLocation); DtCoordTransform geocToTopo; DtGeocToTopoTransform(geodetic.lat(), geodetic.lon(), &geocToTopo); //Compute heading, pitch, and roll. DtTaitBryan topoEuler; geocToTopo.eulerTrans(state->myOrientation, &topoEuler); setHeading(DtRad2Deg(topoEuler.psi())); } } } void DtSetSpeedAndHeadingDialog::setupStatement(const DtSimStatement* stmt) { if (stmt->type() == DtSetDataStatementType) { const DtSetDataRequestStmt* setStmt = dynamic_cast<const DtSetDataRequestStmt*>(stmt); if (setStmt && setStmt->setDataRequest()) { DtSetSpeedAndHeadingRequest* col = dynamic_cast<DtSetSpeedAndHeadingRequest*>(setStmt->setDataRequest()); if (col) { setHeading(DtRad2Deg(col->heading())); setSpeed(col->speed()); } } } } }