VR-Forces 4.3.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Unit Status Widget Logic

The class DtUnitStatusLogic class is repsonsible for displaying information about the currently selected entity


Header file:

/*******************************************************************************
** Copyright (c) 2011 MAK Technologies, Inc.
** All rights reserved.
*******************************************************************************/
//\file DtUnitStatusLogic.h
//\brief Contains makVrfUnitStatusExample::DtUnitStatusLogic class.
namespace makVrv
{
class DtDe;
class DtWindowEllipseAgent;
}
namespace makVrfUnitStatusExample
{
class DtUnitStatusInterface;
class CircleVisualHandler;
class DtUnitStatusLogic
{
public:
//\brief Constructor (protected - use ::create() )
DtUnitStatusLogic(makVrv::DtDe& de, DtUnitStatusInterface* iFace );
//\brief virtual DTOR
virtual ~DtUnitStatusLogic();
protected:
virtual void resetUpdateRate();
virtual void updateLocation(const DtVector&);
virtual void updateVelocity(const DtVector& v);
virtual void updateAcceleration(const DtVector& a);
virtual void updateOrientation(const DtTaitBryan& o);
virtual CircleVisualHandler * createCircleVisualizer();
protected:
DtUnitStatusInterface* myInterface;
CircleVisualHandler * myCircleVisualizer;
};
}

Implementation:

/*******************************************************************************
** Copyright (c) 2011 MAK Technologies, Inc.
** All rights reserved.
*******************************************************************************/
//\file DtUnitStatusLogic.cxx
//\brief Contains DtUnitStatusLogic class.
//VR-Vantage includes
#include <vrvCore/DtWindowEllipseAgent.hpp>
//VR-Link includes
#include <vlpi/appearance.h>
#include <vlpi/entityType.h>
//Qt includes
#include <QtGui/QPixmap>
//std includes
#include <stdio.h>
using namespace makVrv;
using namespace makVrf;
namespace makVrfUnitStatusExample
{
DtUnitStatusLogic::DtUnitStatusLogic(DtDe& de, DtUnitStatusInterface* iFace )
: myDe(de)
, myInterface(iFace)
, mySimEntry(0)
, myIsDestroyed(false)
, myCircleVisualizer(0)
{
DtSelectionManager::instance(de).signal_currentSelectionChanged.connect(boost::bind(
&DtUnitStatusLogic::slot_onCurrentSelectionChanged, this, _1, _2));
DtDisplayUnitsSettingsSignaler::instance(myDe.mainEventQueue());
signaler.signal_displayUnitChanged.connect(
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
}
DtUnitStatusLogic::~DtUnitStatusLogic()
{
DtSelectionManager::instance(myDe).signal_currentSelectionChanged.disconnect(boost::bind(
&DtUnitStatusLogic::slot_onCurrentSelectionChanged, this, _1, _2));
DtDisplayUnitsSettingsSignaler::instance(myDe.mainEventQueue());
signaler.signal_displayUnitChanged.disconnect(
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
signaler.signal_displayUnitDecimalsChanged.disconnect(
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
boost::bind(&DtUnitStatusLogic::displayUnitSettingsChanged, this));
if ( myCircleVisualizer )
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
}
resetUpdateRate();
}
void DtUnitStatusLogic::slot_onCurrentSelectionChanged(
const DtSelectionManager::IdSet& selected,
const DtSelectionManager::IdSet& deselected)
{
delete myCircleVisualizer;
myCircleVisualizer = 0;
if (!selected.size())
{
resetUpdateRate();
mySimEntry = 0;
myKey = "";
myInterface->clear();
}
else
{
DtSelectionManager::IdSet::const_iterator iter = selected.begin();
DtVrfStateViewCollectionManager& manager = DtVrfStateViewCollectionManager::instance(myDe);
DtUniqueID id = manager.simIdFromDisplayId(*iter);
DtSimEntry* entry = myDe.dataBank().simData().findSimEntry(id);
if (!entry)
{
myInterface->clear();
resetUpdateRate();
}
else
{
resetUpdateRate();
myKey = "";
if (stateView)
{
entry->setUpdateRate(DtSimEntryUpdater::At2Hz, stateView);
stateView->signal_stateViewUpdated.connect(boost::bind(&DtUnitStatusLogic::slot_onStateViewUpdated, this, _1));
mySimEntry = entry;
}
else
{
myInterface->clear();
}
}
}
}
bool DtUnitStatusLogic::isDestroyed(DtStateView<DtVrlinkSimulatedEntityState>* s) const
{
DtAppearance app(DtEntityType(view->myEntityType.c_str()));
app.setAppearance(view->myAppearance);
return (app.damageState() == DtDamageDestroyed);
}
void DtUnitStatusLogic::slot_onStateViewUpdated(DtStateView<DtVrlinkSimulatedEntityState>* s)
{
if (myDe.destructing())
{
return;
}
DtEntityType type(s->state().myEntityType.c_str());
DtEntityMapperKey key(s->state().myForce, type.kind(), type.domain(), type.country(), type.category(),
type.subCategory(), type.specific(), type.extra());
bool destroyed = isDestroyed(s);
if ((key.string() != myKey.string()) || (myIsDestroyed != destroyed))
{
myKey = key;
myIsDestroyed = destroyed;
QPixmap pmap = DtVrfGuiSymbolMapper::instance(myDe).getIcon(myKey, myIsDestroyed);
myInterface->setIcon(pmap);
}
myInterface->setUnitName(s->state().myMarkingText);
if ( !myCircleVisualizer )
{
myCircleVisualizer = createCircleVisualizer();
myCircleVisualizer->init();
}
updateMarkingText(s);
updateLocation(s->state().myLocation);
updateVelocity(s->state().myVelocity);
updateAcceleration(s->state().myAcceleration);
updateOrientation(s->state().myOrientation);
}
void DtUnitStatusLogic::updateMarkingText(DtStateView<DtVrlinkSimulatedEntityState>* s)
{
DtVrfStateViewCollectionManager::instance(myDe).objectDataStateViewCollection()->findStateView(s->id()));
if (stateView)
{
myInterface->setMarkingText(stateView->state().myEchelonIdString.c_str());
}
}
void DtUnitStatusLogic::updateVelocity(const DtVector& v)
{
QString velocity = DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertVelocityUnitNativeToDisplayString(v).c_str();
myInterface->setVelocity(velocity);
}
void DtUnitStatusLogic::updateAcceleration(const DtVector& a)
{
QString acceleration = DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertAccelerationUnitNativeToDisplayString(a).c_str();
myInterface->setAcceleration(acceleration);
}
void DtUnitStatusLogic::updateOrientation(const DtTaitBryan& o)
{
std::vector<std::string> strings =
DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertOrientationUnitNativeToDisplayStrings(o);
QString orientation = strings[0].c_str();
orientation += ", ";
orientation += strings[1].c_str();
orientation += ", ";
orientation += strings[2].c_str();
myInterface->setHeading(orientation);
}
void DtUnitStatusLogic::updateLocation(const DtVector& geoc)
{
//Draw circle
if ( myCircleVisualizer )
{
myCircleVisualizer->update(geoc);
}
myInterface->setLocation(DtDisplayUnitsSettingsManager::instance(myDe).converter().
convertPositionToStringList(geoc));
}
void DtUnitStatusLogic::resetUpdateRate()
{
DtVrfStateViewCollectionManager& manager = DtVrfStateViewCollectionManager::instance(myDe);
if (mySimEntry)
{
manager.simulatedEntityStateViewCollection()->findStateView(mySimEntry->id()));
if (stateView)
{
mySimEntry->setUpdateRate(DtSimEntryUpdater::NoUpdates, stateView);
stateView->signal_stateViewUpdated.disconnect(boost::bind(&DtUnitStatusLogic::slot_onStateViewUpdated, this, _1));
}
}
}
void DtUnitStatusLogic::displayUnitSettingsChanged()
{
DtVrfStateViewCollectionManager::instance(myDe);
if (mySimEntry)
{
manager.simulatedEntityStateViewCollection()->findStateView(mySimEntry->id()));
slot_onStateViewUpdated(stateView);
}
}
CircleVisualHandler * DtUnitStatusLogic::createCircleVisualizer()
{
//Now we need to create a visualizer handler to represent the visual object in the scene
//This is where you add things you'd like to be drawn in the scene,ie on the GUI
CircleVisualHandler * visualHandler = new CircleVisualHandler(myDe, myDe.agentManager().createNewUniqueId());
return visualHandler;
}
}

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)