Styling and Appearance¶
Goals¶
INET visualizers offer a range of customization options, allowing you to tailor the appearance of your simulation to your needs. This includes adjusting colors, line widths, sizes, and placements, among other things. These customization options can enhance the visual appeal and clarity of your simulation, particularly when multiple visualizations are enabled.
This showcase features four examples that illustrate how to customize lines, arrows, icons, fonts, and annotations.
4.0
Customizing Lines and Arrows¶
In INET simulations, links and packet paths are visualized as arrows. When too many links and paths are visualized in a simulation, it can be difficult to find which arrows correspond to the links or paths that we are interested in. In such a case, arrow customization may be used to make the interesting arrows stand out more.
This showcase contains an example simulation where arrows are
customized. The simulation can be run by selecting the Line
configuration from the ini file.
The network consists of two nodes, host1
and host2
, which
communicate wirelessly, and we customize data link activity arrows. The
following configuration is used for the visualizer:
*.visualizer.*.dataLinkVisualizer.lineColor = "blue"
*.visualizer.*.dataLinkVisualizer.lineStyle = "dashed"
*.visualizer.*.dataLinkVisualizer.lineWidth = 6
*.visualizer.*.dataLinkVisualizer.lineContactSpacing = 15
*.visualizer.*.dataLinkVisualizer.lineShift = 32
Move the mouse over the image to see the differences between the default and the customized visualization.
The lineColor
parameter specifies the color of the arrow, and it
accepts English color names (more precisely, SVG color names) and
HTML-style RGB values. For the NetworkRouteVisualizer,
TransportRouteVisualizer and MobilityVisualizer modules,
lineColor
may be set to a list of colors separated by commas, or to
the dark
and light
keywords which will be interpreted as a list
of good dark (light) colors. The lineStyle
parameter can be set to
solid
, dotted
or dashed
. Line width is controlled by the
lineWidth
parameter. If there are multiple lines between the same
nodes, the space between the lines can be changed by adjusting the
lineShift
parameter. The space between the end of the arrow and the
network node can be adjusted by setting the lineContactSpacing
parameter.
Customizing Labels¶
Lines and arrows often have labels placed next to them for displaying additional information. Customizing the font or color of such labels is often useful, for example, to highlight important information.
The example simulation can be run by choosing the Font
configuration
from the ini file. The network is the same as in the previous example:
two hosts communicating wirelessly. We customize the font used in labels
on data link activity arrows.
To customize the fonts used in labels, we configure DataLinkVisualizer in the following way:
*.visualizer.*.dataLinkVisualizer.labelFont = "Courier New, 12px, bold"
*.visualizer.*.dataLinkVisualizer.labelColor = "red"
Move the mouse over the image to see the differences between the default and the customized visualization.
Font family, font size and font style can be set by using the
labelFont
parameter. You can omit any value from the parameter if
you do not want to change that. For example, you can set labelFont
to "bold"
, so that font family and font size remain unchanged. The
labelColor
parameter can be set to a single color by using a color
name or an HTML-style RGB value.
Labels are enabled by default. (Labels can be disabled by setting the
displayLabels
parameter to false.)
For InterfaceTableVisualizer and StatisticVisualizer, the
font
parameter is used instead of labelFont
, and textColor
is used instead of labelColor
.
Customizing Icons¶
Some visualizers, such as TransportConnectionVisualizer, display icons. The following example shows how to customize icon appearance in INET.
The simulation can be run by choosing the Icon
configuration from
the ini file. The network is the same as in the previous examples: two
hosts communicating wirelessly. This time, however, we add TCP traffic
between them, so that we can show how the icons displayed by
TransportConnectionVisualizer can be customized.
We use the following configuration to customize the transport connection icons:
*.visualizer.*.transportConnectionVisualizer.icon = "misc/marker2"
*.visualizer.*.transportConnectionVisualizer.iconColor = "light"
Move the mouse over the image to see the differences between the default and the customized visualization.
The icon
parameter specifies the icon to be used. The OMNeT++ image
path is used to find the image, just like with the i
display string
tag or the cIconFigure
class. In our case, the misc/marker2
name
resolves to the inet/images/misc/marker2.png
file:
The iconColor
parameter allows you to colorize (tint) the icon. As
TransportConnectionVisualizer potentially displays several icons per
network node, the parameter accepts a (space-separated) list of colors,
and the module will cycle through them as it assigns colors to icons. It
also accepts the dark
and light
keywords, which will be
interpreted as a list of good dark (light) colors.
The LinkBreakVisualizer and PacketDropVisualizer modules have an
iconTintColor
parameter instead of iconColor
. However, note,
that iconTintColor
can be set only to a single color. These
visualizers also have an iconTintAmount
parameter. By adjusting
iconTintAmount
, the colorization amount of the icon can be adjusted
between zero and one. If we set the parameter to zero, the icon will not
be tinted at all. If the parameter is set to one, the icon will be
tinted fully.
Placing Annotations¶
When many annotations are placed around a network node, being able to control their placement can reduce clutter and make the simulation more comprehensible.
The following example shows how to control the placement of annotations.
The simulation can be run by selecting the Annotation
configuration
from the ini file. The network is the same as in the previous example.
The simulation will set up several TCP connections between the two
hosts, and TransportConnectionVisualizer will be used to visualize
them as marker icons.
We use the following configuration to place the annotation icons.
*.visualizer.*.transportConnectionVisualizer.placementHint = "bottom"
Move the mouse over the image to see the differences between the default and the customized visualization.
The placementHint
parameter determines where the annotations will be
placed. The annotations can be placed in eight directions around the
node: topCenter
, left
, right
, bottomCenter
, topLeft
,
topRight
, bottomLeft
, bottomRight
. The placementHint
parameter may contain one or more of those words, denoting the preferred
direction(s). The word top
is an abbreviation for
topLeft topCenter topRight
; bottom
, left
, and right
are
similar abbreviations. There is also any
, which is the union of all
eight directions. When placementHint
is set to any
, annotations
will be placed as close as possible to the node.
The order of annotation positioning can be controlled by using the
placementPriority
parameter that takes an integer. Zero is the
largest priority.
Sources: omnetpp.ini
, StylingShowcase.ned
More Information¶
For more information, refer to the visualizers’ NED documentation.
Try It Yourself¶
If you already have INET and OMNeT++ installed, start the IDE by typing
omnetpp
, import the INET project into the IDE, then navigate to the
inet/showcases/visualizer/canvas/styling
folder in the Project Explorer. There, you can view
and edit the showcase files, run simulations, and analyze results.
Otherwise, there is an easy way to install INET and OMNeT++ using opp_env, and run the simulation interactively.
Ensure that opp_env
is installed on your system, then execute:
$ opp_env run inet-4.0 --init -w inet-workspace --install --chdir \
-c 'cd inet-4.0.*/showcases/visualizer/canvas/styling && inet'
This command creates an inet-workspace
directory, installs the appropriate
versions of INET and OMNeT++ within it, and launches the inet
command in the
showcase directory for interactive simulation.
Alternatively, for a more hands-on experience, you can first set up the workspace and then open an interactive shell:
$ opp_env install --init -w inet-workspace inet-4.0
$ cd inet-workspace
$ opp_env shell
Inside the shell, start the IDE by typing omnetpp
, import the INET project,
then start exploring.