Table of Contents
This document lists the most relevant changes, additions, and fixes provided by the latest MeVisLab releases.
We have suspended the macOS support of MeVisLab in this release. We are working to bring it back in one of the next releases.
MeVisLab has grown over the last twenty and more years. The users and we, the manufacturer, have learned over this time that several approaches were replaced by better solutions. But many of the older possibilities were kept in the code to remain backward compatible. This old structures hinder or slow us down to come up with better and more productive ways. We realized this already in the past and marked modules and interfaces as deprecated. During the development of version 3.5 we identified more old and obsolete modules and interfaces and marked them as deprecated as well.
We decided that we will follow a clear deprecation strategy starting from now on. That means that all MeVisLab modules, C++ and Python interfaces, and source code macros that were marked as deprecated are kept throughout the version 3.x for backward compatibility. But they will be removed from MeVisLab with the next major release.
Added a user script
to help convert
.pro files to
The support for
.pro files has been removed from the
ToolRunner, as we switched to CMake files. We believe that the support for CMake
files integrated into most IDE's is sufficient for everyday use.
If manual saving of internal networks is disabled through
also disable auto-save for internal networks.
Clicking on the background of a network deselects all modules.
The console log file is always written UTF-8 encoded.
One could force a reload of a module from MATE while a modal dialog is open, which would crash. This is now prohibited.
TestCaseManager: Python coverage can now be enabled globally. Test coverage per test case is discarded then, to keep the test report small in size.
Removed the limit on parallel threads from the Preferences dialog.
Python checker: You can switch between mypy and pylint with a keyboard shortcut now (default is Ctrl+F4).
The default version of pylint that is installed by default is 2.11.1 now. The default version of rope was updated to 0.20.1.
When using Find and Replace in Files with regular expressions,
\1 with captured text, like in Find and Replace.
Allow to skip/abort replacing in files if a file seems to have changed since the search.
Avoid crash if F1 is pressed for am MDL tag under the cursor with no validator entry.
Avoid crash in help editor if the usual first section ("Purpose") was removed manually from the help file.
Make Python wrappers for
PythonQt.QtCore) work as context managers.
MLABPopupMenuControl::clearItems() did not destroy sub menus.
ctx.showWindow() in standalone applications could
open windows on the wrong screen.
Fixed a crash in pylint caused by PythonQt when trying to sub-class, e.g.,
Change default behavior of
The new default behavior is to ask to confirm overwrites.
that don't complain if no warning/error is printed.
One can add the variable
_mlab_do_not_reload to a Python module
to exempt it from reloading (triggered with
Extras › Reload Imported Python Modules).
Replaced the scripting methods
and printed a message in the replacement code that the user probably wanted to use
MeVisLab remembers the last directory one opened files from in a file dialog.
These stored directories can now be accessed with
Make auto-revert of
(Previously, it was only executed when the object was garbage collected.)
Connecting a callable to the
valueChanged signal of an
MLABField wrapping an ML/OpenInventor field
would not be triggered if there was no other reason to create a field sensor.
Use a dedicated enum
CSOVoxelWriteMode for the
voxelWriteMode attribute of
Added an optional parameter to
to prevent changing the message severity, so that application code that evaluates
MLAB.priv().hadLogErrors() can be tested.
Set a default exception handler when calling
from MeVisLab, so that exceptions are visible.
DCMTree::StructuredMF can also look into
FunctionGroupSequence tags for frame-specific tags now,
and this ability is employed by the
Added new helper Python class
Added new helper Python method
A module test can be disabled completely by adding
testGroups = disabled
to the test definition.
Some Qt and Inventor classes had no proper != operator in the Python bindings, so that Python fell back to comparing object (pointer) identity. (The == operator on the other hand was used correctly.)
Not every numpy base scalar type that could be set (as an array) on a
PythonImage module could be mapped to the
corresponding ML datatype.
EventFilter: Handle the case when the eventFilter
method is being called recursively.
Splitter control got a
The used C++ standard has been raised to C++-17 (from previously C++-11).
More strict compiler warnings are enabled.
Many warnings are treated as errors now, for details see
Processes started with
will not inherit file handles anymore.
MLABLogging mechanism to be thread-safe.
On the downside, messages from the IDE can't be captured through the ML logging mechanism anymore.
Fixed a memory leak in the handling of ML images (when they are split into more than 512K pages according to page size and image size).
ml::DateTime class in
will behave slightly different when confronted with invalid dates/times now.
(Previously, it silently corrected some invalid date/times.)
ScopeGuard helper class to call code when a scope is left.
CSOCreationScope and other scopes now print an error when the end of
the scope is reached but the necessary
setId hasn't been called.
MLUtilities got a header file
with conversion functions between UTF-8 encoded std::string and
UTF-16 encoded std::wstring.
Added a - seemingly useless - std::string variant of
StringConversion::writeToStdString which helps
with the use of writeToStdString in template code.
ml::TypedEnumField can also be used with enum classes now.
PythonQt and the Qt and Inventor Python bindings have been
Starting to use a more efficient Dicom tree data structure, DCMTree2. So far, it is only used internally. It is planned to replace the DCMTree with the new one in the next major release.
The Compiler definition
MEVIS_64BIT was removed.
There hasn't been a 32bit version of MeVisLab since some time.
The include directories of some projects/third-party libraries have changed. Accordingly some includes statements might need to be adapted.
We put special care on marking deprecated code parts and pre-processor macros,
and enclosed those with the
#if ML_DEPRECATED_SINCE(3, 5, 0) ... #endif
macro function. Per default this code is enabled and does not cause any warnings.
We recommend the following migration strategy to avoid using of the deprecated code:
Define in the CMakeLists.txt file of the project that shall be adapted the
ML_DEPRECATED_WARNINGS, e.g. with the
target_compile_definitions(<target> PRIVATE ML_DEPRECATED_WARNINGS).
Now all code parts trigger a compiler warning that use the old code. The default compiler setting is that warnings are treated as errors. So these warnings have to be fixed before a clean build is possible. Follow here our detailed guidelines either in the corresponding header files or the further description below.
Since it is not possible to trigger a deprecation warning on all
platforms for all different kind of deprecated code, it is possible to
hide the deprecated code by adding a pre-processor symbol like
ML_DISABLE_DEPRECATED_BEFORE=400000 where the number
here would correspond to version 4.0.0. So all deprecated code before
that version would be hidden.
So this could be achived by adding this statement
target_compile_definitions(<target> PRIVATE ML_DISABLE_DEPRECATED_BEFORE=400000)
to the project specific CMakeLists.txt.
When there is a successful build, then the migration was successful.
Some of the things that are newly marked deprecated:
./MeVis/Foundation/Sources/ML/mlBasics.h is marked as deprecated.
./MeVis/Foundation/Sources/MLUtilities/mlUtils.h is marked as deprecated.
./MeVis/Foundation/Sources/MLUtilities/mlSystemIncludes.h is marked as deprecated.
./MeVis/Foundation/Sources/MLUtilities/mlErrorMacros.h the following macros are marked as deprecated:
ML_CHECK_NEW should be replaced
ML_CHECK_NEW_TH should be replaced
ML_DELETE should be replaced
ML_DELETE_ARRAY should be replaced
./MeVis/Foundation/Sources/MLUtilities/mlTypeDefs.h the following macros are marked as deprecated:
ML_MIN should be replaced
ML_MAX should be replaced
ML_ABS should be replaced
ML_CLAMP should be replaced
ML_IS_64_BIT_SYSTEM: All places which depend on this
definition should be cleared.
./MeVisLab/IDE/Sources/Libraries/MLABTools/Tools/mlabBasics.h the following macros are marked as deprecated:
MLABScopedPointer should be replaced
MLABScopedArray should be replaced
./MeVisLab/IDE/Sources/Libraries/MLABTools/Tools/mlabMacros.h the following macros are marked as deprecated:
MLAB_DELETE should be replaced
MLAB_DISALLOW_COPY_AND_ASSIGN should be replaced by using
delete on copy constructor and assignment operator.
./MeVisLab/IDE/Sources/Libraries/MLABTools/Tools/mlabLocations.h the following functions are marked as deprecated:
The methods of
ml::TreeNode that acted on char*
values are deprecated
(because they are prone for memory leaks); variants of these methods acting
on std::string were introduced that should be used instead.
In the same way, some methods of
char* values have been deprecated
and replacement methods using std::string have been introduced.
(for those users with an ADK or Application Builder license)
Installer language extensions:
IFNSET statements, which
ignore the value of a variable (unlike
IFDEF/IFNDEF, which treat
0 or an empty value as undefined).
EXISTS/ISDIR/ISFILE operators, which can be used
INCLUDE_IF_EXISTING command, which does not complain
if the given file does not exist.
Added the command
INCLUDE_DEPENDENCIES_OF. This command
follows the dependencies declared by
and includes all
.mli files in any
that have the name of one of these dependencies.
.mldepends files are also created for executables now.
EXECUTE command in an
file fails with an error code
the whole installer generation fails with an error code now. If you want to
ignore error codes of a command, use the new
Installer language variables:
Make Windows installer execution level configurable: Set variable
INSTALLER_NSIS_EXECUTION_LEVEL to Standard, Highest, or Admin.
Set file version (and other) attributes of a Windows installer if
INSTALLER_FILE_VERSION is set in the installer definition.
Allow to set no license text (by setting an empty
for a stand-alone application.
The license text can also be configured in the installer wizard.
The MeVisLabApp executable can be renamed in a standalone installer
by setting the variable
A third-party report is automatically generated when an installer is built.
ModuleDependencyAnalyzer: A Python import from
<package>/Modules/Scripts/python should not add the entire
Modules/Scripts/python directory to the installer anymore.
Overhauled dependency analysis, so that less third-party dependencies should be added unnecessarily.
Please let us know if something broke for you since a previous version.
Standalone application installers now include the OpenSSL libraries by default.
(This can be suppressed by adding
$WITH_OPENSSL 0 to your
Use the application name in the splash message (if set) instead of the executed module name.
The MeVisLabPackageScanner got an option
-printPackagePaths that prints the package paths separated by line feeds.
The FMEwork/ITK and FMEwork/VTK packages have been moved to MeVisLab/ITK and MeVisLab/VTK.
The QtWebKit support will be removed with MeVisLab 4.0. This library has been superseded by QtWebEngine and isn't maintained anymore.
If you currently use the
WebView control, please replace it
with the new
Direct embedding of MeVisLab panels isn't possible with the new control anymore (since the web engine runs in a separate process), but this can be emulated with Remote Rendering. If you use this feature, have a look at the code of the TestWebEngineView module for how this can be done.
A lot of third-party libraries have been updated in this release, too many to list them all in this place, so only a few will be mentioned.
See the complete list of available third-party libraries here.
Note that this is not the complete list of third-party components used in MeVisLab,
for this you should consult the About dialog of MeVisLab, or use the
boost has been updated to version 1.78.0
dcmtk has been updated to version 3.6.6
Mesa (used in the software OpenGL driver on Windows) has been updated to version 20.3.4
Python has been updated to version 3.9.11.
Qt has been updated to version 5.12.12.
Template Numerical Toolkit
Added a new module
DicomImport, which does a
multi-threaded, asynchronous import of DICOM files.
It replaces an old, deprecated module with the same name which called an
executable for the import, which then wrote DICOM/TIFF pairs to the file system.
There is a similar module in the Public SDK by our partners
at Fraunhofer MEVIS, called
Didn't auto-detect the
.geom file suffix.
Also recognizes upper-case file suffixes.
Enforce binary STL format if file ends on
Could crash on loading certain
.wrl (VRML) files.
endPos were swapped.
Fixed a thread-safety issue in
when running in background.
Rotation was not correctly applied if the scale factor was 1.
Fixed a crash in
after reloading the module and then updating a connected input.
To make the purpose clearer,
has been renamed to
The deprecated module
CSOInterpolate has been removed.
It just wrapped the
Fraunhofer MEVIS, which still exists.
SoCSOAngleEditor module which allows
to set/edit 3 points to define an angle in an image (the angle value is displayed).
for improved label placement for distance lines.
Had a problem with a CSO (temporarily) consisting of only one seed point.
CSOFilter module generated CSOs and
CSOGroups with ids that were immediately changed without further notification.
Improved rendering of
Improved shadow rendering of all
All CSO editor modules: Change the maximum value for
defaultSeedPointSize to 16.
Improved symmetry of generated contours when Interpolate contours is on.
CSOList::removeAll() would leak the
memory used by the
CSOList when undo was enabled,
e.g., when done from the
Changed voxel value scaling slightly, so contours
correspond better to those generated with CSOIsoGenerator.
Made background and margin color of
autoSwitchDrawMode option that adapts the
automatically to the current viewer orientation.
copyInputImage trigger field did not work correctly
Off/Clear update mode.
DicomRescale: Also modifies the
RescaleType to the info fields of the
Allow (temporary) invalid input for
despite the name, operated in voxel space.
ThirdPartyInformation module to list
available third-party libraries. (Actually it was already there, but not visible yet.)
CurveList with a
module will print a warning about the loaded data being a memory leak.
This is a conceptual problem that will be fixed in one of the next MeVisLab versions.
Added new module
to create a
CurveList object from text data.
isUnderMouse attribute for
SoView2DRectangle in the same way as
was already done for
Added support for label drawing to
One can't change the global variables of the
module itself in executed code anymore.
The algorithm of the
Radon module was re-implemented.
Added new module
which does smarter rendering than
SoDiagram2D uses the same font rendering as
SoView2D now, which also allows
to render any Unicode characters through Qt
View2DEnableQtFontRendering = yes in your preferences file).
SoView2DOverlayMPR would print
error messages if the overlay got smaller than one pixel.
Histogram: Prints a warning
if the mask image is used in label mode and the mask image has a float data type
(which suggests it isn't a label image).
SoPostEffectTransparentGeometry can work on buffers
(e.g. created with
that are smaller than the actual render size to improve performance.
When defining special handling of private tags,
private tags in a sequence were not handled correctly if the
private creator tag for this tag was (only) in the same sequence
(which is proper DICOM).
DicomTool, under the
DICOM Send section: Fixed that the
tool mode didn't work (anymore) on Windows.
UndoManager module didn't correctly
maxNumberUndoSteps when loading from a network.
ColorModelConverter got a new
mode "Gray to RGB" and overall better handling for when the wrong number of input
color channels are present.
Also renamed mode "RGB to RGB" to "Identity".
The following modules are marked as deprecated now:
embedding a PDF into an MDL panel.
New XMarkerList modules:
New DICOM modules:
Added new module
displaying lots of information of DICOM registration matrices.
Added new module
for displaying Whole Slide Microscopy information of DICOM files.
Added new module
for extracting Encapsulated documents from DICOM files and
DicomDOCSave to support export of
Encapsulated documents as DICOM files.
ParameterInfo data structure for C++ and Python
for documenting algorithm parameterization:
Basically represents a dictionary of information that can be passed
between modules through
QVariantMap in C++ and
dict in Python)
Comes with functionality to collect parameters from a MeVisLab network
(see Python function
with or without caching, extensible to other sources.
BaseWithParameterInfo base class for C++
ml::Base objects that provide such info via
ParameterInfoWrappers for Python access
to C++ objects.
Comes with the
as output inspector for C++ and Python objects of type
ParameterInfo or with a
Added Python context managers to
for temporarily adding entries to a dictionary (AdditionalItems),
or specifically to the environment (EnvironmentVariables)
Many PCL algorithms have changed alpha defaults (in e.g. RGBA values) from 0 to 255 which influence all algorithms and tests which depend on that.
PCLConvexHull create significantly
different results because the algorithms in the third party library PCL
have been rewritten.
PCLClusterStatistics creates different,
and better scaled clusterEigenValues now. The new eigen values have the same
relation to each other than the old ones.
Removed the module
which is not really needed any more.
Updated help overview "DICOM in MeVisLab".
VideoLoad was reworked.
do not support Philips REC/PAR image files any more.
itkImageFileWriter: Some ITK file-I/O backends
or respectively their used thirdparty-libraries do not recognize write failures into
non-existing directories or on write-protected files. Some checks have been added
for better recognition of such undetected write failures;
however, not all can be detected.
InterpolateXMarkerList now allows direct
linear interpolation for marker vectors
Fixed sampling of fitted result
GVRContourOverlay: Improved contour rendering
to avoid texture sampling artifacts and removed obsolete smoothness parameter from panel
OpenIGTLinkSenderModules touches field
outMessageCreated after the corresponding OpenIGTLink message
has been asynchronously created
trajectory elements with negative radius
AsynchronousIO framework: Fixed crash when using
asyncRead caused by objects freed outside of
the Python interpreter lock.
Applied some changes and fixes to support DICOM files > 4GB (as far as supported by the DICOM standard); added some error logs and checks for cases where inappropriate parameters are used.
Refactored, tested, cleaned up, and renamed Python wrappers for
Added wrappers for
Fixed: Valid unicode strings in volume list were displayed as hexadecimal codes instead of correct characters.
Fixed: Tag Replacements functionality would really just replace existing tags, not add new tags.
Fixed: If no appropriate loader for a DICOM file was found, always a misleading REG load error was logged.
Fixed: Correctly handles Raw data IOD without error messages now.
Fixed: Tolerance specifications for
ImageOrientationPatient tags in DPL configurations
Fixed: Invalid error messages about supposedly wrong dimensions of binary SEG data.
Fixed: Load failures (or in rare cases incorrect load) of a few binary SEG files.
Fixed: Import of some Siemens Set'n'Go Series with SetnGo postprocessor. Some modern ones, however, still may not be well supported.
Fixed: Files with suffixes .0 - .9 are handled preferably as DICOM data before checking other loader formats.
Fixed: Wrong handling of single frame Enhanced Multi-frame files.
Fixed: Different behaviour of swap of t and z extent between
Added warnings if volumes are composed which do not have temporally ascending time points.
Added support for Philips 3D US data.
Added support for correct display of Whole Slide Microscopy data.
See also new related module
Added option to warn of overflows in the internal tag/tree cache.
Added programming support to deactivate some loader backends during runtime.
Tag dumps (done by many DICOM related modules):
Added a number of private tag descriptions to make their decodings more readable (especially for a number of Siemens devices and from Mayo Clinic).
Added a tag decoder for text-like private DICOM tags to make dumps of their contents better readable.
Added missing DICOM tags in exported DICOM FID files.
Added support for many tags. Most (also non-mandatory) tags can at least be copied from incoming data sets.
Added some checks in strict mode to detect (and possibly refuse) if multiple series shall be stored.
DicomSEGSave: completed support
for saving multiple binary segments.
Fixed lost patient name if it contained non-ASCII characters.
Added SOP Common Module tags to select character sets.
Added more/better derivation sequence information by using either better defaults or refusing to save if the necessary information is not provided.
Fixed: Corresponding cache entries from the internal DICOM cache are removed on save now, so importing the file again will load the new version.
Better support and defaults of whether (Enhanced) DICOM tags are inherited from input data or not before it is used for export.
Relaxed too strict laterality checks.
Fixed: Unsafe handling of tags with value representation AT.
DicomTreeCompare: Allows automatic
cache clear before comparison to prevent comparison with outdated cache
Improved/added configurable messages.
isUnderMouse attribute for
OpenSSL was updated to version 1.1.1l.
IDE: Referencing field controls in a note item didn't always work.
IDE: The Output Inspector for vessel graph objects could modify the inspected object.
IDE: Avoid warning messages when reloading the module cache for write-protected packages on Windows.
MATE: Coloring of dots displayed for space characters (if enabled) could be displaced for some string constants.
MATE: Avoid crash in module help editor if starting section does not exist.
Removed the question mark in the title bar of dialog windows. This was a context help feature of Qt that was on by default, but nobody seems to be using it. If you, against all expectations, did use it, you can restore the flag from scripting with
from PythonQt import Qt [...] myWindowControl.widget().setWindowFlag(Qt.Qt.WindowContextHelpButtonHint, True)
Fix rendering of
SoRenderSurfaceIntersection if another
module enables the z-Buffer in OpenGL.
Fix some blend mode leakage of View2D text rendering, and
some improvements to text rendering in
Improve border and tick mark rendering, especially if the underlay
SoView2DOverlay could scale
float input values improperly when the underlay had a greater
value range, leading to weak overlay images, especially if the
value range difference was big.
Avoid the "Matrix is no rotation" warning in
MPRPath caused by floating number precision
LoadBase: Do not crash when
trying to load an invalid vessel graph XML file.
The "Retrieve" operation of the
DicomQuery module could fail silently if
the target was not available.
Under certain circumstances scripting method
could return old values when the image in the field changes.
Removing a DICOM tag which was previously added to the same overlay DICOM tree, which also had the tag in its parent tree, didn't work.
MLABDicomTag::value for VR
DT (date and time). It returns a
instead of throwing an exception.
Improved label placing behavior of
CSOLabelRenderer with option
Improved performance of
The OpenInventor modules
SoText3 for text rendering had issues and
have been partially reimplemented.
ADK (Windows): If a symlink can't be copied during installer generation (because of missing access rights), fall back to a full copy of the linked content.
WebEngineView control gained the
ability to print the current web page. (Set the
enablePrinting attribute to get the context
TestWebEngineView example module with
a demo for embedding of Inventor viewers. Added a special
RemoteRendering scripting wrapper for this.
This is not as smooth as with the old WebView control though.
Also added a
removeObjectFromWebChannel method to the
MLABWebEngineViewControl wrapper, so
that objects can be deregistered again.
Python now provides the bz2 and lzma compression modules. For this the following ThirdParty libraries were changed:
Updated bzip2 to version 1.0.8.
Added XZ Utils (specifically the liblzma part), version 5.2.5.
OpenSSL was updated to version 1.1.1k.
The module cache was not always updated on updates when located outside the installation directory (the default for macOS).
Do not create incomplete auto-backup network files in the IDE (could be caused by a timer firing at an inopportune time).
Fixed a crash in the MATE text editor when F1 was pressed for an MDL file and no validator entry exists for the tag under the cursor.
A small color fix for the dark mode in MATE.
Fixed an integer overflow in the MATE Python debugger for large integer values used as dictionary keys.
MATE now highlights the "nonlocal" keyword in Python files.
The window icon was not set on Linux.
Some small rendering fixes for macOS 11 Big Sur.
Avoid an unnecessary field update from a combo box
Field control when losing focus.
Allow a greater timeout value for the
QUrl::FormattingOptions work as
arguments in the PythonQt wrappers.
Fixed a potential crash in PythonQt when the receiver of a signal was removed inside the signal callback.
Avoid a Qt assertion in
DicomTagBrowser when expanding
an empty sequence item.
Handle invalid private tags in the "creator" range in
DicomDeidentify by always
dropping them (instead of throwing an exception).
Fixed the ID handling of the
addGroupCopy scripting methods on the
Fixed a crash in the
WEMThresholdToCSO module when it was
applied to non-triangle WEM patches.
Fixed an additional offset in the C++ method
Fixed a crash that could happen in the
if the user removed all seed points.
Fixed the structure of closed CSOs generated by the
WEMClip modules, which were missing the
closing path point list.
Fixed the mouse over check of
SoView2DVoxelValue when the
SoView2D is under a
useManagedInteraction is off).
Fixed a buffer overflow of one byte in
WEMLoad when loading non-WEM formats. This
luckily didn't have any ill effects and was only detected through
Debug mode on Windows, but still.
acceptWheelEvents attribute also
affect the slider in a
Do not crash when calling
acceptEvent/ignoreEvent outside the event filter
callback of the
RTObjectSave and other DICOM
saving modules didn't support Unicode filenames.
Small documentation improvements.
For ADK/Application Builder users:
Fixed handling of the -runapp argument with the MeVisLab executable for users with the necessary license features.
Increased the maximum number of inputs of the
PythonQt: Make the classes
QWriteLocker work as context manager
with statement) in Python code.
The Field control gained the
Removed the warning message when module panels of loaded networks are moved because they were outside the visible desktop area.
Updated Qt to version 5.12.9.
Updated freetype to version 2.10.4.
Updated pydicom to version 2.0.0.
For ADK/Application Builder users:
Can override the execution level for NSIS (Windows)
installers by setting
INSTALLER_NSIS_EXECUTION_LEVEL to the
Can change the name used for registry values, preferences
file, etc. without changing the application macro name by
STANDALONE_APPNAME in addition to
MATE: When using the graphical scrollbar in dark mode, the scroll location was almost invisible.
MLABGraphic.createDesktopScreenshot on Windows
(still only returns the primary screen though).
returns None if no parent tree exists instead of crashing.
Multi-Frame DICOM files with only one frame were not correctly
module didn't update its internal state correctly if the input
image changed but the visible slice number stayed the same.
Fixed that the
SoView2DCSOExtensibleEditor ignored the
timepoint settings of extensions.
The shadow of CSO seed points was not rendered correctly when using the MESA software OpenGL renderer.
The check if a CSO is parallel to a plane only looked at the seed points of a CSO. But some types of CSOs only have one or two seed points, therefore the path points are now used too.
algorithm to produce a more predictable result when applied on
CSOFilter module copied
CSOs and groups with an initial temporary ID that was changed
afterwards without further notification. Now the original ID is
Fixed scripting error when clicking Create New Package... in the Preferences dialog.
Fixed a crash in PyLint when editing a class derived from
Minor documentation fixes.
For ADK/Application Builder users:
Fixed ZIP compression failing if files have a modification date before 01-01-1980.
Documentation: Added a section about recognized values in mevislab.prefs and possible environment variables to the MeVisLab Reference Manual.
You can provide a
in your preferences file to preload custom modules in your
IDE. This feature is meant to allow customization of the IDE
(e.g. to set a variable to a file path that should be
determined at runtime).
Where available we now use the SPDX license identifiers (from https://spdx.org/licenses) for third-party libraries in the about dialog.
Pressing the space bar in the network view of the IDE toggles to/from the special view, where previously you needed to hold the key to get it (which prevented tool tips from appearing).
Added the preferences variable
which can be added to the preferences file to disable
immediate console outputs, which can be slow and have unwanted
Fixed non-integer GUI scaling factors set with the
Added a keyboard shortcut Ctrl+F5 for running the selected test in the TestCaseManager (available on Windows and Linux).
Clear list of test functions if no test case is selected.
Ensure that tests started from a module's context menu and from the TestCaseManager do not interfere with each other.
Added tooltip to Python coverage check box (if checked) that Python Coverage might list additional Python modules.
MATE (integrated editor)
One can set the expected outer scope for MDL include
files (which helps MATE with auto-completion) by adding a
// mdl-validator: ValidatorScope,
// mdl-validator: Window.
Improved the file search in the project workspace.
Some improvements/fixes for the Find In Files dialog.
Added basic support for QML files, the GUI description language of Qt.
C++ API changes
Removed some global button mask enums from
Do not crash when using a diamond shaped network pattern with automatic updates that leads to invalid image page accesses.
Field control: Make
comboBox = Yes and
edit = Yes.
ListView control: Do not change column
resize mode on hide/show of column.
Can select horizontal tabbing when editing cells in the
ItemModelView controls with the
If a control implemented with a Python class has the
controlDestroyed it will be called
when the control's destructor is called.
didn't work in PythonQt.
MLABWebEngineViewControl now has
setWebPage to set an own
Warn about unknown variables in
Added a method
qmlModel() to the
returns a model suitable for use in the
QuickView control. Also added usage examples in
Other fixes and improvements
MeVisLab has a changed logo, new icons and splash screens.
Updated libjpeg to version 9d (Note: May return slightly different pixel values when loading jpeg files now)
Updated libjpeg-turbo to version 2.0.4.
Updated libtiff to version 4.1.0.
Updated sqlite3 to version 3.32.3.
Updated CryptoPP to version 8.2.0.
Updated OpenSSL to version 1.1.1g.
Updated TBB (Threading Building Blocks) to version 2019 U1.
Added cryptography package pycryptodomex, version 3.9.8.
Updated dateutil to version 2.8.1.
Updated SQLAlchemy to version 1.3.17.
Updated six to version 1.12.0.
Added new zoom modes
that scale the zoom value with
when not using Managed Interaction mode (no value was shown
in two of the three views).
Fixed a crash in
SoView2D when building the
look-up-table for too large min/max value ranges.
Other Open Inventor modules
One can now use the
#version directive in
more display options and can use a Python callback for
calculation of position and size of the viewport. See the
"Details" section of the module's help for how to do
MeVis Path Tracer
Removed the broken
mode from the
Added start and end angles for label placement.
Added a CSOList input that can be used as label placement
not move explicitly placed labels when
new extrusion mode
crash on non-triangle-mesh inputs.
EuclideanDistanceTransform: Added an
option to treat the surrounding border as "foreground"
Histogram et al) to use type
double instead of float for interface fields and
retain selected private tags now through an allow-list.
some mis-handling of DICOM sequence data.
ImageSave: Added an
option to prevent auto-adding of the file extension.
The default TIFF compression of
ImageSave is now
ImageLoad: Avoid crash
when trying to load unsupported float16 tiff images.
Fixed a crash in
DicomFrameSelect if no frame-specific
information was available.
handling of min/max value for values smaller than zero.
Exported helper classes from the
MLOpenCVModules library for use with own
Fixed min/max value range calculation.
Window: Can handle
negative image values now.
Can now limit the number of modules that can use the GPU at a
time with the environment variable
avoid a possible bottleneck with graphics drivers.
Tried to make the module panels of
OpenCVUtils Python module has
been moved from package FMEwork/ReleaseMeVis to
ReadYAML for reading
YAML files or strings.
DirectoryIterator to conveniently
iterate through directories on MeVisLab network level.
XMarkerListDistance which computes
the distance between two XMarkerLists.
log received ZeroMQ messages via SeverityChannelLogging
Started FME Python Toolbox (Public SDK) documentation with at least few documented packages (hopefully growing).
ThirdPartyLicenseReport for comparing
licenses of third parties included in MeVisLab against an
New MDL controls
DockWidget for adding Qt dock
to application windows.
GUIScriptTemplate for reusing
the same MDL GUI with different field names (best used
with MDL style prototypes). Search for GUIScriptTemplate
in .script files of FMEstable/ReleaseMeVis for
Extensions and changed behavior
implementation, and added
that also returns true for equal paths. New method
for remote directory file/dir caching is no longer
experimental, improved the underlying
file_caching Python package.
Improved the error handling of the
module now uses the double datatype.
been refactored to expose an abstract interface for I/O
channels (such as Sockets) in order to transparently support
TLS sockets. No changes to networks should be necessary as
deprecated names have been introduced.
libraries have been refactored and separated into an
independent C++ as well as two ML dependent libraries
MLOpenIGTLinkConversion (to/from ML
(ML modules). The
library now is only responsible for channel I/O and supports
custom message types via factory plugins. There are
incompatible changes of module interfaces: The
OpenIGTLinkProtocol module does not
support the device name field anymore as this is message
specific and should be set on the message creators (such as
the ML modules or own message creating code). The convenience
OpenIGTLinkClient should be
Multiple improvements and fixes in
DICOM and file IO
New experimental modules:
MERAVolumeInspector to create
and access search indexes to image/DICOM volumes.
to export Legacy Converted Enhanced MR DICOM files also
DicomSegSave can also
export fractional SEG images.
Many DICOM export modules perform stricter checks for
Laterality tag to prevent DICOM
implicitly converts volumes with formerly left-handed world
matrices on irregular volumes to right-handed ones.
Loader backends implemented with modules have been
moved into the project
A new loader backend for
supports histology file formats
systems where the HistoLoad module is available (it is not
included with the Public SDK).
Installer: The uninstaller will remove the environment variables MLAB_ROOT and MLAB_COMPILER_VERSION from the environment again if they are still unchanged.
This release requires at least macOS 10.14 (Mojave) and Xcode 10.3 for development.
This version will probably not work with macOS 10.16/11 (Big Sur). We recommend to refrain from updating to this macOS version if you need to use MeVisLab 3.4.
Can use <, <=, >, and >= lexical string
comparison in IF statements in
The splash screen of own applications now supports semi-transparent pixels.
We added the
argument to MeVisLabApp.
Automatically set window icon on Windows if a file
<applicationname>Icon.png exists in
MeVisLabWorkerService: Make sure workers are used in the order they were started.
ReleaseOptimized variable for
standalone-installers, which activates some performance
Ignore already encrypted Python files when pre-compiling Python files for a stand-alone installer.
Improved Python parsing of the
raise <exc> from <exc> statement in the
One can now promote a local macro to a global macro from the context menu of the module.
Fields of imported panels in the GUI only allow dragging
to/from other fields now if they are exported as
internalName on the module of the
Closing the IDE will now also close all module panels (if MeVisLab should be terminated).
Prevent recursive reloading of modules while pressing and holding F5 key.
Fixed 'object' not working in console of the PythonObjectInspector - it's '_object' now.
Ask the user if the debugger should be disabled if Python coverage is activated (since only one of these can work at a time).
Function parameters can now be passed as dicts (keyword arguments instead of position arguments) to iterative tests in a test case.
Improved error handling for secure testing mode.
tearDownTestCase() function is
also called for cancelled tests now.
MATE (integrated editor)
MATE got a dark mode on Windows and Linux (available from the Preferences panel).
Added support for mypy besides Pylint (not simultaneously though).
Update default Pylint version to install to 2.4.1. Also added inference limit config value, which can improve performance when set to a lower value.
For modules with several scripting
source files, Pylint (or mypy) is applied
to the combined source to improve the output - note
that this is only detected if there is an associated module
in a connected MeVisLab instance.
The Watch area in the Python debugger got a context menu command to remove all watches at once.
Improve the behavior of the Python debugger if accessing object attributes to display them in the debugger causes Python exceptions.
C++ API changes
really returns the nearest path point of a CSO.
tooltipField attribute to all
controls, which allows to set the tool-tip of a control through
Fixed initial visibility of buttons using the
visibleOn attribute in a
Fixed sorting in
ListView control if
initial item values are changed later on.
Users can now add a custom entry to the context menu of
modules. Just add a
.def file with a
ModuleAction to your package, which should
(a short Python expression) and a
attribute. Have a look at the ModuleAction in
for an example.
enableAlternatingRowColors to the
setAllowRenaming to the
One can get the parent Dicom tree of a
MLABDicomTree wrapper with
Added the scripting commands
Allow to set additional image dimension information
deepCopy method to the
CSOList scripting wrapper.
Fixed MeVisLab hanging when using keyword arguments on a
slot that didn't have the
on remote modules to not apply to anything that is sent to the
remote module after this call.
Changed output of
MLAB.systemInfo() (at least on some
deprecated now, since it actually isn't very detailed. We
recommend to use
Other fixes and improvements
One can now set the variable
ProfilingTraceFile in the preferences file
to employ the profiler from the start to debug startup
-printJSONInfo option to the
Updated Qt to version 5.12.6.
Updated fontconfig to version 2.13.1.
Updated libzeromq to version 4.3.2.
Added the dcmmkdir tool from the dcmtk library.
Updated pyzmq to version 18.1.0.
Updated jinja2 to version 2.10.3.
Updated MarkupSafe to version 1.1.1.
Improved placement of
SoView2DLabel: Can set
margin to background borders.
SoView2DOverlayDecoration got an option
to draw the border outside the image.
updateLayout method to the
SoView2D scripting wrapper to
update the viewer layout manually.
Other Open Inventor modules
switchable to Managed Interaction, and use that feature
widgets got a field to control the factor for
darkening/brightening on mouse-over.
MeVis Path Tracer
Added support for IBL_Equirectangular projection to
(automatically detected from input image).
Added filled rectangle, filled circle, and filled triangle to seed point styles.
Seed points now scale with the line thickness.
Improved interactive movement of labels.
Added new flag
Improved the WEM output inspector.
One can select a simple sub-division mode in
Fixed that PVL values were doubled in any
Added a bunch of graph editing modules:
Enables graph editing with undo/redo.
labels to trees in order of descending size.
Sets labels to a selected tree.
LabelFromEdgeToLeaves: Sets labels
from a selected edge down to the leaves.
labels for image voxel values under the skeleton
Retrieves tree labels.
Connects edges in a graph.
Disconnects or removes edges in a graph.
SetRoot: Sets a new
root in a tree.
a graph and removes trees if label values criterion is not
Sets labels accordings to tree depth from roots to
image properties (matrix, image extend) to a graph.
Converts a graph (nodes, edges) to XMarkers (Positions,
a view of the logical structure of a graph.
Resample3D: Ensure that
the output size is at least 1 in each dimension.
works on Radeon cards now.
Added options to generate seamless and Mip-mapped
DicomDeidentify module for
anonymization of DICOM data.
Fixed handling of
WindowWidth for VOI
LUT Function "LINEAR" in
RampLUT modules -
note: this needs to be enabled in existing networks.
LUTCombiner now allows
scaling of the input LUTs.
DicomTool does not write
multi-frame information to the individual slices it saves
standardization of image geometry (orientation and
New modules for fast and customizable cheapest path
search on XMarkerLists (
XMarkerListImageData that reads image
data at marker positions and modifies marker properties
(vector, type) based on it.
New inventor module
SoToggleOnResolution allows to toggle
scene graphs based on the viewer resolution and/or the viewer
New GVR extension module
UDPStringReceiver for sending and
receiving strings over asyncIO UDP sockets.
Improvements & extensions
DICOM and file IO
Several internal quality improvements and minor fixes.
The output inspector also displays PCL object information now.
Improvements to SimulatedHighDPIViewer:
added new rendering mode
Offscreen that fixes
problems with some inventor modules, such as
added event forwarding.
This release requires at least macOS 10.13 (High Sierra) and Xcode 9.4 for development. macOS 10.15 (Catalina) is not officially supported yet.
MeVisLab will provide the root certificates of the macOS
system keychain to OpenSSL automatically if none exist at default
locations and the environment variable
SSL_CERT_FILE is unset. Default locations
searched in order are:
(this is the place, where the auto-generated certificates
archive is stored)
Allow to setup quick-start permanently via the Preferences panel in MeVisLab.
PythonPip macro module installs/updates Python modules into
the user's Python library (e.g.
and the integrated Python interpreter loads modules from this
Store Module Caches outside the installed App Bundle
and watch version to invalidate cache if necessary.
Keep dynamic libraries in their original packages when building an App, this will prevent duplicated libraries and reduce App size.
We have updated our Qt version to 5.12.3. Between Qt 5.6 and Qt 5.12 some things have changed that might need your attention:
The (used) license for the Qt libraries is now LGPL 3 instead of LGPL 2.1.
The license for the Qt helper tools is now GPL 3 instead of LGPL 2.1, which means you can't link against them (which one doesn't do anyway because they are stand-alone tools) without publishing your code under a similar license. Some of these tools you will use when, e.g., compiling your own C++ modules, but none of them will be included in stand-alone applications by our installer wizards.
The qmake tool needed for translating .pro files into
platform-specific project files now expects the compiler
executable to be on the command-line on Windows and Linux. We
tried to make sure that this happens automatically, but in case
this doesn't work for your setup you should call the
vcvarsall.bat from your Visual Studio
installation with argument
amd64 before calling
the ToolRunner tool or the batch files created alongside the
QUrls returned when clicking a
non-standard link in the
WebView control might
have a slightly different string representation than before. If
you used this feature you should check if you need to adapt your
code to the new format.
Single files listed in the
section of modules do not cause further dependency
Global modules don't have precedence over local macros anymore. Only if no local macro with the given name exists a global macro with the same name is used (and vice versa).
One can disable persistence of module panel positions
and panel state by setting the
DisableModuleWindowsPersistence variable in
the preferences file. This helps avoid unnecessary differences
in version control systems.
Only print package dependency warnings when loading networks in the IDE.
Longer enum value lists in the HTML help of a module get a scrollbar.
The automatic panel of modules can be opened with Alt+[Shift|Control]+double click and Alt+Enter.
Added the facility to display modules with a custom icon (per module type) from a user script that can be selected in the Preferences dialog.
Fixed Python debugger updating local variables too late
locals() (or something
similar) is used in code.
Automatic reload of modules on double-click also considers changed MDL includes now.
Allow to run GoogleTest tests from a FunctionalTestCase. Example (to be put into a TestCase's python file:
from TestSupport import CodeTest CodeTest.inject("$(MLAB_MeVisLab_Standard)/CodeTests/bin/MLBaseTest", ctx)
TestCases can decide to display the used sorting
literals in the TestCaseManager (by setting
showTestFunctionSortingLiterals in the
When typing in the filter line of the TestCaseManager, up and down keys change the selected visible test.
You can tell a test to use software rendering with the
preferredRenderer=software (in the
.def file of the test) when using secure
testing (only on Windows, and on Linux when using the Mesa
Tests are by default always run with Secure
testing if the environment variable
Module help screenshots made on HiDPI screens are now scaled down automatically.
MATE (integrated editor)
Make dot color (when visible whitespace option is active) configurable.
Made the Pylint timeout configurable.
Added new keyboard shortcut Ctrl+F3 to find the selected text.
Closed documents can be removed from the document session now.
Python syntax highlighting in MATE is now more exact with string and number literals. (Did you know that 1.3j is an imaginary number in Python?)
One can define and run custom commands from the project workspace context menu now.
Fixed and extended Go Back/Go Forward functionality. It now more closely resembles the functionality you may know from, e.g., Visual Studio.
.py file (default binding is Alt+Down) usually also works now if not connected to a
module instance in MeVisLab.
C++ API changes
SoPointingAction class can
now declare it doesn't want dragMoveTo calls for mouse clicks,
even if the mouse was slightly moved during the click.
Added a convenience macro
SO_NODE_ADD_ENUM_FIELD to the Inventor
SoDiagram2DExtensions now have
more options in which layer to draw.
template was moved from the code of the
SubImage module to the
Introduced a new
method which is smarter about returning the texture/video
memory actually available in OpenGL.
always returns the real slice normal (and not just the
z vector) now.
method of Inventor nodes is evaluated in MeVisLab now.
which is similar to the
but uses the QtWebEngine widget based on Chromium instead of
the outdated QtWebKit widget. The new control doesn't allow
access to modules, scripting, or module panels of MeVisLab,
since the browser engine runs in a separate process, but since
the old widget isn't supported anymore we will need to remove
the old one in one of the next versions and therefore we urge
you to switch if you currently use
expandY attribute of most
controls defaults to
auto instead of
no now, so you now should rarely need to
set this yourself.
validator tag to the
ComboBox control, which takes a regular
expression against which to check the input of an editable
insertSeparator method to
ComboBox script wrapper.
setModuleWindow to the
Implemented auto-indentation for the
Added support for direct texture transfer between
RemoteRendering (only on
Windows, and on the same computer). Set the
useDX11SharedTexture attribute on the
RemoteRendering control to activate.
[Instant|Delayed|MenuButton] support to the
titleField support to the
acceptWheelEvents tag to
some controls — default is
Added the tag
comboEditable to the
componentTitles attribute for
setComponentTitleAt scripting methods,
which allow to override the default component titles of a
vector edit control.
visibleOn state of
panels included with the
visibleOn expressions for
visibleOn expressions on controls are
evaluated delayed to fix panel layouts growing in size in some
situations. This could happen when an intermediate state was
used for size calculation where widgets were temporarily
visible together that were actually never shown together in
Fixed layout flickering on
controls with a frame and trimming enabled.
windowActivatedCommand to the
ListBox scripting wrapper got a
When calling unknown methods on objects derived from
QWidget a hint is printed that the user
perhaps needs to do
from PythonQt import QtGui
We enabled multi-threading in Python. In case of
problems you can disable it with an entry
PythonMultiThreading = NO in your preferences
scripting method to call a scripting function from any
The Qt scripting bindings were updated for version 5.12.
which allows to access the Inventor node path result of
(currently only) module
SoPicking from scripting.
Removed the method
Removed the method
MLAB.gpuTextureMemoryInMB, rather use
.mapWorldToVoxel scripting methods also
work on the Inventor
Added scripting methods for adding and removing vessel
voxels to the
The arguments to
OpenVDBGridWrapper::toWEM were switched
around. If you used this, please adapt your code.
Added a new scripting wrapper that allows to find the
real nearest point of a WEM triangle mesh (and not just the
nearest node of the mesh). Obtain this wrapper with
WEMWrapper::removeWEMPatchAt took the
argument as id of the WEM instead of as index. Also added
Added support for async Python functions in MeVisLab in general and in field listeners and test functions in particular.
Added a script wrapper for the
MLABRecentFilesHandler, accessible with
Added scripting method
which returns the location of our Python interpreter
getTransform method to
the scripting wrappers of
MeVisLab now changes the
Windows in a way that this change is also visible from Python
os.environ. This fixes that augmenting
PATH from Python would overwrite the
changes from MeVisLab, which prevented loading of modules,
e.g., after installing and using an externally installed
Other fixes and improvements
We changed our policy on unlicensed use: An unlicensed MeVisLab SDK treats modules signed by non-MeVis owners as unlicensed now.
Fixed an issue with too long filenames generated in the Python coverage detection of the TestCenter.
Fixed that links to overview documents could not have a different title in mhelp files.
DICOM image loading duplicates the value of the
ImagePixelSpacing tag when this tag only
contains one value (thus fixing invalid DICOM files).
Project wizards can have a
(a Python expression) which defines if the wizard should be
Make module dependency analyzer detect DLLs from scripting wrappers.
Updated Qt to version 5.12.3.
Updated QtWebKit to version 5.212.
Updated dcmtk to version 3.6.4.
Added tools dcmrecv and dcm2pnm to SDK.
Updated OpenCV to version 4.0.0.
Support for utilizing ffmpeg DLLs has been added to OpenCV on Windows.
Updated NumPy to version 1.16.4.
setuptools has been updated to 40.8.0, pip to 9.0.3.
Building the boost Python binding now.
Upgraded the Mesa fallback software OpenGL driver for Windows to version 18.1.5.
googletest has been updated to version 1.8.1 and googlemock has been newly added.
Updated libxml2 to version 2.9.9.
Updated libpng to version 1.6.37.
Updated OpenSSL to version 1.0.2s.
Qt font rendering is now the default in
textShadowColor field to
Added line stipple pattern to
Fixed clipping planes in
SoView2DScene when coordinate system
Added scripting wrappers for coordinate transformations
Added alpha value parameter to
Improved the undo behavior/interface of the
Added an option to restrict drawing of the background
SoView2D to the
image area (useful when using a white background color and a
blend mode like
an alpha field and a trigger to reset the rotation center,
also made rendering of shadow optional.
Fix arrow lines not showing in
SoView2DMarkerEditor in certain corner
Other Open Inventor modules
share the same buffers now and the buffers are only resized if
Added the option Only render opaque
objects to the
View3D module can
be switched to
RayCaster mode now.
Improved multi-core and hyper-threading usage of GVR framework, switched to using OpenMP.
GVR can render transformed volumes outside of the main volume now.
Switched GVR to use geometry shaders for the slab rendering by default.
So3DMarkerEditor to allow filtering
XMarkers by timepoints.
Added a new
SoCameraWidget module for moving the
Inventor camera from a widget.
module similar to
SoCameraWidget, intended for touch
navigation in viewers.
SoPicking got a
highlighted output flag and can provide two
extra pointing actions (because sharing the same sub-scene
between different SoPicking modules does not work).
SoPicking allows to get
the picked color now.
Implemented an update mode for the
has been improved.
font field from
SoExtText2, added a
fontSize field instead, did the same for
Add relative text placement in
Allow GPU filling in
SoRenderSurfaceIntersection when using
the CPU intersection routine.
module to load
.iv scene files.
supports other OpenGL buffer formats now and allows to specify
a name for the sampler.
smart snap mode to
highlights the nearest node towards the root within a given
SoInput works with
network paths on Windows now.
now scale pixel values automatically for HiDPI screens.
SoCreateCubeMapSampler now ignore the
lights in the scene above.
MeVis Path Tracer
Added volume ray to slice projection.
Support transformations and texturing.
Added bloom effect to
Added silhouette effect to
Added support for 8bit, RGBA, and gradient volumes.
Force full quality updates in
SoPathTracer when rendering to
module for extruding CSOs to a WEM surface.
only requests the input image if really required.
SoView2DCSOExtensibleEditor now sets
maskValid flag when interacting.
A new MLCSO API
CSOGeometry::computeIsInPlane is used in
Added a wrapper for the method
(and added an optional
parameter to all
close method to the CSO's
Python wrapper to close an open CSO.
Seed points can also be rendered as triangles now (see
works correctly on other timepoints than the first now if an
image has more than one timepoint.
WEMModify got an option
to merge all patches into one. This functionality is also
available from the WEM scripting wrapper.
now filter by any PVL.
Added a scripting wrapper method to remove a PVL from a WEM.
WEMInfo now shows more
information about PVLs.
Added option to make
offers information whether mouse is over surface in
Got an option to switch between local bulging and dragging the whole WEM patch.
Improved drag behavior.
Made amount of changing of the influence radius with mouse wheel configurable.
Various other improvements.
VoxelizeWEM works for
multiple patches now.
Fixed finding of a starting position for polygonization
Added support for FloatPixelData DICOM tag to
ImageSave can't save
RGBA images in DICOM mode anymore, this wasn't done correctly
Added option to only render vessel voxels to the output
image of the
can render modules in parent networks now (by specifying the
"parent:" prefix), not just sibling modules.
Fixed some mouse coordinate offset problems with
Added new error handling mode
ExactlyOneOpenInputIsError to the
One can now specify the page extent for the
ImageCompose module (and for the
gives a valid output if there are no frame specific tags at
Renamed/added some fields on module
DistanceFromXMarkerList, and changed
the behavior if the input marker list is empty.
Sobel3D module now
Estimation mode better suited for
usage with GVR/PathTracer.
The heuristic for determining the 'best' keyframe for
mapping markers in the
MPRPath module when the option
Markers correspond to frames is off has
been changed (and hopefully improved).
Some old modules were deprecated:
Added support for faster
application to the
ImageLoadMulti can also
work with 0-based indexing now.
dimension parameter to
store/send image blocks with a gantry-tilt now.
ShortestPath for Dijkstra
calculation of the shortest path in an image.
New python package
that helps when working with slow, possibly remote and
unreliable data sources through semi-transparent on-demand
caches configured on a per-system level.
New (experimental) module
CachedPath that wraps some of the
file_caching functionality into a macro
New helper modules
Switch2 (switches between exactly
two image inputs) and
AutoSwitch (auto-switches between
one default and an optional 'override' image input).
for reading comma-separated value files.
ModuleHtmlPostProcessor which can
transform module help files into something suitable for
New documentation: FME Python Toolbox (Public SDK) is a reference of the Python packages in the Fraunhofer MEVIS part of the SDK.
Improvements & extensions
DICOM and file IO
Extended and revised the C++ interface of the DICOM libraries with many improved checks.
DICOMTreeItemModel now also
takes an MLBase input which may be a
DicomTree or a
and related modules).
Added private creator "Fraunhofer MEVIS" with
Improved handling of SOPInstanceUIDs from enhanced multi-frame files.
Added "Frame Tags View" tab
get easy overviews about same tag in multiple
Added further suppression to
Added sorting for tag
DimensionIndexValues" in default
DirectDicomImport to improve
imports of Slide Microscopy (SM) files.
Added option in module
to search for an arbitrary tag value and to select the
used boolean operations.
Added support in
DirectDicomImport for color
enhanced multi-frame MR files.
Added support in
DirectDicomImport to sort
according to binary tag contents (e.g. Palette
Fixed unnecessary rare warnings in DICOM overlay
calculations (e.g. in
Fixed incorrect shifts in DICOM overlay calculations.
Fixed incorrect buffer sizes written when binary
images are written as DICOM SEG with
Fixed crash of default
after simple add/remove.
performs a rank filtering on intensity replacements of
each point of a point cloud.
PCLR2SonicWCLoader which can
load certain sonar data files.
finds the closest match between points of two point
node support in
Long file path support has been established/restored for our MeVisPython interpreter.
ImageSave (or rather the library
MLImageIO) can handle paths longer than
MAX_PATH on Windows now. Note that a special
registry setting is still required to make this work on the system
Command line arguments were not parsed with the correct character encoding.
Dependencies tool is supported as a
checking DLL dependencies from a modules's context menu.
Added the option
which can be set in the preferences file, to work around a
temporary black screen when showing fullscreen panels.
The Visual Studio 2017 version of MeVisLab can also be used
with Visual Studio 2019. If you change the environment variable
MLAB_COMPILER_VERSION to VS2019-64 you also
don't get annoying project conversion dialogs for your C++ module
MeVisLab will use the correct available RAM in docker containers when deciding on default memory consumption.
This release requires at least macOS 10.13 (High Sierra) and Xcode 9.4 for development.
macOS 10.14 (Mojave) is officially supported now (macOS >= 10.14.4 and Xcode 10.2 recommended)
MeVisLab is now signed with an Apple Developer Certificate
Added configurable & extensible Touch Bar support for MacBook Pro in the MeVisLab IDE (see MeVisLab 3.2 macOS Edition Guide) & MDL (see MeVisLab Definition Language Reference)
Movie recording updates:
.mp4 in addition to
.mov file type
added more user friendly video compression codec selection for the VideoWriter* modules
support HEVC (H265) codec
support professional codec types (Apple ProRes)
recognize codec type names „H264“ & „H265“ and use the corresponding values on macOS
use HQ settings for H264, HEVC & JPEG codecs
Added search for all Network documents containing a specific Module from within MeVisLab itself (Activate the context menu item Related Files › Show Network Files Using This Module of a module in a Network Window or in the Module Search View) (see also MeVisLab 3.2 macOS Edition Guide)
Previews of MeVisLab network files are now stored directly as extended attributes of the file. Previously, previews used the deprecated resource forks API and will no longer be displayed using QuickLook. Resave these files to update the preview.
ProjectGenerator helper now generates Xcode projects using the legacy build system due to a Qt incompatibility
ProjectGenerator helper now adds a Profiling setup for Apple Instruments to the default scheme for release builds of a module library (use ⌘I to start profiling a module in MeVisLab from Xcode)
Supportive Programs in MeVisLab › Preferences may be set empty to use the system default application for the file extension or URL scheme
Fixed that the context help would not jump to the corresponding article (e.g. MDL controls help)
MeVisLab Workers (aka Background instances) can be hidden from the Dock by enabling the option Hide Worker instances from Dock in the General section of MeVisLab Preferences Panel
Setting the installer variable
INSTALLER_MACX_BUILDZIP to 1 will generate a
distribution PKZip file similar to a Finder archive
Added Swift programming language support for Xcode &
module that allows to script and apply a Metal kernel to an ML
C++: Updated the
Eigen library to version
3.3.5. This was necessary because newer updates of Visual Studio
2017 generate a compile error when including certain header files
of this library.
C++: Support CUDA 10 in project generation.
C++: Added new template class
TypedBaseField to ML library, which allows
for convenient typed access of the contained Base object.
C++: Added method
clearTriggers to the
C++: Make libraries
SoCoordUtils1 usable from own projects.
C++: Added macro
as a shortcut for
SO_NODE_ADD_FIELD to Inventor.
Field control got a
browsingGroup attribute, which allows to store
last used directories for different purposes separately. There is
also a new optional parameter of the same name for the methods of
MLABFileDialog scripting class.
Added a scripting wrapper for some of the
OpenVDB functionality. Using the wrapper can
be more efficient than using the
modules, since several level-set operations can be chained. See
MLOpenVDBToolsWrapper in the
Scripting Reference for details.
addQuadPatchFromNumPyArray to WEM scripting
wrapper, and fixed
addTrianglePatchFromNumPyArray, which didn't
associate the nodes to the faces.
Also added function
addPatchCopy to WEM
scripting wrapper to copy a patch from another WEM.
DicomReceiver got a
additionalStoreSCPOptions to specify
additional command line options.
The minimum and maximum values of the
BoundingBox module can be activated
separately with checkboxes now.
isMouseOver field to module
relativeAnchorPoint field to module
SoFixedMenu (used when not in
pop-up mode to position menu items at a relative position of the
performPreHitTest field to module
rotation field of module
WEMModify is a real
MLABRotationField now instead of just a
MLABVector4Field, which means that you now
can get/put an Inventor
of/into it in Python scripting.
Improvements for module
which allows to change how collinear CSOs are handled.
Input image modality is not restricted to CT or MR any more.
An error is reported if the input CSOList contains ungrouped CSOs.
Enhanced printed information about problems with referencing slices.
Make sure that the
NumberOfContourPoints is consistent with
the number of values in
Windows: The Mesa OpenGL fallback is always added to
stand-alone applications if you don't set
WITH_MESA to 0 in your
C++: Fixed new ML list field method
updateValueAt not updating the value.
C++: Fixed that some memory allocation errors might fail silently.
C++: Backported a Qt patch for
QProcess::start: Avoid a name collision in
named pipes for processes started in parallel.
ComputedAttributes in an
ItemModelView control didn't update when one of
the attributes in the expression changed.
ColorEdit control does not set the
color to black anymore if the color dialog is cancelled.
Removed the zoom restriction from the
Resample3D module (factors above 1000 were
set to 1).
Modules based on
OpenVDB crashed if used
on WEMs with more than one patch.
Fix handling of keyboard shortcut events in
the color of the first style to draw the last curve when
Fix crash under certain circumstances when removing the
SoView2DCSOEditor module from a
Fixed that the output of module
OffscreenRenderer turned all black when
opening an internal network.
Fixed menu item placement in
SoBorderMenu: Items attached to lower/left
border jumped around when resizing.
Improved blending of
SoView2D font rendering with
Fixed an infinite Inventor loop in module
View2DTouch. Also fixed usage of unknown
Ported some Python tutorial modules to Python3:
to Python 3.
ChangeSet Python class would
cause an exception when the MeVisLab module on which the class was
applied was already deleted when the destructor was called.
Fixed some bad handling of OpenGL clip planes (which probably nobody really noticed).
Number inputs in module GUIs didn't allow to type in (temporarily invalid) incomplete floating point numbers.
MATE: Do not place cursor on previous line when de-indenting.
MATE: Python refactoring with rope updated to new version 0.10.7 to fix that extracting a function failed.
MATE: Disabled pylint checks were not persistent.
MATE: Fixed that the positions of results of the Find in Files dialog were wrong if a result line was shown truncated.
Tools like MATE don't write to the same log file as MeVisLab anymore.
macOS: QuickLook and Spotlight plugins work again.
macOS: Hide "Show Tab Bar" menu items added for 10.12 and up.
macOS: Movie generation improvements (vertical flip of movies generated from image files, presentation time calculation for movies generated from memory images).
macOS: Fix crash in IDE if size of recent files list is set to zero on system..
Linux: Improved CUDA detection.
Linux: Translation tool could not be opened directly from a multi-language module.
We have upgraded our Python interpreter from Python 2.7 to Python 3.6 in this release. This requires our users to port their Python 2 scripts to Python 3 (if not already done).
To facilitate the porting, we provide the Python futurize library. For more information on porting see Preparing Python Scripts For Python 3.
On Windows, the Python 3 interpreter is now compatible with the
official Python 3.6 interpreter. This allows to install binary
packages from PyPi (the Python package index). A new
PythonPip tool module facilitates the
installation of Python packages from PyPi in MeVisLab.
MeVisLab now supports rendering with 10bit precision (using
OpenGL). This requires a graphics card and monitor that support 10bit
precision. The support has been tested on AMD/Barco graphics cards and
on NVidia quadro graphics cards. We try to auto-detect the support for
10bit, but it can be enabled/disabled by the environment variable
MLAB_OPENGL_10BIT as well. If enabled, MeVisLab
automatically uses a 10bit capable OpenGL framebuffer (typically a
RGB10A2 or RGBA16F buffer). By default, the
SoView2D viewer will use a high-precision LUT
if 10bit support is enabled. You can see if 10bit support is enabled
in the first line of the MeVisLab log (after the graphics card
details). It can also be checked in Python using
The MeVis Path Tracer offers a state-of-the-art Monte Carlo Path Tracing framework running on NVidia GPUs (CUDA). It supports high-quality physically based rendering of volumes, meshes, thick lines and other geometry. For details, have a look at the MeVis Path Tracer Overview.
The OpenVDB library (www.openvdb.org) has been integrated into MeVisLab. OpenVDB supports sparse voxel grids and has a unique level set representation for meshes. It has been used to implement several new MeVisLab modules:
CSOToSurface creates a WEM
surface from a list of CSOs.
MarkersToSurface creates a
WEM surface from a marker list by rasterizing the markers as
OpenVDBLoad loads a sparse
grid as an ML image volume.
OpenVDBSave saves an ML
image volume as an OpenVDB sparse grid.
VoxelizeWEM voxelize the respective
structures into a reference image coordinate system.
to perform boolean operations on closed WEM meshes using a level
WEMLevelSetFilter allows to
apply a kernel filter on a level set generated from a closed WEM
mesh and remesh the result.
WEMLevelSetOffset allows to
enlarge or shrink a closed WEM using level sets.
a closed WEM using a level set representation.
Added a context menu that allows editing of user scripts from the user script menu item itself.
Write the MeVisLab version to saved network files.
Support external links in note items.
3D inspectors can zoom with the mouse wheel.
Prepend "./" to the displayed type of local macro modules.
The Run In Separate Process context menu entry shows a hint why it is disabled when it is disabled.
Connecting fields by dragging fields to the automatic panel was not undoable and also didn't mark the network as modified.
The MeVisLab Output Inspector now supports specialized inspectors for Python object sub-types.
Print an error message if a FieldListener has no field or no command given.
Fixed CTRL+Tab switching between networks in IDE and files in MATE.
Fixed inheriting module documentation if the module name is not the class name.
Can avoid per-function result directory by setting
False in the .def file of the test.
Added option to display test report viewer inside the
MATE (integrated editor)
Newly opened MATE documents are inserted after the tab from which they were opened.
MATE now downloads and installs Pylint version 1.8.4 by default.
Added option to run Pylint manually in MATE, and added a separate error check view.
One can specify a pylintrc file for the Pylint invocations in the preferences dialog.
Pylint check and Jedi auto-completion now regard the
Only highlight text or numbers on double-click.
Added (hidden) option to remove trailing spaces - this can be bound to a key shortcut in the shortcut manager.
Improved MATE startup performance by doing delayed package loading.
The replace-in-files dialog always writes system-specific line endings now.
C++ API changes
Added new ML list fields:
ml::Vector4ListField (similar to the
macros do not need an error type argument anymore. If omitted,
ML_BAD_PARAMETER is used.
ml::Fields don't have a copy
ml::PagedImage which allows
to fetch a tri-linear interpolated value at an arbitrary
ml::Rotation now creates a 180°
rotation for exactly opposite vectors (previously it did
The Inventor class
mouseButtonMask property that
contains the currently pressed mouse buttons.
Allow to override existing cursor shapes in Inventor
BLANK_CURSOR value for the
cursor shape enum field in Inventor modules.
Renamed internal Inventor class
SoLightweightPath because the name was
The destructor of Inventor class
SbProjector was made virtual.
Added a ML_EXPLICIT_FALLTHROUGH define to all platforms,
which expands to
[[fallthrough]] (C++17) on
platforms where an implicit fallthrough would result in a
warning at compile time.
Added new method ml::OpenGL::isMesaSoftwareRenderer() to check if MeVisLab runs with an OpenGL software renderer.
PythonTextView control for
editing Python code in modules. It supports auto-completion of
the underlying module context, context sensitive help and an
extended context menu. Many modules that offer Python
scripting now make use of this control (RunPythonScript,
ItemModelView can show a color and a
checkbox in the same column.
alternateBase (needed for
toolTipText color roles to MDL
clickedColumnField attribute to
ItemModelView control, which writes the
column index onto which the user (double-)clicked to the given
ItemModelView control. This allows to
compute a virtual attribute from other attributes using the
same expression parser as, e.g., the
Row element of the
listview mode on
TabView control. This facilitates the
creation of preferences-style panel with a listview instead of
a tabbar to select tabs. The listview can be made hierarchical
by using the
tabHierarchy tag on
Fixed initial enabled state of
TabView with only one child.
ButtonGroupControl items always affected
the first item.
When a parent checkbox in an
ItemModelView control switches several
child checkboxes, these are collected into one ItemModel
slicerScale attribute on
Slider control (it didn't work
The Space key is not titled "Any"
anymore in the
EventFilter control. Also
added the numerical "keyCode" info.
shouldCloseCommand if a modal
dialog panel is closed with the Escape
Use system proxy settings by default in
WebView control if no proxy is specified in
the Preferences dialog of MeVisLab.
Field control now recognizes the
Fixed wrong auto-alignment groups on the
Grid control. Previously all Grid children
got the same width, regardless of their column.
The More button on a
Field control now shows a non-editable
dialog if the control is non-editable.
Fixed problem with auto-repeat in step-buttons of number widget if a dialog is opened on value change.
New field wrapper classes for the ML list fields and
some Inventor multi-fields:
Since previously these fields were wrapped with
MLABStringField you will now get an
info message if you use the old
property which has a string type. You should rather use the
listValue property or
mlab_projects Python meta
package for importing Python modules from MeVisLab module
projects. (Not supported in auto-completion!)
from mlab_projects.MySuperDuperProject import Utilitiesin Python code to import the Python module
scripting methods with UTF-8 support.
setVr method to
__object__ in the
module context can now be any Python object to be visible
ctx.object(). Previously the
auto-conversion of Python sequences or maps caused a
conversion to a different object type.
The field associated with a control can now be accessed
has an option to wait until finished.
Added new scripting methods on macro modules to determine the sub-type (local, ad-hoc).
Added scripting method
returns true if a module is created just for editor
MLABModule::addModule does not
print package dependency warnings anymore.
Print an error message if a call on a module could not be performed because there was no script context.
scripting class failed for large downloads in the GB
Added new scripting method
so applications can select another name than 'MeVis'.
Other fixes and improvements
Improved CUDA building support, support CUDA 9.
Connecting a bool field to float/double fields correctly sets 0 or 1 (only worked for Inventor fields before).
Do not ignore legacy values in lazy loading modules.
Save persistent flag of fields if required in lazy loading modules.
Worker processes (of remote modules) ignore the
Logfile variable now.
MeVisLab's Python distribution was updated to Python 3.6.4.
Added pyodbc Python ODBC bridge, version 4.0.21 (Windows only, typically used with sqlalchemy).
setuptools was updated to version 38.5.2.
NumPy was updated to version 1.14.2.
pip was updated to version 9.0.1.
coverage was updated to version 4.5.1.
Updated Qt to version 5.6.3.
Removed ospray library from ThirdParty, but re-added current embree library, version 2.17.0.
boost.random can be used in own projects now.
Use other method to determine MAC address for UUID generation in dcmtk to avoid certain crashes.
The storescu tool supplied by dcmtk library now supports on-the-fly compression.
The OpenSSL library was updated to version 1.0.2o.
Added OpenMP runtime for MacOS, version 6.0.
SoView2D and extensions
SoView2DCine that allows more control
SoView2DCurrentState module returns
the visible portion of an image for use with
More control over ruler color in
stepSize field to
supports left-handed coordinate systems now.
can draw a brush preview now.
SoView2DMarkerEditor module was moved
to its own library.
SoView2D key commands
are always available when the mouse is over the viewing area,
not just over the image area.
show the "Alt" modifier option in their panel.
Other Open Inventor modules
Added new modules for menus in OpenInventor scenes:
SoMenuItem. In contrast to
SoView2DMenu these support Managed
Interaction and are more flexible.
Added new modules to query the OpenGL state:
Introduction of the new Managed Interaction Inventor
draggers. Have a look at the
MIPlaneDragger macro module for how to
selectOnlyOnClick option to
SoSelection2, which doesn't perform
the selection if the mouse was moved while holding the mouse
Improved compatibility of Managed Interaction modules with classic event handling modules in Inventor scenes.
Added support for sRGB interpolation in
SoLUTEditor and LUT base
Allow to add control points by dragging from the borders
Allow to choose slab start/center/end for the
intersection (and an optional offset) in
SoCrosshair can render
thin cylinders instead of lines now.
Various changes to
Can work on a copy of the input graph.
Enhanced highlighting capabilities.
Can choose between integer and float LUT evaluation.
Support local transformations in
Added functions to CSO scripting wrappers for seed point selection.
outputTypeMode field to grant more
control over the voxel type of the output image.
functionality to only render CSOs/markers of selected
Fixed an endless loop in
SoWEMRenderer can cache
WEM patches now (e.g. to quickly switch between time
WEMRayIntersect and scripting wrapper
WEMBoundingVolumeHierarchy for a fast ray
intersection with WEM surfaces (based on the embree
WEMIsoSurface will cope
with images with left-handed coordinate system now.
different values (signs) in the PVL for preview and
Added global normal output to
QImageToML for ML image generation
through Qt classes.
module (for green screen handling of video images).
Type(De)ComposerN, which have
a dynamic number of visible inputs/outputs.
fillValue field to
Added an option
useKeyFrameDistanceForSliceThickness to the
Fixed automatic voxel size and bounding box calculation
Replace modes to the
module allows to rasterize a
to a volume.
ImageSave can now save
RGB floating-point TIFF images with a linear (gamma=1) sRGB
ImageCompare now prints
ML_CALCULATION_ERROR instead of an
ML_PROGRAMMING_ERROR if images
We did a clean-up of
library, some old modules were removed.
Avoid crashes in GVR modules when the image min/max values are not correct, i.e., there are voxel values outside the stated range.
always correctly update its output.
Fixed auto-updating of maximum volume limit in
Fixed property extension loading in
Created new utility module
module allows to install Python packages from PyPi.
Lots of fixes and improvements to the
Added undo/redo to
GVROrthoOverlay has a
blendMode field now.
Speed-up loading of file list in
Removed the outdated
ImageViewer application from the
WalkSiblingDirectories that can be
used to compare the contents of two folders file by
SoMIMouseOver allows to detect mouse
over and click on child geometry using Managed
for rotation in the camera plane using Managed
allows for 2D translation in the camera plane using Managed
SoView2DInfo that displays
DynamicLayout that creates a layout
using an MDL file and embeds viewers found in the connected
SoActionFilter that allows to select
which actions are applied to the child graph.
InventorGuard that combines
SoActionFilter such that the child
graph can not be added directly to the scene.
SoNodeFilter that filters the
Inventor scene graph based on node names or types.
ComposeBoundingBox that calculates a
composed bounding box of two aligned images.
with an additional "FromReference" mode, which applies the
same ortho-orientation (transversal, sagittal, or coronal)
as a given reference image.
OrthoCombination, does a combination
of three images in different orthogonal orientations into a
single one with a defined orientation, which puts the images
from the different inputs in separate sub images in the c,
t, or u dimension. This allows for convenient combination
using modules requiring a single input image (e.g.
OrthoProjection or kernel
ImageFromFile that loads a single
image from a directory or file of (almost) any image file
type supported by MeVisLab (basically an extension to
LoadAny, internally making
use of it if everything else fails).
ApplyGlobalModalityLUT, allowing for
normalizing DICOM data containing either a single
frame-unspecific (i.e. "shared" or "global") or multiple
frame-specific RescaleIntercept or RescaleSlope values to a
single, frame-unspecific, user-defined intercept, slope, and
data type. (combining ApplyDicomPixelModifiers and
computes the smallest SubImage of input1 that would contain
all (reformated) voxels of image0..
LUTColorAtIndex that gets the color
at the given LUT index.
LUTColorAtValue that gets the color
at the given LUT value.
SoView2DSetPosition allows to set
the slice index of connected SoView2Ds such that a given
position is matched best.
BoundingBoxListener notifies changes
of the Inventor scene boundingbox. Optionally an object
selection is used.
RotateAtTarget allows to compute the
orientation for a given position, target point and
the image-aligned bounding box of the input image in world
the world-aligned bounding box of the input image in world
ApplyTransformationMatrix allows to
apply a transformation given as matrix on the input
GVRContourOverlay that draws a
contour of a mask image using a GVR secondary volume.
PointReceiver that allow to send
point lists over a communication channel.
FilterCurveList to filter a
CurveList by curve properties such as title or style.
SetMarkerCTUCoordinates to set
non-spatial coordinates for a whole XMarkerList.
TranslateXMarkers to translate all
positions in an XMarkerList.
extrapolate an XMarkerList based on a polynomial fit.
Improvements & extensions
Added simpler, bulge-like node movement to
The macro module
allows more than one input CSO.
ImageCache macro and
CacheManager python module now support progress
The Mesa OpenGL fallback driver has been updated to version 17.5.3.
HiDPI support has been improved, especially for setups with multiple screens of different resolutions.
Fixed a small color conversion bug in the video generation with OpenCV under Windows - videos were slightly too dark.
This release requires at least OS X 10.11.5 (El Capitan) and Xcode 8.2 for development.
Full Support of macOS 10.13 (High Sierra)
Worker and Background Processes started from the IDE will show up in the Dock and allow network inspection via Context Menu Entry 'Show IDE'
Support of OpenMP development with Xcode 9.0 and newer (OpenMP runtime is included with MeVisLab)
Symbol visibility is restricted to explicitly exported symbols
Support of INSTALLER_MACX_PREINSTALL_COMMAND & INSTALLER_MACX_POSTINSTALL_COMMAND for executing shell commands during the installation of pkg installers (aka guided installers)
Support of MACX_SIGN_INSTALLER, MACX_SIGN_CHECK_IDENTITY_BEFORE_USE, MACX_INSTALLER_SIGN_IDENTITY_NAME to sign pkg installers
Not showing diagnostic info messages for MeVisLab console applications.
Do not display certain dialogs if MeVisLab is run in batch mode.
When setting the preferences variable
ShowFieldHelpInApplications the field help is
shown in applications.
Can specify installer icon under Windows with
INSTALLER_WINDOWS_ICON (and added a new default
Removed support for putting .py and MDL files into a zip file in standalone installers.
Overhaul of the multi-language support in MeVisLab:
Calling the language tools from the public SDK works now.
Can open Qt Linguist from the context menu.
Can set the language from the module's context menu.
Better detection of translatable strings.
Translations will be applied to web panels.
Make it possible to use the Unicode plugin in the NSIS
can be SSL encrypted.
isDragging fields to
isFilePath attribute on icon path
Can link against the SoRenderers and SoWEMModules libraries.
Use the http proxy configured on the system by default.
Automatically convert Python unicode strings to QByteArray in object wrappers using UTF-8 encoding.
SoCSO3DRenderer can apply a
LUT to the CSO rendering now if a CSO module sets the extra value
per path point.
SoOrthoView2DBase did not
update its fields
Setting list values from NumPy lists in Python wrappers could crash under certain circumstances.
Fixed MDL tag value auto completion in MATE.
Fixed crash when using
titleField of box
Fixed incorrect parsing of
DirectDicomImport config on MacOS.
Fixed an endless recursion in Python profiling when recursive object references were encountered.
MPR module work with
left-handed coordinate systems.
Fixed a crash in the
DynaCurve module when the
timeData enum is changed.
Do never replace content of Debug Output when clicking links, always open in separate browser.
Support http and other Sphinx default roles in text of note items.
The editing dialog for note items didn't always show.
Fixed a restart issue with the MacOS Dock after adding items.
Fixed undoing of CSO changes not triggering the needed notifications.
Fix a bug in the item parser of
Fixed light state leakage in
rendering on Intel graphics by adding a depth bias.
Fixed crash in
CSOConvertToImage when changing number of
CSOIsoGenerator clears the
CSOList if the
updateMode is set to
showing the wrong overlay when zooming in.
didn't work under
Correctly resize PVLs of WEMs in
Changes to the
MPR module didn't trigger
Fixed endoscopic rendering in GVR raycaster not clipping octree nodes correctly.
Fixed crash on Intel graphics when using shaders without own uniforms.
Avoid crash in VTKCowHairExample from welcome screen (only crashed on Nvidia graphics cards).
Fixed wrong default memory cache size in IDE when main memory size is 16GB or more (on 64 bit systems).
Fixes to Python futurize.
Fixed crash when listening to Shortcut events (which isn't a key event) in the EventFilter control. Also added some more key code names for key events.
Fixed cursor shapes not updating for Inventor viewers when
rendered with a
ADK: Also sign files in TestCases directory of projects in the Projects directory of a package.
Added support for Visual Studio 2017. For this compiler we are abandoning our previous naming scheme (Visual Studio 2015 had the id VC14), and name it VS2017 instead.
KeepDimension option to slab render
modes of modules
MPRLight to allow separate depth or time
WEMSubdivide got support
for localized subdivision using a PVL list.
got a dedicated
depth value to set the depth
buffer to an explicit value.
SoView2DAnnotation got margin
Restored original behavior of
MLABNoteItem::setText() to add plain text
notes (which is faster) and added new methods
programmatically create and edit ReST notes.
also detects git repositories now.
Fixed a crash in
SoWEMRenderer on deconstruction (when an
input was still connected).
Fixed a crash in
CSOVoxelCrop when no input was
Avoid crash in
when filling a custom PVL but not specifying a name.
Fixed value "bleeding" error in
dependsOn mechanism on items of the
sometimes rendering the wrong overlay when using a lot of
sometimes not terminating when applied on non-closed WEMs.
MoviePlayer control not working on
Linux because of a missing library.
which returned the total number of patches instead of the index of
Can disable Pylint checks also for the Py3k pass in MATE.
Fixed Python auto-completion of Qt properties in MATE.
Fixed jumping to error messages in the ToolRunner.
Fixed some wrong cursor position problems on the network area in HiDPI mode.
Fixed the "Save to Image" button of the
ML_ENUM_VALUE macro also work with
C++-11 strongly typed enums.
Speed-up of add-on installation on Windows.
Some small module help updates.
The main reason for the change in the major version number is that MeVisLab is now based on Qt5.6. This change also caused some other changes, so you should read the release notes carefully.
mouseButtonClickedCommand of the ListView control
only react on left-click now. If you want to react on
right-clicks, use the
pressedCommand or an
We switched to a new OpenGL widget in Qt. In case of
problems you can get back the old widget by setting the
ActiveX support has finally been dropped entirely.
We are planning to switch from Python 2 to Python 3 with one of the next releases. To ease the switch we made it possible to make the Python scripting code compatible with both versions.
For this, we introduced a Python 3 Compatibility Warnings option in the Preferences... dialog under the Scripting section. This will emit warnings about non-compatible code when the code is executed. This will also enable warnings about non-compatible code in MATE if Pylint is installed.
There is also a User Script under Scripting → Python 3 Support → Futurize Python Scripts that will automatically convert your code to be compatible with Python 3. It is advisable to check the changes though, since they sometimes tend to be in the category 'works, but is not pretty', and can be done better by a knowledgeable user.
For more information see Preparing Python Scripts For Python 3.
The PythonQt wrappers for Qt have been upgraded to Qt5.
PythonQt for Qt5 still follows the package naming of Qt4, so,
QWidget is still in
QtGui (instead of
QWebView is still in
QtWebKit (instead of
QtWebKitWidgets) and so on.
Changed methods (old → new):
QtCore.QDir.convertSeparators -> QtCore.QDir.toNativeSeparators QtCore.QRegExp.numCaptures -> QtCore.QRegExp.captureCount QtCore.Qt.escape -> MLAB.escapeString QtCore.QTextStream.writeBoolean() -> removed
QtCore.QUrlhas been redesigned in Qt5 and the API has changed substantially. The new class
QUrlQueryoffers some methods that have been removed from
PythonQt has the following new modules:
PythonQt now supports
QtCore.Property (compatible to PySide/PyQt),
and the creation of dynamic meta objects.
QSound has been moved to
__nonzero__ check in some
Added support for Python compare functions
__eq__, etc.) in QObject wrappers.
The context menus of fields and modules have been re-worked to reduce the number of items. It may take some time to get used to the new arrangement.
projectsSearchDepth tag to
the Package.def file of each package to set the maximum search
depth for looking for projects in the Projects
The number of warnings and errors in the console is now displayed in the status bar of the IDE.
MeVisLab now automatically handles UTF-8 files with BOM correctly.
Added NetworkPanel step buttons to modules that switch their inputs (previously we only allowed one button per module, now we can have a forward and a back button).
MeVisLab now checks if an MDL tag may be specified multiple times.
Unknown field types in the Interface section of a module give a warning now.
Cannot specify Image, MLBase, or SoNode field types in the Parameters section of a module anymore.
The image cache can now be cleared from a context menu on the cache size display.
Removed option to enable the classic ML host from preferences.
Improved network notes, they now use Sphinx markup and can link to objects in the network.
Newly created note items are also placed at the mouse cursor if this option is enabled for modules.
isFilePath attribute for
string fields in the Interface/Description section of modules.
This activates a special handling in Field controls and in the
automatic panel, and tries to convert the path value with
MLAB.unexpandFilename when saved in a
Code tests can now be run (and compiled!) from the TestCaseManager.
The test case methods
Base.verifyFalse require the argument to
The TestCaseManager now shows the comments defined on a test case as tool-tip.
Show micro second precision in logging time stamps.
Support multi-selection of test cases.
Test cases can now be organized in "sections" (per package).
One can now select which packages should be visible in the TestCaseManager.
Expected errors and warnings in a test are not marked as error in the MeVisLab console anymore.
should behave correctly now when used recursively.
MATE (integrated editor)
Added highlighting and auto-completion for .mli/.mlinstall files.
The integrated Python debugger can now break on Python warnings. This can be used to prepare the switch to Python 3 (when Python 3 compatibility warnings are enabled).
Python auto-completion runs in a separate process now which makes typing a much smoother experience.
MATE will save files automatically as UTF-8 (marked with a BOM at the start) if required by their content.
Added Extract Method and Rename refactoring functions for Python code.
Can change the font size in MATE with Ctrl+mouse wheel.
Pylint is installed with a fixed version to hopefully fix installation problems in the future.
C++ API changes
Managed Interaction now allows to dynamically remove (or add) interactions from/to a node.
macro to Inventor for easily calling a class method when an
Inventor field changes.
Enabled C++-11 support.
ml::SubImage::setOrigin keeps the
original extent now.
method to classes
addBase overload to
ml::FieldContainer that takes a
RefCountedBasePtr as argument. Also
Added support for replacing the page on the
getTile calls can now take an
optional progress update callback as argument.
The EventFilter control gives more complete information about ContextMenu events.
to the ListView control.
The MoviePlayer control has been re-implemented to use the multimedia framework of Qt.
Added scripting method
setItemToolTip to IconView
feature to the ItemModelView control which sets the checkbox
state of parent items according to the state of their
autoExpandToDepth attribute to
the ItemModelView control.
Added a new
module, removed the old
One has better control over icon sizes of button group
controls with the new attributes
We can now decode RLE-lossless and JPEG-lossless image data in DICOM files.
Improved performance when reading DICOM files.
Dicom UID generation now uses a new prefix.
Added support for OL and UC VRs in DcmTree library.
ml::MutableDicomTree Base objects to
MLDicomTreeImagePropertyExtension library, also added and
improved wrappers for these objects.
SetDicomTreeOnImage which use the new
DICOM Base objects.
DicomTagNames Python module
with all known DICOM tag names as members.
MLAB.terminate now has an optional
exit code argument.
The preferences dialog gained an option to enable Python 3 compatibility warnings (under Scripting).
Added the new
scripting object and moved DICOM related methods to it,
keeping the old methods in
forwards, added new
Added a warning if a control with the same name was already registered in an MDL panel.
Added a no-op scripting method
MLAB.moduleLiteral() to mark module names
for dependency analysis.
Offering Principal Component Analysis via scripting on CSO, WEM, and XMarkers.
function for macOS.
Can copy&paste multi-line Python code into the scripting console and execute it normally now.
Many basic script wrappers can now return (or take) a NumPy array to improve performance.
Added scripting methods
Added a method to the IconView control to change the
QImage of an item.
Added Inventor scripting wrapper methods to get a full
path from a
SoPath, and a quaternion
Other fixes and improvements
We added support for a "CUDA" CONFIG option in .pro files (you still need to install CUDA, though).
Updated Qt to version 5.6.2.
Updated dcmtk to version dcmtk-3.6.1_20160630.
Updated boost to version 1.62.
Added the boost_timer library to the possible CONFIG entries.
Updated Threading Building Blocks to version 2017 Update 3.
Updated OpenSSL to version 1.0.2k.
Updated zlib to version 1.2.11.
Updated libpng to version 1.4.20.
Updated libjpeg-turbo to version 1.4.90.
Added the icu unicode library.
Updated Crypto++ to version 5.6.5 and moved the include files to a sub-directory "crypto" (so you need to adapt your includes if you used this library).
Updated NumPy to version 1.9.2.
Updated Jinja to version 2.7.3.
Updated Pygments to version 2.0.2.
Updated docutils to version 0.12.
Updated Sphinx to version 1.3.1.
Updated Mako to version 1.0.1.
Updated pip to version 8.1.2.
SoView2D and extensions
SoView2D got support
for Inventor picking when rendered in 3D.
SoView2D which can
be used to force an immediate update to fields depending on
the input image.
Added the module
SoView2DArrowHeadSettings, used in
Added new module
Added depth visibility feature to
Added new module
SoView2DGrid which draws a grid on the
Added new module
SoView2DCurrentState to get at pixel
spacing and viewing area of a
Added new module
useInputResolutionIfAxisAligned to the
Other Open Inventor modules
Created a new module
InteractiveRampLUT that is used in
Switched the zoom action of
SoCameraInteraction to be a managed
module which provides a Managed Interaction frontend for the
Can zoom (and rotate) with mouse wheel in
SoExaminerViewer if activated.
Changed headlight handling in
Added SeekToPoint pointing action to
SoCameraInteraction module (must be
bound to mouse button with
module got new fields
can create circles on single click now and resize
circles/ellipses around their center.
New a facility in CSO editor modules to control path point density.
Added group merge mode to
Added new module
SoCSOImageStatistics honor the time
point of the CSO.
pointsPerMM argument to CSOList
Added a Octasphere shape (sphere constructed from
octants) and a Dodecahedron mode to
The first input of
WEMMerge is now called
normalMode field to
WEMSaveAsU3D to support per-node and
Added an option to
WEMModify to sort the faces of all
WEMPatches in the z-direction.
now also stop on a maximum error value for edges.
Prevent smoothing and polygon reduction of the result of
WEMVascularSystem at the leaf
points by new option.
WEMBulgeEditor modules for 2D
and 3D editing.
WEMThreshold will now
intersect faces cleanly.
which allows to generate CSOs at the interval borders of a PVL
value set on the input WEM.
return the clipped remainder and clipping cover in separate
VideoWriter modules can now also
write separate image files.
RemotePanelRendering module can now
handle nested GraphicsViews (this needs to be activated with a
Added an option to
ComputeConnectedComponents to set
image value or rank as default user data.
module from using MemCache to ProcessAllPages.
module to override the filename associated with an
supports HiDPI screens now.
Added support for tag name completion to
Added C, T, and U ramp to
Added field allowInvalidInputs to
which does a principal component analysis on an
Speed up compare of DICOM trees in
Added new module
ComputeMajorAxis to compute extent of
mask items in 2D.
Added new module
Added a recursive filter mode to the
now compute statistics for multiple mask regions.
Improved and renamed
Added new module
which does a distance transformation to the inside and the
outside of a mask image.
ChangePageExtent which allows to
change the page extent of an image per dimension.
ignoreOrigin option to
PythonImage module and
Fixed an offset miscalculation in
OrthoReformat3 leading to crashes for
module can now sort by column.
Added a 'finalize' section to the
onlySetIfChanged flag to the
that wraps different kinds of caches and provides additional
auto update modes (e.g., 'auto-update only if valid and
different') that can be helpful during prototyping, and a
CacheManager Python module that can be
used to dynamically add caches to a network.
supports iterative updates in cyclic subnetworks.
calculate statistics of CSOs with respect to a given
CSOWorldCrop that take a CSOList and
a bounding box (in voxel or world coordinates, respectively)
and removes all points from the CSO that are outside the
that can shrink or extend CSOs anisotropically.
CSOResample to resample seed points
in a CSO to a given distance.
CSODifference that computes the
difference between two CSOs as open CSOs.
modifies certain properties of a CSOVisualizationSettings
CSOOrthoEditor for to allow
rendering and editing CSOs on an
converts a WEM to a CSOList with CSOs on the planes of an
SetMarkerProperties to set common
properties for all markers in a marker list.
ExtrapolateXMarkerLine that extends
a dotted line of XMarkers linearly in both
New functionality and modules in and general overhaul
of the test hierarchy analysis for complex dependencies,
package and the
New modules for ListBase-derived list (e.g., XMarkerLists) handling:
a list in two.
a part of a list .
ListActionInspector: Shows info
about the current action on the list.
Other new modules:
New Python classes
TestCenter tests that come in class form and support cleaner
test setups (in fmeTestSupport).
New user script
Added Python wrappers for most standard
Improvements & extensions
Several improvements to the
AlgorithmMacroModule base classes and
the corresponding wizards.
The behavior of
CSOListToStylePalette needed to be
changed in order to fix several bugs in palette generation.
The output StylePalette is now resized correctly so it can
be empty or it can have less than 12 styles. In addition,
palette colors and names are now cleared correctly before
each update which may result in different outcome in
existing networks. CSO labels are now also set as style
names in "CSO Id" and "Group Id" modes.
CSOShapeBasedInterpolation can now
compute the distance transform based on the CSOs and thus
achieve sub-voxel accuracy.
have an additional distance map output and a "use distance
to contour" flag.
now optionally convert polygons to CSOs with a single seed
CSOConvertToXMarkerList now has an
additional mode where the relative position of the marker
point in the CSO (start, inner, or end point) is stored as
sorting is now stable.
can now ignore marker type .
can now optionally process the whole input list.
module by a new
VCSQuery module obtaining
SVN revision infos for paths.
update of trace images which failed if having averaged DTI
outputs graph usable by WEMVascularSystem.
Several improvements to the
ModuleSuggest user script.
overhaul and improvements.
Performance optimization of
OpenCL stubs to current
version (2.1) due to deprecated OpenCL 1.0, 1.1, and 1.2
Many network panels added or improved.
range and width parameters were swapped in the mapping to
now allows to select voxel set at index 0.
sets the ListBase:ActNew action when updating its
XMarkerListTransformation now copies
the input marker IDs correctly to the output list.
now updates normal when changing
ReleaseToolsDICOM.h and its corresponding
namespace have been moved into the project
DICOMTagTools and its corresponding namespace
mlDICOMTagTools.h. Renaming and
rebuilding projects should solve all compile and linkage
problems; the signature of one tool function has changed:
DCMTreeInfo determineDCMTreeInfo(DCMTree::Const_TreePtr dcmTree);has been changed to
void determineDCMTreeInfo(DCMTree::Const_TreePtr dcmTree, DCMTreeInfo &dcmTreeInfo);It may be necessary to include the header file
mlDICOMTreeInfo.hto compile this.
Tools for conversion between ML and DICOM located in
MLMultiFileVolume have been moved into
MLDicomToMLTools. If you only make use of
such tool functionality then you may reduce your project
dependencies only to one or both of these projects and
Many functions require a
DicomMessageCollector (from project
DICOMCachedIO) now which collects
possible issues and other messages. The former way to return
a descriptive string has been removed from a large number of
Changes on DICOM related modules:
DicomSEGSave for exporting DICOM SEG
files, supporting the DICOM Segmentation IOD.
providing details on SEG files.
A diagnosis and analysis module for MultFileVolumeList,
providing for example some basic statistic and search
functionality as well as validity tests.
configuring messaging and logging of modules using
provides an option to load MultiFileVolumeCache-files
detect differences in value multiplicity now.
exception errors on files where NumberOfTags tags does not
have a value.
other modules posted unnecessary errors on empty file name
selections and disabled update modes when files still do not
module does not accept private element tag IDs with lower 8
bits < 0x10.
not export pixel data any more if no ImageTagsPlugin loaded
had an unbounded volume index and/or displayed volumes out
have an 'updateDone' trigger output now.
Dicom*Save (except of
DicomSRSave) modules have
an input connector for
DicomTagModify modules now.
does not post errors on default instantiation any
provide the currently used
MultiFileVolumeList at a Base output
for convenience now.
have the functionality to display references to original
has support for tag search in MF volumes as well as
multi-value tag search support now.
save some tags anymore that are disallowed by the
Added some documentation about supported DICOM import functionality.
Improved performance of loading .nii files.
Fixed that Deformable Registration Object cannot be loaded.
Fixed problems with non-bitmask / fractional SEG files.
Fixed that same sized high dimensional (>4) NM DICOMs were sorted together to a broken image .
Fixed problems with separation of multi-segment SEG files.
Fixed that unknown standard tags were shown as unknown private tags.
Many optimizations in the import process have been implemented, especially on enhanced multi-frame files and large series. 2D pixel data is mostly loaded on demand now, which can speed up import times.
Errors and messages related to pixel data accesses in DICOM data do not appear during import time any more but much later when data is accessed.
When importing data via
ImageLoad, DCMTK issues were not
caught in the
DirectDicomImport log stream but
logged in the console.
The panel has been modernized, many elements have been moved into specific dialogs which can be opened with buttons or with double click on a volume in the volume list, all elements and fields still exist; some buttons have been realized as more compact enumerator fields.
Fixed that "Position Reference Indicator" tag was removed when importing Enhanced MF DICOM files.
modules produced too many/much error output for a single
handle handle Sign Extensions of pixel data as well as
Can read Parametric Maps now.
Fixed that decomposing of enhanced multi-frame files did not maintain the structure of Functional Group sequences.
Fixed that writing relative paths did not work for enhanced DICOM images.
and other modules with bit-overlay outputs used SET
instead of OR for overlay merges.
RWV (Real World Mapping Storage) data should not be handled as image data any more.
Fixed error on valid import of Enhanced DICOM files with private tags in Functional Group macro sequences.
Fixed crashes while importing corrupted XA data.
Handles retired SR data more strictly now. The module has been revised to provide permission flags which still allow retired structures.
The module is not backward compatible any more, check functionality and reconfigure modules if they are stored in networks.
Handling mismatch of MeVisLab Worldmatrix and DICOM world tags (ImagePositionPatient, etc.). Source can be selected now.
DicomSEGSave add tags
of Common Instance Reference Module now.
Also supports other frame types than DICOM as well as enhanced multi-frame frames.
The robustness against frames without Image information was improved.
Other DICOM related fixes and changes:
Some functionality has been moved to new or other existing libraries.
The new Value Representation UR is handled in many places now.
Many input fields (for example in
DicomREGSave) check values with VR
CS for standard compliance now, invalid strings will not be
saved any more.
If your application stored invalid strings before,
this will not work any more. This changes the behavior
DirectDicomImport cannot distinguish
between DICOM images with RGBA value representation - as for
example stored by
- (which do not obey the DICOM standard) and valid ones only
having RGB photometric representation; therefore such images
are shown incorrectly.
missing support for "Philips3D" files.
Updated VTK to version 7.1, of 2016-05-03.
Renamed conversion module module
MLBaseToVTKPoints to the more
Dropped deprecation support for versions before MeVisLab 2.3.
isFilePath MDL feature is used
for file names and paths. This may require a confirmation of
values in file and path fields when updating networks with
Removed a number of wrappers for deprecated VTK classes and of many others which do not make sense as wrapped modules. Also some deprecated and useless modules and fields have been removed
In some situations MeVisLab redraw events get lost when rendering objects in VTK renderers. This can lead to missing redraws of the MeVisLab GUI. Dragging at application borders can resize and redraw MeVisLab in such cases.
Some classes wrapped as VTK modules are still unstable or have missing example networks.
Many connectors and fields have changed. Usually they will automatically be reconnected to new connectors, however this is not always possible. Thus stored networks may be affected or become incompatible.
If stored field names could not be restored, in most cases (re-)saving the network removes the warnings.
If connections cannot be restored, carefully check which one is missing. In most cases they can be re-established manually.
PCLStatisticalOutlierRemoval which uses
point neighborhood statistics to filter outlier data.
PCLRadiusOutlierRemoval which filters
points in a cloud based on the number of neighbors they
Experimental loader for IMAGINEX Azimuth DELTA Sonar .837/.83B
PCLBaseObjectWrapper has a another
function which allows to set a larger point set at once from
The Mesa OpenGL fallback driver has been updated to version 12.0.0.
HiDPI screens are supported on Windows now. Some small bugs may still exist though, especially for mixed display setups.
This release requires at least OS X 10.11.5 (El Capitan) and Xcode 8.1 for development.
Full support for macOS 10.12 (Sierra).
Updated the MeVisLab macOS Edition guide.
Updated the OsiriX MeVisLab Bridge guide.
The ToolRunner application may be used to setup Xcode workspaces for dependent or related projects. See Creating Multi-Project Xcode Workspaces using ToolRunner in the MeVisLab 3.0 macOS Edition guide.
The OsiriXBridge modules, the plugin, as well as the documentation have again been included into MeVisLab. Support has been extended to Horos. The source codes are being published to the GitHub community repository.
For module development, the created Xcode projects will now build against the newest SDK shipped with Xcode and set the deployment target to the OS release against which MeVisLab has been build.
One can create NetBeans C++ project files from .pro files now.
Added command line option
running batch jobs on Linux.
Make installation of applications possible without admin rights.
One can create TestCenter addon installers for applications now.
Improvements to .mlinstall/.mli files:
PREPROCESS_MKDIR command that
creates a directory immediately when encountered.
command that executes a command immediately when encountered
and sets the
Only specific environment variables are automatically imported into .mlinstall/.mli files as is (mostly those starting with MLAB_). All other environment variables need to be prefixed with ENV_.
Created a MeVisLabAppConsole executable that writes output to the console on Windows.
The ModuleDependencyAnalyzer collects *.ts (translation) files now.
For the release notes of older MeVisLab releases see this document.
© 2022 MeVis Medical Solutions AG