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

#include <PathCanvasVisualizerBase.h>

Inheritance diagram for inet::visualizer::PathCanvasVisualizerBase:
inet::visualizer::PathVisualizerBase inet::visualizer::VisualizerBase inet::visualizer::NetworkRouteCanvasVisualizer inet::visualizer::PacketFlowCanvasVisualizer inet::visualizer::TransportRouteCanvasVisualizer

Classes

class  PathCanvasVisualization
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual const PathVisualizationcreatePathVisualization (const char *label, const std::vector< int > &path, cPacket *packet) const override
 
virtual void addPathVisualization (const PathVisualization *pathVisualization) override
 
virtual void removePathVisualization (const PathVisualization *pathVisualization) override
 
virtual void setAlpha (const PathVisualization *pathVisualization, double alpha) const override
 
virtual void refreshPathVisualization (const PathVisualization *pathVisualization, cPacket *packet) override
 
- Protected Member Functions inherited from inet::visualizer::PathVisualizerBase
virtual void handleParameterChange (const char *name) override
 
virtual void preDelete (cComponent *root) override
 
virtual void subscribe ()
 
virtual void unsubscribe ()
 
virtual bool isPathStart (cModule *module) const =0
 
virtual bool isPathEnd (cModule *module) const =0
 
virtual bool isPathElement (cModule *module) const =0
 
virtual void processPathStart (cModule *networkNode, const char *label, Packet *packet)
 
virtual void processPathElement (cModule *networkNode, const char *label, Packet *packet)
 
virtual void processPathEnd (cModule *networkNode, const char *label, Packet *packet)
 
virtual const PathVisualizationgetPathVisualization (const std::vector< int > &path)
 
virtual void removeAllPathVisualizations ()
 
virtual const std::vector< int > * getIncompletePath (const std::string &label, int chunkId)
 
virtual void addToIncompletePath (const std::string &label, int chunkId, cModule *module)
 
virtual void removeIncompletePath (const std::string &label, int chunkId)
 
virtual std::string getPathVisualizationText (const PathVisualization *pathVisualization, cPacket *packet) const
 
- 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
 
cGroupFigure * pathGroup = nullptr
 
- Protected Attributes inherited from inet::visualizer::PathVisualizerBase
bool displayRoutes = false
 
NetworkNodeFilter nodeFilter
 
PacketFilter packetFilter
 
ColorSet lineColorSet
 
cFigure::LineStyle lineStyle
 
double lineWidth = NaN
 
bool lineSmooth = false
 
double lineShift = NaN
 
const char * lineShiftMode = nullptr
 
double lineContactSpacing = NaN
 
const char * lineContactMode = nullptr
 
StringFormat labelFormat
 
cFigure::Font labelFont
 
const char * labelColorAsString = nullptr
 
cFigure::Color labelColor
 
const char * fadeOutMode = nullptr
 
double fadeOutTime = NaN
 
double fadeOutAnimationSpeed = NaN
 
simsignal_t startPathSignal = -1
 
simsignal_t extendPathSignal = -1
 
simsignal_t endPathSignal = -1
 
LineManagerlineManager = nullptr
 
std::map< std::pair< std::string, int >, std::vector< int > > incompletePaths
 Maps path label and chunk id to module id vector. More...
 
std::map< int, int > numPaths
 Maps nodes to the number of paths that go through it. More...
 
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
 Maps source/destination modules to multiple paths between them. More...
 
- 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::PathVisualizerBase
virtual void receiveSignal (cComponent *source, simsignal_t signal, cObject *object, cObject *details) override
 

Member Function Documentation

◆ addPathVisualization()

void inet::visualizer::PathCanvasVisualizerBase::addPathVisualization ( const PathVisualization pathVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::PathVisualizerBase.

151 {
152  PathVisualizerBase::addPathVisualization(pathVisualization);
153  auto pathCanvasVisualization = static_cast<const PathCanvasVisualization *>(pathVisualization);
154  lineManager->addModulePath(pathVisualization);
155  pathGroup->addFigure(pathCanvasVisualization->figure);
156 }

◆ createPathVisualization()

const PathVisualizerBase::PathVisualization * inet::visualizer::PathCanvasVisualizerBase::createPathVisualization ( const char *  label,
const std::vector< int > &  path,
cPacket *  packet 
) const
overrideprotectedvirtual

Implements inet::visualizer::PathVisualizerBase.

Reimplemented in inet::visualizer::PacketFlowCanvasVisualizer, inet::visualizer::NetworkRouteCanvasVisualizer, and inet::visualizer::TransportRouteCanvasVisualizer.

135 {
136  auto figure = new LabeledPolylineFigure("path");
137  auto polylineFigure = figure->getPolylineFigure();
138  polylineFigure->setSmooth(lineSmooth);
139  polylineFigure->setLineWidth(lineWidth);
140  polylineFigure->setLineStyle(lineStyle);
141  polylineFigure->setEndArrowhead(cFigure::ARROW_BARBED);
142  auto lineColor = lineColorSet.getColor(pathVisualizations.size());
143  polylineFigure->setLineColor(lineColor);
144  auto labelFigure = figure->getLabelFigure();
145  labelFigure->setFont(labelFont);
146  labelFigure->setColor(opp_isempty(labelColorAsString) ? lineColor : labelColor);
147  return new PathCanvasVisualization(label, path, figure);
148 }

Referenced by inet::visualizer::NetworkRouteCanvasVisualizer::createPathVisualization(), inet::visualizer::TransportRouteCanvasVisualizer::createPathVisualization(), and inet::visualizer::PacketFlowCanvasVisualizer::createPathVisualization().

◆ initialize()

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

Reimplemented from inet::visualizer::PathVisualizerBase.

65 {
67  if (!hasGUI()) return;
68  if (stage == INITSTAGE_LOCAL) {
69  zIndex = par("zIndex");
70  auto canvas = visualizationTargetModule->getCanvas();
73  pathGroup = new cGroupFigure("paths");
74  pathGroup->setZIndex(zIndex);
75  canvas->addFigure(pathGroup);
76  }
77 }

◆ refreshDisplay()

void inet::visualizer::PathCanvasVisualizerBase::refreshDisplay ( ) const
overrideprotectedvirtual

Reimplemented from inet::visualizer::PathVisualizerBase.

80 {
82  auto simulation = getSimulation();
83  for (auto it : pathVisualizations) {
84  auto pathVisualization = it.second;
85  auto pathCanvasVisualization = static_cast<const PathCanvasVisualization *>(pathVisualization);
86  auto moduleIds = pathCanvasVisualization->moduleIds;
87  std::vector<LineSegment> segments;
88  for (size_t index = 1; index < moduleIds.size(); index++) {
89  auto fromModuleId = moduleIds[index - 1];
90  auto toModuleId = moduleIds[index];
91  auto fromModule = simulation->getModule(fromModuleId);
92  auto toModule = simulation->getModule(toModuleId);
93  auto fromPosition = getContactPosition(fromModule, getPosition(toModule), lineContactMode, lineContactSpacing);
94  auto toPosition = getContactPosition(toModule, getPosition(fromModule), lineContactMode, lineContactSpacing);
95  auto shift = lineManager->getLineShift(fromModuleId, toModuleId, fromPosition, toPosition, lineShiftMode, pathVisualization->shiftOffsets[index - 1]) * lineShift;
96  segments.push_back(LineSegment(fromPosition + shift, toPosition + shift));
97  }
98  std::vector<cFigure::Point> points;
99  for (size_t index = 0; index < segments.size(); index++) {
100  if (index == 0)
101  points.push_back(canvasProjection->computeCanvasPoint(segments[index].getPoint1()));
102  if (index > 0) {
103  auto& segment1 = segments[index - 1];
104  auto& segment2 = segments[index];
105  Coord intersection = intersectLines(segment1, segment2);
106  if (std::isfinite(intersection.x) && std::isfinite(intersection.y)) {
107  if (isPointOnSegment(segment1, intersection) && isPointOnSegment(segment2, intersection))
108  points.push_back(canvasProjection->computeCanvasPoint(intersection));
109  else {
110  double distance = segment1.getPoint2().distance(segment2.getPoint1());
111  double distance1 = intersection.distance(segment1.getPoint2());
112  double distance2 = intersection.distance(segment2.getPoint1());
113  if (distance1 + distance2 < 4 * distance)
114  points.push_back(canvasProjection->computeCanvasPoint(intersection));
115  else {
116  points.push_back(canvasProjection->computeCanvasPoint(segment1.getPoint2()));
117  points.push_back(canvasProjection->computeCanvasPoint(segment2.getPoint1()));
118  }
119  }
120  }
121  else {
122  points.push_back(canvasProjection->computeCanvasPoint(segment1.getPoint2()));
123  points.push_back(canvasProjection->computeCanvasPoint(segment2.getPoint1()));
124  }
125  }
126  if (index == segments.size() - 1)
127  points.push_back(canvasProjection->computeCanvasPoint(segments[index].getPoint2()));
128  }
129  pathCanvasVisualization->figure->setPoints(points);
130  }
131  visualizationTargetModule->getCanvas()->setAnimationSpeed(pathVisualizations.empty() ? 0 : fadeOutAnimationSpeed, this);
132 }

◆ refreshPathVisualization()

void inet::visualizer::PathCanvasVisualizerBase::refreshPathVisualization ( const PathVisualization pathVisualization,
cPacket *  packet 
)
overrideprotectedvirtual

Reimplemented from inet::visualizer::PathVisualizerBase.

173 {
174  PathVisualizerBase::refreshPathVisualization(pathVisualization, packet);
175  auto pathCanvasVisualization = static_cast<const PathCanvasVisualization *>(pathVisualization);
176  auto text = getPathVisualizationText(pathVisualization, packet);
177  pathCanvasVisualization->figure->getLabelFigure()->setText(text.c_str());
178 }

◆ removePathVisualization()

void inet::visualizer::PathCanvasVisualizerBase::removePathVisualization ( const PathVisualization pathVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::PathVisualizerBase.

159 {
161  auto pathCanvasVisualization = static_cast<const PathCanvasVisualization *>(pathVisualization);
162  lineManager->removeModulePath(pathVisualization);
163  pathGroup->removeFigure(pathCanvasVisualization->figure);
164 }

◆ setAlpha()

void inet::visualizer::PathCanvasVisualizerBase::setAlpha ( const PathVisualization pathVisualization,
double  alpha 
) const
overrideprotectedvirtual

Implements inet::visualizer::PathVisualizerBase.

167 {
168  auto pathCanvasVisualization = static_cast<const PathCanvasVisualization *>(path);
169  pathCanvasVisualization->figure->getPolylineFigure()->setLineOpacity(alpha);
170 }

Member Data Documentation

◆ canvasProjection

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

Referenced by initialize(), and refreshDisplay().

◆ pathGroup

cGroupFigure* inet::visualizer::PathCanvasVisualizerBase::pathGroup = nullptr
protected

◆ zIndex

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

Referenced by initialize().


The documentation for this class was generated from the following files:
inet::visualizer::PathVisualizerBase::lineContactMode
const char * lineContactMode
Definition: PathVisualizerBase.h:64
inet::visualizer::PathVisualizerBase::removePathVisualization
virtual void removePathVisualization(const PathVisualization *pathVisualization)
Definition: PathVisualizerBase.cc:176
inet::visualizer::LineManager::removeModulePath
void removeModulePath(const ModulePath *modulePath)
Definition: LineManager.cc:94
inet::CanvasProjection::getCanvasProjection
static CanvasProjection * getCanvasProjection(const cCanvas *canvas)
Definition: CanvasProjection.cc:53
inet::visualizer::PathVisualizerBase::fadeOutAnimationSpeed
double fadeOutAnimationSpeed
Definition: PathVisualizerBase.h:71
inet::visualizer::PathVisualizerBase::refreshDisplay
virtual void refreshDisplay() const override
Definition: PathVisualizerBase.cc:103
inet::visualizer::PathVisualizerBase::getPathVisualizationText
virtual std::string getPathVisualizationText(const PathVisualization *pathVisualization, cPacket *packet) const
Definition: PathVisualizerBase.cc:149
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
inet::visualizer::PathVisualizerBase::labelColor
cFigure::Color labelColor
Definition: PathVisualizerBase.h:68
inet::visualizer::LineManager::addModulePath
void addModulePath(const ModulePath *modulePath)
Definition: LineManager.cc:83
inet::visualizer::LineManager::getLineShift
Coord getLineShift(int sourceModuleId, int destinationModuleId, const Coord &sourcePosition, const Coord &destinationPosition, const char *shiftMode, int shiftOffset)
Definition: LineManager.cc:105
inet::visualizer::LineManager::getCanvasLineManager
static LineManager * getCanvasLineManager(const cCanvas *canvas)
Definition: LineManager.cc:19
inet::visualizer::VisualizerBase::getContactPosition
virtual Coord getContactPosition(const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
Definition: VisualizerBase.cc:51
inet::visualizer::PathVisualizerBase::addPathVisualization
virtual void addPathVisualization(const PathVisualization *pathVisualization)
Definition: PathVisualizerBase.cc:170
inet::visualizer::PathVisualizerBase::lineStyle
cFigure::LineStyle lineStyle
Definition: PathVisualizerBase.h:58
inet::visualizer::PathVisualizerBase::lineShift
double lineShift
Definition: PathVisualizerBase.h:61
inet::visualizer::VisualizerBase::getPosition
virtual Coord getPosition(const cModule *networkNode) const
Definition: VisualizerBase.cc: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::PathVisualizerBase::lineShiftMode
const char * lineShiftMode
Definition: PathVisualizerBase.h:62
inet::visualizer::PathVisualizerBase::lineColorSet
ColorSet lineColorSet
Definition: PathVisualizerBase.h:57
inet::visualizer::PathVisualizerBase::lineContactSpacing
double lineContactSpacing
Definition: PathVisualizerBase.h:63
inet::visualizer::PathCanvasVisualizerBase::canvasProjection
const CanvasProjection * canvasProjection
Definition: PathCanvasVisualizerBase.h:33
inet::visualizer::PathVisualizerBase::labelFont
cFigure::Font labelFont
Definition: PathVisualizerBase.h:66
inet::visualizer::PathVisualizerBase::lineSmooth
bool lineSmooth
Definition: PathVisualizerBase.h:60
inet::visualizer::PathCanvasVisualizerBase::pathGroup
cGroupFigure * pathGroup
Definition: PathCanvasVisualizerBase.h:34
inet::visualizer::PathVisualizerBase::refreshPathVisualization
virtual void refreshPathVisualization(const PathVisualization *pathVisualization, cPacket *packet)
Definition: PathVisualizerBase.cc:220
inet::units::constants::alpha
const value< double, units::unit > alpha(7.2973525376e-3)
inet::visualizer::PathVisualizerBase::lineWidth
double lineWidth
Definition: PathVisualizerBase.h:59
inet::visualizer::PathVisualizerBase::labelColorAsString
const char * labelColorAsString
Definition: PathVisualizerBase.h:67
inet::visualizer::PathVisualizerBase::initialize
virtual void initialize(int stage) override
Definition: PathVisualizerBase.cc:59
inet::visualizer::PathCanvasVisualizerBase::zIndex
double zIndex
Definition: PathCanvasVisualizerBase.h:32
inet::visualizer::PathVisualizerBase::pathVisualizations
std::multimap< std::pair< int, int >, const PathVisualization * > pathVisualizations
Maps source/destination modules to multiple paths between them.
Definition: PathVisualizerBase.h:89
inet::visualizer::PathVisualizerBase::lineManager
LineManager * lineManager
Definition: PathVisualizerBase.h:77
inet::visualizer::ColorSet::getColor
cFigure::Color getColor(int index) const
Definition: ColorSet.cc:33