Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
QmitkDataNodeReinitAction.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 
14 
15 // mitk core
16 #include <mitkImage.h>
17 #include <mitkNodePredicateAnd.h>
18 #include <mitkNodePredicateNot.h>
20 #include <mitkRenderingManager.h>
21 
22 // mitk gui common plugin
23 #include <mitkWorkbenchUtil.h>
24 
25 // namespace that contains the concrete action
26 namespace ReinitAction
27 {
28  void Run(berry::IWorkbenchPartSite::Pointer workbenchPartSite, mitk::DataStorage::Pointer dataStorage, const QList<mitk::DataNode::Pointer>& selectedNodes /*= QList<mitk::DataNode::Pointer>()*/, mitk::BaseRenderer* baseRenderer /*= nullptr*/)
29  {
30  if (selectedNodes.empty())
31  {
32  return;
33  }
34 
35  if (workbenchPartSite.IsNotNull())
36  {
37  auto renderWindow = mitk::WorkbenchUtil::GetRenderWindowPart(workbenchPartSite->GetPage(), mitk::WorkbenchUtil::NONE);
38  if (nullptr == renderWindow)
39  {
40  renderWindow = mitk::WorkbenchUtil::OpenRenderWindowPart(workbenchPartSite->GetPage(), false);
41  if (nullptr == renderWindow)
42  {
43  // no render window available
44  return;
45  }
46  }
47  }
48 
49 
50  auto boundingBoxPredicate = mitk::NodePredicateNot::New(mitk::NodePredicateProperty::New("includeInBoundingBox", mitk::BoolProperty::New(false), baseRenderer));
51 
52  mitk::DataStorage::SetOfObjects::Pointer nodes = mitk::DataStorage::SetOfObjects::New();
53  for (const auto& dataNode : selectedNodes)
54  {
55  if (boundingBoxPredicate->CheckNode(dataNode))
56  {
57  nodes->InsertElement(nodes->Size(), dataNode);
58  }
59  }
60 
61  if (nodes->empty())
62  {
63  return;
64  }
65 
66  if (1 == nodes->Size()) // Special case: If exactly one ...
67  {
68  auto image = dynamic_cast<mitk::Image*>(nodes->ElementAt(0)->GetData());
69 
70  if (nullptr != image) // ... image is selected, reinit is expected to rectify askew images.
71  {
72  if (nullptr == baseRenderer)
73  {
75  }
76  else
77  {
78  mitk::RenderingManager::GetInstance()->InitializeView(baseRenderer->GetRenderWindow(), image->GetTimeGeometry(), true);
79  }
80  return;
81  }
82  }
83 
84  auto boundingGeometry = dataStorage->ComputeBoundingGeometry3D(nodes, "visible", baseRenderer);
85  if (nullptr == baseRenderer)
86  {
88  }
89  else
90  {
91  mitk::RenderingManager::GetInstance()->InitializeView(baseRenderer->GetRenderWindow(), boundingGeometry);
92  }
93  }
94 }
95 
97  : QAction(parent)
98  , QmitkAbstractDataNodeAction(workbenchpartSite)
99 {
100  setText(tr("Reinit"));
102 }
103 
105  : QAction(parent)
106  , QmitkAbstractDataNodeAction(berry::IWorkbenchPartSite::Pointer(workbenchpartSite))
107 {
108  setText(tr("Reinit"));
110 }
111 
113 {
114  connect(this, &QmitkDataNodeReinitAction::triggered, this, &QmitkDataNodeReinitAction::OnActionTriggered);
115 }
116 
117 void QmitkDataNodeReinitAction::OnActionTriggered(bool /*checked*/)
118 {
120  {
121  return;
122  }
123 
124  if (m_DataStorage.IsExpired())
125  {
126  return;
127  }
128 
130 
131  auto selectedNodes = GetSelectedNodes();
132  ReinitAction::Run(m_WorkbenchPartSite.Lock(), m_DataStorage.Lock(), selectedNodes, baseRenderer);
133 }
mitk::BaseRenderer::Pointer GetBaseRenderer()
Grants access to the base renderer stored for the action. Will return nullptr if renderer was never s...
virtual bool InitializeViews(const BaseGeometry *geometry, RequestType type=REQUEST_UPDATE_ALL, bool preserveRoughOrientationInWorldSpace=false)
itk::SmartPointer< T > Lock() const
QList< mitk::DataNode::Pointer > GetSelectedNodes() const
Organizes the rendering process.
static IRenderWindowPart * GetRenderWindowPart(berry::IWorkbenchPage::Pointer page, IRenderWindowPartStrategies strategies)
Returns the currently active mitk::IRenderWindowPart.
static IRenderWindowPart * OpenRenderWindowPart(berry::IWorkbenchPage::Pointer page, bool activatedEditor=true)
Uses &#39;GetRenderWindowPart&#39; to open the a render window part with a certain strategy: Calls &#39;GetRender...
SmartPointer< ObjectType > Lock() const
static Pointer New()
static RenderingManager * GetInstance()
bool IsExpired() const noexcept
static Pointer New(const mitk::NodePredicateBase *_arg)
Image class for storing images.
Definition: mitkImage.h:72
mitk::Image::Pointer image
static Pointer New(const char *_arg)
mitk::WeakPointer< mitk::DataStorage > m_DataStorage
vtkRenderWindow * GetRenderWindow() const
Access the RenderWindow into which this renderer renders.
berry::IWorkbenchPartSite::WeakPtr m_WorkbenchPartSite
QmitkDataNodeReinitAction(QWidget *parent, berry::IWorkbenchPartSite::Pointer workbenchPartSite)
virtual bool InitializeView(vtkRenderWindow *renderWindow, const BaseGeometry *geometry, bool initializeGlobalTimeSNC=false)
void Run(berry::IWorkbenchPartSite::Pointer workbenchPartSite, mitk::DataStorage::Pointer dataStorage, const QList< mitk::DataNode::Pointer > &selectedNodes, mitk::BaseRenderer *baseRenderer)