VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Heading and Speed Dialog

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.


Header file:

/******************************************************************************
** Copyright (c) 2014 MAK Technologies, Inc.
** All rights reserved.
******************************************************************************/
//\file DtSetSpeedAndHeadingDialog.h
//\brief Contains DtSetSpeedAndHeadingDialog class.
#pragma once
class QGridLayout;
namespace makVrf
{
class DtRateEntryWidget;
class DtAngleEntryWidget;
}
namespace vrfAddSetExample
{
class DtSetSpeedAndHeadingDialog : public makVrf::DtBaseTaskSetDialogInterface
{
public:
//CTOR
DtSetSpeedAndHeadingDialog(makVrv::DtDe& de, QWidget* parent, const Qt::WindowFlags& flags = 0);
//DTOR
//\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;
};
class DtSetSpeedAndHeadingDialogCreator : public makVrf::DtVrfSetDialogCreator
{
public:
//Creates a TaskSetDialogInterface; called by DtVrfTaskSetDialogManager when set item is selected by user
};
}

Implementation:

/******************************************************************************
** Copyright (c) 2014 MAK Technologies, Inc.
** All rights reserved.
******************************************************************************/
//\file DtSetSpeedAndHeadingDialog.cxx
//\brief Contains DtSetSpeedAndHeadingDialog set
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLayout>
#include <QtGui/QValidator>
#include <vrvCore/DtDe.h>
#include <matrix/vlMath.h>
#include <matrix/topoCoord.h>
//VR-Forces includes
#include "../addSetSim/setSpeedAndHeading.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)
{
setWindowTitle(tr("Speed And Heading"));
}
DtSetSpeedAndHeadingDialog::~DtSetSpeedAndHeadingDialog()
{
}
QWidget* DtSetSpeedAndHeadingDialog::contents(const std::vector<makVrv::DtSimEntry*>& data)
{
myCanvas = new QWidget(this);
myContentLayout = new QGridLayout(myCanvas);
myOrderedSpeed = dynamic_cast<DtRateEntryWidget*>
(DtVrfTaskSetVariableWidgetManager::instance(myDe).create(DtScriptedTaskRateVariable, myCanvas));
setSpeed(0.);
myContentLayout->addWidget(myOrderedSpeed->myLabel, 0, 0);
myContentLayout->addWidget(myOrderedSpeed->myValueCanvas, 0, 1, 1, 2);
myHeading = dynamic_cast<DtAngleEntryWidget*>
(DtVrfTaskSetVariableWidgetManager::instance(myDe).create(DtScriptedTaskHeadingVariable, myCanvas));
setHeading(0.);
myContentLayout->addWidget(myHeading->myLabel, 1, 0);
myContentLayout->addWidget(myHeading->myValueCanvas, 1, 1, 1, 2);
return myCanvas;
}
void DtSetSpeedAndHeadingDialog::setHeading(double d)
{
myHeading->setAngle(d);
}
double DtSetSpeedAndHeadingDialog::heading() const
{
return myHeading->angle();
}
void DtSetSpeedAndHeadingDialog::setSpeed(double d)
{
myOrderedSpeed->setRate(d);
}
double DtSetSpeedAndHeadingDialog::speed() const
{
return myOrderedSpeed->rate();
}
DtTaskSetDialogInterface* DtSetSpeedAndHeadingDialogCreator::create(makVrv::DtDe& de, QWidget* parent)
{
return new DtSetSpeedAndHeadingDialog(de, parent, theTaskSetCreationFlags);
}
bool DtSetSpeedAndHeadingDialogCreator::supportsType(makVrv::DtDe&, const DtSetMessageType& t, const DtSimStatement*) const
{
return (DtSetSpeedAndHeadingRequest().type() == t);
}
void DtSetSpeedAndHeadingDialog::sendRequest()
{
DtSetSpeedAndHeadingRequest set;
set.init();
set.setHeading(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(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(col->heading());
setSpeed(col->speed());
}
}
}
}
}

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)