14#include <mitkIRenderWindowPart.h>
15#include <mitkILinkedRenderWindowPart.h>
23#include <qmessagebox.h>
24#include <qfiledialog.h>
28#include <mitkBaseRenderer.h>
30#include <mitkTransferFunction.h>
31#include <mitkTransferFunctionProperty.h>
35#include <mitkSmartPointerProperty.h>
36#include <mitkRenderingModeProperty.h>
37#include <mitkVtkScalarModeProperty.h>
41#include <vtkPointData.h>
42#include <vtkPolyData.h>
45#include <itkCommand.h>
46#include <itksys/SystemTools.hxx>
54 , m_Framerateoutput(false)
55 , m_MitkDistanceImage(nullptr), m_MitkAmplitudeImage(nullptr), m_MitkIntensityImage(nullptr), m_Surface(nullptr)
56 , m_DistanceImageNode(nullptr), m_AmplitudeImageNode(nullptr), m_IntensityImageNode(nullptr), m_RGBImageNode(nullptr), m_SurfaceNode(nullptr)
57 , m_ToFImageRecorder(nullptr), m_ToFImageGrabber(nullptr), m_ToFDistanceImageToSurfaceFilter(nullptr), m_ToFCompositeFilter(nullptr)
59 , m_RealTimeClock(nullptr)
60 , m_StepsForFramerate(100)
63 , m_CameraIntrinsics(nullptr)
112 auto* renderWindowPart = this->GetRenderWindowPart(mitk::WorkbenchUtil::OPEN);
113 if (
nullptr != renderWindowPart)
115 auto* linkedRenderWindowPart =
dynamic_cast<mitk::ILinkedRenderWindowPart*
>(renderWindowPart);
116 if (linkedRenderWindowPart ==
nullptr)
118 MITK_ERROR <<
"No linked render window part available!!!";
122 linkedRenderWindowPart->EnableSlicingPlanes(
false);
124 renderWindowPart->GetQmitkRenderWindow(
"axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Axial);
125 renderWindowPart->GetQmitkRenderWindow(
"axial")->GetSliceNavigationController()->SliceLockedOn();
126 renderWindowPart->GetQmitkRenderWindow(
"sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Axial);
127 renderWindowPart->GetQmitkRenderWindow(
"sagittal")->GetSliceNavigationController()->SliceLockedOn();
128 renderWindowPart->GetQmitkRenderWindow(
"coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Axial);
129 renderWindowPart->GetQmitkRenderWindow(
"coronal")->GetSliceNavigationController()->SliceLockedOn();
131 mitk::RenderingManager::GetInstance()->InitializeViews();
139 if (this->GetDataStorage())
141 m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage());
146 m_Controls->m_ToFRecorderWidget->setEnabled(
false);
147 m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(
false);
148 m_Controls->m_ToFCompositeFilterWidget->setEnabled(
false);
149 m_Controls->m_ToFMeasurementWidget->setEnabled(
false);
150 m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(
false);
177 MITK_DEBUG <<
"OnToFCameraConnected";
189 m_Controls->m_ToFRecorderWidget->setEnabled(
true);
190 m_Controls->m_ToFRecorderWidget->ResetGUIToInitial();
191 m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(
false);
199 if (this->GetDataStorage())
201 m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage());
204 if ( this->GetRenderWindowPart() )
208 MITK_WARN <<
"No render window part available!!! MeasurementWidget will not work.";
213 this->RequestRenderWindowUpdate();
216void QmitkToFUtilView::ResetGUIToDefault()
218 auto* renderWindowPart = this->GetRenderWindowPart();
219 if(
nullptr != renderWindowPart)
221 auto* linkedRenderWindowPart =
dynamic_cast<mitk::ILinkedRenderWindowPart*
>(renderWindowPart);
222 if(linkedRenderWindowPart ==
nullptr)
224 MITK_ERROR <<
"No linked render window part available!!!";
228 linkedRenderWindowPart->EnableSlicingPlanes(
true);
230 renderWindowPart->GetQmitkRenderWindow(
"axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Axial);
231 renderWindowPart->GetQmitkRenderWindow(
"axial")->GetSliceNavigationController()->SliceLockedOff();
232 renderWindowPart->GetQmitkRenderWindow(
"sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Sagittal);
233 renderWindowPart->GetQmitkRenderWindow(
"sagittal")->GetSliceNavigationController()->SliceLockedOff();
234 renderWindowPart->GetQmitkRenderWindow(
"coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::AnatomicalPlane::Coronal);
235 renderWindowPart->GetQmitkRenderWindow(
"coronal")->GetSliceNavigationController()->SliceLockedOff();
240 mitk::RenderingManager::GetInstance()->InitializeViews();
241 this->RequestRenderWindowUpdate();
258 m_Controls->m_ToFRecorderWidget->setEnabled(
false);
259 m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(
false);
260 m_Controls->m_ToFMeasurementWidget->setEnabled(
false);
261 m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(
false);
263 m_Controls->m_ToFMeasurementWidget->CleanUpWidget();
300 MITK_ERROR <<
"No camera intrinsics were found!";
312 bool hasRGBImage =
false;
313 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasRGBImage",hasRGBImage);
315 bool hasIntensityImage =
false;
316 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasIntensityImage",hasIntensityImage);
318 bool hasAmplitudeImage =
false;
319 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasAmplitudeImage",hasAmplitudeImage);
322 if(hasAmplitudeImage)
324 if(hasIntensityImage)
332 std::string rgbFileName;
333 m_ToFImageGrabber->GetCameraDevice()->GetStringProperty(
"RGBImageFileName",rgbFileName);
335 if(hasRGBImage || (rgbFileName!=
""))
351 if(hasAmplitudeImage)
357 if(hasIntensityImage)
370 m_Controls->m_ToFCompositeFilterWidget->UpdateFilterParameter();
380 GetRenderWindowPart(mitk::WorkbenchUtil::OPEN)->GetQmitkRenderWindow(
"3d")->GetRenderer()->GetVtkRenderer()->GetActiveCamera());
386 m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(
true);
387 m_Controls->m_ToFCompositeFilterWidget->setEnabled(
true);
388 m_Controls->m_ToFMeasurementWidget->setEnabled(
true);
389 m_Controls->m_ToFSurfaceGenerationWidget->setEnabled(
true);
395 m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(
false);
396 m_Controls->m_ToFCompositeFilterWidget->setEnabled(
false);
403 if(!
m_Controls->m_ToFSurfaceGenerationWidget->UpdateSurface())
409 this->RequestRenderWindowUpdate();
417 MITK_INFO <<
" 2D-Display-framerate (fps): " << this->m_StepsForFramerate / (this->
m_2DTimeAfter / 1000);
441 this->RequestRenderWindowUpdate();
445mitk::DataNode::Pointer QmitkToFUtilView::ReplaceNodeData( std::string nodeName, mitk::BaseData* data )
447 mitk::DataNode::Pointer node = this->GetDataStorage()->GetNamedNode(nodeName);
450 node = mitk::DataNode::New();
451 node->SetName(nodeName);
452 node->SetBoolProperty(
"binary",
false);
454 this->GetDataStorage()->Add(node);
466 auto renderingModePropertyForTransferFunction = mitk::RenderingModeProperty::New(mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_COLOR);
468 auto* renderWindowPart = this->GetRenderWindowPart(mitk::WorkbenchUtil::OPEN);
470 auto* axialRenderer = mitk::BaseRenderer::GetInstance(renderWindowPart->GetQmitkRenderWindow(
"axial")->renderWindow());
471 auto* sagittalRenderer = mitk::BaseRenderer::GetInstance(renderWindowPart->GetQmitkRenderWindow(
"sagittal")->renderWindow());
472 auto* coronalRenderer = mitk::BaseRenderer::GetInstance(renderWindowPart->GetQmitkRenderWindow(
"coronal")->renderWindow());
473 auto* threeDimRenderer = mitk::BaseRenderer::GetInstance(renderWindowPart->GetQmitkRenderWindow(
"3d")->renderWindow());
482 this->
m_DistanceImageNode->SetProperty(
"Image Rendering.Mode", renderingModePropertyForTransferFunction);
489 this->
m_AmplitudeImageNode->SetProperty(
"Image Rendering.Mode", renderingModePropertyForTransferFunction);
497 this->
m_IntensityImageNode->SetProperty(
"Image Rendering.Mode", renderingModePropertyForTransferFunction);
501 this->
m_RGBImageNode->SetProperty(
"visible" , mitk::BoolProperty::New(
true ));
509 mitk::RenderingManager::GetInstance()->InitializeViews(
510 this->
m_MitkDistanceImage->GetTimeGeometry(), mitk::RenderingManager::REQUEST_UPDATE_2DWINDOWS);
514 QHash<QString, QmitkRenderWindow*> renderWindowHashMap = renderWindowPart->GetQmitkRenderWindows();
515 QHashIterator<QString, QmitkRenderWindow*> i(renderWindowHashMap);
518 this->
m_SurfaceNode->SetVisibility(
false, mitk::BaseRenderer::GetInstance(i.value()->renderWindow()) );
520 this->
m_SurfaceNode->SetVisibility(
true, mitk::BaseRenderer::GetInstance(renderWindowPart->GetQmitkRenderWindow(
"3d")->renderWindow() ) );
523 renderWindowPart->EnableDecorations(!useToF, QStringList(QString(
"background")));
527 bool RGBImageHasDifferentResolution =
false;
528 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"RGBImageHasDifferentResolution",RGBImageHasDifferentResolution);
529 if(RGBImageHasDifferentResolution)
532 mitk::RenderingManager::GetInstance()->InitializeView(renderWindowPart->GetQmitkRenderWindow(
"coronal")->renderWindow(),
533 this->m_RGBImageNode->GetData()->GetGeometry());
static const std::string VIEW_ID
bool m_Framerateoutput
defines if the framerate is computed condinously
void OnChangeCoronalWindowOutput(int index)
Slot invoked when user alters the coronal window input from RGB to Intensity or vice versa.
void UseToFVisibilitySettings(bool useToF)
initialize the visibility settings of ToF data (images + surface)
mitk::DataNode::Pointer m_RGBImageNode
DataNode holding the rgb image of the selected camera.
void OnToFCameraConnected()
Slot called when the "Connect" button of the ConnectionWidget is pressed.
void OnToFCameraStarted()
Slot called when the "Start" button of the RecorderWidget is pressed.
mitk::ToFImageGrabber::Pointer m_ToFImageGrabber
Source of a ToF image processing pipeline. Provides pointers to distance, amplitude and intensity ima...
mitk::ToFDistanceImageToSurfaceFilter::Pointer m_ToFDistanceImageToSurfaceFilter
Filter for calculating a surface representation from a given distance image.
mitk::DataNode::Pointer m_DistanceImageNode
DataNode holding the distance image of the selected camera.
mitk::Image::Pointer m_MitkIntensityImage
member holding a pointer to the intensity image of the selected camera
void Deactivated() override
mitk::Image::Pointer m_MitkDistanceImage
member holding a pointer to the distance image of the selected camera
void OnUpdateCamera()
Slot triggered from the timer to update the images and visualization.
mitk::ToFImageRecorder::Pointer m_ToFImageRecorder
ToF image recorder used for lossless recording of ToF image data.
int m_StepsForFramerate
number of steps used for calculating the display framerate
mitk::RealTimeClock::Pointer m_RealTimeClock
real time clock used to calculate the display framerate
QString m_SelectedCamera
String holding the selected camera.
double m_2DTimeAfter
holds the time stamp at the end of the display framerate measurement
Ui::QmitkToFUtilViewControls * m_Controls
void OnToFCameraStopped()
Slot called when the "Stop" button of the RecorderWidget is pressed.
~QmitkToFUtilView() override
void OnToFCameraDisconnected()
Slot called when the "Disconnect" button of the ConnectionWidget is pressed.
mitk::Image::Pointer m_MitkAmplitudeImage
member holding a pointer to the amplitude image of the selected camera
void OnKinectAcquisitionModeChanged()
Slot invoked when acquisition mode of Kinect is changed.
mitk::ToFCompositeFilter::Pointer m_ToFCompositeFilter
Filter combining several processing steps (thresholding, Median filtering, Bilateral filtering)
int m_2DDisplayCount
member used to determine whether frame rate output should be shown
void CreateQtPartControl(QWidget *parent) override
mitk::DataNode::Pointer m_IntensityImageNode
DataNode holding the intensity image of the selected camera.
QTimer * m_Frametimer
Timer used to continuously update the images.
double m_2DTimeBefore
holds the time stamp at the beginning of the display framerate measurement
void Activated() override
Called when the view gets activated.
void ActivatedZombieView(berry::IWorkbenchPartReference::Pointer zombieView) override
Called when the view gets deactivated. In this case the zombie view of this view becomes active!
mitk::CameraIntrinsics::Pointer m_CameraIntrinsics
member holding the intrinsic parameters of the camera
mitk::DataNode::Pointer m_AmplitudeImageNode
DataNode holding the amplitude image of the selected camera.
mitk::DataNode::Pointer m_SurfaceNode
DataNode holding the surface generated from the distanc image of the selected camera.
static Pointer New(void)
instanciates a new, operating-system dependant, instance of mitk::RealTimeClock.