Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkRenderWindowLayerUtilities.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 // render window manager module
15 
16 // mitk core
17 #include <mitkNodePredicateNot.h>
19 
21 {
22  LayerStack stackedLayers;
23  if (nullptr == dataStorage || nullptr == renderer)
24  {
25  // no nodes to stack or no renderer selected
26  return stackedLayers;
27  }
28 
29  int layer = -1;
30  NodePredicateAnd::Pointer combinedNodePredicate = GetRenderWindowPredicate(renderer);
31  DataStorage::SetOfObjects::ConstPointer filteredDataNodes = dataStorage->GetSubset(combinedNodePredicate);
32  for (DataStorage::SetOfObjects::ConstIterator it = filteredDataNodes->Begin(); it != filteredDataNodes->End(); ++it)
33  {
34  DataNode::Pointer dataNode = it->Value();
35  if (dataNode.IsNull())
36  {
37  continue;
38  }
39 
40  bool layerFound = dataNode->GetIntProperty("layer", layer, renderer);
41  if (layerFound)
42  {
43  if (BASE_LAYER_INDEX != layer|| withBaseNode)
44  {
45  // data node is not on the base layer or the base layer should be included anyway
46  stackedLayers.insert(std::make_pair(layer, dataNode));
47  }
48  }
49  }
50  return stackedLayers;
51 }
52 
54 {
55  NodePredicateAnd::Pointer renderWindowPredicate = NodePredicateAnd::New();
56 
57  NodePredicateProperty::Pointer helperObject = NodePredicateProperty::New("helper object", BoolProperty::New(true));
58  NodePredicateProperty::Pointer fixedLayer = NodePredicateProperty::New("fixedLayer", BoolProperty::New(true), renderer);
59 
60  renderWindowPredicate->AddPredicate(NodePredicateNot::New(helperObject));
61  renderWindowPredicate->AddPredicate(fixedLayer);
62 
63  return renderWindowPredicate;
64 }
65 
67 {
68  dataNode->SetBoolProperty("fixedLayer", true, renderer);
69  // use visibility of existing renderer or common renderer
70  // common renderer is used if renderer-specific property does not exist
71  bool visible = false;
72  bool visibilityProperty = dataNode->GetVisibility(visible, renderer);
73  if (true == visibilityProperty)
74  {
75  // found a visibility property
76  dataNode->SetVisibility(visible, renderer);
77  }
78 
79  // use layer of existing renderer or common renderer
80  // common renderer is used if renderer-specific property does not exist
81  int layer = -1;
82  bool layerProperty = dataNode->GetIntProperty("layer", layer, renderer);
83  if (true == layerProperty)
84  {
85  // found a layer property
86  dataNode->SetIntProperty("layer", layer, renderer);
87  }
88 }
void SetIntProperty(const char *propertyKey, int intValue, const mitk::BaseRenderer *renderer=nullptr)
Convenience method for setting int properties (instances of IntProperty)
Data management class that handles &#39;was created by&#39; relations.
MITKRENDERWINDOWMANAGER_EXPORT void SetRenderWindowProperties(mitk::DataNode *dataNode, const BaseRenderer *renderer)
Set renderer-specific properties to mark a data node as &#39;managed by the specific renderer&#39;. In order for a renderer to manage a data node, the &#39;fixedLayer&#39; property has to be set for the given renderer. Additionally, the &#39;visible&#39; and the &#39;layer&#39; property are set and allow to individually render a set of nodes with a specific renderer. The last two mentioned properties are set so that they initially have the same value as the corresponding global property.
void SetVisibility(bool visible, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="visible")
Convenience method for setting visibility properties (instances of BoolProperty)
Organizes the rendering process.
MITKRENDERWINDOWMANAGER_EXPORT NodePredicateAnd::Pointer GetRenderWindowPredicate(const BaseRenderer *renderer)
Helper function to get a node predicate that can be used to filter render window specific data nodes...
bool GetIntProperty(const char *propertyKey, int &intValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for int properties (instances of IntProperty)
SetOfObjects::ConstPointer GetSubset(const NodePredicateBase *condition) const
returns a set of data objects that meet the given condition(s)
bool GetVisibility(bool &visible, const mitk::BaseRenderer *renderer, const char *propertyKey="visible") const
Convenience access method for visibility properties (instances of BoolProperty with property-key "vis...
Definition: mitkDataNode.h:422
MITKRENDERWINDOWMANAGER_EXPORT LayerStack GetLayerStack(const DataStorage *dataStorage, const BaseRenderer *renderer, bool withBaseNode)
Return the stack of layers of the given renderer as std::map<int, DataNode::Pointer>, which guarantees ordering of the layers. Stacked layers are only included if they have their "fixedLayer" property set to true and their "layer" property set.
void SetBoolProperty(const char *propertyKey, bool boolValue, const mitk::BaseRenderer *renderer=nullptr)
Convenience method for setting boolean properties (instances of BoolProperty)
std::map< int, DataNode::Pointer, std::greater< int > > LayerStack
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57