Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkDiffSliceOperationApplier.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 #include "mitkDiffSliceOperation.h"
16 #include "mitkRenderingManager.h"
17 #include "mitkSegTool2D.h"
18 #include <mitkExtractSliceFilter.h>
19 #include <mitkVtkImageOverwrite.h>
20 
21 // VTK
22 #include <vtkSmartPointer.h>
23 
25 {
26 }
27 
29 {
30 }
31 
33 {
34  auto *imageOperation = dynamic_cast<DiffSliceOperation *>(operation);
35 
36  // as we only support DiffSliceOperation return if operation is not type of DiffSliceOperation
37  if (!imageOperation)
38  return;
39 
40  // chak if the operation is valid
41  if (imageOperation->IsValid())
42  {
43  // the actual overwrite filter (vtk)
44  vtkSmartPointer<mitkVtkImageOverwrite> reslice = vtkSmartPointer<mitkVtkImageOverwrite>::New();
45 
46  mitk::Image::Pointer slice = imageOperation->GetSlice();
47  // Set the slice as 'input'
48  reslice->SetInputSlice(slice->GetVtkImageData());
49 
50  // set overwrite mode to true to write back to the image volume
51  reslice->SetOverwriteMode(true);
52  reslice->Modified();
53 
54  // a wrapper for vtkImageOverwrite
56  extractor->SetInput(imageOperation->GetImage());
57  extractor->SetTimeStep(imageOperation->GetTimeStep());
58  extractor->SetWorldGeometry(dynamic_cast<PlaneGeometry *>(imageOperation->GetWorldGeometry()));
59  extractor->SetVtkOutputRequest(true);
60  extractor->SetResliceTransformByGeometry(imageOperation->GetImage()->GetGeometry(imageOperation->GetTimeStep()));
61 
62  extractor->Modified();
63  extractor->Update();
64 
65  // make sure the modification is rendered
67  imageOperation->GetImage()->Modified();
68 
70  extractor2->SetInput(imageOperation->GetImage());
71  extractor2->SetTimeStep(imageOperation->GetTimeStep());
72  extractor2->SetWorldGeometry(dynamic_cast<PlaneGeometry *>(imageOperation->GetWorldGeometry()));
73  extractor2->SetResliceTransformByGeometry(imageOperation->GetImage()->GetGeometry(imageOperation->GetTimeStep()));
74  extractor2->Modified();
75  extractor2->Update();
76 
77  // TODO Move this code to SurfaceInterpolationController!
78  mitk::Image::Pointer slice2 = extractor2->GetOutput();
79  mitk::PlaneGeometry::Pointer plane = dynamic_cast<PlaneGeometry *>(imageOperation->GetWorldGeometry());
80  slice2->DisconnectPipeline();
81  mitk::SegTool2D::UpdateSurfaceInterpolation(slice2, imageOperation->GetImage(), plane, true);
82  }
83 }
84 
85 mitk::DiffSliceOperationApplier *mitk::DiffSliceOperationApplier::GetInstance()
86 {
87  static auto *s_Instance = new DiffSliceOperationApplier();
88  return s_Instance;
89 }
Base class of all Operation-classes.
Definition: mitkOperation.h:29
static Pointer New()
An Operation for applying an edited slice to the volume.
void ExecuteOperation(Operation *op) override
Executes a DiffSliceOperation.
static RenderingManager * GetInstance()
static void UpdateSurfaceInterpolation(const Image *slice, const Image *workingImage, const PlaneGeometry *plane, bool detectIntersection)
Updates the surface interpolation by extracting the contour form the given slice. ...
Describes a two-dimensional, rectangular plane.
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)