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

#include <LineManager.h>

Classes

class  CacheEntry
 
class  ModuleLine
 
class  ModulePath
 

Public Member Functions

void addModuleLine (const ModuleLine *moduleLine)
 
void removeModuleLine (const ModuleLine *moduleLine)
 
void addModulePath (const ModulePath *modulePath)
 
void removeModulePath (const ModulePath *modulePath)
 
Coord getLineShift (int sourceModuleId, int destinationModuleId, const Coord &sourcePosition, const Coord &destinationPosition, const char *shiftMode, int shiftOffset)
 

Static Public Member Functions

static LineManagergetCanvasLineManager (const cCanvas *canvas)
 
static LineManagergetOsgLineManager (const cCanvas *canvas)
 

Protected Member Functions

std::pair< int, int > getKey (int fromModuleId, int toModuleId)
 
void updateOffsets (int fromModuleId, int toModuleId)
 
void updateOffsets (const ModuleLine *moduleLine)
 
void updateOffsets (const ModulePath *modulePath)
 

Static Protected Member Functions

static bool compareModuleLines (const ModuleLine *moduleLine1, const ModuleLine *moduleLine2)
 
static bool compareModulePaths (std::pair< const ModulePath *, int > element1, std::pair< const ModulePath *, int > element2)
 

Protected Attributes

std::map< std::pair< int, int >, CacheEntrycacheEntries
 

Static Protected Attributes

static std::map< const cCanvas *, LineManagercanvasLineManagers
 
static std::map< const cCanvas *, LineManagerosgLineManagers
 

Member Function Documentation

◆ addModuleLine()

void inet::visualizer::LineManager::addModuleLine ( const ModuleLine moduleLine)
68 {
69  auto key = getKey(moduleLine->sourceModuleId, moduleLine->destinationModuleId);
70  auto& cacheEntry = cacheEntries[key];
71  cacheEntry.moduleLines.push_back(moduleLine);
72  updateOffsets(moduleLine);
73 }

Referenced by inet::visualizer::LinkOsgVisualizerBase::addLinkVisualization(), inet::visualizer::LinkCanvasVisualizerBase::addLinkVisualization(), and inet::visualizer::RoutingTableCanvasVisualizer::addRouteVisualization().

◆ addModulePath()

void inet::visualizer::LineManager::addModulePath ( const ModulePath modulePath)
84 {
85  for (size_t index = 1; index < modulePath->moduleIds.size(); index++) {
86  auto key = getKey(modulePath->moduleIds[index - 1], modulePath->moduleIds[index]);
87  auto value = std::pair<const ModulePath *, int>(modulePath, index - 1);
88  auto& cacheEntry = cacheEntries[key];
89  cacheEntry.modulePaths.push_back(value);
90  }
91  updateOffsets(modulePath);
92 }

Referenced by inet::visualizer::PathOsgVisualizerBase::addPathVisualization(), inet::visualizer::PathCanvasVisualizerBase::addPathVisualization(), and inet::visualizer::TreeCanvasVisualizerBase::addTreeVisualization().

◆ compareModuleLines()

bool inet::visualizer::LineManager::compareModuleLines ( const ModuleLine moduleLine1,
const ModuleLine moduleLine2 
)
staticprotected
30 {
31  auto v1 = moduleLine1->sourceModuleId < moduleLine1->destinationModuleId ? moduleLine1->shiftPriority : -moduleLine1->shiftPriority;
32  auto v2 = moduleLine2->sourceModuleId < moduleLine2->destinationModuleId ? moduleLine2->shiftPriority : -moduleLine2->shiftPriority;
33  return v1 < v2;
34 }

Referenced by updateOffsets().

◆ compareModulePaths()

bool inet::visualizer::LineManager::compareModulePaths ( std::pair< const ModulePath *, int >  element1,
std::pair< const ModulePath *, int >  element2 
)
staticprotected
37 {
38  auto v1 = element1.first->moduleIds[element1.second] < element1.first->moduleIds[element1.second + 1] ? element1.first->shiftPriority : -element1.first->shiftPriority;
39  auto v2 = element2.first->moduleIds[element2.second] < element2.first->moduleIds[element2.second + 1] ? element2.first->shiftPriority : -element2.first->shiftPriority;
40  return v1 < v2;
41 }

Referenced by updateOffsets().

◆ getCanvasLineManager()

◆ getKey()

std::pair<int, int> inet::visualizer::LineManager::getKey ( int  fromModuleId,
int  toModuleId 
)
inlineprotected
53  {
54  return fromModuleId < toModuleId ? std::pair<int, int>(fromModuleId, toModuleId) : std::pair<int, int>(toModuleId, fromModuleId);
55  }

Referenced by addModuleLine(), addModulePath(), getLineShift(), removeModuleLine(), removeModulePath(), and updateOffsets().

◆ getLineShift()

Coord inet::visualizer::LineManager::getLineShift ( int  sourceModuleId,
int  destinationModuleId,
const Coord sourcePosition,
const Coord destinationPosition,
const char *  shiftMode,
int  shiftOffset 
)
106 {
107  auto sign = *shiftMode;
108  if (sign == '+' || sign == '-')
109  shiftMode++;
110  Coord shift;
111  if (!strcmp("none", shiftMode))
112  return Coord::ZERO;
113  else if (!strcmp("normal", shiftMode)) {
114  auto direction = sourceModuleId < destinationModuleId ? destinationPosition - sourcePosition : sourcePosition - destinationPosition;
115  direction.normalize();
116  shift = Coord(-direction.y, direction.x, 0);
117  }
118  else if (!strcmp("x", shiftMode))
119  shift = Coord::X_AXIS;
120  else if (!strcmp("y", shiftMode))
121  shift = Coord::Y_AXIS;
122  else if (!strcmp("z", shiftMode))
123  shift = Coord::Z_AXIS;
124  else
125  throw cRuntimeError("Unknown shift mode: %s", shiftMode);
126  if (sign == '+')
127  shift *= shiftOffset;
128  else if (sign == '-')
129  shift *= -shiftOffset;
130  else {
131  auto& cacheEntry = cacheEntries[getKey(sourceModuleId, destinationModuleId)];
132  auto count = cacheEntry.moduleLines.size() + cacheEntry.modulePaths.size();
133  shift *= shiftOffset - ((double)count - 1) / 2.0;
134  }
135 
136  double zoomLevel = getEnvir()->getZoomLevel(getSimulation()->getModule(sourceModuleId)->getParentModule());
137  if (!std::isnan(zoomLevel))
138  shift /= zoomLevel;
139 
140  return shift;
141 }

Referenced by inet::visualizer::LinkOsgVisualizerBase::refreshDisplay(), inet::visualizer::TreeCanvasVisualizerBase::refreshDisplay(), inet::visualizer::RoutingTableCanvasVisualizer::refreshDisplay(), inet::visualizer::PathCanvasVisualizerBase::refreshDisplay(), and inet::visualizer::LinkCanvasVisualizerBase::refreshDisplay().

◆ getOsgLineManager()

LineManager * inet::visualizer::LineManager::getOsgLineManager ( const cCanvas *  canvas)
static

◆ removeModuleLine()

void inet::visualizer::LineManager::removeModuleLine ( const ModuleLine moduleLine)
76 {
77  auto key = getKey(moduleLine->sourceModuleId, moduleLine->destinationModuleId);
78  auto& cacheEntry = cacheEntries[key];
79  cacheEntry.moduleLines.erase(std::remove(cacheEntry.moduleLines.begin(), cacheEntry.moduleLines.end(), moduleLine), cacheEntry.moduleLines.end());
80  updateOffsets(moduleLine);
81 }

Referenced by inet::visualizer::LinkOsgVisualizerBase::removeLinkVisualization(), inet::visualizer::LinkCanvasVisualizerBase::removeLinkVisualization(), and inet::visualizer::RoutingTableCanvasVisualizer::removeRouteVisualization().

◆ removeModulePath()

void inet::visualizer::LineManager::removeModulePath ( const ModulePath modulePath)
95 {
96  for (size_t index = 1; index < modulePath->moduleIds.size(); index++) {
97  auto key = getKey(modulePath->moduleIds[index - 1], modulePath->moduleIds[index]);
98  auto value = std::pair<const ModulePath *, int>(modulePath, index - 1);
99  auto& cacheEntry = cacheEntries[key];
100  cacheEntry.modulePaths.erase(std::remove(cacheEntry.modulePaths.begin(), cacheEntry.modulePaths.end(), value), cacheEntry.modulePaths.end());
101  }
102  updateOffsets(modulePath);
103 }

Referenced by inet::visualizer::PathOsgVisualizerBase::removePathVisualization(), inet::visualizer::PathCanvasVisualizerBase::removePathVisualization(), and inet::visualizer::TreeCanvasVisualizerBase::removeTreeVisualization().

◆ updateOffsets() [1/3]

void inet::visualizer::LineManager::updateOffsets ( const ModuleLine moduleLine)
protected
57 {
58  updateOffsets(moduleLine->sourceModuleId, moduleLine->destinationModuleId);
59 }

Referenced by updateOffsets().

◆ updateOffsets() [2/3]

void inet::visualizer::LineManager::updateOffsets ( const ModulePath modulePath)
protected
62 {
63  for (size_t index = 1; index < modulePath->moduleIds.size(); index++)
64  updateOffsets(modulePath->moduleIds[index - 1], modulePath->moduleIds[index]);
65 }

◆ updateOffsets() [3/3]

void inet::visualizer::LineManager::updateOffsets ( int  fromModuleId,
int  toModuleId 
)
protected
44 {
45  auto key = getKey(fromModuleId, toModuleId);
46  auto& cacheEntry = cacheEntries[key];
47  std::sort(cacheEntry.moduleLines.begin(), cacheEntry.moduleLines.end(), compareModuleLines);
48  std::sort(cacheEntry.modulePaths.begin(), cacheEntry.modulePaths.end(), compareModulePaths);
49  int shiftOffset = 0;
50  for (auto& moduleLine : cacheEntry.moduleLines)
51  moduleLine->shiftOffset = shiftOffset++;
52  for (auto& element : cacheEntry.modulePaths)
53  element.first->shiftOffsets[element.second] = shiftOffset++;
54 }

Referenced by addModuleLine(), addModulePath(), removeModuleLine(), removeModulePath(), and updateOffsets().

Member Data Documentation

◆ cacheEntries

std::map<std::pair<int, int>, CacheEntry> inet::visualizer::LineManager::cacheEntries
protected

◆ canvasLineManagers

std::map< const cCanvas *, LineManager > inet::visualizer::LineManager::canvasLineManagers
staticprotected

Referenced by getCanvasLineManager().

◆ osgLineManagers

std::map< const cCanvas *, LineManager > inet::visualizer::LineManager::osgLineManagers
staticprotected

Referenced by getOsgLineManager().


The documentation for this class was generated from the following files:
inet::sort
void sort(std::vector< T > &v)
Definition: stlutils.h:129
inet::Coord::ZERO
static const Coord ZERO
Definition: Coord.h:27
inet::count
int count(const std::vector< T > &v, const Tk &a)
Definition: stlutils.h:54
inet::remove
void remove(std::vector< T > &v, const Tk &a)
Definition: stlutils.h:107
inet::visualizer::LineManager::getKey
std::pair< int, int > getKey(int fromModuleId, int toModuleId)
Definition: LineManager.h:53
inet::visualizer::LineManager::compareModulePaths
static bool compareModulePaths(std::pair< const ModulePath *, int > element1, std::pair< const ModulePath *, int > element2)
Definition: LineManager.cc:36
inet::visualizer::LineManager::canvasLineManagers
static std::map< const cCanvas *, LineManager > canvasLineManagers
Definition: LineManager.h:49
inet::visualizer::LineManager::compareModuleLines
static bool compareModuleLines(const ModuleLine *moduleLine1, const ModuleLine *moduleLine2)
Definition: LineManager.cc:29
inet::Coord::Z_AXIS
static const Coord Z_AXIS
Definition: Coord.h:31
inet::math::sign
int sign(double v)
Returns 1 if the parameter is greater than zero, -1 if less than zero, 0 otherwise.
Definition: INETMath.h:138
inet::visualizer::LineManager::cacheEntries
std::map< std::pair< int, int >, CacheEntry > cacheEntries
Definition: LineManager.h:47
inet::Coord::X_AXIS
static const Coord X_AXIS
Definition: Coord.h:29
inet::Coord::normalize
Coord normalize()
Updates the length of this position vector to be 1.
Definition: Coord.h:280
inet::visualizer::LineManager::updateOffsets
void updateOffsets(int fromModuleId, int toModuleId)
Definition: LineManager.cc:43
inet::visualizer::LineManager::osgLineManagers
static std::map< const cCanvas *, LineManager > osgLineManagers
Definition: LineManager.h:50
inet::Coord::Y_AXIS
static const Coord Y_AXIS
Definition: Coord.h:30