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
virtual ~DtSetSpeedAndHeadingDialog() override;
//\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::set<makVrv::DtUniqueID>& data) override;
virtual void sendRequest() override;
protected:
virtual void setupGui(const std::set<makVrv::DtUniqueID>& data) override;
protected:
virtual void setupStatement(const DtSimStatement*) override;
public:
QWidget* myCanvas;
QGridLayout* myContentLayout;
};
class DtSetSpeedAndHeadingDialogCreator : public makVrf::DtVrfSetDialogCreator
{
public:
//Creates a TaskSetDialogInterface; called by DtVrfTaskSetDialogManager when set item is selected by user
virtual makVrf::DtTaskSetDialogInterface* create(makVrv::DtDe&, QWidget* parent) override;
virtual bool supportsType(makVrv::DtDe&, const DtSetMessageType&, const DtSimStatement*) const override;
};
}

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/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::set<makVrv::DtUniqueID>& data)
{
myCanvas = new QWidget(this);
myContentLayout = new QGridLayout(myCanvas);
myOrderedSpeed = dynamic_cast<DtRateEntryWidget*>
(DtVrfTaskSetVariableWidgetManager::instance(myDe).create(DtScriptedTaskRateVariable, myCanvas));
myOrderedSpeed->setLabel(tr("Speed"));
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::set<makVrv::DtUniqueID>& data)
{
DtBaseTaskSetDialogInterface::setupGui(data);
if (data.size() == 1)
{
DtSimObjectReference ref = DtVrfGuiSimObjectManager::instance(myDe).lookup(*data.begin());
if (ref.isValid())
{
setHeading(ref->topographicOrientation().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 Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)