VR-Forces 4.0.4 Class Documentation
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) 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;
      };
}


Implementation:

/******************************************************************************
** 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());
            }
         }
      }
   }
}

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)