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

#include <PhysicalEnvironmentCanvasVisualizer.h>

Inheritance diagram for inet::visualizer::PhysicalEnvironmentCanvasVisualizer:
inet::visualizer::PhysicalEnvironmentVisualizerBase inet::visualizer::VisualizerBase

Classes

class  ObjectPositionComparator
 

Protected Attributes

double zIndex = NaN
 
Internal state
const CanvasProjectioncanvasProjection
 
- Protected Attributes inherited from inet::visualizer::PhysicalEnvironmentVisualizerBase
const physicalenvironment::IPhysicalEnvironmentphysicalEnvironment = nullptr
 
bool displayObjects = false
 
- Protected Attributes inherited from inet::visualizer::VisualizerBase
cModule * visualizationTargetModule = nullptr
 
cModule * visualizationSubjectModule = nullptr
 
const char * tags = nullptr
 

Graphics

cGroupFigure * objectsLayer = nullptr
 
virtual void initialize (int stage) override
 
virtual void refreshDisplay () const override
 
virtual void computeFacePoints (const physicalenvironment::IPhysicalObject *object, std::vector< std::vector< Coord >> &faces, const RotationMatrix &rotation) const
 

Additional Inherited Members

- Protected Member Functions inherited from inet::visualizer::PhysicalEnvironmentVisualizerBase
- 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
 

Member Function Documentation

◆ computeFacePoints()

void inet::visualizer::PhysicalEnvironmentCanvasVisualizer::computeFacePoints ( const physicalenvironment::IPhysicalObject object,
std::vector< std::vector< Coord >> &  faces,
const RotationMatrix rotation 
) const
protectedvirtual
113 {
114  const Coord& position = object->getPosition();
115  for (std::vector<std::vector<Coord>>::const_iterator it = faces.begin(); it != faces.end(); it++) {
116  std::vector<cFigure::Point> canvasPoints;
117  const std::vector<Coord>& facePoints = *it;
118  for (const auto& facePoint : facePoints) {
119  cFigure::Point canvPoint = canvasProjection->computeCanvasPoint(rotation.rotateVector(facePoint) + position);
120  canvasPoints.push_back(canvPoint);
121  }
122  cPolygonFigure *figure = new cPolygonFigure("objectFace");
123  figure->setTooltip("This polygon represents a physical object");
124  figure->setAssociatedObject(const_cast<cObject *>(check_and_cast<const cObject *>(object)));
125  figure->setFilled(true);
126  figure->setPoints(canvasPoints);
127  figure->setLineWidth(object->getLineWidth());
128  figure->setLineColor(object->getLineColor());
129  figure->setFillColor(object->getFillColor());
130  figure->setLineOpacity(object->getOpacity());
131  figure->setFillOpacity(object->getOpacity());
132  figure->setZoomLineWidth(false);
133  std::string objectTags("physical_object ");
134  if (object->getTags())
135  objectTags += object->getTags();
136  figure->setTags((objectTags + " " + tags).c_str());
137  objectsLayer->addFigure(figure);
138  }
139 }

◆ initialize()

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

Reimplemented from inet::visualizer::PhysicalEnvironmentVisualizerBase.

27 {
29  if (!hasGUI()) return;
30  if (stage == INITSTAGE_LOCAL) {
31  zIndex = par("zIndex");
32  cCanvas *canvas = visualizationTargetModule->getCanvas();
34  objectsLayer = new cGroupFigure("objectsLayer");
35  objectsLayer->setZIndex(zIndex);
36  objectsLayer->insertBelow(canvas->getSubmodulesLayer());
37  }
38 }

◆ refreshDisplay()

void inet::visualizer::PhysicalEnvironmentCanvasVisualizer::refreshDisplay ( ) const
overrideprotectedvirtual
41 {
42  // only update after initialize
43  if (physicalEnvironment != nullptr && getSimulation()->getEventNumber() == 0 && displayObjects) {
44  while (objectsLayer->getNumFigures())
45  delete objectsLayer->removeFigure(0);
46  // KLUDGE sorting objects with their rotated position's z coordinate to draw them in a "better" order
47  std::vector<const IPhysicalObject *> objectsCopy;
48  for (int i = 0; i < physicalEnvironment->getNumObjects(); i++)
49  objectsCopy.push_back(physicalEnvironment->getObject(i));
50  std::stable_sort(objectsCopy.begin(), objectsCopy.end(), ObjectPositionComparator(canvasProjection->getRotation()));
51  for (auto object : objectsCopy) {
52  const ShapeBase *shape = object->getShape();
53  const Coord& position = object->getPosition();
54  const Quaternion& orientation = object->getOrientation();
55  const RotationMatrix rotation(orientation.toEulerAngles());
56  // cuboid
57  const Cuboid *cuboid = dynamic_cast<const Cuboid *>(shape);
58  if (cuboid) {
59  std::vector<std::vector<Coord>> faces;
60  cuboid->computeVisibleFaces(faces, rotation, canvasProjection->getRotation());
61  computeFacePoints(object, faces, rotation);
62  }
63  // sphere
64  const Sphere *sphere = dynamic_cast<const Sphere *>(shape);
65  if (sphere) {
66  double radius = sphere->getRadius();
67  cOvalFigure *figure = new cOvalFigure("sphere");
68  figure->setTooltip("This oval represents a physical object");
69  figure->setAssociatedObject(const_cast<cObject *>(check_and_cast<const cObject *>(object)));
70  figure->setFilled(true);
71  cFigure::Point center = canvasProjection->computeCanvasPoint(position);
72  figure->setBounds(cFigure::Rectangle(center.x - radius, center.y - radius, radius * 2, radius * 2));
73  figure->setLineWidth(object->getLineWidth());
74  figure->setLineColor(object->getLineColor());
75  figure->setFillColor(object->getFillColor());
76  figure->setLineOpacity(object->getOpacity());
77  figure->setFillOpacity(object->getOpacity());
78  figure->setZoomLineWidth(false);
79  std::string objectTags("physical_object ");
80  if (object->getTags())
81  objectTags += object->getTags();
82  figure->setTags((objectTags + " " + tags).c_str());
83  objectsLayer->addFigure(figure);
84  }
85  // prism
86  const Prism *prism = dynamic_cast<const Prism *>(shape);
87  if (prism) {
88  std::vector<std::vector<Coord>> faces;
89  prism->computeVisibleFaces(faces, rotation, canvasProjection->getRotation());
90  computeFacePoints(object, faces, rotation);
91  }
92  // polyhedron
93  const Polyhedron *polyhedron = dynamic_cast<const Polyhedron *>(shape);
94  if (polyhedron) {
95  std::vector<std::vector<Coord>> faces;
96  polyhedron->computeVisibleFaces(faces, rotation, canvasProjection->getRotation());
97  computeFacePoints(object, faces, rotation);
98  }
99  // add name to the end
100  const char *name = check_and_cast<const cObject *>(object)->getName();
101  if (name) {
102  cLabelFigure *nameFigure = new cLabelFigure("objectName");
103  nameFigure->setPosition(canvasProjection->computeCanvasPoint(position));
104  nameFigure->setTags((std::string("physical_object object_name label ") + tags).c_str());
105  nameFigure->setText(name);
106  objectsLayer->addFigure(nameFigure);
107  }
108  }
109  }
110 }

Member Data Documentation

◆ canvasProjection

const CanvasProjection* inet::visualizer::PhysicalEnvironmentCanvasVisualizer::canvasProjection
protected

◆ objectsLayer

cGroupFigure* inet::visualizer::PhysicalEnvironmentCanvasVisualizer::objectsLayer = nullptr
protected

◆ zIndex

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

The documentation for this class was generated from the following files:
inet::CanvasProjection::getCanvasProjection
static CanvasProjection * getCanvasProjection(const cCanvas *canvas)
Definition: CanvasProjection.cc:53
inet::visualizer::PhysicalEnvironmentVisualizerBase::initialize
virtual void initialize(int stage) override
Definition: PhysicalEnvironmentVisualizerBase.cc:18
inet::visualizer::VisualizerBase::visualizationTargetModule
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
inet::visualizer::PhysicalEnvironmentCanvasVisualizer::computeFacePoints
virtual void computeFacePoints(const physicalenvironment::IPhysicalObject *object, std::vector< std::vector< Coord >> &faces, const RotationMatrix &rotation) const
Definition: PhysicalEnvironmentCanvasVisualizer.cc:112
inet::physicalenvironment::IPhysicalEnvironment::getNumObjects
virtual int getNumObjects() const =0
inet::physicalenvironment::IPhysicalEnvironment::getObject
virtual const IPhysicalObject * getObject(int index) const =0
inet::CanvasProjection::getRotation
const RotationMatrix & getRotation() const
Definition: CanvasProjection.h:29
inet::visualizer::PhysicalEnvironmentCanvasVisualizer::canvasProjection
const CanvasProjection * canvasProjection
Definition: PhysicalEnvironmentCanvasVisualizer.h:38
inet::visualizer::PhysicalEnvironmentCanvasVisualizer::zIndex
double zIndex
Definition: PhysicalEnvironmentCanvasVisualizer.h:35
inet::visualizer::PhysicalEnvironmentVisualizerBase::physicalEnvironment
const physicalenvironment::IPhysicalEnvironment * physicalEnvironment
Definition: PhysicalEnvironmentVisualizerBase.h:23
inet::visualizer::PhysicalEnvironmentVisualizerBase::displayObjects
bool displayObjects
Definition: PhysicalEnvironmentVisualizerBase.h:24
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::PhysicalEnvironmentCanvasVisualizer::objectsLayer
cGroupFigure * objectsLayer
Definition: PhysicalEnvironmentCanvasVisualizer.h:43
inet::visualizer::VisualizerBase::tags
const char * tags
Definition: VisualizerBase.h:27