Page MenuHomePhabricator

Project "Astonishing Angelfish"
Open, WishlistPublic

Description

Summary

Weak Pointer

mitk::WeakPointer was completely rewritten to ensure safe usage. It is designed specifically for itk::Object classes and adds/removes DeleteEvent observers to fulfill its purpose of representing temporary ownership. The new public API is based on std::weak_ptr by providing the two methods IsExpired() and Lock(). The latter method creates an itk::SmartPointer for safe temporary access.

Unique IDs

A new base class mitk::Identifiable was introduced that has the sole purpose of encapsulating a unique ID for identifiable objects. It provides read-access through GetUID(). It is movable but not copyable. Both mitk::BaseData and mitk::DataNode derive from mitk::Identifiable. We also introduced two new node predicates for convenient data node filtering: mitk::NodePredicateUID and mitk::NodePredicateDataUID.

Write-access to the unique ID is encapsulated by the mitk::UIDManipulator class. It usually shouldn't be used unless absolutely necessary. For example, data readers may set the unique ID of a read data object after its creation.

Abstract interfaces for getting and setting properties

The two new interfaces mitk::IPropertyProvider and mitk::IPropertyOwner were introduced, where the latter derives from the former. The interfaces enable unified access to properties in a specified context. mitk::IPropertyProvider encapsulates read-access and does not guarantee ownership of the returned properties. mitk::IPropertyOwner also provides write-access as it guarantees ownership of the properties.

Both mitk::BaseData and mitk::DataNode implement mitk::IPropertyOwner. The context for mitk::DataNode maps to the name of the mitk::BaseRenderer, as mitk::DataNode encapsulates a mitk::PropertyList for each mitk::BaseRenderer in addition to the common mitk::PropertyList (empty context). mitk::BaseData doesn't have any context for property access.

WARNING: The default behavior of querying properties from mitk::DataNode changed. If a property couldn't be found in the specified context or in the default context of the data node, the encapsulated mitk::BaseData object is queried as a fallback.

Node predicate for callables

A convenient new node predicate named mitk::NodePredicateFunction was introduced. It takes an arbitrary callable (std::function) like free functions, member functions, function objects, or lambda expressions to perform the actual check.

MITK extensions (experimental)

The advanced CMake cache variable MITK_EXTENSION_DIRS was introduced to the MITK-superbuild and the MITK-build, where the former passes the variable to the latter. Each directory specified in this variable will be parsed for modules, plugins, external projects, CMake scripts, and so on. The directory layout should be the same as MITK's, e. g.:

  • ExternalRepo
    • CMake
      • PackageDepends
        • FooConfig.cmake
      • FindFoo.cmake
    • CMakeExternals
      • Foo.cmake
      • ExternalProjectList.cmake (mitkFunctionAddExternalProject(NAME Foo OFF) ...)
    • Modules
      • Foo
      • ModuleList.cmake (set(MITK_MODULES Foo ...))
    • Plugins
      • org.mitk.gui.qt.foo
      • PluginList.cmake (set(MITK_PLUGINS org.mitk.gui.qt.foo:OFF ...))

Everything is optional. If something is found in the expected location, it is included into the MITK-(super)build. Don't forget to list your modules, plugins or external projects in the corresponding *List.cmake file.

Related Objects

StatusAssignedTask
OpenNone
Resolvedkislinsk
Resolvedkislinsk
Wontfixkislinsk
Wontfixkislinsk
OpenNone
OpenNone
Resolvedkislinsk
OpenNone
Openfloca
OpenNone
OpenNone
OpenNone
OpenNone
Resolvedkislinsk
OpenNone
Resolvedkalali
Resolvedkalali
OpenNone
Resolvedfloca
Resolvedfloca
Resolvedfloca
Resolvedfloca
Wontfixkalali
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
OpenNone
Resolvedkalali
Resolvedkalali
Openkraeuter
Openkraeuter
Resolvedfloca
Resolvedfloca
OpenNone
OpenNone
OpenNone
Openfloca
Resolvedkislinsk
Resolvedkislinsk
Resolvedkislinsk
DuplicateNone
Resolvedkislinsk
Resolvedfloca
Resolvedfloca
OpenNone
Resolvedkalali
Resolvedfloca
Resolvedfloca
Resolvedfloca
Resolvedfloca
Resolvedfloca
Resolvedkislinsk
Resolvedkislinsk
Resolvedkislinsk
OpenNone
Resolvedkislinsk
OpenNone
Openfloca
Wontfix goch
Wontfix goch
OpenNone
Resolvedkalali
Resolvedkalali
Resolvedkalali
OpenNone
OpenNone
Resolvedkalali
Resolvedkalali
Resolvedkalali
Resolvedkalali
Resolvedkalali
OpenNone
Resolvedkalali
Resolvedkalali
Resolvedkalali
Resolvedkalali
Invalidkalali
Resolvedkalali
Resolvedkalali
OpenNone
OpenNone
Resolvedkalali
InvalidNone
Resolvedkalali
Resolvedkislinsk
Resolvedkislinsk
Resolvedkislinsk
Resolvedkislinsk
Resolvedkislinsk
Resolvedgoyette
OpenNone

Event Timeline

This comment was removed by hentsch.
hentsch added a subtask: Restricted Maniphest Task.Nov 17 2017, 11:50 AM
neher added a subscriber: neher.Nov 17 2017, 12:36 PM
kislinsk updated the task description. (Show Details)Dec 16 2017, 9:02 AM
kislinsk closed subtask Restricted Maniphest Task as Resolved.Jul 30 2019, 12:08 PM