INET Framework for OMNeT++/OMNEST
inet::visualizer::MobilityCanvasVisualizer Class Reference

#include <MobilityCanvasVisualizer.h>

Inheritance diagram for inet::visualizer::MobilityCanvasVisualizer:
inet::visualizer::MobilityVisualizerBase inet::visualizer::VisualizerBase

Classes

class  MobilityCanvasVisualization
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual MobilityVisualizationcreateMobilityVisualization (IMobility *mobility) override
 
virtual void addMobilityVisualization (const IMobility *mobility, MobilityVisualization *mobilityVisualization) override
 
virtual void removeMobilityVisualization (const MobilityVisualization *mobilityVisualization) override
 
virtual void extendMovementTrail (const IMobility *mobility, TrailFigure *trailFigure, cFigure::Point position) const
 
- Protected Member Functions inherited from inet::visualizer::MobilityVisualizerBase
virtual void handleParameterChange (const char *name) override
 
virtual void preDelete (cComponent *root) override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual MobilityVisualizationgetMobilityVisualization (const IMobility *mobility) const
 
virtual void removeAllMobilityVisualizations ()
 
- Protected Member Functions inherited from inet::visualizer::VisualizerBase
virtual int numInitStages () const override
 
virtual Coord getPosition (const cModule *networkNode) const
 
virtual Coord getContactPosition (const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
 
virtual Quaternion getOrientation (const cModule *networkNode) const
 
virtual void mapChunks (const Ptr< const Chunk > &chunk, const std::function< void(const Ptr< const Chunk > &, int)> &thunk) const
 

Protected Attributes

double zIndex = NaN
 
const CanvasProjectioncanvasProjection = nullptr
 
- Protected Attributes inherited from inet::visualizer::MobilityVisualizerBase
bool displayMobility = false
 
double animationSpeed = NaN
 
ModuleFilter moduleFilter
 
bool displayPositions = false
 
double positionCircleRadius = NaN
 
double positionCircleLineWidth = NaN
 
ColorSet positionCircleLineColorSet
 
ColorSet positionCircleFillColorSet
 
bool displayOrientations = false
 
double orientationPieRadius = NaN
 
double orientationPieSize = NaN
 
double orientationPieOpacity = NaN
 
cFigure::Color orientationLineColor
 
cFigure::LineStyle orientationLineStyle
 
double orientationLineWidth = NaN
 
cFigure::Color orientationFillColor
 
bool displayVelocities = false
 
double velocityArrowScale = NaN
 
cFigure::Color velocityLineColor
 
cFigure::LineStyle velocityLineStyle
 
double velocityLineWidth = NaN
 
bool displayMovementTrails = false
 
bool autoMovementTrailLineColor = false
 
ColorSet movementTrailLineColorSet
 
cFigure::LineStyle movementTrailLineStyle
 
double movementTrailLineWidth = NaN
 
int trailLength = -1
 
std::map< int, MobilityVisualization * > mobilityVisualizations
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Additional Inherited Members

- Public Member Functions inherited from inet::visualizer::MobilityVisualizerBase
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 

Member Function Documentation

◆ addMobilityVisualization()

void inet::visualizer::MobilityCanvasVisualizer::addMobilityVisualization ( const IMobility mobility,
MobilityVisualization mobilityVisualization 
)
overrideprotectedvirtual

Reimplemented from inet::visualizer::MobilityVisualizerBase.

78 {
79  MobilityVisualizerBase::addMobilityVisualization(mobility, mobilityVisualization);
80  auto mobilityCanvasVisualization = static_cast<MobilityCanvasVisualization *>(mobilityVisualization);
81  auto canvas = visualizationTargetModule->getCanvas();
82  if (displayPositions)
83  canvas->addFigure(mobilityCanvasVisualization->positionFigure);
85  canvas->addFigure(mobilityCanvasVisualization->orientationFigure);
87  canvas->addFigure(mobilityCanvasVisualization->velocityFigure);
89  canvas->addFigure(mobilityCanvasVisualization->trailFigure);
90 }

◆ createMobilityVisualization()

MobilityCanvasVisualizer::MobilityVisualization * inet::visualizer::MobilityCanvasVisualizer::createMobilityVisualization ( IMobility mobility)
overrideprotectedvirtual

Implements inet::visualizer::MobilityVisualizerBase.

108 {
109  auto module = const_cast<cModule *>(check_and_cast<const cModule *>(mobility));
110  cOvalFigure *positionFigure = nullptr;
111  if (displayPositions) {
112  positionFigure = new cOvalFigure("position");
113  positionFigure->setTags((std::string("position ") + tags).c_str());
114  positionFigure->setTooltip("This circle represents the current position of the mobility model");
115  positionFigure->setZIndex(zIndex);
116  positionFigure->setLineColor(positionCircleLineColorSet.getColor(module->getId()));
117  positionFigure->setLineWidth(positionCircleLineWidth);
118  positionFigure->setFilled(true);
119  positionFigure->setFillColor(positionCircleFillColorSet.getColor(module->getId()));
120  }
121  cPieSliceFigure *orientationFigure = nullptr;
122  if (displayOrientations) {
123  orientationFigure = new cPieSliceFigure("orientation");
124  orientationFigure->setTags((std::string("orientation ") + tags).c_str());
125  orientationFigure->setTooltip("This arc represents the current orientation of the mobility model");
126  orientationFigure->setZIndex(zIndex);
127  orientationFigure->setLineOpacity(orientationPieOpacity);
128  orientationFigure->setLineColor(orientationLineColor);
129  orientationFigure->setLineStyle(orientationLineStyle);
130  orientationFigure->setLineWidth(orientationLineWidth);
131  orientationFigure->setFilled(true);
132  orientationFigure->setFillOpacity(orientationPieOpacity);
133  orientationFigure->setFillColor(orientationFillColor);
134  }
135  cLineFigure *velocityFigure = nullptr;
136  if (displayVelocities) {
137  velocityFigure = new cLineFigure("velocity");
138  velocityFigure->setTags((std::string("velocity ") + tags).c_str());
139  velocityFigure->setTooltip("This arrow represents the current velocity of the mobility model");
140  velocityFigure->setZIndex(zIndex);
141  velocityFigure->setVisible(false);
142  velocityFigure->setEndArrowhead(cFigure::ARROW_SIMPLE);
143  velocityFigure->setLineColor(velocityLineColor);
144  velocityFigure->setLineStyle(velocityLineStyle);
145  velocityFigure->setLineWidth(velocityLineWidth);
146  }
147  TrailFigure *trailFigure = nullptr;
148  if (displayMovementTrails) {
149  trailFigure = new TrailFigure(trailLength, true, "movement trail");
150  trailFigure->setTags((std::string("movement_trail recent_history ") + tags).c_str());
151  trailFigure->setZIndex(zIndex);
152  }
153  return new MobilityCanvasVisualization(positionFigure, orientationFigure, velocityFigure, trailFigure, mobility);
154 }

◆ extendMovementTrail()

void inet::visualizer::MobilityCanvasVisualizer::extendMovementTrail ( const IMobility mobility,
TrailFigure trailFigure,
cFigure::Point  position 
) const
protectedvirtual
157 {
158  cFigure::Point startPosition;
159  cFigure::Point endPosition = position;
160  if (trailFigure->getNumFigures() == 0)
161  startPosition = position;
162  else
163  startPosition = static_cast<cLineFigure *>(trailFigure->getFigure(trailFigure->getNumFigures() - 1))->getEnd();
164  double dx = startPosition.x - endPosition.x;
165  double dy = startPosition.y - endPosition.y;
166  // TODO 1?
167  if (trailFigure->getNumFigures() == 0 || dx * dx + dy * dy > 1) {
168  cLineFigure *movementLine = new cLineFigure("movementTrail");
169  movementLine->setTags((std::string("movement_trail recent_history ") + tags).c_str());
170  movementLine->setTooltip("This line represents the recent movement trail of the mobility model");
171  movementLine->setStart(startPosition);
172  movementLine->setEnd(endPosition);
173  auto module = const_cast<cModule *>(check_and_cast<const cModule *>(mobility));
174  movementLine->setLineColor(movementTrailLineColorSet.getColor(module->getId()));
175  movementLine->setLineStyle(movementTrailLineStyle);
176  movementLine->setLineWidth(movementTrailLineWidth);
177  movementLine->setZoomLineWidth(false);
178  trailFigure->addFigure(movementLine);
179  }
180 }

Referenced by refreshDisplay().

◆ initialize()

void inet::visualizer::MobilityCanvasVisualizer::initialize ( int  stage)
overrideprotectedvirtual

Reimplemented from inet::visualizer::MobilityVisualizerBase.

36 {
38  if (!hasGUI()) return;
39  if (stage == INITSTAGE_LOCAL) {
40  zIndex = par("zIndex");
42  }
43 }

◆ refreshDisplay()

void inet::visualizer::MobilityCanvasVisualizer::refreshDisplay ( ) const
overrideprotectedvirtual
46 {
47  MobilityVisualizerBase::refreshDisplay();
48  for (auto it : mobilityVisualizations) {
49  auto mobilityVisualization = static_cast<MobilityCanvasVisualization *>(it.second);
50  auto mobility = mobilityVisualization->mobility;
51  auto position = canvasProjection->computeCanvasPoint(mobility->getCurrentPosition());
52  auto orientation = mobility->getCurrentAngularPosition();
53  auto velocity = canvasProjection->computeCanvasPoint(mobility->getCurrentVelocity());
54  if (displayPositions) {
55  double radius = positionCircleRadius / getEnvir()->getZoomLevel(visualizationTargetModule);
56  mobilityVisualization->positionFigure->setBounds(cFigure::Rectangle(position.x - radius, position.y - radius, 2 * radius, 2 * radius));
57  }
58  if (displayOrientations) {
59  // NOTE: this negation cancels out the (incorrect) CCW angle handling of cPieSliceFigure (see bug https://dev.omnetpp.org/bugs/view.php?id=1030)
60  auto angle = -orientation.toEulerAngles().alpha;
61  mobilityVisualization->orientationFigure->setStartAngle(rad(angle - rad(M_PI) * orientationPieSize).get());
62  mobilityVisualization->orientationFigure->setEndAngle(rad(angle + rad(M_PI) * orientationPieSize).get());
63  double radius = orientationPieRadius / getEnvir()->getZoomLevel(visualizationTargetModule);
64  mobilityVisualization->orientationFigure->setBounds(cFigure::Rectangle(position.x - radius, position.y - radius, 2 * radius, 2 * radius));
65  }
66  if (displayVelocities) {
67  mobilityVisualization->velocityFigure->setStart(position);
68  mobilityVisualization->velocityFigure->setEnd(position + velocity * velocityArrowScale);
69  mobilityVisualization->velocityFigure->setVisible(velocity.getLength() != 0);
70  }
72  extendMovementTrail(mobility, mobilityVisualization->trailFigure, position);
73  }
74  visualizationTargetModule->getCanvas()->setAnimationSpeed(mobilityVisualizations.empty() ? 0 : animationSpeed, this);
75 }

◆ removeMobilityVisualization()

void inet::visualizer::MobilityCanvasVisualizer::removeMobilityVisualization ( const MobilityVisualization mobilityVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::MobilityVisualizerBase.

93 {
94  auto canvas = visualizationTargetModule->getCanvas();
95  auto mobilityCanvasVisualization = static_cast<const MobilityCanvasVisualization *>(mobilityVisualization);
96  if (displayPositions)
97  canvas->removeFigure(mobilityCanvasVisualization->positionFigure);
99  canvas->removeFigure(mobilityCanvasVisualization->orientationFigure);
100  if (displayVelocities)
101  canvas->removeFigure(mobilityCanvasVisualization->velocityFigure);
103  canvas->removeFigure(mobilityCanvasVisualization->trailFigure);
105 }

Member Data Documentation

◆ canvasProjection

const CanvasProjection* inet::visualizer::MobilityCanvasVisualizer::canvasProjection = nullptr
protected

Referenced by initialize(), and refreshDisplay().

◆ zIndex

double inet::visualizer::MobilityCanvasVisualizer::zIndex = NaN
protected

The documentation for this class was generated from the following files:
inet::visualizer::MobilityVisualizerBase::displayVelocities
bool displayVelocities
Definition: MobilityVisualizerBase.h:54
inet::visualizer::MobilityVisualizerBase::orientationLineColor
cFigure::Color orientationLineColor
Definition: MobilityVisualizerBase.h:49
inet::CanvasProjection::getCanvasProjection
static CanvasProjection * getCanvasProjection(const cCanvas *canvas)
Definition: CanvasProjection.cc:53
inet::visualizer::MobilityCanvasVisualizer::zIndex
double zIndex
Definition: MobilityCanvasVisualizer.h:35
inet::visualizer::MobilityVisualizerBase::trailLength
int trailLength
Definition: MobilityVisualizerBase.h:65
inet::visualizer::MobilityCanvasVisualizer::extendMovementTrail
virtual void extendMovementTrail(const IMobility *mobility, TrailFigure *trailFigure, cFigure::Point position) const
Definition: MobilityCanvasVisualizer.cc:156
inet::visualizer::MobilityCanvasVisualizer::canvasProjection
const CanvasProjection * canvasProjection
Definition: MobilityCanvasVisualizer.h:36
inet::visualizer::MobilityVisualizerBase::initialize
virtual void initialize(int stage) override
Definition: MobilityVisualizerBase.cc:29
inet::visualizer::MobilityVisualizerBase::velocityLineStyle
cFigure::LineStyle velocityLineStyle
Definition: MobilityVisualizerBase.h:57
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
inet::visualizer::MobilityVisualizerBase::velocityLineColor
cFigure::Color velocityLineColor
Definition: MobilityVisualizerBase.h:56
inet::visualizer::MobilityVisualizerBase::movementTrailLineColorSet
ColorSet movementTrailLineColorSet
Definition: MobilityVisualizerBase.h:62
inet::visualizer::MobilityVisualizerBase::orientationLineStyle
cFigure::LineStyle orientationLineStyle
Definition: MobilityVisualizerBase.h:50
inet::visualizer::MobilityVisualizerBase::orientationFillColor
cFigure::Color orientationFillColor
Definition: MobilityVisualizerBase.h:52
inet::visualizer::MobilityVisualizerBase::mobilityVisualizations
std::map< int, MobilityVisualization * > mobilityVisualizations
Definition: MobilityVisualizerBase.h:68
inet::visualizer::MobilityVisualizerBase::movementTrailLineStyle
cFigure::LineStyle movementTrailLineStyle
Definition: MobilityVisualizerBase.h:63
inet::visualizer::MobilityVisualizerBase::orientationPieRadius
double orientationPieRadius
Definition: MobilityVisualizerBase.h:46
inet::visualizer::MobilityVisualizerBase::orientationLineWidth
double orientationLineWidth
Definition: MobilityVisualizerBase.h:51
inet::visualizer::MobilityVisualizerBase::displayPositions
bool displayPositions
Definition: MobilityVisualizerBase.h:39
inet::CanvasProjection::computeCanvasPoint
cFigure::Point computeCanvasPoint(const Coord &point) const
Definition: CanvasProjection.cc:34
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::visualizer::MobilityVisualizerBase::positionCircleLineColorSet
ColorSet positionCircleLineColorSet
Definition: MobilityVisualizerBase.h:42
inet::visualizer::MobilityVisualizerBase::positionCircleLineWidth
double positionCircleLineWidth
Definition: MobilityVisualizerBase.h:41
inet::visualizer::MobilityVisualizerBase::displayOrientations
bool displayOrientations
Definition: MobilityVisualizerBase.h:45
inet::visualizer::MobilityVisualizerBase::positionCircleRadius
double positionCircleRadius
Definition: MobilityVisualizerBase.h:40
inet::visualizer::MobilityVisualizerBase::movementTrailLineWidth
double movementTrailLineWidth
Definition: MobilityVisualizerBase.h:64
inet::visualizer::MobilityVisualizerBase::addMobilityVisualization
virtual void addMobilityVisualization(const IMobility *mobility, MobilityVisualization *mobilityVisualization)
Definition: MobilityVisualizerBase.cc:101
inet::visualizer::MobilityVisualizerBase::displayMovementTrails
bool displayMovementTrails
Definition: MobilityVisualizerBase.h:60
inet::visualizer::MobilityVisualizerBase::removeMobilityVisualization
virtual void removeMobilityVisualization(const MobilityVisualization *visualization)
Definition: MobilityVisualizerBase.cc:106
inet::visualizer::MobilityVisualizerBase::velocityLineWidth
double velocityLineWidth
Definition: MobilityVisualizerBase.h:58
inet::visualizer::MobilityVisualizerBase::velocityArrowScale
double velocityArrowScale
Definition: MobilityVisualizerBase.h:55
inet::visualizer::MobilityVisualizerBase::animationSpeed
double animationSpeed
Definition: MobilityVisualizerBase.h:36
inet::visualizer::VisualizerBase::tags
const char * tags
Definition: VisualizerBase.h:27
inet::visualizer::MobilityVisualizerBase::orientationPieSize
double orientationPieSize
Definition: MobilityVisualizerBase.h:47
inet::visualizer::MobilityVisualizerBase::positionCircleFillColorSet
ColorSet positionCircleFillColorSet
Definition: MobilityVisualizerBase.h:43
inet::visualizer::MobilityVisualizerBase::orientationPieOpacity
double orientationPieOpacity
Definition: MobilityVisualizerBase.h:48
inet::units::values::rad
value< double, units::rad > rad
Definition: Units.h:1245
M_PI
#define M_PI
Definition: INETMath.h:52
inet::visualizer::ColorSet::getColor
cFigure::Color getColor(int index) const
Definition: ColorSet.cc:33