Table of Contents
This document lists the most relevant changes, additions, and fixes provided by the latest MeVisLab releases.
IDE
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
window.
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.
TestCaseManager
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.
The 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
Added method
CSOGeometry::computeClosestPathPoint
which
really returns the nearest path point of a CSO.
Controls
Added a tooltipField
attribute to all
controls, which allows to set the tool-tip of a control through
a field.
Fixed initial visibility of buttons using the
visibleOn
attribute in a
ButtonBox
control.
Fixed sorting in ListView
control if
initial item values are changed later on.
Scripting
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
have a title
, condition
(a short Python expression) and a userScript
attribute. Have a look at the ModuleAction in
Packages/MeVisLab/Standard/Modules/Macros/Wizards/LocalToGlobalUserScript/LocalToGlobal.def
for an example.
Added method
enableAlternatingRowColors
to the
MLABListViewControl
.
Added method setAllowRenaming
to the
MLABIconViewControl
.
One can get the parent Dicom tree of a
MLABDicomTree
wrapper with
parentTree()
.
Added the scripting commands
MLAB.prefsFileNames()
and
MLAB.userPrefsFileName()
.
Allow to set additional image dimension information
on an MLWritablePagedImageWrapper
with
setCDimensionInfos()
,
setTDimensionInfos()
, and
setUDimensionInfos()
.
Added deepCopy
method to the
CSOList
scripting wrapper.
Fixed MeVisLab hanging when using keyword arguments on a
slot that didn't have the kwargs
parameter.
Fixed the requestStopProcessing
call
on remote modules to not apply to anything that is sent to the
remote module after this call.
Changed output of
MLAB.detailedSystemId()
and
MLAB.systemInfo()
(at least on some
platforms). MLAB.detailedSystemId()
is
deprecated now, since it actually isn't very detailed. We
recommend to use
PythonQt.QtCore.QSysInfo
instead.
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
problems.
Added a -printJSONInfo
option to the
MeVisLabPackageScanner.
Third-party libraries
Updated Qt to version 5.12.6.
Updated libzeromq to version 4.3.2.
Added the dcmmkdir tool from the dcmtk library.
Python
Updated pyzmq to version 18.1.0.
Updated jinja2 to version 2.10.3.
Updated MarkupSafe to version 1.1.1.
SoView2D
and
extensions
Improved placement of SoView2DLabel
.
SoView2DLabel
: Can set
margin to background borders.
SoView2DOverlayDecoration
got an option
to draw the border outside the image.
Added the updateLayout
method to the
SoView2D
scripting wrapper to
update the viewer layout manually.
Other Open Inventor modules
Make SoMouseGrabber
switchable to Managed Interaction, and use that feature
accordingly in InteractiveRampLUT
and View2D
.
The SoXxxxMenu
menu
widgets got a field to control the factor for
darkening/brightening on mouse-over.
MeVis Path Tracer
Added support for IBL_Equirectangular projection to
SoPathTracerBackgroundLight
(automatically detected from input image).
CSO
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
restrictToImageBoundaries
on SoCSOPointEditor
.
WEM
Improved the WEM output inspector.
One can select a simple sub-division mode in WEMSubdivide
now.
Fixed that PVL values were doubled in any
WEMProcessor
module.
ML modules
Added a bunch of graph editing modules:.
GraphManager
:
Enables graph editing with undo/redo.
LabelTrees
: Sets
labels to trees in order of descending size.
LabelSelectedTree
:
Sets labels to a selected tree.
LabelFromEdgeToLeaves
: Sets labels
from a selected edge down to the leaves.
LabelByThresholdedVolume
: Sets
labels for image voxel values under the skeleton
positions.
GetTreeLabels
:
Retrieves tree labels.
ConnectEdges
:
Connects edges in a graph.
DisconnectEdges
:
Disconnects or removes edges in a graph.
RemoveTree
: Removes
a tree.
SetRoot
: Sets a new
root in a tree.
SplitGraph
: Splits
a graph and removes trees if label values criterion is not
met.
SetLabelToTreeDepth
:
Sets labels accordings to tree depth from roots to
leaves.
SetImagePropertiesToGraph
: Sets
image properties (matrix, image extend) to a graph.
GraphToMarker
:
Converts a graph (nodes, edges) to XMarkers (Positions,
Vectors).
GraphViewer
: Offers
a view of the logical structure of a graph.
Resample3D
: Ensure that
the output size is at least 1 in each dimension.
VoxelizeInventorSceneGPU
works on Radeon cards now.
SoImageFileSampler
:
Added options to generate seamless and Mip-mapped
textures.
Added the DicomDeidentify
module for
anonymization of DICOM data.
Fixed handling of WindowCenter
and WindowWidth
for VOI
LUT Function "LINEAR" in DicomLUT
and RampLUT
modules -
note: this needs to be enabled in existing networks.
LUTCombiner
now allows
scaling of the input LUTs.
Macro modules
DicomTool
does not write
multi-frame information to the individual slices it saves
anymore.
Additions
New module NormalizeGeometry
for
standardization of image geometry (orientation and
resolution).
New modules for fast and customizable cheapest path
search on XMarkerLists (XMarkerListToCostGraph
, CostGraphCheapestPath
, CostGraphGenericCostPlugin
, CostGraphEdgeLengthCostPlugin
,
CostGraphClosestVertex
).
New module 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
ratio.
New module CSORemoveSelfIntersection
.
New GVR extension module GVRGammaCorrection
.
New module CompareScreenshotsStable
.
New modules UDPStringSender
and UDPStringReceiver
for sending and
receiving strings over asyncIO UDP sockets.
Improvements & extensions
DICOM and file IO
Several internal quality improvements and minor fixes.
PCL
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 SoViewportRegion
.
added event forwarding.
Note | |
---|---|
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:
~/Library/Application
Support/<BundleName>/Certs/cacert.pem
~/Library/Caches/<BundleIdentifier>/Certs/cacert.pem
(this is the place, where the auto-generated certificates
archive is stored)
~/Library/MLAB_OpenSSL/cert.pem
/Library/MLAB_OpenSSL/cert.pem
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.
~/Library/MLAB_Python/3.6/lib/python/site-packages
)
and the integrated Python interpreter loads modules from this
location.
Store Module Caches outside the installed App Bundle
(~/Library/Caches/<BundleIdentifier>/ModuleCache
)
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
.pro
files.
The QUrl
s 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.
IDE
Single files listed in the Deployment
section of modules do not cause further dependency
analysis.
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
when function locals()
(or something
similar) is used in code.
Automatic reload of modules on double-click also considers changed MDL includes now.
TestCaseManager
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
.def
file).
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
new keyword preferredRenderer=software
(in the
.def
file of the test) when using secure
testing (only on Windows, and on Linux when using the Mesa
graphics driver).
Tests are by default always run with Secure
testing if the environment variable
MLAB_USE_SECURE_TESTING_BY_DEFAULT
is
set.
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.
Toggling between .script
and
.py
file (default binding is Alt+Down) usually also works now if not connected to a
module instance in MeVisLab.
C++ API changes
The 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
headers.
SoDiagram2DExtension
s now have
more options in which layer to draw.
The AdjustDimInfo<>
template was moved from the code of the SubImage
module to the
MLTools
library.
Introduced a new
ml::OpenGL::getVideoMemorySizeInMB()
method which is smarter about returning the texture/video
memory actually available in OpenGL.
Implemented the Base::deepCopy
method on BaseList
(and
XMarkerList
).
View2DSliceList::getSliceNormal()
always returns the real slice normal (and not just the
z vector) now.
The
SoFieldData::getRemovedFieldNames(
)
method of Inventor nodes is evaluated in MeVisLab now.
Controls
Added the WebEngineView
control,
which is similar to the WebView
control,
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
WebView
.
The expandY
attribute of most
controls defaults to auto
instead of
no
now, so you now should rarely need to
set this yourself.
Added a validator
tag to the
ComboBox
control, which takes a regular
expression against which to check the input of an editable
ComboBox
.
Added a insertSeparator
method to
the ComboBox
script wrapper.
Added methods setModulePanel
and
setModuleWindow
to the
DynamicFrame
control.
Implemented auto-indentation for the
PythonTextView
control.
Added support for direct texture transfer between
processes in RemoteRendering
(only on
Windows, and on the same computer). Set the
useDX11SharedTexture
attribute on the
RemoteRendering
control to activate.
Added popupMode =
[Instant|Delayed|MenuButton]
support to the
ToolButton
control.
Added titleField
support to the
ToolButton
control.
Added the acceptWheelEvents
tag to
some controls — default is true
.
Added the tag comboEditable
to the
Field
control.
Added a componentTitles
attribute for
Field
and VectorEdit
controls, and setComponentTitles
and
setComponentTitleAt
scripting methods,
which allow to override the default component titles of a
vector edit control.
Fixed initial visibleOn
state of
panels included with the Panel
control.
Added visibleOn
expressions for
MenuItem
entries.
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
practice.
Fixed layout flickering on Label
controls with a frame and trimming enabled.
Added a windowActivatedCommand
to the
Window
control.
The ListBox
scripting wrapper got a
sort
method.
Scripting
When calling unknown methods on objects derived from
QWidget
a hint is printed that the user
perhaps needs to do from PythonQt import QtGui
first.
We enabled multi-threading in Python. In case of
problems you can disable it with an entry
PythonMultiThreading = NO
in your preferences
file.
Added MLABModule::callOnGUIThread
scripting method to call a scripting function from any
thread.
The Qt scripting bindings were updated for version 5.12.
Added an MLABSoPathField
class
which allows to access the Inventor node path result of
(currently only) module SoPicking
from scripting.
Removed the method
MLAB.macRunPrivilegedCommand
.
Removed the method
MLAB.gpuTextureMemoryInMB
, rather use
MLAB.gpuVideoMemoryInMB
.
MLABImageField.mapVoxelToWorld
and
.mapWorldToVoxel
scripting methods also
work on the Inventor SbVec3d
class
now.
Added scripting methods for adding and removing vessel
voxels to the ml::Graph
scripting
wrapper.
Moved method
MLAB.priv().aboutThirdPartyHTML()
to
MLAB.aboutThirdPartyHTML()
.
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
wem.createNearestPointOnSurfaceObject()
.
Fixed that
WEMWrapper::removeWEMPatchAt
took the
argument as id of the WEM instead of as index. Also added
WEMWrapper::removeWEMPatchById
.
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
MLAB.createRecentFilesHandler
.
Added the
MLABTreeWrapper::deepCopy()
scripting
method.
Added scripting method
MLABPackageManager.getMeVisPythonExecutable
which returns the location of our Python interpreter
executable.
Added the getTransform
method to
the scripting wrappers of SbMatrix
and
SbMatrixd
.
MeVisLab now changes the PATH
on
Windows in a way that this change is also visible from Python
in os.environ
. This fixes that augmenting
the PATH
from Python would overwrite the
changes from MeVisLab, which prevented loading of modules,
e.g., after installing and using an externally installed
NumPy
.
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
PixelSpacing
or
ImagePixelSpacing
tag when this tag only
contains one value (thus fixing invalid DICOM files).
Project wizards can have a condition
(a Python expression) which defines if the wizard should be
shown.
Make module dependency analyzer detect DLLs from scripting wrappers.
Added some DicomTree
error
logging.
Third-party libraries
Updated Qt to version 5.12.3.
Updated QtWebKit to version 5.212.
dcmtk
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.
Python
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.
SoView2D
and
extensions
Qt font rendering is now the default in SoView2D
.
Added textShadowColor
field to
SoView2DAnnotation
.
Added line stipple pattern to SoView2DPosition
.
Fixed clipping planes in SoView2DScene
when coordinate system
is left-handed.
Added scripting wrappers for coordinate transformations
to SoView2D
and SoOrthoView2D
.
Added alpha value parameter to DrawVoxels3DPreview
.
Improved the undo behavior/interface of the DrawVoxels3D
module.
Added an option to restrict drawing of the background
color in SoView2D
to the
image area (useful when using a white background color and a
blend mode like Minimum
).
SoView2DRigidRegistrationEditor
: Added
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
cases.
Other Open Inventor modules
Multiple SoRenderSurfaceIntersection
modules
share the same buffers now and the buffers are only resized if
necessary.
Added the option Only render opaque
objects to the SoPostEffectMainGeometry
module.
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.
Extended SoMarkerListPointSet
and So3DMarkerEditor
to allow filtering
XMarkers by timepoints.
Added a new SoCameraWidget
module for moving the
Inventor camera from a widget.
Added new SoSlideWidget
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 SoSceneLoader
module.
The AnimatationRecorder
has been improved.
Removed the font
field from SoExtText2
, added a
fontSize
field instead, did the same for
So3DXMarker
and So3DMarkerEditor
.
Add relative text placement in SoExtText2
.
Allow GPU filling in SoRenderSurfaceIntersection
when using
the CPU intersection routine.
Added LoadInventorFile
module to load .iv
scene files.
SoGVRAmbientOcclusion
supports other OpenGL buffer formats now and allows to specify
a name for the sampler.
SoVascularSystem
: Added
smart snap mode to highlightMode
which
highlights the nearest node towards the root within a given
range.
SoInput
works with
network paths on Windows now.
SoViewportRegion
can
now scale pixel values automatically for HiDPI screens.
SoFramebufferSampler2D/3D
and 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 SoPathTracer
.
Added silhouette effect to SoPathTracerMaterial
.
Added support for 8bit, RGBA, and gradient volumes.
Force full quality updates in SoPathTracer
when rendering to
OffscreenRenderer
.
CSO
Added a WEMExtrudeCSO
module for extruding CSOs to a WEM surface.
SoCSOLiveWireEditor
only requests the input image if really required.
SoView2DCSOExtensibleEditor
now sets
the maskValid
flag when interacting.
A new MLCSO API
CSOGeometry::computeIsInPlane
is used in
CSOTrailRenderer
.
Added a wrapper for the method
CSOGeneratePathPoints::fillPathPointEllipse
(and added an optional pointDistanceInMM
parameter to all recompute...
methods).
Added a close
method to the CSO's
Python wrapper to close an open CSO.
Seed points can also be rendered as triangles now (see
module SoCSOVisualizationSettings
).
SoCSOIsoEditor
also
works correctly on other timepoints than the first now if an
image has more than one timepoint.
WEM
WEMModify
got an option
to merge all patches into one. This functionality is also
available from the WEM scripting wrapper.
WEMSelectPatches
can
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
SoWEMRendererExtension
s
unpickable.
SoWEMRenderer
now
offers information whether mouse is over surface in
performPreHitTest
mode.
SoWEMBulgeEditor
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
in WEMVascularSystem
.
ML modules
Added support for FloatPixelData DICOM tag to ImageSave
and ImageLoad
.
ImageSave
can't save
RGBA images in DICOM mode anymore, this wasn't done correctly
anyway.
Added option to only render vessel voxels to the output
image of the GraphToVolume
module.
RemotePanelRendering
can render modules in parent networks now (by specifying the
"parent:" prefix), not just sibling modules.
Fixed some mouse coordinate offset problems with
RemotePanelRendering
.
Added new error handling mode
ExactlyOneOpenInputIsError
to the ImageCompare
module.
One can now specify the page extent for the ImageCompose
module (and for the
VirtualVolume
class).
DicomFrameSelect
also
gives a valid output if there are no frame specific tags at
all.
Renamed/added some fields on module DistanceFromXMarkerList
, and changed
the behavior if the input marker list is empty.
The Sobel3D
module now
has an 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).
Macro modules
Some old modules were deprecated: SwapViewer
, Negation
, DicomBrowser
, DicomImport
, DicomService
, OpenImage
, SaveImage
, ImportDialog
.
Added support for faster dcmsend
application to the DICOMTool
module.
ImageLoadMulti
can also
work with 0-based indexing now.
Added dimension
parameter to SignedEuclideanDistanceTransform
.
Module DicomTool
can
store/send image blocks with a gantry-tilt now.
Additions
New module ShortestPath
for Dijkstra
calculation of the shortest path in an image.
New python package file_caching
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
module.
New helper modules Switch2
(switches between exactly
two image inputs) and AutoSwitch
(auto-switches between
one default and an optional 'override' image input).
New module CSVReader
for reading comma-separated value files.
Added module ModuleHtmlPostProcessor
which can
transform module help files into something suitable for
application documentation.
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
MultiFileVolumeListRefCounted
(from DirectDicomImport
and related modules).
Added private creator "Fraunhofer MEVIS" with
private tags
SourceIndexOfDecomposedFrame
and
SourceSOPInstanceUIDOfDecomposedFrame
.
Improved handling of SOPInstanceUIDs from enhanced multi-frame files.
Added "Frame Tags View" tab
in MultiFileVolumeListDiagnosis
to
get easy overviews about same tag in multiple
frames.
Added further suppression to DicomConfigurableMessageFilter
modules.
Added sorting for tag
"DimensionIndexValues
" in default
configuration of DirectDicomImport
to improve
imports of Slide Microscopy (SM) files.
Added option in module MultiFileVolumeListFilterOutputs
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
LUTs).
Fixed unnecessary rare warnings in DICOM overlay
calculations (e.g. in MultiFileVolumeListImageOutput
and DirectDicomImport
).
Fixed incorrect shifts in DICOM overlay calculations.
Fixed incorrect buffer sizes written when binary
images are written as DICOM SEG with DicomSEGSave
.
Fixed crash of default MultiFileVolumeListFilterOutputs
after simple add/remove.
PCL
Added module PCLIntensityRankFilter
which
performs a rank filtering on intensity replacements of
each point of a point cloud.
Added module PCLR2SonicWCLoader
which can
load certain sonar data files.
Added module PCLIterativeClosestPoint
that
finds the closest match between points of two point
clouds.
Other
Added SoText2D
node support in CompareInventorSceneSampling
.
Long file path support has been established/restored for our MeVisPython interpreter.
ImageLoad
and 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
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled).
Command line arguments were not parsed with the correct character encoding.
The Dependencies
tool is supported as a
replacement for DependencyWalker
when
checking DLL dependencies from a modules's context menu.
Added the option FullscreenFlickerFix
,
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
projects.
MeVisLab will use the correct available RAM in docker containers when deciding on default memory consumption.
Note | |
---|---|
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:
support .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 &
Makefiles in .pro
files
Added the MetalKernel1
module that allows to script and apply a Metal kernel to an ML
image
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
SoPointingAction
class.
C++: Make libraries MLGraphUtilities
and
SoCoordUtils1
usable from own projects.
C++: Added macro SO_NODE_ADD_ENUM_FIELD
as a shortcut for SO_NODE_SET_SF_ENUM_TYPE
and
SO_NODE_ADD_FIELD
to Inventor.
The 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
the MLABFileDialog
scripting class.
Added a scripting wrapper for some of the
OpenVDB
functionality. Using the wrapper can
be more efficient than using the OpenVDB
modules, since several level-set operations can be chained. See
class MLOpenVDBToolsWrapper
in the
Scripting Reference for details.
Added function
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.
Module DicomReceiver
got a
new field additionalStoreSCPOptions
to specify
additional command line options.
The minimum and maximum values of the BoundingBox
module can be activated
separately with checkboxes now.
Added isMouseOver
field to module
SoMenuItem
.
Added relativeAnchorPoint
field to module
SoFixedMenu
(used when not in
pop-up mode to position menu items at a relative position of the
viewing area).
Added performPreHitTest
field to module
So3DMarkerEditor
.
The 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 SbRotationd
out
of/into it in Python scripting.
Improvements for module CreateRTStruct
:
Added field treatCollinearAsPlanar
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 ContourData
when
writing CSOs.
Windows: The Mesa OpenGL fallback is always added to
stand-alone applications if you don't set
WITH_MESA
to 0 in your
.mlinstall
file.
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.
The 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 RemotePanelRendering
.
Fixed that SoDiagram2D
used
the color of the first style to draw the last curve when
stylePaletteMode
was
STYLE_PALETTE_NAME
.
Fix crash under certain circumstances when removing the
SoView2DCSOEditor
module from a
network.
Fixed that the output of module SoPostEffectBackground
in OffscreenRenderer
turned all black when
opening an internal network.
Fixed menu item placement in SoFixedMenu
and SoBorderMenu
: Items attached to lower/left
border jumped around when resizing.
Improved blending of SoView2D
font rendering with
background.
Fixed an infinite Inventor loop in module View2DTouch
. Also fixed usage of unknown
field hiResRendering
.
Ported some Python tutorial modules to Python3: Tutorial_BasicPython
, Tutorial_MeVisLabAndPython
, Tutorial_AdvancedPython
.
Ported module CLIImporter
to Python 3.
The 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.
Documentation fixes.
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
MLABSystemInfo.glSupports10Bit()
.
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
spheres.
OpenVDBLoad
loads a sparse
grid as an ML image volume.
OpenVDBSave
saves an ML
image volume as an OpenVDB sparse grid.
VoxelizeCSO
, VoxelizeMarkers
, and VoxelizeWEM
voxelize the respective
structures into a reference image coordinate system.
WEMLevelSetBoolean
allows
to perform boolean operations on closed WEM meshes using a level
set representation.
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.
WEMLevelSetRemesh
remeshes
a closed WEM using a level set representation.
IDE
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.
TestCaseManager
Can avoid per-function result directory by setting
perFunctionResultDirectory
to
False
in the .def file of the test.
Added option to display test report viewer inside the
main TestCaseManager
panel.
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
module's importPath
.
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::IntListField
,
ml::DoubleListField
,
ml::Vector2ListField
,
ml::Vector3ListField
, and
ml::Vector4ListField
(similar to the
Inventor multi-fields).
The mlError
,
mlWarning
, mlInfo
macros do not need an error type argument anymore. If omitted,
ML_BAD_PARAMETER
is used.
ml::Fields
don't have a copy
constructor anymore.
Added new getInterpolatedValue()
method on ml::PagedImage
which allows
to fetch a tri-linear interpolated value at an arbitrary
location.
ml::Rotation
now creates a 180°
rotation for exactly opposite vectors (previously it did
nothing).
The Inventor class SoEvent
now
has a mouseButtonMask
property that
contains the currently pressed mouse buttons.
Allow to override existing cursor shapes in Inventor
viewers with
SoViewerProxy::defineCursor
.
Added a BLANK_CURSOR
value for the
cursor shape enum field in Inventor modules.
Renamed internal Inventor class
SoLightPath
to
SoLightweightPath
because the name was
confusing.
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.
Controls
Added a 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,
PythonArithmetic, ...).
ItemModelView
can show a color and a
checkbox in the same column.
Implemented an alternatingRowColors
attribute on ItemModelView
.
Added alternateBase
(needed for
alternatingRowColors
),
toolTipBase
, and
toolTipText
color roles to MDL
style
.
Added clickedColumnField
attribute to
ItemModelView
control, which writes the
column index onto which the user (double-)clicked to the given
field.
Introduced ComputedAttribute
to
ItemModelView
control. This allows to
compute a virtual attribute from other attributes using the
same expression parser as, e.g., the
dependsOn
mechanism.
Implemented
dependsOn
/visibleOn
on
the Row
element of the
Table
control.
Added new 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
TabViewItems
.
Fixed initial enabled state of
TabView
with only one child.
Fixed that dependsOn
of
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
update event.
Removed slicerScale
attribute on
Slider
control (it didn't work
anyway).
The Space key is not titled "Any"
anymore in the EventFilter
control. Also
added the numerical "keyCode" info.
Call shouldCloseCommand
if a modal
dialog panel is closed with the Escape
key.
Use system proxy settings by default in
WebView
control if no proxy is specified in
the Preferences dialog of MeVisLab.
The Field
control now recognizes the
comboItems
attribute.
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.
Scripting
New field wrapper classes for the ML list fields and
some Inventor multi-fields:
MLABIntegerListField
,
MLABDoubleListField
,
MLABVector2ListField
,
MLABVector3ListField
, and
MLABVector4ListField
.
Since previously these fields were wrapped with
MLABStringField
you will now get an
info message if you use the old value
property which has a string type. You should rather use the
new listValue
property or
stringValue()
/setStringValue()
.
Added mlab_projects
Python meta
package for importing Python modules from MeVisLab module
projects. (Not supported in auto-completion!)
Use
from mlab_projects.MySuperDuperProject import Utilitiesin Python code to import the Python module
Utilities
from file
$(MyPackage)/Projects/MySuperDuperProject/Modules/Scripts/python/Utilities.py
.Added
MLAB.cryptStringUTF8()
/MLAB.decryptStringUTF8()
scripting methods with UTF-8 support.
Added setVr
method to
MLABMutableDicomTag
.
Python object __object__
in the
module context can now be any Python object to be visible
through 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
with the field()
method.
MLABProcess.runCommandInConsole
now
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
ctx.shouldAvoidSideEffects()
, which
returns true if a module is created just for editor
auto-completion.
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.
Using the MLABHttpDownload
scripting class failed for large downloads in the GB
range.
Added new scripting method
MLABFileManager.setApplicationSupportUmbrellaDirectoryName()
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.
Third-party libraries
Python
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
Added module SoView2DCine
that allows more control
over SoView2D
's cine
mode.
The new SoView2DCurrentState
module returns
the visible portion of an image for use with SoView2DRectangle
.
More control over ruler color in SoView2DRuler
and SoView2DAnnotation
.
Added a stepSize
field to SoView2DSlicer
.
SoView2DOverlayMPR
supports left-handed coordinate systems now.
SoView2DDrawVoxels3D
can draw a brush preview now.
The 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.
SoView2DExtensions
also
show the "Alt" modifier option in their panel.
Other Open Inventor modules
Added new modules for menus in OpenInventor scenes:
SoFixedMenu
, SoBorderMenu
, and SoPopupMenu
, with SoMenuItem
. In contrast to SoView2DMenu
these support Managed
Interaction and are more flexible.
Added new modules to query the OpenGL state: SoGLClearError
, SoGLColorDepthInfo
, SoGLGet
, SoGLStateInfo
.
Introduction of the new Managed Interaction Inventor
draggers. Have a look at the MIPlaneDragger
macro module for how to
use them.
Added SoMetaInformation1d
and SoMetaInformation1i
modules.
Added a selectOnlyOnClick
option to
SoSelection
and SoSelection2
, which doesn't perform
the selection if the mouse was moved while holding the mouse
button.
Added a keepViewportWhileDragging
option to SoViewportRegion
.
Improved compatibility of Managed Interaction modules with classic event handling modules in Inventor scenes.
Added support for sRGB interpolation in SoLUTEditor
and LUT base
classes.
Allow to add control points by dragging from the borders
in the SoLUTEditor
.
Allow to choose slab start/center/end for the
intersection (and an optional offset) in SoRenderSurfaceIntersection
.
SoCrosshair
can render
thin cylinders instead of lines now.
Added ADD_BEFORE_INORDER
modification
type to SoShaderPipelineFunction
.
Various changes to SoVascularSystem
, e.g.:
Can work on a copy of the input graph.
Enhanced highlighting capabilities.
Can choose between integer and float LUT evaluation.
Support local transformations in SoDrawInstanced
.
CSO
Added functions to CSO scripting wrappers for seed point selection.
CSOConvertToImage
got
an outputTypeMode
field to grant more
control over the voxel type of the output image.
SoCSO3DRenderer
,
So3DMarkerRenderer
: Added
functionality to only render CSOs/markers of selected
timepoint.
WEM
Fixed an endless loop in WEMSubdivide
.
SoWEMRenderer
can cache
WEM patches now (e.g. to quickly switch between time
points).
Added module WEMRayIntersect
and scripting wrapper
WEMBoundingVolumeHierarchy
for a fast ray
intersection with WEM surfaces (based on the embree
library).
WEMIsoSurface
will cope
with images with left-handed coordinate system now.
The WEMBulgeEditor
uses
different values (signs) in the PVL for preview and
interaction.
Added global normal output to MarkerListToWEMPlane
module.
ML modules
Added modules QPainterImage
and QImageToML
for ML image generation
through Qt classes.
Added the ChromaKey
module (for green screen handling of video images).
Replaced Type(De)Composer8|16|32|64
with
Type(De)ComposerN
, which have
a dynamic number of visible inputs/outputs.
Added fillValue
field to ConcatImages
.
The BaseClear
module
got
inputValid
/outputValid
fields.
Added an option
useKeyFrameDistanceForSliceThickness
to the
MPRPath
module.
Fixed automatic voxel size and bounding box calculation
of the MPR
modules.
Added Minimum
and
Replace
modes to the AccumulateImage
module.
The new GraphToVolume
module allows to rasterize a ml::Graph
to a volume.
ImageSave
can now save
RGB floating-point TIFF images with a linear (gamma=1) sRGB
ICC profile.
ImageCompare
now prints
an ML_CALCULATION_ERROR
instead of an
ML_PROGRAMMING_ERROR
if images
differ.
We did a clean-up of MLVesselGraph
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.
Make CurveToHistogram
always correctly update its output.
Fixed auto-updating of maximum volume limit in RegionGrowing
module.
Fixed property extension loading in MLImageFormat
.
Macro modules
Created new utility module ExportImagesAsSlices
.
A new PythonPip
tool
module allows to install Python packages from PyPi.
Lots of fixes and improvements to the AnimationRecorder
.
Added undo/redo to DrawVoxels3D
.
GVROrthoOverlay
has a
blendMode
field now.
Speed-up loading of file list in ImageLoadMulti
.
Renamed CommandNotifyer
to CommandNotifier
and
improved panel.
Removed the outdated ImageViewer
application from the
SDK.
Additions
New module WalkSiblingDirectories
that can be
used to compare the contents of two folders file by
file.
New module SoMIMouseOver
allows to detect mouse
over and click on child geometry using Managed
Interaction.
New module SoMIRotateCameraPlaneDragger
allows
for rotation in the camera plane using Managed
Interaction.
New module SoMITranslateCameraPlaneDragger
allows for 2D translation in the camera plane using Managed
Interaction.
New module SoView2DInfo
that displays
SoView2DExtension infos.
New module DynamicLayout
that creates a layout
using an MDL file and embeds viewers found in the connected
Inventor graph.
New module SoActionFilter
that allows to select
which actions are applied to the child graph.
New module InventorGuard
that combines SoIdentifier
and SoActionFilter
such that the child
graph can not be added directly to the scene.
New module SoNodeFilter
that filters the
Inventor scene graph based on node names or types.
New module ComposeBoundingBox
that calculates a
composed bounding box of two aligned images.
New module ApplyOrthoOrientation
, extending
NormalizeOrthoOrientation
with an additional "FromReference" mode, which applies the
same ortho-orientation (transversal, sagittal, or coronal)
as a given reference image.
New module 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
filtering).
New module 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).
New module 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
DicomRescale).
New module BoundingBoxInReferenceSystem
that
computes the smallest SubImage of input1 that would contain
all (reformated) voxels of image0..
New module LUTColorAtIndex
that gets the color
at the given LUT index.
New module LUTColorAtValue
that gets the color
at the given LUT value.
New module SoView2DSetPosition
allows to set
the slice index of connected SoView2Ds such that a given
position is matched best.
New module BoundingBoxListener
notifies changes
of the Inventor scene boundingbox. Optionally an object
selection is used.
New module RotateAtTarget
allows to compute the
orientation for a given position, target point and
up-vector.
New module ImageAlignedBoundingBox
calculates
the image-aligned bounding box of the input image in world
coordinates.
New module WorldAlignedBoundingBox
calculates
the world-aligned bounding box of the input image in world
coordinates.
New module ApplyTransformationMatrix
allows to
apply a transformation given as matrix on the input
image.
New module GVRContourOverlay
that draws a
contour of a mask image using a GVR secondary volume.
New modules PointSender
/PointReceiver
that allow to send
point lists over a communication channel.
New module FilterCurveList
to filter a
CurveList by curve properties such as title or style.
New module SetMarkerCTUCoordinates
to set
non-spatial coordinates for a whole XMarkerList.
New module TranslateXMarkers
to translate all
positions in an XMarkerList.
New module ExtrapolateXMarkersPolynomial
to
extrapolate an XMarkerList based on a polynomial fit.
Improvements & extensions
Added simpler, bulge-like node movement to WEMExpandToMarkers
.
The macro module CSOImageStatisticsOverTime
now
allows more than one input CSO.
Renamed NormalizeOrientation
to
NormalizeOrthoOrientation
.
ImageCache
macro and
CacheManager python module now support progress
output.
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.
Note | |
---|---|
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
ADK
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
installer icon).
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
installer with
INSTALLER_CUSTOM_NSIS_TOP_INCLUDE
.
MLABModule::addRemoteModule
: Connection
can be SSL encrypted.
Added isMouseOver
and
isDragging
fields to SoView2DSlider
.
Set isFilePath
attribute on icon path
fields of SoView2DMenuItem
.
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 sliceOrigin2
and
sliceOrigin3
correctly.
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
control.
Fixed incorrect parsing of DirectDicomImport
config on MacOS.
Fixed an endless recursion in Python profiling when recursive object references were encountered.
Make 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 SoView2DLegend
.
Fixed light state leakage in SoPostEffectRenderer
.
Fixed SoDepthPeelRenderer
rendering on Intel graphics by adding a depth bias.
Fixed crash in CSOConvertToImage
when changing number of
time points.
CSOIsoGenerator
clears the
CSOList if the updateMode
is set to
AUTO_CLEAR
.
Fixed SoView2DOverlayMPR
showing the wrong overlay when zooming in.
Module SoShadowMapping
didn't work under SoGroup
nodes.
Correctly resize PVLs of WEMs in WEMThreshold
.
Changes to the upVector
of MPR
module didn't trigger
recomputation.
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 RemotePanelRenderer
.
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.
Added KeepDimension
option to slab render
modes of modules MPR
and MPRLight
to allow separate depth or time
projection.
WEMSubdivide
got support
for localized subdivision using a PVL list.
The module SoClearBuffers
got a dedicated depth
value to set the depth
buffer to an explicit value.
The module SoView2DAnnotation
got margin
fields.
Restored original behavior of
MLABMacroModule::addNote()
and
MLABNoteItem::setText()
to add plain text
notes (which is faster) and added new methods
MLABMacroModule::addReSTNote()
and
MLABNoteItem::setReSTText()
to
programmatically create and edit ReST notes.
MLABPackage::isUnderVersionControl()
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
connected.
Avoid crash in WEMImageData
when filling a custom PVL but not specifying a name.
Fixed value "bleeding" error in FloydSteinberg
module.
Fixed dependsOn
mechanism on items of the
ToolButtonGroup
control.
Fixed SoView2DOverlayMPR
sometimes rendering the wrong overlay when using a lot of
overlays.
Fixed WEMSubdivide
sometimes not terminating when applied on non-closed WEMs.
Fixed MoviePlayer
control not working on
Linux because of a missing library.
Fixed MLWEMWrapper::getWEMPatchIndex(int id)
which returned the total number of patches instead of the index of
the patch.
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
MatplotlibCanvas
control.
Make 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.
The clickedCommand
and
mouseButtonClickedCommand
of the ListView control
only react on left-click now. If you want to react on
right-clicks, use the pressedCommand
or an
EventFilter.
We switched to a new OpenGL widget in Qt. In case of
problems you can get back the old widget by setting the
environment variable MLAB_QT_OPENGL_WIDGET
to
old
.
The (legacy) support for JavaScript scripting in modules has been removed entirely.
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,
e.g., QWidget
is still in
QtGui
(instead of QtWidgets
)
and 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.QUrl
has been redesigned in
Qt5 and the API has changed substantially. The new class
QUrlQuery
offers some methods that have
been removed from QUrl
.PythonQt has the following new modules:
QtMultimedia
, QtQuick
, and
QtQml
.
PythonQt now supports QtCore.Slot
,
QtCore.Signal
,
QtCore.Property
(compatible to PySide/PyQt),
and the creation of dynamic meta objects.
QSound
has been moved to
QtMultimedia
.
Improved __nonzero__
check in some
PythonQt wrappers.
Added support for Python compare functions
(__eq__
, etc.) in QObject wrappers.
IDE:
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.
Added a projectsSearchDepth
tag to
the Package.def file of each package to set the maximum search
depth for looking for projects in the Projects
directory.
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.
Added a 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
network file.
TestCaseManager:
Code tests can now be run (and compiled!) from the TestCaseManager.
The test case methods
Base.verifyTrue
and
Base.verifyFalse
require the argument to
be really True
or False
now.
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.
expectError
/expectInfo
/expectWarning
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.
Added a SO_NODE_ADD_FIELD_CALLBACK
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.
Added templated getTypedValue()
method to classes ml::BaseField
and
SoSFMLBase
.
Added a addBase
overload to
ml::FieldContainer
that takes a
RefCountedBasePtr
as argument. Also
added addBaseWithAllowedType
methods.
Added support for replacing the page on the
outputSubImage
in
calculateOutputSubImage
.
getTile
calls can now take an
optional progress update callback as argument.
Controls
The EventFilter control gives more complete information about ContextMenu events.
Added a contextMenuRequestedCommand
to the ListView control.
The MoviePlayer control has been re-implemented to use the multimedia framework of Qt.
Added scripting method
setItemToolTip
to IconView
control.
Added automaticParentCheckboxState
feature to the ItemModelView control which sets the checkbox
state of parent items according to the state of their
children.
Added autoExpandToDepth
attribute to
the ItemModelView control.
Added a new GUIExample
module, removed the old ExampleGUIScripting
.
One has better control over icon sizes of button group
controls with the new attributes iconWidth
,
iconHeight
, and
useOriginalIconSizes
.
DICOM support
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.
Added new ml::DicomTree
and
ml::MutableDicomTree
Base objects to
MLDicomTreeImagePropertyExtension library, also added and
improved wrappers for these objects.
Added modules CloneDicomTree
, DicomTreeToDummyImage
, GetDicomTreeFromImage
, LoadDicomTree
, SaveDicomTree
, and SetDicomTreeOnImage
which use the new
DICOM Base objects.
Added a DicomTagNames
Python module
with all known DICOM tag names as members.
Scripting
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 MLABDicom
global
scripting object and moved DICOM related methods to it,
keeping the old methods in MLAB
as
forwards, added new tagInfo()
method.
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.
Added
MLAB.macOpenFileInApplication()
scripting
function for macOS.
Handle SystemExit
Python
exception correctly.
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
desaturateImage
,
grayScaleImage
, and
blendToColor
to
MLABGraphic
.
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
from an SbRotation
.
Other fixes and improvements
We added support for a "CUDA" CONFIG option in .pro files (you still need to install CUDA, though).
Third-party libraries
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).
Python
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.
Added pyzmq.
SoView2D and extensions
SoView2D
got support
for Inventor picking when rendered in 3D.
Added a forceImageUpdate
trigger
field to SoView2D
which can
be used to force an immediate update to fields depending on
the input image.
Added the module SoView2DArrowHeadSettings
, used in
SoView2DMarkerEditor
and
SoCSOArrowEditor
.
Added new module SoView2DButton
.
Added depth visibility feature to SoView2DLabel
.
Added new module SoView2DGrid
which draws a grid on the
view.
Added new module SoView2DCurrentState
to get at pixel
spacing and viewing area of a SoView2D
.
Added new module View2DIsoContourShader
.
Added option
useInputResolutionIfAxisAligned
to the
SoView2DOverlayMPR
module.
Other Open Inventor modules
Added the SoClearBuffers
module.
Created a new module InteractiveRampLUT
that is used in
View2DExtensions
, View3D
, and MLImageInspector
.
Switched the zoom action of SoCameraInteraction
to be a managed
offset action.
Added SoUndoActions
module which provides a Managed Interaction frontend for the
UndoManager
object.
Can zoom (and rotate) with mouse wheel in SoExaminerViewer
if activated.
Changed headlight handling in SoExaminerViewer
and SoCameraInteraction
.
Added SeekToPoint pointing action to SoCameraInteraction
module (must be
bound to mouse button with SoInteractionMapping
).
The SoPlaneDragger
module got new fields
enableMouseOverHighlighting
and
enableMouseOverCursor
.
Fixed SoVolumeCutting
on Linux.
CSO
The SoCSOEllipseEditor
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 CSOMerge
.
Added new module SoCSODrawOnSurface
.
Make SoCSOImageStatistics
honor the time
point of the CSO.
Optimized CSOLiveWireGraph
.
Added pointsPerMM
argument to CSOList
scripting wrappers.
WEM
Added a Octasphere shape (sphere constructed from
octants) and a Dodecahedron mode to WEMInitialize
.
The first input of WEMMerge
is now called
inWEM0
.
Added normalMode
field to WEMSaveAsU3D
to support per-node and
per-face normals.
Added an option to WEMModify
to sort the faces of all
WEMPatches in the z-direction.
WEMReducePolygons
can
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.
Added WEMBulgeEditor
modules for 2D
and 3D editing.
WEMThreshold
will now
intersect faces cleanly.
Added a WEMThresholdToCSO
module
which allows to generate CSOs at the interval borders of a PVL
value set on the input WEM.
WEMClipPlaneToWEM
can
return the clipped remainder and clipping cover in separate
patches.
ML modules
The VideoWriter
modules can now also
write separate image files.
The RemotePanelRendering
module can now
handle nested GraphicsViews (this needs to be activated with a
flag).
Added an option to ComputeConnectedComponents
to set
image value or rank as default user data.
Switched the StopWatch
module from using MemCache to ProcessAllPages.
Added a SetFileName
module to override the filename associated with an
image.
RemoteRendering
supports HiDPI screens now.
Added support for tag name completion to DicomTagModify
.
Added C, T, and U ramp to TestPattern
module.
Added field allowInvalidInputs to MergeRegions
.
Added MarkerPCA
module
which does a principal component analysis on an
XMarkerList.
Speed up compare of DICOM trees in ImageCompare module
.
Added new module ComputeMajorAxis
to compute extent of
mask items in 2D.
Added new module TransformWorldMatrix
.
Added a recursive filter mode to the ItemModelItemFilter
.
SubImageStatistics
can
now compute statistics for multiple mask regions.
Improved and renamed EuclideanDTF
to EuclideanDistanceTransform
.
Added new module SignedEuclideanDistanceTransform
,
which does a distance transformation to the inside and the
outside of a mask image.
Added module ChangePageExtent
which allows to
change the page extent of an image per dimension.
Added ignoreOrigin
option to PythonImage
module and
PySubImage
class.
Fixed an offset miscalculation in OrthoReformat3
leading to crashes for
large images.
Macro modules
The DicomTagBrowser
module can now sort by column.
Added a 'finalize' section to the RunPythonScript
module.
Added a onlySetIfChanged
flag to the
SettingsManager
module.
Additions
New module ImageCache
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.
New module ImageCacheForNetworkLoop
that
supports iterative updates in cyclic subnetworks.
New modules CSOImageStatistics
and CSOImageStatisticsOverTime
that
calculate statistics of CSOs with respect to a given
image.
New module CSOVoxelCrop
and 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
box.
New module CSOOffset
that can shrink or extend CSOs anisotropically.
New module CSOResample
to resample seed points
in a CSO to a given distance.
New module CSODifference
that computes the
difference between two CSOs as open CSOs.
New module ModifyCSOVisualizationSettings
that
modifies certain properties of a CSOVisualizationSettings
object.
New module CSOOrthoEditor
for to allow
rendering and editing CSOs on an OrthoView2D
.
New module WEMClipImagePlanesToCSOList
that
converts a WEM to a CSOList with CSOs on the planes of an
image.
New module SetMarkerProperties
to set common
properties for all markers in a marker list.
New module ExtrapolateXMarkerLine
that extends
a dotted line of XMarkers linearly in both
directions.
New functionality and modules in and general overhaul
of the test hierarchy analysis for complex dependencies,
i.e., the applicationTesting
Python
package and the TestHierarchy
project.
New modules for ListBase-derived list (e.g., XMarkerLists) handling:
SplitList
: Splits
a list in two.
Sublist
: Extracts
a part of a list .
ListActionInspector
: Shows info
about the current action on the list.
Other new modules:
DetermineTestsOfModule
CreateModuleList
CreateTestCenterTestCaseList
FilterModuleList
ApplySetOperationToModuleList
LoadStructuredListFromJSON
SaveStructuredListToJSON
FindPythonCallsInDependencies
New Python classes TestCase
,
ModuleTestCase
, and
AlgorithmModuleTestCase
supporting
TestCenter tests that come in class form and support cleaner
test setups (in fmeTestSupport).
New user script
ShowExampleNetworkForSelectedModules
.
Added Python wrappers for most standard
*Load
, *Save
and
*Compare
modules.
Improvements & extensions
Several improvements to the
AlgorithmModule
and
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.
CSOShapeBasedInterpolation
and
ImageShapeBasedInterpolation
now
have an additional distance map output and a "use distance
to contour" flag.
CSOBoolOp
improvements.
CSOBoostGeometry
can
now optionally convert polygons to CSOs with a single seed
point.
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
type.
XMarkerListSort
sorting is now stable.
XMarkerListCompare
can now ignore marker type .
XMarkerSamplePattern
can now optionally process the whole input list.
Extended CurveGenerator
.
Extended
ApplicationVersioningSupport
Python
module by a new VCSQuery
module obtaining
SVN revision infos for paths.
Fixed Bootstrap
update of trace images which failed if having averaged DTI
data before.
FibersToGraph
now
outputs graph usable by WEMVascularSystem.
Several improvements to the
ModuleSuggest
user script.
SoCSOManualCorrectionEditor
: General
overhaul and improvements.
Performance optimization of QuadratureFilter
.
Update of OpenCL
stubs to current
version (2.1) due to deprecated OpenCL 1.0, 1.1, and 1.2
methods.
Many network panels added or improved.
Bug fixes
In SoRampLUT
, the
range and width parameters were swapped in the mapping to
the internal RampLUT
module.
CSOVoxelSetListInfo
now allows to select voxel set at index 0.
XMarkerListFilter
now
sets the ListBase:ActNew action when updating its
output.
XMarkerListTransformation
now copies
the input marker IDs correctly to the output list.
XMarkerSamplePattern
now updates normal when changing
inputXMarkerIndex
.
ReleaseToolsDICOM
from
ReleaseToolsDICOM.h
and its corresponding
namespace have been moved into the project
DICOMTagTools
and its corresponding namespace
in file 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.h
to compile
this.Tools for conversion between ML and DICOM located in
MLMultiFileVolume
have been moved into
new projects MLMLToDicomTools
and
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
remove MLMultiFileVolume
.
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
functions.
Changes on DICOM related modules:
New module DicomSEGSave
for exporting DICOM SEG
files, supporting the DICOM Segmentation IOD.
New module MultiFileVolumeListSEGOutput
for
providing details on SEG files.
New module MultiFileVolumeListDiagnosisOutput
:
A diagnosis and analysis module for MultFileVolumeList,
providing for example some basic statistic and search
functionality as well as validity tests.
New module DicomConfigurableMessageFilter
: for
configuring messaging and logging of modules using
this.
DicomModifyMultiFileVolumeExport
provides an option to load MultiFileVolumeCache-files
now.
DicomTreeCompare
can
detect differences in value multiplicity now.
DicomModifyImageTagsPlugin
created
exception errors on files where NumberOfTags tags does not
have a value.
DicomTreeInfo
and
other modules posted unnecessary errors on empty file name
selections and disabled update modes when files still do not
exist.
DicomModifyTagsPlugin
module does not accept private element tag IDs with lower 8
bits < 0x10.
DicomMultiFileVolumeListExport
did
not export pixel data any more if no ImageTagsPlugin loaded
them explicitly.
MultiFileVolumeList*Output
modules
had an unbounded volume index and/or displayed volumes out
of range.
Dicom*Save
modules
have an 'updateDone' trigger output now.
Dicom*Save
(except of
DicomSRSave
) modules have
an input connector for DicomTagModify
modules now.
DicomTreeValidate
does not post errors on default instantiation any
more.
MultiFileVolumeListOutput*
modules
provide the currently used
MultiFileVolumeList
at a Base output
for convenience now.
MultiFileVolumeList*Output
modules
have the functionality to display references to original
files/volumes now.
FileListFilterPlugin
has support for tag search in MF volumes as well as
multi-value tag search support now.
DicomSCSave
doesn't
save some tags anymore that are disallowed by the
standard.
DirectDicomImport
:
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.
Caution | |
---|---|
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.
DirectDicomImport
and related MultiFileVolumeList*Output
modules produced too many/much error output for a single
error message.
DirectDicomImport
and itkImageFileReader
handle handle Sign Extensions of pixel data as well as
shifting now.
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.
DirectDicomImport
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.
MultiFileVolumeListSROutput
:
Handles retired SR data more strictly now. The module has been revised to provide permission flags which still allow retired structures.
Caution | |
---|---|
The module is not backward compatible any more, check functionality and reconfigure modules if they are stored in networks. |
DicomREGSave
:
Handling mismatch of MeVisLab Worldmatrix and DICOM world tags (ImagePositionPatient, etc.). Source can be selected now.
DicomREGSave
and
DicomSEGSave
add tags
of Common Instance Reference Module now.
MultiFileVolumeListDraftView
:
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.
Caution | |
---|---|
If your application stored invalid strings before,
this will not work any more. This changes the behavior
especially of |
Known issues:
Currently DirectDicomImport
cannot distinguish
between DICOM images with RGBA value representation - as for
example stored by ImageSave
- (which do not obey the DICOM standard) and valid ones only
having RGB photometric representation; therefore such images
are shown incorrectly.
DirectDicomImport
is
missing support for "Philips3D" files.
Changes:
Updated VTK to version 7.1, of 2016-05-03.
Renamed conversion module module MLBaseToVTKPoints
to the more
correct name MLBaseToVTKPolyData
.
Dropped deprecation support for versions before MeVisLab 2.3.
Script components in generated module wrappers use Python instead of JavaScript now.
New 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
stored paths.
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
Caveats:
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.
New module PCLStatisticalOutlierRemoval
which uses
point neighborhood statistics to filter outlier data.
New module PCLRadiusOutlierRemoval
which filters
points in a cloud based on the number of neighbors they
have.
New module PCL83xLoader
:
Experimental loader for IMAGINEX Azimuth DELTA Sonar .837/.83B
file pairs.
PCLBaseObjectWrapper
has a another
setPointMemberXYZIntensityReplacement
function which allows to set a larger point set at once from
NumPy arrays.
polar_decomp:
ANSI C code from the article 'Polar Matrix Decomposition' by Ken
Shoemake, <shoemake@graphics.cis.upenn.edu>
in
'Graphics Gems IV', Academic Press, 1994.
httmock: A Python library for mocking requests.
request: "HTTP for humans" Python module.
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.
Note | |
---|---|
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 -no-opengl
for
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:
Added a PREPROCESS_MKDIR
command that
creates a directory immediately when encountered.
Added a PREPROCESS_CHECK_EXECUTE
command that executes a command immediately when encountered
and sets the LAST_EXIT_CODE
variable.
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.
JavaScript files are not signed in installers anymore.
For the release notes of older MeVisLab releases see this document.
© 2020 MeVis Medical Solutions AG