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

#include <TreeCanvasVisualizerBase.h>

Inheritance diagram for inet::visualizer::TreeCanvasVisualizerBase:
inet::visualizer::TreeVisualizerBase inet::visualizer::VisualizerBase inet::visualizer::FailureProtectionConfigurationCanvasVisualizer inet::visualizer::StreamRedundancyConfigurationCanvasVisualizer

Classes

class  TreeCanvasVisualization
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual const TreeVisualizationcreateTreeVisualization (const std::vector< std::vector< int >> &tree) const override
 
virtual void addTreeVisualization (const TreeVisualization *treeVisualization) override
 
virtual void removeTreeVisualization (const TreeVisualization *treeVisualization) override
 
- Protected Member Functions inherited from inet::visualizer::TreeVisualizerBase
virtual void handleParameterChange (const char *name) override
 
virtual void preDelete (cComponent *root) override
 
virtual void removeAllTreeVisualizations ()
 
- 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 * treeGroup = nullptr
 
- Protected Attributes inherited from inet::visualizer::TreeVisualizerBase
bool displayTrees = false
 
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
 
LineManagerlineManager = nullptr
 
std::map< int, int > numTrees
 Maps nodes to the number of trees that go through it. More...
 
std::multimap< std::pair< int, int >, const TreeVisualization * > treeVisualizations
 Maps source/destination modules to multiple trees between them. More...
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Member Function Documentation

◆ addTreeVisualization()

void inet::visualizer::TreeCanvasVisualizerBase::addTreeVisualization ( const TreeVisualization treeVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::TreeVisualizerBase.

156 {
157  TreeVisualizerBase::addTreeVisualization(treeVisualization);
158  auto treeCanvasVisualization = static_cast<const TreeCanvasVisualization *>(treeVisualization);
159  for (auto& path : treeVisualization->paths)
160  lineManager->addModulePath(&path);
161  for (auto figure : treeCanvasVisualization->figures)
162  treeGroup->addFigure(figure);
163 }

Referenced by inet::visualizer::FailureProtectionConfigurationCanvasVisualizer::initialize(), and inet::visualizer::StreamRedundancyConfigurationCanvasVisualizer::initialize().

◆ createTreeVisualization()

const TreeVisualizerBase::TreeVisualization * inet::visualizer::TreeCanvasVisualizerBase::createTreeVisualization ( const std::vector< std::vector< int >> &  tree) const
overrideprotectedvirtual

Implements inet::visualizer::TreeVisualizerBase.

Reimplemented in inet::visualizer::FailureProtectionConfigurationCanvasVisualizer, and inet::visualizer::StreamRedundancyConfigurationCanvasVisualizer.

139 {
140  std::vector<LabeledPolylineFigure *> figures;
141  for (int i = 0; i < tree.size(); i++) {
142  auto figure = new LabeledPolylineFigure("tree");
143  auto polylineFigure = figure->getPolylineFigure();
144  polylineFigure->setSmooth(lineSmooth);
145  polylineFigure->setLineWidth(lineWidth);
146  polylineFigure->setLineStyle(lineStyle);
147  polylineFigure->setEndArrowhead(cFigure::ARROW_BARBED);
148  auto lineColor = lineColorSet.getColor(treeVisualizations.size());
149  polylineFigure->setLineColor(lineColor);
150  figures.push_back(figure);
151  }
152  return new TreeCanvasVisualization(tree, figures);
153 }

Referenced by inet::visualizer::FailureProtectionConfigurationCanvasVisualizer::createTreeVisualization(), and inet::visualizer::StreamRedundancyConfigurationCanvasVisualizer::createTreeVisualization().

◆ initialize()

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

◆ refreshDisplay()

void inet::visualizer::TreeCanvasVisualizerBase::refreshDisplay ( ) const
overrideprotectedvirtual
81 {
82  TreeVisualizerBase::refreshDisplay();
83  auto simulation = getSimulation();
84  for (auto it : treeVisualizations) {
85  auto treeVisualization = it.second;
86  auto treeCanvasVisualization = static_cast<const TreeCanvasVisualization *>(treeVisualization);
87  for (int i = 0; i < treeCanvasVisualization->paths.size(); i++) {
88  auto& path = treeCanvasVisualization->paths[i];
89  auto figure = treeCanvasVisualization->figures[i];
90  auto moduleIds = path.moduleIds;
91  std::vector<LineSegment> segments;
92  for (size_t index = 1; index < moduleIds.size(); index++) {
93  auto fromModuleId = moduleIds[index - 1];
94  auto toModuleId = moduleIds[index];
95  auto fromModule = simulation->getModule(fromModuleId);
96  auto toModule = simulation->getModule(toModuleId);
97  auto fromPosition = getContactPosition(fromModule, getPosition(toModule), lineContactMode, lineContactSpacing);
98  auto toPosition = getContactPosition(toModule, getPosition(fromModule), lineContactMode, lineContactSpacing);
99  auto shift = lineManager->getLineShift(fromModuleId, toModuleId, fromPosition, toPosition, lineShiftMode, path.shiftOffsets[index - 1]) * lineShift;
100  segments.push_back(LineSegment(fromPosition + shift, toPosition + shift));
101  }
102  std::vector<cFigure::Point> points;
103  for (size_t index = 0; index < segments.size(); index++) {
104  if (index == 0)
105  points.push_back(canvasProjection->computeCanvasPoint(segments[index].getPoint1()));
106  if (index > 0) {
107  auto& segment1 = segments[index - 1];
108  auto& segment2 = segments[index];
109  Coord intersection = intersectLines(segment1, segment2);
110  if (std::isfinite(intersection.x) && std::isfinite(intersection.y)) {
111  if (isPointOnSegment(segment1, intersection) && isPointOnSegment(segment2, intersection))
112  points.push_back(canvasProjection->computeCanvasPoint(intersection));
113  else {
114  double distance = segment1.getPoint2().distance(segment2.getPoint1());
115  double distance1 = intersection.distance(segment1.getPoint2());
116  double distance2 = intersection.distance(segment2.getPoint1());
117  if (distance1 + distance2 < 4 * distance)
118  points.push_back(canvasProjection->computeCanvasPoint(intersection));
119  else {
120  points.push_back(canvasProjection->computeCanvasPoint(segment1.getPoint2()));
121  points.push_back(canvasProjection->computeCanvasPoint(segment2.getPoint1()));
122  }
123  }
124  }
125  else {
126  points.push_back(canvasProjection->computeCanvasPoint(segment1.getPoint2()));
127  points.push_back(canvasProjection->computeCanvasPoint(segment2.getPoint1()));
128  }
129  }
130  if (index == segments.size() - 1)
131  points.push_back(canvasProjection->computeCanvasPoint(segments[index].getPoint2()));
132  }
133  figure->setPoints(points);
134  }
135  }
136 }

◆ removeTreeVisualization()

void inet::visualizer::TreeCanvasVisualizerBase::removeTreeVisualization ( const TreeVisualization treeVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::TreeVisualizerBase.

166 {
168  auto treeCanvasVisualization = static_cast<const TreeCanvasVisualization *>(treeVisualization);
169  for (auto& path : treeVisualization->paths)
171  for (auto figure : treeCanvasVisualization->figures)
172  treeGroup->removeFigure(figure);
173 }

Member Data Documentation

◆ canvasProjection

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

Referenced by initialize(), and refreshDisplay().

◆ treeGroup

cGroupFigure* inet::visualizer::TreeCanvasVisualizerBase::treeGroup = nullptr
protected

◆ zIndex

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

Referenced by initialize().


The documentation for this class was generated from the following files:
inet::visualizer::TreeVisualizerBase::lineContactMode
const char * lineContactMode
Definition: TreeVisualizerBase.h:51
inet::visualizer::TreeVisualizerBase::lineShift
double lineShift
Definition: TreeVisualizerBase.h:48
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::TreeCanvasVisualizerBase::zIndex
double zIndex
Definition: TreeCanvasVisualizerBase.h:32
inet::visualizer::TreeVisualizerBase::lineSmooth
bool lineSmooth
Definition: TreeVisualizerBase.h:47
inet::visualizer::TreeCanvasVisualizerBase::canvasProjection
const CanvasProjection * canvasProjection
Definition: TreeCanvasVisualizerBase.h:33
inet::visualizer::TreeVisualizerBase::lineColorSet
ColorSet lineColorSet
Definition: TreeVisualizerBase.h:44
inet::visualizer::TreeVisualizerBase::removeTreeVisualization
virtual void removeTreeVisualization(const TreeVisualization *treeVisualization)
Definition: TreeVisualizerBase.cc:67
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
inet::visualizer::TreeVisualizerBase::lineManager
LineManager * lineManager
Definition: TreeVisualizerBase.h:54
inet::visualizer::TreeVisualizerBase::lineStyle
cFigure::LineStyle lineStyle
Definition: TreeVisualizerBase.h:45
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::TreeVisualizerBase::lineWidth
double lineWidth
Definition: TreeVisualizerBase.h:46
inet::visualizer::TreeVisualizerBase::addTreeVisualization
virtual void addTreeVisualization(const TreeVisualization *treeVisualization)
Definition: TreeVisualizerBase.cc: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::visualizer::TreeVisualizerBase::lineShiftMode
const char * lineShiftMode
Definition: TreeVisualizerBase.h:49
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::visualizer::TreeVisualizerBase::treeVisualizations
std::multimap< std::pair< int, int >, const TreeVisualization * > treeVisualizations
Maps source/destination modules to multiple trees between them.
Definition: TreeVisualizerBase.h:62
inet::visualizer::TreeVisualizerBase::initialize
virtual void initialize(int stage) override
Definition: TreeVisualizerBase.cc:32
inet::visualizer::TreeVisualizerBase::lineContactSpacing
double lineContactSpacing
Definition: TreeVisualizerBase.h:50
inet::visualizer::TreeCanvasVisualizerBase::treeGroup
cGroupFigure * treeGroup
Definition: TreeCanvasVisualizerBase.h:34
inet::visualizer::ColorSet::getColor
cFigure::Color getColor(int index) const
Definition: ColorSet.cc:33