Medical Imaging Interaction Toolkit  2023.04.00
Medical Imaging Interaction Toolkit
mitk::DataStorage Class Referenceabstract

Data management class that handles 'was created by' relations. More...

#include <mitkDataStorage.h>

Inheritance diagram for mitk::DataStorage:
Collaboration diagram for mitk::DataStorage:

Public Types

typedef DataStorage Self
 
typedef itk::Object Superclass
 
typedef itk::SmartPointer< SelfPointer
 
typedef itk::SmartPointer< const SelfConstPointer
 
typedef itk::VectorContainer< unsigned int, DataNode::PointerSetOfObjects
 A Container of objects that is used as a result set of GetSubset() query operations (Set of. More...
 
typedef Message1< const DataNode * > DataStorageEvent
 

Public Member Functions

virtual std::vector< std::string > GetClassHierarchy () const
 
virtual const char * GetClassName () const
 
virtual void Add (DataNode *node, const DataStorage::SetOfObjects *parents=nullptr)=0
 Adds a DataNode containing a data object to its internal storage. More...
 
void Add (DataNode *node, DataNode *parent)
 Convenience method to add a node that has one parent. More...
 
virtual void Remove (const DataNode *node)=0
 Removes node from the DataStorage. More...
 
virtual bool Exists (const DataNode *node) const =0
 Checks if a node exists in the DataStorage. More...
 
void Remove (const DataStorage::SetOfObjects *nodes)
 Removes a set of nodes from the DataStorage. More...
 
SetOfObjects::ConstPointer GetSubset (const NodePredicateBase *condition) const
 returns a set of data objects that meet the given condition(s) More...
 
virtual SetOfObjects::ConstPointer GetSources (const DataNode *node, const NodePredicateBase *condition=nullptr, bool onlyDirectSources=true) const =0
 returns a set of source objects for a given node that meet the given condition(s). More...
 
virtual SetOfObjects::ConstPointer GetDerivations (const DataNode *node, const NodePredicateBase *condition=nullptr, bool onlyDirectDerivations=true) const =0
 returns a set of derived objects for a given node. More...
 
virtual SetOfObjects::ConstPointer GetAll () const =0
 returns a set of all data objects that are stored in the data storage More...
 
DataNodeGetNode (const NodePredicateBase *condition=nullptr) const
 Convenience method to get the first node that matches the predicate condition. More...
 
DataNodeGetNamedNode (const char *name) const
 Convenience method to get the first node with a given name. More...
 
DataNodeGetNamedNode (const std::string name) const
 Convenience method to get the first node with a given name. More...
 
DataNodeGetNamedDerivedNode (const char *name, const DataNode *sourceNode, bool onlyDirectDerivations=true) const
 Convenience method to get the first node with a given name that is derived from sourceNode. More...
 
template<class DataType >
DataType * GetNamedObject (const char *name) const
 Convenience method to get the first data object of a given data type with a given name. More...
 
template<class DataType >
DataType * GetNamedObject (const std::string name) const
 Convenience method to get the first data object of a given data type with a given name. More...
 
template<class DataType >
DataType * GetNamedDerivedObject (const char *name, const DataNode *sourceNode, bool onlyDirectDerivations=true) const
 Convenience method to get the first data object of a given data type with a given name that is derived. More...
 
const DataNode::GroupTagList GetGroupTags () const
 Returns a list of used grouptags. More...
 
TimeGeometry::ConstPointer ComputeBoundingGeometry3D (const SetOfObjects *input, const char *boolPropertyKey=nullptr, const BaseRenderer *renderer=nullptr, const char *boolPropertyKey2=nullptr) const
 Compute the axis-parallel bounding geometry of the input objects. More...
 
TimeGeometry::ConstPointer ComputeBoundingGeometry3D (const char *boolPropertyKey=nullptr, const BaseRenderer *renderer=nullptr, const char *boolPropertyKey2=nullptr) const
 Compute the axis-parallel bounding geometry of the data tree (bounding box, minimal spacing of the considered nodes, live-span) More...
 
TimeGeometry::ConstPointer ComputeVisibleBoundingGeometry3D (const BaseRenderer *renderer=nullptr, const char *boolPropertyKey=nullptr)
 Compute the axis-parallel bounding geometry of all visible parts of the data tree bounding box, minimal spacing of the considered nodes, live-span) More...
 
BoundingBox::Pointer ComputeBoundingBox (const char *boolPropertyKey=nullptr, const BaseRenderer *renderer=nullptr, const char *boolPropertyKey2=nullptr)
 Compute the bounding box of data tree structure it -> an iterator to a data tree structure. More...
 
BoundingBox::Pointer ComputeVisibleBoundingBox (const BaseRenderer *renderer=nullptr, const char *boolPropertyKey=nullptr)
 Compute the bounding box of all visible parts of the data tree structure, for general rendering or renderer specific visibility property checking. More...
 
TimeBounds ComputeTimeBounds (const char *boolPropertyKey, const BaseRenderer *renderer, const char *boolPropertyKey2)
 Compute the time-bounds of the contents of a data tree structure. More...
 
TimeBounds ComputeTimeBounds (const BaseRenderer *renderer, const char *boolPropertyKey)
 Compute the time-bounds of all visible parts of the data tree structure, for general rendering or renderer specific visibility property checking. More...
 
void BlockNodeModifiedEvents (bool block)
 Defines whether or not NodeChangedEvent is invoked . More...
 

Static Public Member Functions

static const char * GetStaticNameOfClass ()
 

Public Attributes

std::mutex m_MutexOne
 
DataStorageEvent AddNodeEvent
 AddEvent is emitted whenever a new node has been added to the DataStorage. More...
 
DataStorageEvent RemoveNodeEvent
 RemoveEvent is emitted directly before a node is removed from the DataStorage. More...
 
DataStorageEvent ChangedNodeEvent
 ChangedEvent is emitted directly after a node was changed. More...
 
DataStorageEvent DeleteNodeEvent
 DeleteNodeEvent is emitted directly before a node is deleted. More...
 
DataStorageEvent InteractorChangedNodeEvent
 

Protected Member Functions

void EmitAddNodeEvent (const DataNode *node)
 EmitAddNodeEvent emits the AddNodeEvent. More...
 
void EmitRemoveNodeEvent (const DataNode *node)
 EmitRemoveNodeEvent emits the RemoveNodeEvent. More...
 
void OnNodeInteractorChanged (itk::Object *caller, const itk::EventObject &event)
 
void OnNodeModifiedOrDeleted (const itk::Object *caller, const itk::EventObject &event)
 OnNodeModified listens to modified events of DataNodes. More...
 
void AddListeners (const DataNode *_Node)
 Adds a Modified-Listener to the given Node. More...
 
void RemoveListeners (const DataNode *_Node)
 Removes a Modified-Listener from the given Node. More...
 
 DataStorage ()
 
 ~DataStorage () override
 
SetOfObjects::ConstPointer FilterSetOfObjects (const SetOfObjects *set, const NodePredicateBase *condition) const
 Filters a SetOfObjects by the condition. If no condition is provided, the original set is returned. More...
 
void PrintSelf (std::ostream &os, itk::Indent indent) const override
 Prints the contents of the DataStorage to os. Do not call directly, call ->Print() instead. More...
 

Protected Attributes

std::map< const DataNode *, unsigned long > m_NodeModifiedObserverTags
 Saves Modified-Observer Tags for each node in order to remove the event listeners again. More...
 
std::map< const DataNode *, unsigned long > m_NodeInteractorChangedObserverTags
 
std::map< const DataNode *, unsigned long > m_NodeDeleteObserverTags
 Saves Delete-Observer Tags for each node in order to remove the event listeners again. More...
 
bool m_BlockNodeModifiedEvents
 If this class changes nodes itself, set this to TRUE in order to suppress NodeChangedEvent to be emitted. More...
 

Detailed Description

Data management class that handles 'was created by' relations.

The DataStorage provides data storage and management functionality. It handles a 'was created by' relation by associating each data object with a set of source objects, that this object was created from. Thus, nodes are stored in a noncyclical directed graph data structure. If a new node is added to the DataStorage, AddNodeEvent is emitted. If a node is removed, RemoveNodeEvent is emitted.

Definition at line 43 of file mitkDataStorage.h.

Member Typedef Documentation

◆ ConstPointer

Definition at line 46 of file mitkDataStorage.h.

◆ DataStorageEvent

Definition at line 200 of file mitkDataStorage.h.

◆ Pointer

◆ Self

Definition at line 46 of file mitkDataStorage.h.

◆ SetOfObjects

typedef itk::VectorContainer<unsigned int, DataNode::Pointer> mitk::DataStorage::SetOfObjects

A Container of objects that is used as a result set of GetSubset() query operations (Set of.

Definition at line 46 of file mitkDataStorage.h.

◆ Superclass

typedef itk::Object mitk::DataStorage::Superclass

Definition at line 46 of file mitkDataStorage.h.

Constructor & Destructor Documentation

◆ DataStorage()

mitk::DataStorage::DataStorage ( )
protected

◆ ~DataStorage()

mitk::DataStorage::~DataStorage ( )
overrideprotected

Member Function Documentation

◆ Add() [1/2]

virtual void mitk::DataStorage::Add ( DataNode node,
const DataStorage::SetOfObjects parents = nullptr 
)
pure virtual

Adds a DataNode containing a data object to its internal storage.

This Method adds a new data object to the DataStorage. The new object is passed in the first parameter. The second parameter is a set of source objects, that were used to create this object. The new object will have a 'was created from' relation to its source objects. the addition of a new object will fire the notification mechanism. If the node parameter is nullptr or if the DataNode has already been added, an exception will be thrown.

Implemented in mitk::StandaloneDataStorage.

◆ Add() [2/2]

void mitk::DataStorage::Add ( DataNode node,
DataNode parent 
)

Convenience method to add a node that has one parent.

◆ AddListeners()

void mitk::DataStorage::AddListeners ( const DataNode _Node)
protected

Adds a Modified-Listener to the given Node.

◆ BlockNodeModifiedEvents()

void mitk::DataStorage::BlockNodeModifiedEvents ( bool  block)

Defines whether or not NodeChangedEvent is invoked .

This method can be used to set m_BlockNodeModifiedEvents.

If this flag is true, NodeChangedEvent is not invoked when a DataNode is modified. This might be undesired when setting many properties on a datanode and you do not want anyone to react.

◆ ComputeBoundingBox()

BoundingBox::Pointer mitk::DataStorage::ComputeBoundingBox ( const char *  boolPropertyKey = nullptr,
const BaseRenderer renderer = nullptr,
const char *  boolPropertyKey2 = nullptr 
)

Compute the bounding box of data tree structure it -> an iterator to a data tree structure.

Parameters
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the bounding-box calculation.
renderersee boolPropertyKey
boolPropertyKey2a second condition that is applied additionally to boolPropertyKey

◆ ComputeBoundingGeometry3D() [1/2]

TimeGeometry::ConstPointer mitk::DataStorage::ComputeBoundingGeometry3D ( const char *  boolPropertyKey = nullptr,
const BaseRenderer renderer = nullptr,
const char *  boolPropertyKey2 = nullptr 
) const

Compute the axis-parallel bounding geometry of the data tree (bounding box, minimal spacing of the considered nodes, live-span)

it -> an iterator to a data tree structure

Parameters
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the bounding-box calculation.
renderersee boolPropertyKey
boolPropertyKey2a second condition that is applied additionally to boolPropertyKey

◆ ComputeBoundingGeometry3D() [2/2]

TimeGeometry::ConstPointer mitk::DataStorage::ComputeBoundingGeometry3D ( const SetOfObjects input,
const char *  boolPropertyKey = nullptr,
const BaseRenderer renderer = nullptr,
const char *  boolPropertyKey2 = nullptr 
) const

Compute the axis-parallel bounding geometry of the input objects.

Throws std::invalid_argument exception if input is nullptr

Parameters
inputset of objects of the DataStorage to be included in the bounding geometry
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the bounding-box calculation.
renderersee boolPropertyKey
boolPropertyKey2a second condition that is applied additionally to boolPropertyKey

◆ ComputeTimeBounds() [1/2]

TimeBounds mitk::DataStorage::ComputeTimeBounds ( const BaseRenderer renderer,
const char *  boolPropertyKey 
)
inline

Compute the time-bounds of all visible parts of the data tree structure, for general rendering or renderer specific visibility property checking.

The methods returns only [-infinity, +infinity], if all data-objects have an infinite live-span. Otherwise, all data-objects with infinite live-span are ignored. Simply calls ComputeTimeBounds(it, "visible", renderer, boolPropertyKey).

Parameters
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the time-bounds calculation.
renderersee boolPropertyKey

Definition at line 357 of file mitkDataStorage.h.

◆ ComputeTimeBounds() [2/2]

TimeBounds mitk::DataStorage::ComputeTimeBounds ( const char *  boolPropertyKey,
const BaseRenderer renderer,
const char *  boolPropertyKey2 
)

Compute the time-bounds of the contents of a data tree structure.

The methods returns only [-infinity, +infinity], if all data-objects have an infinite live-span. Otherwise, all data-objects with infinite live-span are ignored. it -> an iterator to a data tree structure

Parameters
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the time-bounds calculation.
renderersee boolPropertyKey
boolPropertyKey2a second condition that is applied additionally to boolPropertyKey

◆ ComputeVisibleBoundingBox()

BoundingBox::Pointer mitk::DataStorage::ComputeVisibleBoundingBox ( const BaseRenderer renderer = nullptr,
const char *  boolPropertyKey = nullptr 
)
inline

Compute the bounding box of all visible parts of the data tree structure, for general rendering or renderer specific visibility property checking.

Simply calls ComputeBoundingBox(it, "visible", renderer, boolPropertyKey). it -> an iterator of a data tree structure

Parameters
rendererthe reference to the renderer
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the bounding-box calculation.

Definition at line 327 of file mitkDataStorage.h.

◆ ComputeVisibleBoundingGeometry3D()

TimeGeometry::ConstPointer mitk::DataStorage::ComputeVisibleBoundingGeometry3D ( const BaseRenderer renderer = nullptr,
const char *  boolPropertyKey = nullptr 
)

Compute the axis-parallel bounding geometry of all visible parts of the data tree bounding box, minimal spacing of the considered nodes, live-span)

Simply calls ComputeBoundingGeometry3D(it, "visible", renderer, boolPropertyKey). it -> an iterator of a data tree structure

Parameters
rendererthe reference to the renderer
boolPropertyKeyif a BoolProperty with this boolPropertyKey exists for a node (for renderer) and is set to false, the node is ignored for the bounding-box calculation.

◆ EmitAddNodeEvent()

void mitk::DataStorage::EmitAddNodeEvent ( const DataNode node)
protected

EmitAddNodeEvent emits the AddNodeEvent.

This method should be called by subclasses to emit the AddNodeEvent

◆ EmitRemoveNodeEvent()

void mitk::DataStorage::EmitRemoveNodeEvent ( const DataNode node)
protected

EmitRemoveNodeEvent emits the RemoveNodeEvent.

This method should be called by subclasses to emit the RemoveNodeEvent

◆ Exists()

virtual bool mitk::DataStorage::Exists ( const DataNode node) const
pure virtual

Checks if a node exists in the DataStorage.

Implemented in mitk::StandaloneDataStorage.

◆ FilterSetOfObjects()

SetOfObjects::ConstPointer mitk::DataStorage::FilterSetOfObjects ( const SetOfObjects set,
const NodePredicateBase condition 
) const
protected

Filters a SetOfObjects by the condition. If no condition is provided, the original set is returned.

◆ GetAll()

virtual SetOfObjects::ConstPointer mitk::DataStorage::GetAll ( ) const
pure virtual

returns a set of all data objects that are stored in the data storage

Implemented in mitk::StandaloneDataStorage.

◆ GetClassHierarchy()

virtual std::vector<std::string> mitk::DataStorage::GetClassHierarchy ( ) const
inlinevirtual

Reimplemented in mitk::StandaloneDataStorage.

Definition at line 46 of file mitkDataStorage.h.

◆ GetClassName()

virtual const char* mitk::DataStorage::GetClassName ( ) const
virtual

Reimplemented in mitk::StandaloneDataStorage.

◆ GetDerivations()

virtual SetOfObjects::ConstPointer mitk::DataStorage::GetDerivations ( const DataNode node,
const NodePredicateBase condition = nullptr,
bool  onlyDirectDerivations = true 
) const
pure virtual

returns a set of derived objects for a given node.

GetDerivations() returns a set of objects that are derived from the DataNode node. This means, that node was used to create the returned objects. If the parameter onlyDirectDerivations is set to true (default value), only objects that directly have node as one of their source objects will be returned. Otherwise, objects that are derived from derivations of node are returned too. The derived objects can be filtered with a predicate object as described in the GetSubset() method by providing a predicate as the condition parameter.

Implemented in mitk::StandaloneDataStorage.

◆ GetGroupTags()

const DataNode::GroupTagList mitk::DataStorage::GetGroupTags ( ) const

Returns a list of used grouptags.

◆ GetNamedDerivedNode()

DataNode* mitk::DataStorage::GetNamedDerivedNode ( const char *  name,
const DataNode sourceNode,
bool  onlyDirectDerivations = true 
) const

Convenience method to get the first node with a given name that is derived from sourceNode.

◆ GetNamedDerivedObject()

template<class DataType >
DataType* mitk::DataStorage::GetNamedDerivedObject ( const char *  name,
const DataNode sourceNode,
bool  onlyDirectDerivations = true 
) const
inline

Convenience method to get the first data object of a given data type with a given name that is derived.

Definition at line 178 of file mitkDataStorage.h.

References mitk::DataNode::GetData().

◆ GetNamedNode() [1/2]

DataNode* mitk::DataStorage::GetNamedNode ( const char *  name) const

Convenience method to get the first node with a given name.

◆ GetNamedNode() [2/2]

DataNode* mitk::DataStorage::GetNamedNode ( const std::string  name) const
inline

Convenience method to get the first node with a given name.

Definition at line 142 of file mitkDataStorage.h.

References GetNamedNode().

Referenced by GetNamedNode().

◆ GetNamedObject() [1/2]

template<class DataType >
DataType* mitk::DataStorage::GetNamedObject ( const char *  name) const
inline

Convenience method to get the first data object of a given data type with a given name.

Definition at line 154 of file mitkDataStorage.h.

References mitk::DataNode::GetData().

◆ GetNamedObject() [2/2]

template<class DataType >
DataType* mitk::DataStorage::GetNamedObject ( const std::string  name) const
inline

Convenience method to get the first data object of a given data type with a given name.

Definition at line 168 of file mitkDataStorage.h.

◆ GetNode()

DataNode* mitk::DataStorage::GetNode ( const NodePredicateBase condition = nullptr) const

Convenience method to get the first node that matches the predicate condition.

◆ GetSources()

virtual SetOfObjects::ConstPointer mitk::DataStorage::GetSources ( const DataNode node,
const NodePredicateBase condition = nullptr,
bool  onlyDirectSources = true 
) const
pure virtual

returns a set of source objects for a given node that meet the given condition(s).

Implemented in mitk::StandaloneDataStorage.

◆ GetStaticNameOfClass()

static const char* mitk::DataStorage::GetStaticNameOfClass ( )
inlinestatic

Definition at line 46 of file mitkDataStorage.h.

◆ GetSubset()

SetOfObjects::ConstPointer mitk::DataStorage::GetSubset ( const NodePredicateBase condition) const

returns a set of data objects that meet the given condition(s)

GetSubset returns a set of objects with a specific data type that meet the condition(s) specified in the condition parameter. Conditions can be

  • data type of the data object
  • is source object of specific object (e.g. all source objects of node x)
  • has property with specific value (e.g. OrganType is Liver)
  • negation of any condition
  • conjunction of a set of conditions
  • disjunction of a set of conditions Conditions are implemented as predicates using the Composite Design Pattern (see definition of NodePredicateBase for details). The method returns a set of SmartPointers to the DataNodes that fulfill the conditions. A set of all objects can be retrieved with the GetAll() method;

◆ OnNodeInteractorChanged()

void mitk::DataStorage::OnNodeInteractorChanged ( itk::Object *  caller,
const itk::EventObject &  event 
)
protected

◆ OnNodeModifiedOrDeleted()

void mitk::DataStorage::OnNodeModifiedOrDeleted ( const itk::Object *  caller,
const itk::EventObject &  event 
)
protected

OnNodeModified listens to modified events of DataNodes.

The node is hidden behind the caller parameter, which has to be casted first. If the cast succeeds the ChangedNodeEvent is emitted with this node.

◆ PrintSelf()

void mitk::DataStorage::PrintSelf ( std::ostream &  os,
itk::Indent  indent 
) const
overrideprotected

Prints the contents of the DataStorage to os. Do not call directly, call ->Print() instead.

◆ Remove() [1/2]

virtual void mitk::DataStorage::Remove ( const DataNode node)
pure virtual

Removes node from the DataStorage.

Implemented in mitk::StandaloneDataStorage.

◆ Remove() [2/2]

void mitk::DataStorage::Remove ( const DataStorage::SetOfObjects nodes)

Removes a set of nodes from the DataStorage.

◆ RemoveListeners()

void mitk::DataStorage::RemoveListeners ( const DataNode _Node)
protected

Removes a Modified-Listener from the given Node.

Member Data Documentation

◆ AddNodeEvent

DataStorageEvent mitk::DataStorage::AddNodeEvent

AddEvent is emitted whenever a new node has been added to the DataStorage.

Observers should register to this event by calling myDataStorage->AddNodeEvent.AddListener(myObject,

Definition at line 215 of file mitkDataStorage.h.

◆ ChangedNodeEvent

DataStorageEvent mitk::DataStorage::ChangedNodeEvent

ChangedEvent is emitted directly after a node was changed.

Observers should register to this event by calling myDataStorage->ChangedNodeEvent.AddListener(myObject,

Definition at line 248 of file mitkDataStorage.h.

◆ DeleteNodeEvent

DataStorageEvent mitk::DataStorage::DeleteNodeEvent

DeleteNodeEvent is emitted directly before a node is deleted.

Observers should register to this event by calling myDataStorage->DeleteNodeEvent.AddListener(myObject,

Definition at line 264 of file mitkDataStorage.h.

◆ InteractorChangedNodeEvent

DataStorageEvent mitk::DataStorage::InteractorChangedNodeEvent

Definition at line 266 of file mitkDataStorage.h.

◆ m_BlockNodeModifiedEvents

bool mitk::DataStorage::m_BlockNodeModifiedEvents
protected

If this class changes nodes itself, set this to TRUE in order to suppress NodeChangedEvent to be emitted.

Definition at line 416 of file mitkDataStorage.h.

◆ m_MutexOne

std::mutex mitk::DataStorage::m_MutexOne
mutable

Definition at line 197 of file mitkDataStorage.h.

◆ m_NodeDeleteObserverTags

std::map<const DataNode *, unsigned long> mitk::DataStorage::m_NodeDeleteObserverTags
protected

Saves Delete-Observer Tags for each node in order to remove the event listeners again.

Definition at line 411 of file mitkDataStorage.h.

◆ m_NodeInteractorChangedObserverTags

std::map<const DataNode *, unsigned long> mitk::DataStorage::m_NodeInteractorChangedObserverTags
protected

Definition at line 407 of file mitkDataStorage.h.

◆ m_NodeModifiedObserverTags

std::map<const DataNode *, unsigned long> mitk::DataStorage::m_NodeModifiedObserverTags
protected

Saves Modified-Observer Tags for each node in order to remove the event listeners again.

Definition at line 405 of file mitkDataStorage.h.

◆ RemoveNodeEvent

DataStorageEvent mitk::DataStorage::RemoveNodeEvent

RemoveEvent is emitted directly before a node is removed from the DataStorage.

Observers should register to this event by calling myDataStorage->RemoveNodeEvent.AddListener(myObject,

Definition at line 232 of file mitkDataStorage.h.


The documentation for this class was generated from the following file: