diff --git a/mevislab.github.io/content/examples/basic_mechanisms/contour_filter/index.md b/mevislab.github.io/content/examples/basic_mechanisms/contour_filter/index.md
index 4f5bfc392..0079a1aa1 100644
--- a/mevislab.github.io/content/examples/basic_mechanisms/contour_filter/index.md
+++ b/mevislab.github.io/content/examples/basic_mechanisms/contour_filter/index.md
@@ -11,7 +11,7 @@ This example shows how to create a contour filter.
Images are loaded via `ImageLoad` module and visualized unchanged in a `View2D` module *View2D1*.
Additionally, the images are modified by a local macro module `Filter` and shown in another `View2D` viewer *View2D*.
-In order to display the same slice (unchanged and changed), the module `SyncFloat` is used to synchronize the field value *startSlice* in both viewers. The `SyncFloat` module duplicates the value *Float1* to the field *Float2* if it differs by *Epsilon*.
+In order to display the same slice (unchanged and changed), the module `SyncFloat` is used to synchronize the field value startSlice in both viewers. The `SyncFloat` module duplicates the value Float1 to the field Float2 if it differs by Epsilon.

diff --git a/mevislab.github.io/content/examples/basic_mechanisms/macro_modules_and_module_interaction/example1/index.md b/mevislab.github.io/content/examples/basic_mechanisms/macro_modules_and_module_interaction/example1/index.md
index aa3f30bbd..5dc96939d 100644
--- a/mevislab.github.io/content/examples/basic_mechanisms/macro_modules_and_module_interaction/example1/index.md
+++ b/mevislab.github.io/content/examples/basic_mechanisms/macro_modules_and_module_interaction/example1/index.md
@@ -10,7 +10,7 @@ This example contains an entire package structure. Inside, you can find the exam
## Summary
A new macro module `Filter` has been created. Initially, macro modules do not provide an own panel containing user interface elements such as buttons. The *Automatic Panel* is shown on double-clicking the module providing the name of the module.
-In this example we update the *.script* file of the `Filter` module to display the kernel selection field of the `Convolution` module within its network.
+In this example we update the *.script* file of the `Filter` module to display the Kernel field of the `Convolution` module within its network.
{{}}
Changes applied to fields in the macro module's panel are applied to their internal network as well.
diff --git a/mevislab.github.io/content/tutorials/basicmechanisms.md b/mevislab.github.io/content/tutorials/basicmechanisms.md
index b3ecdcb43..63ecf6740 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms.md
@@ -27,11 +27,11 @@ Additional information on the basics of MeVisLab are explained {{< docuLinks "/R
### Loading Data {#TutorialLoadingData}
First, we need to load the data we would like to work on, e.g., a CT scan. In MeVisLab, modules are used to perform their associated specific task: they are the basic entities you will be working with. Each module has a different functionality for processing, visualization, and interaction. Connecting modules enables the development of complex processing pipelines. You will get to know different types of modules throughout the course of this tutorial.
-Starting off, we will add the module `ImageLoad` to our network to load our data. The module can be found by typing its name into the search bar on the top-right corner and is added to your network by clicking it.
+Starting off, we will add the module `ImageLoad` to our network to load our data. The module can be found by typing its name into the search bar on the top-right corner and is added to your network by clicking it {{< mousebutton "left" >}}.

-Next, we select and load the data we'd like to process. Double-click the module `ImageLoad` to open its panel. You can browse through your folders to select the data you'd like to open. Example data can be found in the MeVisLab DemoData directory *$(InstallDir)/Packages/MeVisLab/Resources/DemoData* located in the MeVisLab installation path. Select a file, for example, an MRI scan of a shoulder *Shoulder_Fracture.tif*. The image is loaded immediately and basic information of the loaded image can be seen in the Panel.
+Next, we select and load the data we'd like to process. Double-click {{< mousebutton "left" >}} the module `ImageLoad` to open its panel. You can browse through your folders to select the data you'd like to open. Example data can be found in the MeVisLab DemoData directory *$(InstallDir)/Packages/MeVisLab/Resources/DemoData* located in the MeVisLab installation path. Select a file, for example, an MRI scan of a shoulder *Shoulder_Fracture.tif*. The image is loaded immediately and basic information of the loaded image can be seen in the Panel.
{{}}
There also are modules to load multiple other formats of data. These are the most common ones:
@@ -45,7 +45,7 @@ For a more detailed description on loading DICOM images, see {{< docuLinks "/Res
[//]: <> (MVL-651)
### The Output Inspector and the Module Inspector {#The_Output_Inspector_and_the_Module_Inspector}
-To inspect and visualize the loaded data, we can use the Output Inspector located in the {{< docuLinks "/Resources/Documentation/Publish/SDK/MeVisLabManual/ch04s09.html" "Views" >}} area. You can already interact with the image using the mouse wheel {{< mousebutton "middle" >}} and mouse buttons {{< mousebutton "left" >}} / {{< mousebutton "right" >}}. To preview the image, click on the triangle on the top side of the module `ImageLoad`, which offers the module's output. All module outputs can be found at the top side of the respective module.
+To inspect and visualize the loaded data, we can use the Output Inspector located in the {{< docuLinks "/Resources/Documentation/Publish/SDK/MeVisLabManual/ch04s09.html" "Views" >}} area. You can already interact with the image using the mouse wheel {{< mousebutton "middle" >}} and mouse buttons {{< mousebutton "left" >}} / {{< mousebutton "right" >}}. To preview the image, click {{< mousebutton "left" >}} on the triangle on the top side of the module `ImageLoad`, which offers the module's output. All module outputs can be found at the top side of the respective module.
You can now inspect your image in 2D:
@@ -53,9 +53,9 @@ You can now inspect your image in 2D:

-Your image does not look like this? One reason might be that the slice of the image you are looking at has no information. Click on the Output Inspector and scroll through the slices (this process is called "Slicing") by using the mouse wheel {{< mousebutton "middle" >}}. Still not seeing anything? Then, try to adjust the contrast of the given image by keeping the right mouse button {{< mousebutton "right" >}} pressed while moving the mouse.
+Your image does not look like this? One reason might be that the slice of the image you are looking at has no information. Click {{< mousebutton "left" >}} on the Output Inspector and scroll through the slices (this process is called "Slicing") by using the mouse wheel {{< mousebutton "middle" >}}. Still not seeing anything? Then, try to adjust the contrast of the given image by keeping the right mouse button {{< mousebutton "right" >}} pressed while moving the mouse.
-You are not restricted to 2D. The Output Inspector offers a 3D View of most loaded images. Try to click on the 3D tab located in the Output Inspector. The 3D display of the image can be rotated by left-clicking on the image and moving the courser around. The little cube in the lower right corner of the viewer shows the orientation of the image.
+You are not restricted to 2D. The Output Inspector offers a 3D View of most loaded images. Try to click {{< mousebutton "left" >}} on the 3D tab located in the Output Inspector. The 3D display of the image can be rotated by left-clicking {{< mousebutton "left" >}} on the image and moving the courser around. The little cube in the lower right corner of the viewer shows the orientation of the image.
{{}}
* A = anterior, front
@@ -66,7 +66,7 @@ You are not restricted to 2D. The Output Inspector offers a 3D View of most load
* F = feet
{{}}
-Below the Output Inspector, you'll find the Module Inspector. The Module Inspector displays properties and parameters of the selected module. Parameters are stored in so called **Fields**. Using the Module Inspector, you can examine different fields of your `ImageLoad` module. The module has, for example, the fields *filename* (the path the loaded image is stored in), as well as *sizeX*, *sizeY*, and *sizeZ* (the extent of the loaded image).
+Below the Output Inspector, you'll find the Module Inspector. The Module Inspector displays properties and parameters of the selected module. Parameters are stored in so called **Fields**. Using the Module Inspector, you can examine different fields of your `ImageLoad` module. The module has, for example, the fields filename (the path the loaded image is stored in), as well as sizeX, sizeY, and sizeZ (the extent of the loaded image).

@@ -79,7 +79,7 @@ The module `View2D` has one input connector for voxel images (triangle-shaped)
You can now display the loaded image in the newly added viewer module by connecting the output of the module `ImageLoad` to the input connector of the module `View2D`. Follow these steps to do so:
-1. Click the output connector of `ImageLoad`.
+1. Click {{< mousebutton "left" >}} the output connector of `ImageLoad`.
2. Keep the left mouse button {{< mousebutton "left" >}} pressed while dragging the connection to the input connector of `View2D` (white line).
@@ -89,7 +89,7 @@ You can now display the loaded image in the newly added viewer module by connect

-Although the connection is established, no image rendering has started yet. To initialize rendering, open the `View2D` panel by double-clicking on the module. Similar to the Output Inspector, you can scroll through the slices and set different levels of contrast. The amount of displayed annotations is altered by pressing {{< keyboard "A" >}} on the keyboard (annotation-mode).
+Although the connection is established, no image rendering has started yet. To initialize rendering, open the `View2D` panel by double-clicking {{< mousebutton "left" >}} on the module. Similar to the Output Inspector, you can scroll through the slices and set different levels of contrast. The amount of displayed annotations is altered by pressing {{< keyboard "A" >}} on the keyboard (annotation-mode).

@@ -104,17 +104,17 @@ Connecting, Disconnecting, Moving, and Replacing Connections is explained in mor
[//]: <> (MVL-653)
### Image Processing {#TutorialImageProcessing}
-An average kernel will be used to smooth the image as our next step will be to actually process our image. Add the `Convolution` module to your workspace and disconnect the `View2D` module from the `ImageLoad` module by clicking on the connection and pressing {{< keyboard "DEL" >}}. Now, you can build new connections from the module `ImageLoad` to the module `Convolution` and the `Convolution` module to `View2D`.
+An average kernel will be used to smooth the image as our next step will be to actually process our image. Add the `Convolution` module to your workspace and disconnect the `View2D` module from the `ImageLoad` module by clicking {{< mousebutton "left" >}} on the connection and pressing {{< keyboard "DEL" >}}. Now, you can build new connections from the module `ImageLoad` to the module `Convolution` and the `Convolution` module to `View2D`.

-Open the panel of the `Convolution` module by double-clicking it. The panel allows configuration of the module. You can adjust parameters or select a kernel. We will be using the *3x3 Average Kernel* for now.
+Open the panel of the `Convolution` module by double-clicking {{< mousebutton "left" >}} it. The panel allows configuration of the module. You can adjust parameters or select a kernel. We will be using the *3x3 Average Kernel* for now.

The module `View2D` is now displaying the smoothed image.
-To compare the processed and unprocessed image, click on the output connector of the module `ImageLoad` to display the original image in the Output Inspector. The Output Inspectors greatest advantage is that it's able to display the output of any connector in the process chain (as long as an interpretable format is used). Simply click the connector or connection to find out more about the module's output.
+To compare the processed and unprocessed image, click {{< mousebutton "left" >}} on the output connector of the module `ImageLoad` to display the original image in the Output Inspector. The Output Inspectors greatest advantage is that it's able to display the output of any connector in the process chain (as long as an interpretable format is used). Simply click {{< mousebutton "left" >}} the connector or connection to find out more about the module's output.
You can also inspect changes between processed (output connector) and unprocessed (input connector) images by adding a second or even third viewer to your network. "Layers" of applied changes can be inspected next to each other using more than one viewer and placing as well as connecting them accordingly. We will be using a second `View2D` module. Notice how the second viewer is numbered for you to be able to distinguish them better. It might be important to know at this point that numerous connections can be established from one output connector but an input connector can only receive one stream of data. Connect the module `ImageLoad` to the second viewer to display the images twice. You can now scroll through the slices of both viewers and inspect the images.
@@ -129,26 +129,26 @@ In order to practice establishing parameter connections, add the `SyncFloat` mod

-We will be synchronizing the *startSlice* fields of our viewers to be able to directly compare the effect our processing module has on the slices:
-Right-click the viewer `View2D` to open its context menu and select {{< menuitem "Show Window" "Automatic Panel" >}}.
+We will be synchronizing the startSlice fields of our viewers to be able to directly compare the effect our processing module has on the slices:
+Right-click {{< mousebutton "right" >}} the viewer `View2D` to open its context menu and select {{< menuitem "Show Window" "Automatic Panel" >}}.

Doing so shows all parameter fields of the module `View2D`.
-Search for the field *startSlice*. The field indicates which slice is currently shown in the viewer. If you scroll through the slices of an image, the value of *startSlice* changes.
+Search for the field startSlice. The field indicates which slice is currently shown in the viewer. If you scroll through the slices of an image, the value of startSlice changes.
-Now, double-click the module `SyncFloat` to open its panel.
+Now, double-click {{< mousebutton "left" >}} the module `SyncFloat` to open its panel.
-Click on the label *startSlice* in the automatic panel of the module `View2D`, keep the button pressed, and drag the connection to the label *Float1* in the panel of the module `SyncFloat`.
+Click {{< mousebutton "left" >}} on the label startSlice in the automatic panel of the module `View2D`, keep the button pressed, and drag the connection to the label Float1 in the panel of the module `SyncFloat`.

-The connection is drawn as a thin gray arrow between both modules with the arrowhead pointing to the module that receives the field value as input. The value of the field *startSlice* is now transmitted to the field *Float1*. Changing *startSlice* automatically changes *Float1*, but not the other way round.
+The connection is drawn as a thin gray arrow between both modules with the arrowhead pointing to the module that receives the field value as input. The value of the field startSlice is now transmitted to the field Float1. Changing startSlice automatically changes Float1, but not the other way round.

-We will now establish a connection from the module `SyncFloat` to the second viewer, `Viewer2D1`. In order to do that, open the automatic panel `View2D1`. Draw a connection from the label `Float2` of the panel of the module `SyncFloat` to the label *startSlice* in the automatic panel of the module `View2D1`. Lastly, implement a connection between the parameter fields *startSlice* of both viewers. Draw the connection from `View2D1` to `View2D`.
+We will now establish a connection from the module `SyncFloat` to the second viewer, `Viewer2D1`. In order to do that, open the automatic panel `View2D1`. Draw a connection from the label Float2 of the panel of the module `SyncFloat` to the label startSlice in the automatic panel of the module `View2D1`. Lastly, implement a connection between the parameter fields startSlice of both viewers. Draw the connection from `View2D1` to `View2D`.

@@ -159,15 +159,15 @@ As a result, scrolling through the slices with the mouse wheel {{< mousebutton "
It is also possible to use the predefined module `SynchroView2D` to accomplish a similar result.(`SynchroView2D`'s usage is described in more detail in [this chapter](tutorials/visualization/visualizationexample1/) ).
### Grouping Modules {#TutorialGroupingModules}
-A contour filter can be created based on our previously created network. To finalize the filter, add the modules `Arithmetic2` and `Morphology` to your workspace and connect the modules as shown below. Double-click the module `Arithmetic2` to open its panel. Change the field *Function* of the module `Arithmetic2` to use the function *subtract* in the panel of the module. The contour filter is done now. You can inspect each processing step using the Output Inspector by clicking on the input and output connectors of the respective modules. The final results can be displayed using the viewer modules. If necessary, adjust the contrast by pressing the right mouse button and moving the cursor.
+A contour filter can be created based on our previously created network. To finalize the filter, add the modules `Arithmetic2` and `Morphology` to your workspace and connect the modules as shown below. Double-click {{< mousebutton "left" >}} the module `Arithmetic2` to open its panel. Change the field Function of the module `Arithmetic2` to use the function subtract in the panel of the module. The contour filter is done now. You can inspect each processing step using the Output Inspector by clicking {{< mousebutton "left" >}} on the input and output connectors of the respective modules. The final results can be displayed using the viewer modules. If necessary, adjust the contrast by pressing the right mouse button and moving the cursor.

-If you'd like to know more about specific modules, search for help. You can do this by right-clicking the module and select help, which offers an example network and further information about the selected module in particular.
+If you'd like to know more about specific modules, search for help. You can do this by right-clicking {{< mousebutton "right" >}} the module and select {{< menuitem "Help" >}}, which offers an example network and further information about the selected module in particular.

-To be able to better distinguish the image processing pipeline, you can encapsulate it in a group: select the three modules, for example, by dragging a selection rectangle around them. Then, right-click the selection to open the context menu and select {{< menuitem "Add to New Group" >}}.
+To be able to better distinguish the image processing pipeline, you can encapsulate it in a group: select the three modules, for example, by dragging a selection rectangle around them. Then, right- {{< mousebutton "right" >}} the selection to open the context menu and select {{< menuitem "Add to New Group" >}}.

@@ -192,12 +192,12 @@ You have probably already noticed how the modules differ in color. Each color re
* Green modules are Open Inventor modules: they enable visual 3D scene graphs.
* Brown modules are called macro modules. Macro modules encapsulate a whole network in a single module.
-To condense our filter into one single module, we will now be creating a macro module out of it. To do that, right-click on the group's title and select *Convert To Local Macro*. Name your new macro module and finish. You just created a local macro module. Local macros can only be used from networks in the same or any parent directory.
+To condense our filter into one single module, we will now be creating a macro module out of it. To do that, right-click {{< mousebutton "right" >}} on the group's title and select {{< menuitem "Convert To Local Macro" >}}. Name your new macro module and finish. You just created a local macro module. Local macros can only be used from networks in the same or any parent directory.


-Right-click the macro module and select *Show Internal Network* to inspect and change the internal network. You can change the properties of the new macro module by changing the properties in the internal network. You can, for example, right-click the module `Convolution` and change the kernel. These changes will be preserved.
+Right-click {{< mousebutton "right" >}} the macro module and select {{< menuitem "Show Internal Network" >}} to inspect and change the internal network. You can change the properties of the new macro module by changing the properties in the internal network. You can, for example, click {{< mousebutton "left" >}} the module `Convolution` and change the kernel.

diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/coordinatesystems/coordinatesystems2.md b/mevislab.github.io/content/tutorials/basicmechanisms/coordinatesystems/coordinatesystems2.md
index 31a89fa19..d54567cd6 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/coordinatesystems/coordinatesystems2.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/coordinatesystems/coordinatesystems2.md
@@ -49,11 +49,11 @@ Another option for Python is [pydicom](https://pydicom.github.io/).
{{}}
## Orthogonal Views
-The module `OrthoView2D` provides a 2D view displaying the input image in three orthogonal viewing directions. By default, the view is configured as *Cube* where the transverse view is placed in the top right segment, sagittal in bottom left, and coronal in bottom right segment. Use the left mouse button to set a position in the data set. This position will be displayed in all available views and is available as field *worldPosition*.
+The module `OrthoView2D` provides a 2D view displaying the input image in three orthogonal viewing directions. By default, the view is configured as *Cube* where the transverse view is placed in the top right segment, sagittal in bottom left, and coronal in bottom right segment. Use the left mouse button to set a position in the data set. This position will be displayed in all available views and is available as field worldPosition.

-As already learned in the previous example [1.1: MeVisLab Coordinate Systems](tutorials/basicmechanisms/coordinatesystems/coordinatesystems), world and voxel positions are based on different coordinate systems. Selecting the top left corner of any of your views will not show a world position of (0, 0, 0). You can move the mouse cursor to the voxel position (0, 0, 0) as seen in the image information of the viewers in brackets *(x, y, z)*. The field *worldPosition* then shows the location of the image in world coordinate system (see `Info` module).
+As already learned in the previous example [1.1: MeVisLab Coordinate Systems](tutorials/basicmechanisms/coordinatesystems/coordinatesystems), world and voxel positions are based on different coordinate systems. Selecting the top left corner of any of your views will not show a world position of *(0, 0, 0)*. You can move the mouse cursor to the voxel position *(0, 0, 0)* as seen in the image information of the viewers in brackets *(x, y, z)*. The field worldPosition then shows the location of the image in world coordinate system (see `Info` module).

diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules.md
index 1e8483517..89cb286fe 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules.md
@@ -98,7 +98,7 @@ Parameter Fields allow users to control the behavior of the internal network. Th
You have two options when adding fields to your macro module:
* **Define your own fields:** You can define your own fields by specifying their name, type, and default value in the *.script* file. This allows you to provide custom parameters for your macro module, tailored to your specific needs. These parameters can be use as input from the user or output from the modules processing.
-* **Reuse fields from the internal network:** Instead of defining your own field, you can expose an existing field from one of the modules of your internal network. To do this, you reference the *internalName* of the internal field you want to reuse. This makes the internal field accessible at the macro module level, allowing users to interact with it directly without duplicating parameters. Changes of the field value are automatically applied in your internal network.
+* **Reuse fields from the internal network:** Instead of defining your own field, you can expose an existing field from one of the modules of your internal network. To do this, you reference the internalName of the internal field you want to reuse. This makes the internal field accessible at the macro module level, allowing users to interact with it directly without duplicating parameters. Changes of the field value are automatically applied in your internal network.

diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/guidesign.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/guidesign.md
index 5b4f481d4..6742050de 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/guidesign.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/guidesign.md
@@ -34,7 +34,7 @@ More information about GUI design in MeVisLab can be found {{< docuLinks "/Resou
### Creation of a Module Panel
In [Example 2.2](tutorials/basicmechanisms/macromodules/globalmacromodules) we created the global macro module `Filter`. By now, this module does not have a proper panel. When double-clicking {{< mousebutton "left" >}} the module, the *Automatic Panel* is shown.
-The *Automatic Panel* contains fields, as well as module inputs and outputs. In this case, no fields exists except the *instanceName*. Accordingly, there is no possibility to interact with the module. Only the input and the output of the module are given.
+The *Automatic Panel* contains fields, as well as module inputs and outputs. In this case, no fields exists except the instanceName. Accordingly, there is no possibility to interact with the module. Only the input and the output of the module are given.

@@ -65,7 +65,7 @@ Interface {
{{}}
##### Module Inputs and Outputs
-To create an input/output, you need to define a *Field* in the respective input/output section. Each input/output gets a name (here *input0/output0*) that you can use to reference this field. The module input maps to an input of the internal network. You need to define this mapping. In this case, the input of the macro module `Filter` maps to the input of the module `Convolution` of the internal network (*internalName = Convolution.input0*). Similarly, you need to define which output of the internal network maps to the output of the macro module `Filter`. In this example, the output of the internal module `Arithmethic2` maps to the output of our macro module `Filter` (*internalName = Arithmetic2.output0*).
+To create an input/output, you need to define a *Field* in the respective input/output section. Each input/output gets a name (here input0/output0) that you can use to reference this field. The module input maps to an input of the internal network. You need to define this mapping. In this case, the input of the macro module `Filter` maps to the input of the module `Convolution` of the internal network (internalName = Convolution.input0). Similarly, you need to define which output of the internal network maps to the output of the macro module `Filter`. In this example, the output of the internal module `Arithmethic2` maps to the output of our macro module `Filter` (internalName = Arithmetic2.output0).
Creating an input/output causes:
1. Input/output connectors are added to the module.
@@ -76,7 +76,7 @@ Creating an input/output causes:

##### Module Fields
-In the *Parameters* section, you can define *fields* of your macro module. These fields may map to existing fields of the internal network (*internalName = ...* ), but they do not need to and can also be completely new. You can reference these fields when creating a panel, to allow interactions with these fields. All fields appear in the *Automatic Panel*.
+In the *Parameters* section, you can define *fields* of your macro module. These fields may map to existing fields of the internal network (internalName = ...), but they do not need to and can also be completely new. You can reference these fields when creating a panel, to allow interactions with these fields. All fields appear in the *Automatic Panel*.
### Module Panel Layout
To create your own user interface, we need to create a {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#mdl_Window" "Window" >}}. A window is one of the layout elements that exist in MDL. These layout elements are called {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#Controls" "controls" >}}. The curled brackets define the window section, in which you can define properties of the window and insert further controls like a {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#mdl_Box" "Box" >}}.
@@ -186,19 +186,13 @@ You can add the module `GUIExample` to your workspace and play around with is.
{{}}
#### Access to Existing Fields of the Internal Network
-To interact with fields of the internal network in your user interface, we
-need to access these fields. To access the field of the internal module
-`Convolution`, which defines the kernel, we need to use the internal
-network name. To find the internal field name, open the internal network of the macro module `Filter` (click on the module using the middle mouse button {{< mousebutton "middle" >}}).
+To interact with fields of the internal network in your user interface, we need to access these fields. To access the field of the internal module `Convolution`, which defines the Kernel, we need to use the internal network name. To find the internal field name, open the internal network of the macro module `Filter` (click on the module using the middle mouse button {{< mousebutton "middle" >}}).
-Then, open the panel of the module `Convolution` and right-click {{< mousebutton "right" >}} the field title *Use* of the box *Predefined Kernel* and select *Copy Name*. You now copied the internal network name of the field to your clipboard. The name is made up of *ModuleName.FieldName*, in this case *Convolution.predefKernel*.
+Then, open the panel of the module `Convolution` and right-click {{< mousebutton "right" >}} the field title Use of the box *Predefined Kernel* and select Copy Name. You now copied the internal network name of the field to your clipboard. The name is made up of *ModuleName.FieldName*, in this case Convolution.predefKernel.

-In the panel of the module `Convolution`, you can change this variable *Kernel* via a drop-down menu. In
-MDL, a drop-down menu is called a {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#mdl_ComboBox" "ComboBox" >}}. We can take over the field *predefKernel*, its drop-down menu and all its properties by
-creating a new field in our panel and reference to the internal
-field *Convolution.predefKernel*, which already exist in the internal network.
+In the panel of the module `Convolution`, you can change this variable Kernel via a drop-down menu. In MDL, a drop-down menu is called a {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#mdl_ComboBox" "ComboBox" >}}. We can take over the field predefKernel, its drop-down menu and all its properties by creating a new field in our panel and reference to the internal field Convolution.predefKernel, which already exist in the internal network.
Changes of the properties of this field can be done in the curled brackets using tags (here, we changed the title).
@@ -220,7 +214,7 @@ Window MyWindowName {

-As an alternative, you can define the field *kernel* in the *Parameters* section, and reference the defined field by its name. The result in the panel is the same. You can see a difference in the automatic panel. All fields that are defined in the interface in the *Parameters* section appear in the automatic panel. Fields of the internal network, which are used but not declared in the section *Parameters* of the module interface, do not appear in the automatic panel.
+As an alternative, you can define the field kernel in the *Parameters* section, and reference the defined field by its name. The result in the panel is the same. You can see a difference in the automatic panel. All fields that are defined in the interface in the *Parameters* section appear in the automatic panel. Fields of the internal network, which are used but not declared in the section *Parameters* of the module interface, do not appear in the automatic panel.
{{< highlight filename="Filter.script" >}}
```Stan
@@ -272,7 +266,7 @@ Window MyWindowName {
```
{{}}
-The *wakeupCommand* defines a Python function that is executed as soon as the Window is opened. The Button *command* is executed when the user clicks on the Button.
+The *wakeupCommand* defines a Python function that is executed as soon as the Window is opened. The Button *command* is executed when the user clicks {{< mousebutton "left" >}} on the Button.
Both commands reference a Python function that is executed whenever both actions (open the Window or click the Button) are executed.
diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/helpfiles.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/helpfiles.md
index 6db1b06dc..0cee8f097 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/helpfiles.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/helpfiles.md
@@ -37,13 +37,7 @@ We will start by creating a help file using the built-in text editor {{< docuLin

-When creating the help file of a module, all important information of the
-module down to the field specifications are extracted and created automatically. Thus, the
-basic module information is always available in the module
-help. Additional documentation should be added by the module's author. On the left
-side, you can find the outline of the help file. Each section can be
-edited. In this example, we added the purpose of the module
-to the help file.
+When creating the help file of a module, all important information of the module down to the field specifications are extracted and created automatically. Thus, the basic module information is always available in the module help. Additional documentation should be added by the module's author. On the left side, you can find the outline of the help file. Each section can be edited. In this example, we added the purpose of the module to the help file.

@@ -69,7 +63,7 @@ Depending on the way the macro module was created, more or less features are aut
{{}}
### Creation of an Example Network
-To add an example network to your module, you need to add a reference to the respective *.mlab* file to the module definition file (*.def*). Open the file *Filter.def*. You can find the line *exampleNetwork = "$(LOCAL)/networks/FilterExample.mlab"*, which defines the reference to the *.mlab* file containing the example network. By default, the name of the example network is *ModulenameExample.mlab*. An *.mlab* file containing only the module *Filter* is created inside the folder *networks*.
+To add an example network to your module, you need to add a reference to the respective *.mlab* file to the module definition file (*.def*). Open the file *Filter.def*. You can find the line *exampleNetwork = "$(LOCAL)/networks/FilterExample.mlab"*, which defines the reference to the *.mlab* file containing the example network. By default, the name of the example network is *ModulenameExample.mlab*. An *.mlab* file containing only the module `Filter` is created inside the folder *networks*.
It is possible that the reference to the example network or the file *FilterExample.mlab* is missing. One reason could be that its creation was not selected when creating the macro module. In this case, add the reference and the file manually.
diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/itemmodelview.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/itemmodelview.md
index cbfda6c6d..1fde27d0b 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/itemmodelview.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/itemmodelview.md
@@ -97,7 +97,7 @@ Interface {
```
{{}}
-If you now open your panel, you should see the *Input* *inImage* and the just created *Fields*. The *Field* *id* is necessary to identify unique objects in your *ItemModel* later. In order to make this example easier to understand, we defined all types of the *Fields* as *String*. You can also use different types, if you like.
+If you now open your panel, you should see the *Input* inImage and the just created *Fields*. The *Field* id is necessary to identify unique objects in your *ItemModel* later. In order to make this example easier to understand, we defined all types of the *Fields* as *String*. You can also use different types, if you like.

@@ -128,7 +128,7 @@ Window {
```
{{}}
-Every *Field* that we defined in the *Parameters* section is now used as a column in our view. The *Field* *id* has been defined to be the *idAttribute*. If you now open your panel, MeVisLab will complain that you did not define the *Field* *myItemModel*. You have to add a *Field* with this name to your *Parameters* section or as an *Output Field*. We will add an *Output Field*, so that our model can also be used by other modules, if necessary. The type is *MLBase*.
+Every *Field* that we defined in the *Parameters* section is now used as a column in our view. The *Field* id has been defined to be the idAttribute. If you now open your panel, MeVisLab will complain that you did not define the *Field* myItemModel. You have to add a *Field* with this name to your *Parameters* section or as an *Output Field*. We will add an *Output Field*, so that our model can also be used by other modules, if necessary. The type is *MLBase*.
{{< highlight filename="MyItemModelView.script" >}}
```Stan
@@ -145,7 +145,7 @@ Your module now also shows an output *MLBase* object and the columns you defined

### Fill Your Table with Data
-We want to get the necessary information from the defined input image *inImage*. We want the module to update the content whenever the input image changes. Therefore, we need a *Field Listener* calling a Python function whenever the input image changes. Add it to your *Commands* section.
+We want to get the necessary information from the defined input image inImage. We want the module to update the content whenever the input image changes. Therefore, we need a *Field Listener* calling a Python function whenever the input image changes. Add it to your *Commands* section.
{{< highlight filename="MyItemModelView.script" >}}
```Stan
@@ -254,7 +254,7 @@ class MyItemModel:
```
{{}}
-You can see that the above Python code uses a field *selection* that contains the ID of the selected item in our table. We have to add this *Field* to our *.script* file, too.
+You can see that the above Python code uses a field selection that contains the ID of the selected item in our table. We have to add this *Field* to our *.script* file, too.
{{< highlight filename="MyItemModelView.script" >}}
```Stan
@@ -364,7 +364,7 @@ If you now open the panel of your module, you can already see the results.
The first line shows the information of the patient, the study and the series and each child item represents a single slice of the image.
## Interact With Your Model
-We can now add options to interact with the *ItemModelView*. Open the *.script* file of your module and go to the *Commands* section. We add a *FieldListener* to our *selection* field. Whenever the user selects a different item in our view, the Python function *itemClicked* in the *FieldListener* is executed.
+We can now add options to interact with the *ItemModelView*. Open the *.script* file of your module and go to the *Commands* section. We add a *FieldListener* to our selection field. Whenever the user selects a different item in our view, the Python function *itemClicked* in the *FieldListener* is executed.
{{< highlight filename="MyItemModelView.script" >}}
```Stan
@@ -406,7 +406,7 @@ The *itemClicked* function uses *id* from the selected item to get the value of

-The problem is that the *Field* *selection* also changes whenever a new item is added to the model. Your debug output is already flooded with SOP Instance UIDs without interaction.
+The problem is that the *Field* selection also changes whenever a new item is added to the model. Your debug output is already flooded with SOP Instance UIDs without interaction.

diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/pythonscripting.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/pythonscripting.md
index 0061dfb35..c0c117915 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/pythonscripting.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/pythonscripting.md
@@ -110,7 +110,7 @@ If you now use the menu item {{< menuitem "Scripting" "Start Network Script" >}}
Under {{< menuitem "View" "Views" "Scripting Assistant" >}} you can find the view *Scripting Assistant*. In this view, the actions you execute in the workspace are translated into Python script.
-For example: Open the *Scripting Assistant*. Add the module `WEMInitialize` to your workspace. You can select a *Model*, for example, the cube. In addition, you can change the *Translation* and press *Apply*. All these actions can be seen in the *Scripting Assistant* translated into Python code. Therefore, the *Scripting Assistant* is a powerful tool to help you to script you actions.
+For example: Open the *Scripting Assistant*. Add the module `WEMInitialize` to your workspace. You can select a Model, for example, the cube. In addition, you can change the Translation and press *Apply*. All these actions can be seen in the *Scripting Assistant* translated into Python code. Therefore, the *Scripting Assistant* is a powerful tool to help you to script you actions.

diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample1.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample1.md
index f0bbfc3a7..b9d45e868 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample1.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample1.md
@@ -30,8 +30,8 @@ In this example, we like to dynamically change the color of a cube in an Open In
### Scripting Using the Module `RunPythonScript`
Open the panel of `RunPythonScript`. There is an option to display input and output fields. For that, tick the box *Fields* on the top left side of the panel.
-You can also name these fields individually by ticking the box *Edit field titles*. Call the first input field *TimeCounter* and draw a parameter connection from the field *Value* of the panel of `TimeCounter` to the input field *TimeCounter* of the module `RunPythonScript`.
-We can name the first output field *DiffuseColor* and draw a parameter connection from this field to the field *Diffuse Color* in the panel of the module `SoMaterial`.
+You can also name these fields individually by ticking the box *Edit field titles*. Call the first input field TimeCounter and draw a parameter connection from the field Value of the panel of `TimeCounter` to the input field TimeCounter of the module `RunPythonScript`.
+We can name the first output field DiffuseColor and draw a parameter connection from this field to the field Diffuse Color in the panel of the module `SoMaterial`.

@@ -49,7 +49,7 @@ updateOutputValue("DiffuseColor", str(red) + " " + str(green) + " " + str(blue))
```
{{}}
-To update the output field *DiffuseColor*, it is important to use the methods *updateOutputValue(name, value)* or *setOutputValue(name, value)* instead of simply assigning a value to the output field.
+To update the output field DiffuseColor, it is important to use the methods *updateOutputValue(name, value)* or *setOutputValue(name, value)* instead of simply assigning a value to the output field.
You can now see a color change in the viewer `SoExaminerViewer` every time the `TimeCounter` counts.
diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample2.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample2.md
index 72974f9c7..8877b139f 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample2.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/scriptingexample2.md
@@ -85,28 +85,18 @@ Window {

### Edit Viewer Settings in the Panel
-You may want to change the design setting of the right viewer. This is
-still possible via the internal network of the macro module. Open the
-internal network either via the context menu or using the middle mouse
-button {{< mousebutton "middle" >}} and click on the module. After that, open the automatic panel of
-the module `SoExaminerViewer` via context menu {{< menuitem "Show Windows" "Automatic Panel" >}} and change the field *decoration* to *False*. Keep in mind, as we did not create CSOs by now, the right viewer stays black.
+You may want to change the design setting of the right viewer. This is still possible via the internal network of the macro module. Open the internal network either via the context menu or using the middle mouse button {{< mousebutton "middle" >}} and click on the module. After that, open the automatic panel of the module `SoExaminerViewer` via context menu {{< menuitem "Show Windows" "Automatic Panel" >}} and change the field decoration to *False*. Keep in mind, as we did not create CSOs by now, the right viewer stays black.


### Selection of Images
-Next, we like to add the option to browse through the folders and select
-the image, we like to create CSOs from. This functionality is already given in the internal network in the module `LocalImage`. We can copy this functionality from `LocalImage` and add this option to the panel above both viewers. But, how should we know, which field name we
-reference to? To find this out, open the
-internal network of your macro module. Now you are able to open the panel of
-the module `LocalImage`. Right-click {{< mousebutton "right" >}} the desired field: In this case, right-click the label
-*Name:*. Select *Copy Name*, to copy the internal name of this field.
+Next, we like to add the option to browse through the folders and select the image, we like to create CSOs from. This functionality is already given in the internal network in the module `LocalImage`. We can copy this functionality from `LocalImage` and add this option to the panel above both viewers. But, how should we know, which field name we reference to? To find this out, open the internal network of your macro module. Now you are able to open the panel of the module `LocalImage`. Right-click {{< mousebutton "right" >}} the desired field: In this case, right-click the label Name. Select {{< menuitem "Copy Name" >}}, to copy the internal name of this field.

-Now, you can add this field as a new field to your window by pasting the
-name. All field settings are taken over from the internal field from the module `LocalImage`.
+Now, you can add this field as a new field to your window by pasting the name. All field settings are taken over from the internal field from the module `LocalImage`.
{{< highlight filename="IsoCSOs.script" >}}
```Stan
@@ -142,8 +132,7 @@ Window {

### Add Buttons to Your Panel
-As a next step, we like to add a *Browse\...* button, like in the module
-`LocalImage`, and also a button to create the CSOs.
+As a next step, we like to add a *Browse\...* button, like in the module `LocalImage`, and also a button to create the CSOs.
To create the *Browse\...* button:
@@ -153,11 +142,10 @@ To create the *Browse\...* button:
To create the Iso Generator Button:
-We like to copy the field of the *Update* button from the internal module
-`IsoCSOGenerator`, but not its layout so:
+We like to copy the field of the *Update* button from the internal module `IsoCSOGenerator`, but not its layout so:
-1. Create a new Field in the interface, called *IsoGenerator*, which contains the internal field *Update* from the module `IsoCSOGenerator`.
-2. Create a new Button in your Window that uses the field *IsoGenerator*.
+1. Create a new Field in the interface, called IsoGenerator, which contains the internal field apply from the module `CSOIsoGenerator`.
+2. Create a new Button in your Window that uses the field IsoGenerator.
After these steps, you can use the Iso Generator button to create CSOs.
@@ -230,16 +218,13 @@ def fileDialog():

### Colorizing CSOs
-We like to colorize the CSO we hover over with our
-mouse in the 2D viewer. Additionally, when clicking a CSO with the left mouse button {{< mousebutton "left" >}}, this CSO shall be colorized in the 3D viewer. This functionality can be implemented via Python
-scripting (even though MeVisLab has a build-in function to do that). We
-can do this in the following way:
+We like to colorize the CSO we hover over with our mouse in the 2D viewer. Additionally, when clicking a CSO with the left mouse button {{< mousebutton "left" >}}, this CSO shall be colorized in the 3D viewer. This functionality can be implemented via Python scripting (even though MeVisLab has a build-in function to do that). We can do this in the following way:
1. Enable the View *Scripting Assistant*, which translates actions into Python code.

-2. Enable a functionality that allows us to notice the ID of the CSO we are currently hovering over with our mouse. For this, open the internal network of our macro module. We will use the module `SoView2DCSOExtensibleEditor`. Open its panel and select the tab *Advanced*. You can check a box to enable *Update CSO id under mouse*. If you now hover over a CSO, you can see its ID in the panel. We can save the internal network to save this functionality, but we can also solve our problem via scripting. The Scripting Assistant translated our action into code that we can use.
+2. Enable a functionality that allows us to notice the ID of the CSO we are currently hovering over with our mouse. For this, open the internal network of our macro module. We will use the module `SoView2DCSOExtensibleEditor`. Open its panel and select the tab *Advanced*. You can check a box to enable Update CSO id under mouse. If you now hover over a CSO, you can see its ID in the panel. We can save the internal network to save this functionality, but we can also solve our problem via scripting. The Scripting Assistant translated our action into code that we can use.

@@ -319,8 +304,7 @@ def colorizeCSO():
```
{{}}
-Reload your module ({{< keyboard "F5" >}}) and open the panel. After generating CSOs, the CSO under your mouse is marked. Clicking this CSO {{< mousebutton "left" >}} enables the marking in the 3D viewer. If you like, you can add some settings to your *Settings*
-page. For example:
+Reload your module ({{< keyboard "F5" >}}) and open the panel. After generating CSOs, the CSO under your mouse is marked. Clicking this CSO {{< mousebutton "left" >}} enables the marking in the 3D viewer. If you like, you can add some settings to your *Settings* page. For example:
{{< highlight filename="IsoCSOs.script" >}}
```Stan
diff --git a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/viewerexample.md b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/viewerexample.md
index 7f25e1e7d..a82f6fcee 100644
--- a/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/viewerexample.md
+++ b/mevislab.github.io/content/tutorials/basicmechanisms/macromodules/viewerexample.md
@@ -63,7 +63,7 @@ Now, right-click on your *MyViewerApplication* and select {{< menuitem "Related
{{< docuLinks "/Resources/Documentation/Publish/SDK/MeVisLabManual/ch26.html" "MATE">}} opens showing your script file. You already learned how to create simple UI elements in [Example 2.4](tutorials/basicmechanisms/macromodules/guidesign). Now, we will create a little more complex UI including your `View2D` and `View3D`.
-First we need a new *Field* in your *Parameters* section. Name the field *filepath* and set *internalName* to *ImageLoad.filename*.
+First we need a new *Field* in your *Parameters* section. Name the field filepath and set internalName to ImageLoad.filename.
{{< highlight filename="MyViewerApplication.script" >}}
``` Stan
@@ -79,7 +79,7 @@ Interface {
```
{{}}
-We now reuse the *filepath* field from the `ImageLoad` module for our interface. Add a *Window* and a *Vertical* to the bottom of your *.script* file. Add the just created parameter field *filepath* inside your *Vertical* as seen below.
+We now reuse the filepath field from the `ImageLoad` module for our interface. Add a *Window* and a *Vertical* to the bottom of your *.script* file. Add the just created parameter field filepath inside your *Vertical* as seen below.
{{< highlight filename="MyViewerApplication.script" >}}
``` Stan
@@ -98,14 +98,16 @@ Commands {
}
Window {
- Vertical {
- Field filepath {}
- }
+ Category {
+ Vertical {
+ Field filepath {}
+ }
+ }
}
```
{{}}
-If you now double-click {{< mousebutton "left" >}} on your module, you can see your just created filepath field.
+If you now double-click {{< mousebutton "left" >}} on your module, you can see your just created filepath field.

@@ -114,35 +116,37 @@ Next, we will add your 2D and 3D viewers and a *Button* to your *Window*. Change
{{< highlight filename="MyViewerApplication.script" >}}
``` Stan
Window {
- Vertical {
- Horizontal {
- Field filepath {}
- Button {
- title = "Reset"
-
- }
+ Category {
+ Vertical {
+ Horizontal {
+ Field filepath {}
+ Button {
+ title = "Reset"
+
+ }
+ }
+ Horizontal {
+ Viewer View2D.self {
+ type = SoRenderArea
+ pw = 400 ph = 400
+ expandX = yes
+ expandY = yes
+ }
+ Viewer View3D.self {
+ pw = 400 ph = 400
+ expandX = yes
+ expandY = yes
+ }
+ }
+ }
}
- Horizontal {
- Viewer View2D.self {
- type = SoRenderArea
- pw = 400 ph = 400
- expandX = yes
- expandY = yes
- }
- Viewer View3D.self {
- pw = 400 ph = 400
- expandX = yes
- expandY = yes
- }
- }
- }
}
```
{{}}
We have a vertical layout having two items placed horizontally next to each other. The new *Button* gets the title *Reset* but does nothing yet, because we did not add a Python function to a command.
-Additionally, we added the `View2D` and the `View3D` to our *Window* and defined the *height*, *width*, and the *expandX/Y* property to *yes*. This leads our viewers to resize together with our *Window*.
+Additionally, we added the `View2D` and the `View3D` to our *Window* and defined the height, width, and the expandX/Y property to *yes*. This leads our viewers to resize together with our *Window*.
{{}}
Additional information about the `View2D` and `View3D` options can be found in the MeVisLab {{< docuLinks "/Resources/Documentation/Publish/SDK/MDLReference/index.html#mdl_Viewer" "MDL Reference">}}
@@ -196,7 +200,7 @@ Commands {
```
{{}}
-In the above example, we react on changes of the field *startSlice* of the module `View2D`. Whenever the field value (currently displayed slice) changes, the Python function *printCurrentSliceNumber* is executed.
+In the above example, we react on changes of the field startSlice of the module `View2D`. Whenever the field value (currently displayed slice) changes, the Python function *printCurrentSliceNumber* is executed.
In your Python file `MyViewerApplication.py`, you can now add the following:
@@ -211,7 +215,7 @@ Scrolling through slices in the `View2D` module now logs a message containing th
## Summary
* You can add any viewers to your application UI by reusing them in MDL.
-* Parameter fields using the *internalName* of an existing field in your network allows reusing this UI element in your own UI. Changes in your UI are applied to the field in the module.
+* Parameter fields using the internalName of an existing field in your network allows reusing this UI element in your own UI. Changes in your UI are applied to the field in the module.
* Field Listeners allow reacting on changes of a field value in Python.
{{< networkfile "examples/basic_mechanisms/viewer_application/viewerexample.mlab" >}}
diff --git a/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample6.md b/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample6.md
index 01d24b810..8bdb4b7bd 100644
--- a/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample6.md
+++ b/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample6.md
@@ -76,7 +76,7 @@ If you want to define your static text as a parameter in multiple labels, you ca

-You can also add multiple CSO editors to see the different options. Add the `SoCSORectangleEditor` module to your workspace and connect it to the `SoGroup` module. As we now have two different editors, we need to tell the `CSOLabelRenderer` which CSO is to be rendered. Open the panel of the `SoCSODistanceLineEditor`. You can see the field *Extension Id* set to *distanceLine*. Open the panel of the `SoCSORectangleEditor`. You can see the field *Extension Id* set to *rectangle*.
+You can also add multiple CSO editors to see the different options. Add the `SoCSORectangleEditor` module to your workspace and connect it to the `SoGroup` module. As we now have two different editors, we need to tell the `CSOLabelRenderer` which CSO is to be rendered. Open the panel of the `SoCSODistanceLineEditor`. You can see the field Extension Id set to *distanceLine*. Open the panel of the `SoCSORectangleEditor`. You can see the field Extension Id set to *rectangle*.

@@ -100,11 +100,11 @@ deviceOffsetY = 0

-If you now draw new CSOs, you will notice that you still always create distance lines. Open the panel of the `SoView2DCSOExtensibleEditor`. You can see that the *Creator Extension Id* is set to *__default*. By default, the first found eligible editor is used to create a new CSO. In our case this is the `SoCSODistanceLineEditor`.
+If you now draw new CSOs, you will notice that you still always create distance lines. Open the panel of the `SoView2DCSOExtensibleEditor`. You can see that the Creator Extension Id is set to *__default*. By default, the first found eligible editor is used to create a new CSO. In our case this is the `SoCSODistanceLineEditor`.

-Change *Creator Extension Id* to *rectangle*.
+Change Creator Extension Id to *rectangle*.

@@ -113,7 +113,7 @@ Newly created CSOs are now rectangles. The label values are shown as defined in

{{}}
-The *Length* attribute in the context of rectangles represents the perimeter of the rectangle, calculated as *2a + 2b*, where *a* and *b* are the lengths of the two sides of the rectangle.
+The *Length* in the context of rectangles represents the perimeter of the rectangle, calculated as *2a + 2b*, where *a* and *b* are the lengths of the two sides of the rectangle.
{{}}
You will find a lot more information in the `CSOInfo` module for your rectangles. The exact meaning of the values for each type of CSO is explained in the table below.
diff --git a/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample7.md b/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample7.md
index 31c85fae8..d86083a85 100644
--- a/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample7.md
+++ b/mevislab.github.io/content/tutorials/dataobjects/contours/contourexample7.md
@@ -52,7 +52,7 @@ The behavior of your network does not change. You can still draw the same CSOs a
Open the context menu of your `csoList` module {{< mousebutton "right" >}} and select {{