|
INET Framework for OMNeT++/OMNEST
|
#include <RadioCanvasVisualizer.h>
|
| virtual void | initialize (int stage) override |
| |
| virtual RadioVisualization * | createRadioVisualization (const physicallayer::IRadio *radio) const override |
| |
| virtual void | addRadioVisualization (const RadioVisualization *radioVisualization) override |
| |
| virtual void | removeRadioVisualization (const RadioVisualization *radioVisualization) override |
| |
| virtual void | refreshRadioVisualization (const RadioVisualization *radioVisualization) const override |
| |
| virtual void | refreshAntennaLobe (const inet::physicallayer::IAntenna *antenna, cPolygonFigure *antennaLobeFigure, cOvalFigure *antennaLobeUnitGainFigure, cOvalFigure *antennaLobeMaxGainFigure) const |
| |
| virtual void | setImageIndex (IndexedImageFigure *indexedImageFigure, int index) const |
| |
| virtual double | getGainRadius (double gain, double maxGain) const |
| |
| virtual void | handleParameterChange (const char *name) override |
| |
| virtual void | refreshDisplay () const override |
| |
| virtual void | preDelete (cComponent *root) override |
| |
| virtual void | subscribe () |
| |
| virtual void | unsubscribe () |
| |
| virtual const RadioVisualization * | getRadioVisualization (int radioModuleId) |
| |
| virtual void | removeAllRadioVisualizations () |
| |
| 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 |
| |
|
| virtual void | receiveSignal (cComponent *source, simsignal_t signal, intval_t value, cObject *details) override |
| |
◆ addRadioVisualization()
| void inet::visualizer::RadioCanvasVisualizer::addRadioVisualization |
( |
const RadioVisualization * |
radioVisualization | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::visualizer::RadioVisualizerBase.
119 auto radioCanvasVisualization =
static_cast<const RadioCanvasVisualization *
>(radioVisualization);
121 radioCanvasVisualization->networkNodeVisualization->addAnnotation(radioCanvasVisualization->radioModeFigure, radioCanvasVisualization->radioModeFigure->getSize(),
placementHint,
placementPriority);
123 radioCanvasVisualization->networkNodeVisualization->addAnnotation(radioCanvasVisualization->receptionStateFigure, radioCanvasVisualization->receptionStateFigure->getSize(),
placementHint,
placementPriority);
125 radioCanvasVisualization->networkNodeVisualization->addAnnotation(radioCanvasVisualization->transmissionStateFigure, radioCanvasVisualization->transmissionStateFigure->getSize(),
placementHint,
placementPriority);
127 radioCanvasVisualization->networkNodeVisualization->addFigure(radioCanvasVisualization->antennaLobeFigure);
128 radioCanvasVisualization->networkNodeVisualization->addFigure(radioCanvasVisualization->antennaLobeUnitGainFigure);
129 radioCanvasVisualization->networkNodeVisualization->addFigure(radioCanvasVisualization->antennaLobeMaxGainFigure);
◆ createRadioVisualization()
Implements inet::visualizer::RadioVisualizerBase.
51 auto module = check_and_cast<const cModule *>(radio);
53 IndexedImageFigure *radioModeFigure =
nullptr;
55 radioModeFigure =
new IndexedImageFigure(
"radioMode");
56 radioModeFigure->setTags((std::string(
"radioMode ") +
tags).c_str());
57 radioModeFigure->setTooltip(
"This figure represents the radio mode of a radio");
58 radioModeFigure->setAssociatedObject(
const_cast<cModule *
>(module));
60 radioModeFigure->setSize(cFigure::Point(
width,
height));
62 IndexedImageFigure *receptionStateFigure =
nullptr;
64 receptionStateFigure =
new IndexedImageFigure(
"receptionState");
65 receptionStateFigure->setTags((std::string(
"receptionState ") +
tags).c_str());
66 receptionStateFigure->setTooltip(
"This figure represents the reception state of a radio");
68 receptionStateFigure->setSize(cFigure::Point(
width,
height));
70 IndexedImageFigure *transmissionStateFigure =
nullptr;
72 transmissionStateFigure =
new IndexedImageFigure(
"transmissionState");
73 transmissionStateFigure->setTags((std::string(
"transmissionState ") +
tags).c_str());
74 transmissionStateFigure->setTooltip(
"This figure represents the transmission state of a radio");
76 transmissionStateFigure->setSize(cFigure::Point(
width,
height));
78 cPolygonFigure *antennaLobeFigure =
nullptr;
79 cOvalFigure *antennaLobeUnitGainFigure =
nullptr;
80 cOvalFigure *antennaLobeMaxGainFigure =
nullptr;
82 antennaLobeFigure =
new cPolygonFigure(
"antenna_lobe");
83 antennaLobeFigure->setTags(
"antennaLobe");
84 antennaLobeFigure->setTooltip(
"This figure represents the antenna lobe of a radio");
85 antennaLobeFigure->setZIndex(
zIndex);
86 antennaLobeFigure->setOutlined(
true);
90 antennaLobeFigure->setFilled(
true);
94 antennaLobeUnitGainFigure =
new cOvalFigure(
"antenna_lobe unit_gain");
95 antennaLobeUnitGainFigure->setTags(
"antennaLobe unitGain");
96 antennaLobeUnitGainFigure->setTooltip(
"This figure represents the 0dB gain of a radio antenna");
97 antennaLobeUnitGainFigure->setZIndex(
zIndex);
98 antennaLobeUnitGainFigure->setOutlined(
true);
99 antennaLobeUnitGainFigure->setLineColor(cFigure::GREY);
100 antennaLobeUnitGainFigure->setLineStyle(cFigure::LINE_DOTTED);
101 antennaLobeMaxGainFigure =
new cOvalFigure(
"antenna_lobe max_gain");
102 antennaLobeMaxGainFigure->setTags(
"antennaLobe maxGain");
103 antennaLobeMaxGainFigure->setTooltip(
"This figure represents the maximum gain of a radio antenna");
104 antennaLobeMaxGainFigure->setZIndex(
zIndex);
105 antennaLobeMaxGainFigure->setOutlined(
true);
106 antennaLobeMaxGainFigure->setLineColor(cFigure::GREY);
107 antennaLobeMaxGainFigure->setLineStyle(cFigure::LINE_DOTTED);
108 auto antenna = radio->getAntenna();
109 refreshAntennaLobe(antenna, antennaLobeFigure, antennaLobeUnitGainFigure, antennaLobeMaxGainFigure);
113 return new RadioCanvasVisualization(networkNodeVisualization, radioModeFigure, receptionStateFigure, transmissionStateFigure, antennaLobeFigure, antennaLobeUnitGainFigure, antennaLobeMaxGainFigure, module->getId());
◆ getGainRadius()
| double inet::visualizer::RadioCanvasVisualizer::getGainRadius |
( |
double |
gain, |
|
|
double |
maxGain |
|
) |
| const |
|
protectedvirtual |
◆ initialize()
| void inet::visualizer::RadioCanvasVisualizer::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
◆ refreshAntennaLobe()
| void inet::visualizer::RadioCanvasVisualizer::refreshAntennaLobe |
( |
const inet::physicallayer::IAntenna * |
antenna, |
|
|
cPolygonFigure * |
antennaLobeFigure, |
|
|
cOvalFigure * |
antennaLobeUnitGainFigure, |
|
|
cOvalFigure * |
antennaLobeMaxGainFigure |
|
) |
| const |
|
protectedvirtual |
175 EulerAngles direction;
177 double antennaCanvasDepth;
178 double maxGain = antenna->
getGain()->getMaxGain();
183 cFigure::Point lobeCanvasOffset(
cos(
rad(angle).get()),
sin(
rad(angle).get()));
187 direction = (antennaDirection * lobeDirection).toEulerAngles();
191 auto lobePosition = antennaPosition + Coord(lobeCanvasOffset.x, lobeCanvasOffset.y, 0);
193 direction = (antennaDirection * lobeDirection).toEulerAngles();
196 direction.alpha = angle;
200 auto lobePosition = antennaPosition + Coord(lobeCanvasOffset.x, 0, lobeCanvasOffset.y);
202 direction = (antennaDirection * lobeDirection).toEulerAngles();
205 direction.beta = angle;
209 auto lobePosition = antennaPosition + Coord(0, lobeCanvasOffset.x, lobeCanvasOffset.y);
211 direction = (antennaDirection * lobeDirection).toEulerAngles();
214 direction.alpha =
deg(90);
215 direction.beta = angle;
219 throw cRuntimeError(
"Unknown antennaLobePlane");
220 double gain = antenna->
getGain()->computeGain(Quaternion(direction.normalize()));
222 cFigure::Point point = lobeCanvasOffset * radius;
223 if (antennaLobeFigure->getNumPoints() > i)
224 antennaLobeFigure->setPoint(i, point);
226 antennaLobeFigure->addPoint(point);
229 antennaLobeUnitGainFigure->setBounds(cFigure::Rectangle(-unitRadius, -unitRadius, 2 * unitRadius, 2 * unitRadius));
231 antennaLobeMaxGainFigure->setBounds(cFigure::Rectangle(-maxRadius, -maxRadius, 2 * maxRadius, 2 * maxRadius));
Referenced by createRadioVisualization(), and refreshRadioVisualization().
◆ refreshRadioVisualization()
| void inet::visualizer::RadioCanvasVisualizer::refreshRadioVisualization |
( |
const RadioVisualization * |
radioVisualization | ) |
const |
|
overrideprotectedvirtual |
Implements inet::visualizer::RadioVisualizerBase.
154 auto radioCanvasVisualization =
static_cast<const RadioCanvasVisualization *
>(radioVisualization);
155 auto module = getSimulation()->getComponent(radioCanvasVisualization->radioModuleId);
156 if (module !=
nullptr) {
157 auto radio = check_and_cast<IRadio *>(module);
159 setImageIndex(radioCanvasVisualization->radioModeFigure, radio->getRadioMode());
161 setImageIndex(radioCanvasVisualization->receptionStateFigure, radio->getReceptionState());
162 radioCanvasVisualization->receptionStateFigure->setAssociatedObject(
const_cast<cObject *
>(
dynamic_cast<const cObject *
>(radio->getReceptionInProgress())));
165 setImageIndex(radioCanvasVisualization->transmissionStateFigure, radio->getTransmissionState());
166 radioCanvasVisualization->transmissionStateFigure->setAssociatedObject(
const_cast<cObject *
>(
dynamic_cast<const cObject *
>(radio->getTransmissionInProgress())));
169 refreshAntennaLobe(radio->getAntenna(), radioCanvasVisualization->antennaLobeFigure, radioCanvasVisualization->antennaLobeUnitGainFigure, radioCanvasVisualization->antennaLobeMaxGainFigure);
◆ removeRadioVisualization()
| void inet::visualizer::RadioCanvasVisualizer::removeRadioVisualization |
( |
const RadioVisualization * |
radioVisualization | ) |
|
|
overrideprotectedvirtual |
Reimplemented from inet::visualizer::RadioVisualizerBase.
136 auto radioCanvasVisualization =
static_cast<const RadioCanvasVisualization *
>(radioVisualization);
139 radioCanvasVisualization->networkNodeVisualization->removeAnnotation(radioCanvasVisualization->radioModeFigure);
141 radioCanvasVisualization->networkNodeVisualization->removeAnnotation(radioCanvasVisualization->receptionStateFigure);
143 radioCanvasVisualization->networkNodeVisualization->removeAnnotation(radioCanvasVisualization->transmissionStateFigure);
145 radioCanvasVisualization->networkNodeVisualization->removeFigure(radioCanvasVisualization->antennaLobeFigure);
146 radioCanvasVisualization->networkNodeVisualization->removeFigure(radioCanvasVisualization->antennaLobeUnitGainFigure);
147 radioCanvasVisualization->networkNodeVisualization->removeFigure(radioCanvasVisualization->antennaLobeMaxGainFigure);
◆ setImageIndex()
| void inet::visualizer::RadioCanvasVisualizer::setImageIndex |
( |
IndexedImageFigure * |
indexedImageFigure, |
|
|
int |
index |
|
) |
| const |
|
protectedvirtual |
236 indexedImageFigure->setValue(0, simTime(), index);
237 indexedImageFigure->setVisible(indexedImageFigure->getImages()[index] !=
"-");
Referenced by refreshRadioVisualization().
◆ canvasProjection
| const CanvasProjection* inet::visualizer::RadioCanvasVisualizer::canvasProjection = nullptr |
|
protected |
◆ networkNodeVisualizer
◆ zIndex
| double inet::visualizer::RadioCanvasVisualizer::zIndex = NaN |
|
protected |
The documentation for this class was generated from the following files:
double width
Definition: RadioVisualizerBase.h:43
double antennaLobeLogarithmicBase
Definition: RadioVisualizerBase.h:54
virtual void refreshAntennaLobe(const inet::physicallayer::IAntenna *antenna, cPolygonFigure *antennaLobeFigure, cOvalFigure *antennaLobeUnitGainFigure, cOvalFigure *antennaLobeMaxGainFigure) const
Definition: RadioCanvasVisualizer.cc:173
virtual void addRadioVisualization(const RadioVisualization *radioVisualization)
Definition: RadioVisualizerBase.cc:115
const char * antennaLobePlane
Definition: RadioVisualizerBase.h:52
const CanvasProjection * canvasProjection
Definition: RadioCanvasVisualizer.h:42
double antennaLobeOpacity
Definition: RadioVisualizerBase.h:58
bool antennaLobeNormalize
Definition: RadioVisualizerBase.h:48
fscale< rad, rad2degScale > deg
Definition: Units.h:1158
bool antennaLobeLineSmooth
Definition: RadioVisualizerBase.h:59
static CanvasProjection * getCanvasProjection(const cCanvas *canvas)
Definition: CanvasProjection.cc:53
double height
Definition: RadioVisualizerBase.h:44
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:40
Coord computeCanvasPointInverse(const cFigure::Point &point, double depth) const
Definition: CanvasProjection.cc:47
Value cos(const value< Value, Unit > &angle)
Definition: Units.h:1524
bool antennaLobePlaneGlobal
Definition: RadioVisualizerBase.h:51
Placement placementHint
Definition: RadioVisualizerBase.h:45
cModule * visualizationTargetModule
Definition: VisualizerBase.h:25
virtual Ptr< const IAntennaGain > getGain() const =0
Returns the antenna's gain calculator for directional selectivity.
virtual double getGainRadius(double gain, double maxGain) const
Definition: RadioCanvasVisualizer.cc:240
static Quaternion rotationFromTo(const Coord &from, const Coord &to)
Definition: Quaternion.cc:157
virtual void setImageIndex(IndexedImageFigure *indexedImageFigure, int index) const
Definition: RadioCanvasVisualizer.cc:234
cFigure::LineStyle antennaLobeLineStyle
Definition: RadioVisualizerBase.h:61
cFigure::Color antennaLobeFillColor
Definition: RadioVisualizerBase.h:63
double antennaLobeRadius
Definition: RadioVisualizerBase.h:56
cFigure::Point computeCanvasPoint(const Coord &point) const
Definition: CanvasProjection.cc:34
virtual IMobility * getMobility() const =0
Returns the mobility of this antenna that describes its position and orientation over time.
bool displayReceptionState
Definition: RadioVisualizerBase.h:37
std::vector< std::string > receptionStateImages
Definition: RadioVisualizerBase.h:40
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
static const Coord X_AXIS
Definition: Coord.h:29
pow< internal::none, 0 > unit
Definition: Units.h:72
double max(const double a, const double b)
Returns the maximum of a and b.
Definition: SctpAssociation.h:266
std::vector< std::string > radioModeImages
Definition: RadioVisualizerBase.h:39
ModuleRefByPar< NetworkNodeCanvasVisualizer > networkNodeVisualizer
Definition: RadioCanvasVisualizer.h:43
bool displayRadioMode
Definition: RadioVisualizerBase.h:36
cFigure::Color antennaLobeLineColor
Definition: RadioVisualizerBase.h:60
virtual void initialize(int stage) override
Definition: RadioVisualizerBase.cc:31
virtual const Quaternion & getCurrentAngularPosition()=0
Returns the angular position at the current simulation time.
double zIndex
Definition: RadioCanvasVisualizer.h:41
deg antennaLobeStep
Definition: RadioVisualizerBase.h:57
std::vector< std::string > transmissionStateImages
Definition: RadioVisualizerBase.h:41
const char * tags
Definition: VisualizerBase.h:27
bool displayTransmissionState
Definition: RadioVisualizerBase.h:38
virtual const Coord & getCurrentPosition()=0
Returns the position at the current simulation time.
virtual void removeRadioVisualization(const RadioVisualization *radioVisualization)
Definition: RadioVisualizerBase.cc:120
const char * antennaLobeMode
Definition: RadioVisualizerBase.h:53
value< double, units::rad > rad
Definition: Units.h:1245
double antennaLobeLineWidth
Definition: RadioVisualizerBase.h:62
bool displayAntennaLobes
Definition: RadioVisualizerBase.h:50
Value sin(const value< Value, Unit > &angle)
Definition: Units.h:1518
double placementPriority
Definition: RadioVisualizerBase.h:46
double antennaLobeLogarithmicScale
Definition: RadioVisualizerBase.h:55