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

#include <LinkOsgVisualizerBase.h>

Inheritance diagram for inet::visualizer::LinkOsgVisualizerBase:
inet::visualizer::LinkVisualizerBase inet::visualizer::VisualizerBase inet::visualizer::DataLinkOsgVisualizer inet::visualizer::PhysicalLinkOsgVisualizer

Classes

class  LinkOsgVisualization
 

Protected Member Functions

virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual const LinkVisualizationcreateLinkVisualization (cModule *source, cModule *destination, cPacket *packet) const override
 
virtual void addLinkVisualization (std::pair< int, int > sourceAndDestination, const LinkVisualization *linkVisualization) override
 
virtual void removeLinkVisualization (const LinkVisualization *linkVisualization) override
 
virtual void setAlpha (const LinkVisualization *linkVisualization, double alpha) const override
 
- 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
 

Additional Inherited Members

- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Member Function Documentation

◆ addLinkVisualization()

void inet::visualizer::LinkOsgVisualizerBase::addLinkVisualization ( std::pair< int, int >  sourceAndDestination,
const LinkVisualization linkVisualization 
)
overrideprotectedvirtual

Reimplemented from inet::visualizer::LinkVisualizerBase.

69 {
70  LinkVisualizerBase::addLinkVisualization(sourceAndDestination, linkVisualization);
71  auto linkOsgVisualization = static_cast<const LinkOsgVisualization *>(linkVisualization);
73  lineManager->addModuleLine(linkVisualization);
74  scene->addChild(linkOsgVisualization->node);
75 }

◆ createLinkVisualization()

const LinkVisualizerBase::LinkVisualization * inet::visualizer::LinkOsgVisualizerBase::createLinkVisualization ( cModule *  source,
cModule *  destination,
cPacket *  packet 
) const
overrideprotectedvirtual

Implements inet::visualizer::LinkVisualizerBase.

60 {
61  auto sourcePosition = getPosition(source);
62  auto destinationPosition = getPosition(destination);
63  auto node = new inet::osg::LineNode(sourcePosition, destinationPosition, cFigure::ARROW_NONE, cFigure::ARROW_BARBED, lineWidth);
64  node->setStateSet(inet::osg::createLineStateSet(lineColor, lineStyle, lineWidth, true)); // < add the overlay as configurable parameter?
65  return new LinkOsgVisualization(node, source->getId(), destination->getId());
66 }

◆ initialize()

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

Reimplemented from inet::visualizer::LinkVisualizerBase.

29 {
31  if (!hasGUI()) return;
32  if (stage == INITSTAGE_LOCAL) {
33  auto canvas = visualizationTargetModule->getCanvas();
35  }
36 }

◆ refreshDisplay()

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

Reimplemented from inet::visualizer::LinkVisualizerBase.

39 {
41  auto simulation = getSimulation();
42  // TODO share common part with LinkCanvasVisualizerBase
43  for (auto it : linkVisualizations) {
44  auto linkVisualization = it.second;
45  auto sourceModule = simulation->getModule(linkVisualization->sourceModuleId);
46  auto destinationModule = simulation->getModule(linkVisualization->destinationModuleId);
47  if (sourceModule != nullptr && destinationModule != nullptr) {
48  auto linkOsgVisualization = static_cast<const LinkOsgVisualization *>(linkVisualization);
49  auto sourcePosition = getContactPosition(sourceModule, getPosition(destinationModule), lineContactMode, lineContactSpacing);
50  auto destinationPosition = getContactPosition(destinationModule, getPosition(sourceModule), lineContactMode, lineContactSpacing);
51  auto shift = lineManager->getLineShift(linkVisualization->sourceModuleId, linkVisualization->destinationModuleId, sourcePosition, destinationPosition, lineShiftMode, linkVisualization->shiftOffset) * lineShift;
52  linkOsgVisualization->node->setStart(sourcePosition + shift);
53  linkOsgVisualization->node->setEnd(destinationPosition + shift);
54  }
55  }
56  visualizationTargetModule->getCanvas()->setAnimationSpeed(linkVisualizations.empty() ? 0 : fadeOutAnimationSpeed, this);
57 }

◆ removeLinkVisualization()

void inet::visualizer::LinkOsgVisualizerBase::removeLinkVisualization ( const LinkVisualization linkVisualization)
overrideprotectedvirtual

Reimplemented from inet::visualizer::LinkVisualizerBase.

78 {
80  auto linkOsgVisualization = static_cast<const LinkOsgVisualization *>(linkVisualization);
81  auto node = linkOsgVisualization->node;
82  lineManager->removeModuleLine(linkVisualization);
83  node->getParent(0)->removeChild(node);
84 }

◆ setAlpha()

void inet::visualizer::LinkOsgVisualizerBase::setAlpha ( const LinkVisualization linkVisualization,
double  alpha 
) const
overrideprotectedvirtual

Implements inet::visualizer::LinkVisualizerBase.

87 {
88  auto linkOsgVisualization = static_cast<const LinkOsgVisualization *>(link);
89  auto node = linkOsgVisualization->node;
90  auto material = static_cast<osg::Material *>(node->getOrCreateStateSet()->getAttribute(osg::StateAttribute::MATERIAL));
91  material->setAlpha(osg::Material::FRONT_AND_BACK, alpha);
92 }

The documentation for this class was generated from the following files:
inet::osg::createLineStateSet
StateSet * createLineStateSet(const cFigure::Color &color, const cFigure::LineStyle &style, double width, bool overlay)
Definition: OsgUtils.cc:293
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
inet::osg::TopLevelScene::getSimulationScene
virtual SimulationScene * getSimulationScene()
Definition: OsgScene.cc:22
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::VisualizerBase::getContactPosition
virtual Coord getContactPosition(const cModule *networkNode, const Coord &fromPosition, const char *contactMode, double contactSpacing) const
Definition: VisualizerBase.cc:51
inet::visualizer::VisualizerBase::getPosition
virtual Coord getPosition(const cModule *networkNode) const
Definition: VisualizerBase.cc:39
inet::INITSTAGE_LOCAL
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
inet::visualizer::LineManager::getOsgLineManager
static LineManager * getOsgLineManager(const cCanvas *canvas)
Definition: LineManager.cc:24
inet::units::constants::alpha
const value< double, units::unit > alpha(7.2973525376e-3)
inet::visualizer::LineManager::removeModuleLine
void removeModuleLine(const ModuleLine *moduleLine)
Definition: LineManager.cc:75
inet::osg::LineNode
Definition: OsgUtils.h:64
inet::visualizer::LineManager::addModuleLine
void addModuleLine(const ModuleLine *moduleLine)
Definition: LineManager.cc:67