diff --git a/Modules/ToFProcessing/files.cmake b/Modules/ToFProcessing/files.cmake index 9be39e320c..3fe591eb0a 100644 --- a/Modules/ToFProcessing/files.cmake +++ b/Modules/ToFProcessing/files.cmake @@ -1,9 +1,8 @@ set(CPP_FILES mitkToFCompositeFilter.cpp mitkToFDistanceImageToPointSetFilter.cpp mitkToFDistanceImageToSurfaceFilter.cpp mitkToFImageDownsamplingFilter.cpp mitkToFProcessingCommon.cpp - mitkToFSurfaceVtkMapper3D.cpp mitkToFTestingCommon.cpp ) diff --git a/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.cpp b/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.cpp deleted file mode 100644 index 9845712e10..0000000000 --- a/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.cpp +++ /dev/null @@ -1,509 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - - -#include "mitkToFSurfaceVtkMapper3D.h" -#include "mitkDataNode.h" -#include "mitkProperties.h" -#include "mitkColorProperty.h" -#include "mitkLookupTableProperty.h" -#include "mitkVtkRepresentationProperty.h" -#include "mitkVtkInterpolationProperty.h" -#include "mitkVtkScalarModeProperty.h" -#include "mitkClippingProperty.h" - -#include "mitkIShaderRepository.h" -#include "mitkShaderProperty.h" -#include "mitkCoreServices.h" - - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -//const mitk::ToFSurface* mitk::ToFSurfaceVtkMapper3D::GetInput() -const mitk::Surface* mitk::ToFSurfaceVtkMapper3D::GetInput() -{ - //return static_cast ( GetData() ); - return static_cast ( GetDataNode()->GetData() ); -} - -mitk::ToFSurfaceVtkMapper3D::ToFSurfaceVtkMapper3D() -{ - // m_Prop3D = vtkActor::New(); - m_GenerateNormals = false; - this->m_Texture = NULL; - this->m_TextureWidth = 0; - this->m_TextureHeight = 0; - this->m_VtkScalarsToColors = NULL; -} - -mitk::ToFSurfaceVtkMapper3D::~ToFSurfaceVtkMapper3D() -{ - // m_Prop3D->Delete(); -} - -void mitk::ToFSurfaceVtkMapper3D::GenerateDataForRenderer(mitk::BaseRenderer* renderer) -{ - LocalStorage *ls = m_LSH.GetLocalStorage(renderer); - - bool visible = true; - GetDataNode()->GetVisibility(visible, renderer, "visible"); - - if ( !visible ) - { - ls->m_Actor->VisibilityOff(); - return; - } - - // - // set the input-object at time t for the mapper - // - //mitk::ToFSurface::Pointer input = const_cast< mitk::ToFSurface* >( this->GetInput() ); - mitk::Surface::Pointer input = const_cast< mitk::Surface* >( this->GetInput() ); - vtkPolyData * polydata = input->GetVtkPolyData( this->GetTimestep() ); - if(polydata == NULL) - { - ls->m_Actor->VisibilityOff(); - return; - } - - if ( m_GenerateNormals ) - { - ls->m_VtkPolyDataNormals->SetInputData( polydata ); - ls->m_VtkPolyDataMapper->SetInputConnection( ls->m_VtkPolyDataNormals->GetOutputPort() ); - } - else - { - ls->m_VtkPolyDataMapper->SetInputData( polydata ); - } - - // - // apply properties read from the PropertyList - // - ApplyProperties(ls->m_Actor, renderer); - - if(visible) - ls->m_Actor->VisibilityOn(); - - // - // TOF extension for visualization (color/texture mapping) - // - if (this->m_VtkScalarsToColors) - { - // set the color transfer funtion if applied - ls->m_VtkPolyDataMapper->SetLookupTable(this->m_VtkScalarsToColors); - } - - if (this->m_Texture) - { - ls->m_Actor->SetTexture(this->m_Texture); - } - else - { - // remove the texture - ls->m_Actor->SetTexture(0); - } -} - -void mitk::ToFSurfaceVtkMapper3D::ResetMapper( BaseRenderer* renderer ) -{ - LocalStorage *ls = m_LSH.GetLocalStorage(renderer); - ls->m_Actor->VisibilityOff(); -} - -void mitk::ToFSurfaceVtkMapper3D::ApplyMitkPropertiesToVtkProperty(mitk::DataNode *node, vtkProperty* property, mitk::BaseRenderer* renderer) -{ - // Colors - { - double ambient [3] = { 0.5,0.5,0.0 }; - double diffuse [3] = { 0.5,0.5,0.0 }; - double specular[3] = { 1.0,1.0,1.0 }; - - float coeff_ambient = 0.5f; - float coeff_diffuse = 0.5f; - float coeff_specular= 0.5f; - float power_specular=10.0f; - - // Color - { - mitk::ColorProperty::Pointer p; - node->GetProperty(p, "color", renderer); - if(p.IsNotNull()) - { - mitk::Color c = p->GetColor(); - ambient[0]=c.GetRed(); ambient[1]=c.GetGreen(); ambient[2]=c.GetBlue(); - diffuse[0]=c.GetRed(); diffuse[1]=c.GetGreen(); diffuse[2]=c.GetBlue(); - // Setting specular color to the same, make physically no real sense, however vtk rendering slows down, if these colors are different. - specular[0]=c.GetRed(); specular[1]=c.GetGreen(); specular[2]=c.GetBlue(); - } - } - - // Ambient - { - mitk::ColorProperty::Pointer p; - node->GetProperty(p, "material.ambientColor", renderer); - if(p.IsNotNull()) - { - mitk::Color c = p->GetColor(); - ambient[0]=c.GetRed(); ambient[1]=c.GetGreen(); ambient[2]=c.GetBlue(); - } - } - - // Diffuse - { - mitk::ColorProperty::Pointer p; - node->GetProperty(p, "material.diffuseColor", renderer); - if(p.IsNotNull()) - { - mitk::Color c = p->GetColor(); - diffuse[0]=c.GetRed(); diffuse[1]=c.GetGreen(); diffuse[2]=c.GetBlue(); - } - } - - // Specular - { - mitk::ColorProperty::Pointer p; - node->GetProperty(p, "material.specularColor", renderer); - if(p.IsNotNull()) - { - mitk::Color c = p->GetColor(); - specular[0]=c.GetRed(); specular[1]=c.GetGreen(); specular[2]=c.GetBlue(); - } - } - - // Ambient coeff - { - node->GetFloatProperty("material.ambientCoefficient", coeff_ambient, renderer); - } - - // Diffuse coeff - { - node->GetFloatProperty("material.diffuseCoefficient", coeff_diffuse, renderer); - } - - // Specular coeff - { - node->GetFloatProperty("material.specularCoefficient", coeff_specular, renderer); - } - - // Specular power - { - node->GetFloatProperty("material.specularPower", power_specular, renderer); - } - - property->SetAmbient( coeff_ambient ); - property->SetDiffuse( coeff_diffuse ); - property->SetSpecular( coeff_specular ); - property->SetSpecularPower( power_specular ); - - property->SetAmbientColor( ambient ); - property->SetDiffuseColor( diffuse ); - property->SetSpecularColor( specular ); - } - - // Render mode - { - // Opacity - { - float opacity = 1.0f; - if( node->GetOpacity(opacity,renderer) ) - property->SetOpacity( opacity ); - } - - // Wireframe line width - { - float lineWidth = 1; - node->GetFloatProperty("material.wireframeLineWidth", lineWidth, renderer); - property->SetLineWidth( lineWidth ); - } - - // Representation - { - mitk::VtkRepresentationProperty::Pointer p; - node->GetProperty(p, "material.representation", renderer); - if(p.IsNotNull()) - property->SetRepresentation( p->GetVtkRepresentation() ); - } - - // Interpolation - { - mitk::VtkInterpolationProperty::Pointer p; - node->GetProperty(p, "material.interpolation", renderer); - if(p.IsNotNull()) - property->SetInterpolation( p->GetVtkInterpolation() ); - } - } -} - - - -void mitk::ToFSurfaceVtkMapper3D::ApplyProperties(vtkActor* /*actor*/, mitk::BaseRenderer* renderer) -{ - LocalStorage *ls = m_LSH.GetLocalStorage(renderer); - - // Applying shading properties - { - ApplyColorAndOpacityProperties( renderer, ls->m_Actor ) ; - // VTK Properties - ApplyMitkPropertiesToVtkProperty( this->GetDataNode(), ls->m_Actor->GetProperty(), renderer ); - // Shaders - CoreServicePointer(mitk::CoreServices::GetShaderRepository())->ApplyProperties( - this->GetDataNode(),ls->m_Actor,renderer,ls->m_ShaderTimestampUpdate); - } - - mitk::LookupTableProperty::Pointer lookupTableProp; - this->GetDataNode()->GetProperty(lookupTableProp, "LookupTable", renderer); - if (lookupTableProp.IsNotNull() ) - { - ls->m_VtkPolyDataMapper->SetLookupTable(lookupTableProp->GetLookupTable()->GetVtkLookupTable()); - } - - mitk::LevelWindow levelWindow; - if(this->GetDataNode()->GetLevelWindow(levelWindow, renderer, "levelWindow")) - { - ls->m_VtkPolyDataMapper->SetScalarRange(levelWindow.GetLowerWindowBound(),levelWindow.GetUpperWindowBound()); - } - else - if(this->GetDataNode()->GetLevelWindow(levelWindow, renderer)) - { - ls->m_VtkPolyDataMapper->SetScalarRange(levelWindow.GetLowerWindowBound(),levelWindow.GetUpperWindowBound()); - } - - bool scalarVisibility = false; - this->GetDataNode()->GetBoolProperty("scalar visibility", scalarVisibility); - ls->m_VtkPolyDataMapper->SetScalarVisibility( (scalarVisibility ? 1 : 0) ); - - if(scalarVisibility) - { - mitk::VtkScalarModeProperty* scalarMode; - if(this->GetDataNode()->GetProperty(scalarMode, "scalar mode", renderer)) - { - ls->m_VtkPolyDataMapper->SetScalarMode(scalarMode->GetVtkScalarMode()); - } - else - ls->m_VtkPolyDataMapper->SetScalarModeToDefault(); - - bool colorMode = false; - this->GetDataNode()->GetBoolProperty("color mode", colorMode); - ls->m_VtkPolyDataMapper->SetColorMode( (colorMode ? 1 : 0) ); - - float scalarsMin = 0; - if (dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMinimum")) != NULL) - scalarsMin = dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMinimum"))->GetValue(); - - float scalarsMax = 1.0; - if (dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMaximum")) != NULL) - scalarsMax = dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMaximum"))->GetValue(); - - ls->m_VtkPolyDataMapper->SetScalarRange(scalarsMin,scalarsMax); - } - - // deprecated settings - bool deprecatedUseCellData = false; - this->GetDataNode()->GetBoolProperty("deprecated useCellDataForColouring", deprecatedUseCellData); - - bool deprecatedUsePointData = false; - this->GetDataNode()->GetBoolProperty("deprecated usePointDataForColouring", deprecatedUsePointData); - - if (deprecatedUseCellData) - { - ls->m_VtkPolyDataMapper->SetColorModeToDefault(); - ls->m_VtkPolyDataMapper->SetScalarRange(0,255); - ls->m_VtkPolyDataMapper->ScalarVisibilityOn(); - ls->m_VtkPolyDataMapper->SetScalarModeToUseCellData(); - ls->m_Actor->GetProperty()->SetSpecular (1); - ls->m_Actor->GetProperty()->SetSpecularPower (50); - ls->m_Actor->GetProperty()->SetInterpolationToPhong(); - } - else if (deprecatedUsePointData) - { - float scalarsMin = 0; - if (dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMinimum")) != NULL) - scalarsMin = dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMinimum"))->GetValue(); - - float scalarsMax = 0.1; - if (dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMaximum")) != NULL) - scalarsMax = dynamic_cast(this->GetDataNode()->GetProperty("ScalarsRangeMaximum"))->GetValue(); - - ls->m_VtkPolyDataMapper->SetScalarRange(scalarsMin,scalarsMax); - ls->m_VtkPolyDataMapper->SetColorModeToMapScalars(); - ls->m_VtkPolyDataMapper->ScalarVisibilityOn(); - ls->m_Actor->GetProperty()->SetSpecular (1); - ls->m_Actor->GetProperty()->SetSpecularPower (50); - ls->m_Actor->GetProperty()->SetInterpolationToPhong(); - } - - int deprecatedScalarMode = VTK_COLOR_MODE_DEFAULT; - if(this->GetDataNode()->GetIntProperty("deprecated scalar mode", deprecatedScalarMode, renderer)) - { - ls->m_VtkPolyDataMapper->SetScalarMode(deprecatedScalarMode); - ls->m_VtkPolyDataMapper->ScalarVisibilityOn(); - ls->m_Actor->GetProperty()->SetSpecular (1); - ls->m_Actor->GetProperty()->SetSpecularPower (50); - //m_Actor->GetProperty()->SetInterpolationToPhong(); - } - - - // Check whether one or more ClippingProperty objects have been defined for - // this node. Check both renderer specific and global property lists, since - // properties in both should be considered. - const PropertyList::PropertyMap *rendererProperties = this->GetDataNode()->GetPropertyList( renderer )->GetMap(); - const PropertyList::PropertyMap *globalProperties = this->GetDataNode()->GetPropertyList( NULL )->GetMap(); - - // Add clipping planes (if any) - ls->m_ClippingPlaneCollection->RemoveAllItems(); - - PropertyList::PropertyMap::const_iterator it; - for ( it = rendererProperties->begin(); it != rendererProperties->end(); ++it ) - { - this->CheckForClippingProperty( renderer,(*it).second.GetPointer() ); - } - - for ( it = globalProperties->begin(); it != globalProperties->end(); ++it ) - { - this->CheckForClippingProperty( renderer,(*it).second.GetPointer() ); - } - - if ( ls->m_ClippingPlaneCollection->GetNumberOfItems() > 0 ) - { - ls->m_VtkPolyDataMapper->SetClippingPlanes( ls->m_ClippingPlaneCollection ); - } - else - { - ls->m_VtkPolyDataMapper->RemoveAllClippingPlanes(); - } - - -} - -vtkProp *mitk::ToFSurfaceVtkMapper3D::GetVtkProp(mitk::BaseRenderer *renderer) -{ - LocalStorage *ls = m_LSH.GetLocalStorage(renderer); - return ls->m_Actor; -} - -void mitk::ToFSurfaceVtkMapper3D::CheckForClippingProperty( mitk::BaseRenderer* renderer, mitk::BaseProperty *property ) -{ - LocalStorage *ls = m_LSH.GetLocalStorage(renderer); - // m_Prop3D = ls->m_Actor; - - ClippingProperty *clippingProperty = dynamic_cast< ClippingProperty * >( property ); - - if ( (clippingProperty != NULL) - && (clippingProperty->GetClippingEnabled()) ) - { - const Point3D &origin = clippingProperty->GetOrigin(); - const Vector3D &normal = clippingProperty->GetNormal(); - - vtkPlane *clippingPlane = vtkPlane::New(); - clippingPlane->SetOrigin( origin[0], origin[1], origin[2] ); - clippingPlane->SetNormal( normal[0], normal[1], normal[2] ); - - ls->m_ClippingPlaneCollection->AddItem( clippingPlane ); - - clippingPlane->UnRegister( NULL ); - } -} - - -void mitk::ToFSurfaceVtkMapper3D::SetDefaultPropertiesForVtkProperty(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite) -{ - // Shading - { - node->AddProperty( "material.wireframeLineWidth", mitk::FloatProperty::New(1.0f) , renderer, overwrite ); - - node->AddProperty( "material.ambientCoefficient" , mitk::FloatProperty::New(0.05f) , renderer, overwrite ); - node->AddProperty( "material.diffuseCoefficient" , mitk::FloatProperty::New(0.9f) , renderer, overwrite ); - node->AddProperty( "material.specularCoefficient", mitk::FloatProperty::New(1.0f) , renderer, overwrite ); - node->AddProperty( "material.specularPower" , mitk::FloatProperty::New(16.0f) , renderer, overwrite ); - - //node->AddProperty( "material.ambientColor" , mitk::ColorProperty::New(1.0f,1.0f,1.0f), renderer, overwrite ); - //node->AddProperty( "material.diffuseColor" , mitk::ColorProperty::New(1.0f,1.0f,1.0f), renderer, overwrite ); - //node->AddProperty( "material.specularColor" , mitk::ColorProperty::New(1.0f,1.0f,1.0f), renderer, overwrite ); - - node->AddProperty( "material.representation" , mitk::VtkRepresentationProperty::New() , renderer, overwrite ); - node->AddProperty( "material.interpolation" , mitk::VtkInterpolationProperty::New() , renderer, overwrite ); - } - - // Shaders - { - CoreServicePointer(mitk::CoreServices::GetShaderRepository())->AddDefaultProperties(node,renderer,overwrite); - } -} - - -void mitk::ToFSurfaceVtkMapper3D::SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite) -{ - node->AddProperty( "color", mitk::ColorProperty::New(1.0f,1.0f,1.0f), renderer, overwrite ); - node->AddProperty( "opacity", mitk::FloatProperty::New(1.0), renderer, overwrite ); - - mitk::ToFSurfaceVtkMapper3D::SetDefaultPropertiesForVtkProperty(node,renderer,overwrite); // Shading - - node->AddProperty( "scalar visibility", mitk::BoolProperty::New(false), renderer, overwrite ); - node->AddProperty( "color mode", mitk::BoolProperty::New(false), renderer, overwrite ); - node->AddProperty( "scalar mode", mitk::VtkScalarModeProperty::New(), renderer, overwrite ); - mitk::Surface::Pointer surface = dynamic_cast(node->GetData()); - if(surface.IsNotNull()) - { - if((surface->GetVtkPolyData() != 0) && (surface->GetVtkPolyData()->GetPointData() != NULL) && (surface->GetVtkPolyData()->GetPointData()->GetScalars() != 0)) - { - node->AddProperty( "scalar visibility", mitk::BoolProperty::New(true), renderer, overwrite ); - node->AddProperty( "color mode", mitk::BoolProperty::New(true), renderer, overwrite ); - } - } - Superclass::SetDefaultProperties(node, renderer, overwrite); -} - - -void mitk::ToFSurfaceVtkMapper3D::SetImmediateModeRenderingOn(int /*on*/) -{ - /* - if (m_VtkPolyDataMapper != NULL) - m_VtkPolyDataMapper->SetImmediateModeRendering(on); - */ -} - -void mitk::ToFSurfaceVtkMapper3D::SetTexture(vtkImageData *img) -{ - this->m_Texture = vtkSmartPointer::New(); - this->m_Texture->SetInputData(img); - // MITK_INFO << "Neuer Code"; -} - -vtkSmartPointer mitk::ToFSurfaceVtkMapper3D::GetTexture() -{ - return this->m_Texture; -} - -void mitk::ToFSurfaceVtkMapper3D::SetVtkScalarsToColors(vtkScalarsToColors* vtkScalarsToColors) -{ - this->m_VtkScalarsToColors = vtkScalarsToColors; -} - -vtkScalarsToColors* mitk::ToFSurfaceVtkMapper3D::GetVtkScalarsToColors() -{ - return this->m_VtkScalarsToColors; -} diff --git a/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.h b/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.h deleted file mode 100644 index 5d4f12b1e5..0000000000 --- a/Modules/ToFProcessing/mitkToFSurfaceVtkMapper3D.h +++ /dev/null @@ -1,186 +0,0 @@ -/*=================================================================== - -The Medical Imaging Interaction Toolkit (MITK) - -Copyright (c) German Cancer Research Center, -Division of Medical and Biological Informatics. -All rights reserved. - -This software is distributed WITHOUT ANY WARRANTY; without -even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. - -See LICENSE.txt or http://www.mitk.org for details. - -===================================================================*/ - - -#ifndef MITKTOFSURFACEDATAVTKMAPPER3D_H_HEADER_INCLUDED_C1907273 -#define MITKTOFSURFACEDATAVTKMAPPER3D_H_HEADER_INCLUDED_C1907273 - -#include "mitkCommon.h" -#include "mitkVtkMapper.h" -#include "mitkSurface.h" -#include "mitkBaseRenderer.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "mitkToFProcessingExports.h" - -namespace mitk { - - -//##Documentation -//## @brief Vtk-based mapper for Surface -//## -//## @ingroup Mapper - - - - /** - * @brief Vtk-based mapper for Surface - * - - * Properties that can be set for surfaces and influence the surfaceVTKMapper3D are: - * - * - \b "color": (ColorProperty) Diffuse color of the surface object (this property will be read when material.diffuseColor is not defined) - * - \b "Opacity": (FloatProperty) Opacity of the surface object - * - \b "material.ambientColor": (ColorProperty) Ambient color of the surface object - * - \b "material.ambientCoefficient": ( FloatProperty) Ambient coefficient of the surface object - * - \b "material.diffuseColor": ( ColorProperty) Diffuse color of the surface object - * - \b "material.diffuseCoefficient": (FloatProperty) Diffuse coefficient of the surface object - * - \b "material.specularColor": (ColorProperty) Specular Color of the surface object - * - \b "material.specularCoefficient": (FloatProperty) Specular coefficient of the surface object - * - \b "material.specularPower": (FloatProperty) Specular power of the surface object - * - \b "material.interpolation": (VtkInterpolationProperty) Interpolation - * - \b "material.representation": (VtkRepresentationProperty*) Representation - * - \b "material.wireframeLineWidth": (FloatProperty) Width in pixels of the lines drawn. - * - \b "scalar visibility": (BoolProperty) If the scarlars of the surface are visible - - * Properties to look for are: - * - * - \b "scalar visibility": if set to on, scalars assigned to the data are shown - * Turn this on if using a lookup table. - * - \b "ScalarsRangeMinimum": Optional. Can be used to store the scalar min, e.g. - * for the level window settings. - * - \b "ScalarsRangeMaximum": Optional. See above. - * - * There might be still some other, deprecated properties. These will not be documented anymore. - * Please check the source if you really need them. - * - * @ingroup Mapper - */ - -class mitkToFProcessing_EXPORT ToFSurfaceVtkMapper3D : public VtkMapper -{ -public: - - mitkClassMacro(ToFSurfaceVtkMapper3D, VtkMapper); - - itkNewMacro(Self); - - itkSetMacro(GenerateNormals, bool); - - itkGetMacro(GenerateNormals, bool); - - //enable ImmediateModeRendering for vtkMapping - //yet to solve bug 1398 - void SetImmediateModeRenderingOn(int on = 1); - - itkGetMacro(ImmediateModeRenderingOn, int); - - //virtual const mitk::ToFSurface* GetInput(); - virtual const mitk::Surface* GetInput(); - - virtual vtkProp *GetVtkProp(mitk::BaseRenderer *renderer); - - virtual void ApplyProperties(vtkActor* actor, mitk::BaseRenderer* renderer); - - static void SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer = NULL, bool overwrite = false); - - void SetTexture(vtkImageData *img); - - vtkSmartPointer GetTexture(); - - itkSetMacro(TextureWidth, int); - - itkSetMacro(TextureHeight, int); - - void SetVtkScalarsToColors(vtkScalarsToColors* vtkScalarsToColors); - - vtkScalarsToColors* GetVtkScalarsToColors(); - -protected: - ToFSurfaceVtkMapper3D(); - - virtual ~ToFSurfaceVtkMapper3D(); - - virtual void GenerateDataForRenderer(mitk::BaseRenderer* renderer); - - virtual void ResetMapper( mitk::BaseRenderer* renderer ); - - /** Checks whether the specified property is a ClippingProperty and if yes, - * adds it to m_ClippingPlaneCollection (internal method). */ - virtual void CheckForClippingProperty( mitk::BaseRenderer* renderer, mitk::BaseProperty *property ); - - bool m_GenerateNormals; - - //enable ImmediateModeRendering for the vtkMapper - int m_ImmediateModeRenderingOn; - - vtkSmartPointer m_Texture; // pointer to the texture/video image - - int m_TextureWidth; // width of the texture/video image - - int m_TextureHeight; // height of the texture/video image - - vtkScalarsToColors* m_VtkScalarsToColors; // vtk color transfer funtion - -public: - - class LocalStorage : public mitk::Mapper::BaseLocalStorage - { - public: - - vtkActor* m_Actor; - vtkPolyDataMapper *m_VtkPolyDataMapper; - vtkPolyDataNormals *m_VtkPolyDataNormals; - vtkPlaneCollection *m_ClippingPlaneCollection; - - itk::TimeStamp m_ShaderTimestampUpdate; - - LocalStorage() - { - m_VtkPolyDataMapper = vtkOpenGLPolyDataMapper::New(); - m_VtkPolyDataNormals = vtkPolyDataNormals::New(); - m_Actor = vtkActor::New(); - m_ClippingPlaneCollection = vtkPlaneCollection::New(); - - m_Actor->SetMapper(m_VtkPolyDataMapper); - } - - ~LocalStorage() - { - m_VtkPolyDataMapper->Delete(); - m_VtkPolyDataNormals->Delete(); - m_Actor->Delete(); - m_ClippingPlaneCollection->Delete(); - } - }; - - mitk::LocalStorageHandler m_LSH; - - static void ApplyMitkPropertiesToVtkProperty(mitk::DataNode *node, vtkProperty* property, mitk::BaseRenderer* renderer); - static void SetDefaultPropertiesForVtkProperty(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite); -}; - -} // namespace mitk - -#endif /* MITKTOFSURFACEDATAVTKMAPPER3D_H_HEADER_INCLUDED_C1907273 */ diff --git a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp index b24fcffae1..2290328d2f 100644 --- a/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp +++ b/Plugins/org.mitk.gui.qt.tofutil/src/internal/QmitkToFUtilView.cpp @@ -1,659 +1,658 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // Blueberry #include #include #include // Qmitk #include "QmitkToFUtilView.h" #include #include // Qt #include #include //QT headers #include #include #include // MITK #include #include #include #include #include #include #include #include //itk headers #include // VTK #include #include #include // ITK #include #include #include #include const std::string QmitkToFUtilView::VIEW_ID = "org.mitk.views.tofutil"; //Constructor QmitkToFUtilView::QmitkToFUtilView() : QmitkAbstractView() , m_Controls(NULL), m_MultiWidget( NULL ) , m_MitkDistanceImage(NULL), m_MitkAmplitudeImage(NULL), m_MitkIntensityImage(NULL), m_Surface(NULL) , m_DistanceImageNode(NULL), m_AmplitudeImageNode(NULL), m_IntensityImageNode(NULL), m_RGBImageNode(NULL), m_SurfaceNode(NULL) , m_ToFImageRecorder(NULL), m_ToFImageGrabber(NULL), m_ToFDistanceImageToSurfaceFilter(NULL), m_ToFCompositeFilter(NULL) , m_2DDisplayCount(0) , m_RealTimeClock(NULL) , m_StepsForFramerate(100) , m_2DTimeBefore(0.0) , m_2DTimeAfter(0.0) , m_CameraIntrinsics(NULL) { this->m_Frametimer = new QTimer(this); this->m_ToFDistanceImageToSurfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New(); this->m_ToFCompositeFilter = mitk::ToFCompositeFilter::New(); this->m_ToFImageRecorder = mitk::ToFImageRecorder::New(); } //Destructor, specifically calling OnToFCameraStopped() and OnToFCammeraDiconnected() QmitkToFUtilView::~QmitkToFUtilView() { OnToFCameraStopped(); OnToFCameraDisconnected(); } //Createing the PartControl Signal-Slot principal void QmitkToFUtilView::CreateQtPartControl( QWidget *parent ) { // build up qt view, unless already done if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkToFUtilViewControls; m_Controls->setupUi( parent ); //Looking for Input and Defining reaction connect(m_Frametimer, SIGNAL(timeout()), this, SLOT(OnUpdateCamera())); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(KinectAcquisitionModeChanged()), this, SLOT(OnKinectAcquisitionModeChanged()) ); // Todo in Widget2 connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraConnected()), this, SLOT(OnToFCameraConnected()) ); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraDisconnected()), this, SLOT(OnToFCameraDisconnected()) ); connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraSelected(const QString)), this, SLOT(OnToFCameraSelected(const QString)) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStarted()), this, SLOT(OnToFCameraStarted()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStopped()), this, SLOT(OnToFCameraStopped()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStarted()), this, SLOT(OnToFCameraStopped()) ); connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStopped()), this, SLOT(OnToFCameraStarted()) ); connect( (QObject*)(m_Controls->m_SurfaceCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnSurfaceCheckboxChecked(bool)) ); connect( (QObject*)(m_Controls->m_TextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnTextureCheckBoxChecked(bool)) ); connect( (QObject*)(m_Controls->m_KinectTextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnKinectRGBTextureCheckBoxChecked(bool)) ); } } //SetFocus-Method -> actually seting Focus to the Recorder void QmitkToFUtilView::SetFocus() { m_Controls->m_ToFRecorderWidget->setFocus(); } //Activated-Method->Generating RenderWindow void QmitkToFUtilView::Activated() { //get the current RenderWindowPart or open a new one if there is none if(this->GetRenderWindowPart(OPEN)) { mitk::ILinkedRenderWindowPart* linkedRenderWindowPart = dynamic_cast(this->GetRenderWindowPart()); if(linkedRenderWindowPart == 0) { MITK_ERROR << "No linked StdMultiWidget avaiable!!!"; } else { linkedRenderWindowPart->EnableSlicingPlanes(false); } GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SliceLockedOn(); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SliceLockedOn(); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SliceLockedOn(); this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews(); this->UseToFVisibilitySettings(true); if (this->m_ToFCompositeFilter) { m_Controls->m_ToFCompositeFilterWidget->SetToFCompositeFilter(this->m_ToFCompositeFilter); } if (this->GetDataStorage()) { m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage()); } if (this->m_ToFImageGrabber.IsNull()) { m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->m_ToFCompositeFilterWidget->setEnabled(false); m_Controls->tofMeasurementWidget->setEnabled(false); m_Controls->SurfacePropertiesBox->setEnabled(false); } } } //ZomnnieView-Method -> Resetting GUI to default. Why not just QmitkToFUtilView()?! void QmitkToFUtilView::ActivatedZombieView(berry::IWorkbenchPartReference::Pointer /*zombieView*/) { ResetGUIToDefault(); } void QmitkToFUtilView::Deactivated() { } void QmitkToFUtilView::Visible() { } //Reset of the ToFUtilView void QmitkToFUtilView::Hidden() { ResetGUIToDefault(); } void QmitkToFUtilView::OnToFCameraConnected() { MITK_DEBUG <<"OnToFCameraConnected"; this->m_2DDisplayCount = 0; this->m_ToFImageGrabber = m_Controls->m_ToFConnectionWidget->GetToFImageGrabber(); // initialize surface generation this->m_ToFDistanceImageToSurfaceFilter = mitk::ToFDistanceImageToSurfaceFilter::New(); // initialize ToFImageRecorder and ToFRecorderWidget this->m_ToFImageRecorder = mitk::ToFImageRecorder::New(); this->m_ToFImageRecorder->SetCameraDevice(this->m_ToFImageGrabber->GetCameraDevice()); m_Controls->m_ToFRecorderWidget->SetParameter(this->m_ToFImageGrabber, this->m_ToFImageRecorder); m_Controls->m_ToFRecorderWidget->setEnabled(true); m_Controls->m_ToFRecorderWidget->ResetGUIToInitial(); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); // initialize ToFCompositeFilterWidget this->m_ToFCompositeFilter = mitk::ToFCompositeFilter::New(); if (this->m_ToFCompositeFilter) { m_Controls->m_ToFCompositeFilterWidget->SetToFCompositeFilter(this->m_ToFCompositeFilter); } if (this->GetDataStorage()) { m_Controls->m_ToFCompositeFilterWidget->SetDataStorage(this->GetDataStorage()); } // initialize measurement widget m_Controls->tofMeasurementWidget->InitializeWidget(this->GetRenderWindowPart()->GetQmitkRenderWindows(),this->GetDataStorage(), this->m_ToFDistanceImageToSurfaceFilter->GetCameraIntrinsics()); this->m_RealTimeClock = mitk::RealTimeClock::New(); this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); this->RequestRenderWindowUpdate(); } void QmitkToFUtilView::ResetGUIToDefault() { if(this->GetRenderWindowPart()) { mitk::ILinkedRenderWindowPart* linkedRenderWindowPart = dynamic_cast(this->GetRenderWindowPart()); if(linkedRenderWindowPart == 0) { MITK_ERROR << "No linked StdMultiWidget avaiable!!!"; } else { linkedRenderWindowPart->EnableSlicingPlanes(true); } GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Axial); GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetSliceNavigationController()->SliceLockedOff(); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Sagittal); GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetSliceNavigationController()->SliceLockedOff(); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SetDefaultViewDirection(mitk::SliceNavigationController::Frontal); GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetSliceNavigationController()->SliceLockedOff(); this->UseToFVisibilitySettings(false); //global reinit this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews(); this->RequestRenderWindowUpdate(); } } void QmitkToFUtilView::OnToFCameraDisconnected() { m_Controls->m_ToFRecorderWidget->OnStop(); m_Controls->m_ToFRecorderWidget->setEnabled(false); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->tofMeasurementWidget->setEnabled(false); m_Controls->SurfacePropertiesBox->setEnabled(false); //clean up measurement widget m_Controls->tofMeasurementWidget->CleanUpWidget(); } void QmitkToFUtilView::OnKinectAcquisitionModeChanged() { if (m_ToFCompositeFilter.IsNotNull()&&m_ToFImageGrabber.IsNotNull()) { if (m_SelectedCamera.contains("Kinect")) { if (m_ToFImageGrabber->GetBoolProperty("RGB")) { this->m_RGBImageNode = ReplaceNodeData("RGB image",this->m_ToFImageGrabber->GetOutput(3)); this->m_ToFDistanceImageToSurfaceFilter->SetInput(3,this->m_ToFImageGrabber->GetOutput(3)); } else if (m_ToFImageGrabber->GetBoolProperty("IR")) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); } } this->UseToFVisibilitySettings(true); } } void QmitkToFUtilView::OnToFCameraStarted() { if (m_ToFImageGrabber.IsNotNull()) { // initialize camera intrinsics if (this->m_ToFImageGrabber->GetProperty("CameraIntrinsics")) { m_CameraIntrinsics = dynamic_cast(this->m_ToFImageGrabber->GetProperty("CameraIntrinsics"))->GetValue(); MITK_INFO << m_CameraIntrinsics->ToString(); } else { m_CameraIntrinsics = NULL; MITK_ERROR << "No camera intrinsics were found!"; } // set camera intrinsics if ( m_CameraIntrinsics.IsNotNull() ) { this->m_ToFDistanceImageToSurfaceFilter->SetCameraIntrinsics(m_CameraIntrinsics); } // initial update of image grabber this->m_ToFImageGrabber->Update(); this->m_ToFCompositeFilter->SetInput(0,this->m_ToFImageGrabber->GetOutput(0)); this->m_ToFCompositeFilter->SetInput(1,this->m_ToFImageGrabber->GetOutput(1)); this->m_ToFCompositeFilter->SetInput(2,this->m_ToFImageGrabber->GetOutput(2)); // initial update of composite filter this->m_ToFCompositeFilter->Update(); this->m_MitkDistanceImage = m_ToFCompositeFilter->GetOutput(); this->m_DistanceImageNode = ReplaceNodeData("Distance image",m_MitkDistanceImage); std::string rgbFileName; m_ToFImageGrabber->GetCameraDevice()->GetStringProperty("RGBImageFileName",rgbFileName); bool hasRGBImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasRGBImage",hasRGBImage); bool hasIntensityImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasIntensityImage",hasIntensityImage); bool hasAmplitudeImage = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("HasAmplitudeImage",hasAmplitudeImage); bool KinectReconstructionMode = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("KinectReconstructionMode",KinectReconstructionMode); if(KinectReconstructionMode) { //set the reconstruction mode for kinect this->m_ToFDistanceImageToSurfaceFilter->SetReconstructionMode(mitk::ToFDistanceImageToSurfaceFilter::Kinect); } if (m_CameraIntrinsics.IsNotNull()) { m_ToFDistanceImageToSurfaceFilter->SetCameraIntrinsics(m_CameraIntrinsics); } if(hasRGBImage || (rgbFileName!="")) { if(m_ToFImageGrabber->GetBoolProperty("IR")) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); } else { this->m_RGBImageNode = ReplaceNodeData("RGB image",this->m_ToFImageGrabber->GetOutput(3)); } } else { this->m_RGBImageNode = NULL; } if(hasAmplitudeImage) { this->m_MitkAmplitudeImage = m_ToFCompositeFilter->GetOutput(1); this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); } if(hasIntensityImage) { this->m_MitkIntensityImage = m_ToFCompositeFilter->GetOutput(2); this->m_IntensityImageNode = ReplaceNodeData("Intensity image",m_MitkIntensityImage); } // if ((rgbFileName!="") || hasRGBImage) // { // } // else // { // } // this->m_AmplitudeImageNode = ReplaceNodeData("Amplitude image",m_MitkAmplitudeImage); // this->m_IntensityImageNode = ReplaceNodeData("Intensity image",m_MitkIntensityImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(0,m_MitkDistanceImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(1,m_MitkAmplitudeImage); this->m_ToFDistanceImageToSurfaceFilter->SetInput(2,m_MitkIntensityImage); this->m_Surface = this->m_ToFDistanceImageToSurfaceFilter->GetOutput(0); this->m_SurfaceNode = ReplaceNodeData("Surface",m_Surface); this->UseToFVisibilitySettings(true); m_Controls->m_ToFCompositeFilterWidget->UpdateFilterParameter(); // initialize visualization widget m_Controls->m_ToFVisualisationSettingsWidget->Initialize(this->m_DistanceImageNode, this->m_AmplitudeImageNode, this->m_IntensityImageNode); // set distance image to measurement widget m_Controls->tofMeasurementWidget->SetDistanceImage(m_MitkDistanceImage); this->m_Frametimer->start(0); m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(true); m_Controls->m_ToFCompositeFilterWidget->setEnabled(true); m_Controls->tofMeasurementWidget->setEnabled(true); m_Controls->SurfacePropertiesBox->setEnabled(true); if (m_Controls->m_TextureCheckBox->isChecked()) { OnTextureCheckBoxChecked(true); } if (m_Controls->m_KinectTextureCheckBox->isChecked()) { OnKinectRGBTextureCheckBoxChecked(true); } } m_Controls->m_TextureCheckBox->setEnabled(true); } void QmitkToFUtilView::OnToFCameraStopped() { m_Controls->m_ToFVisualisationSettingsWidget->setEnabled(false); m_Controls->m_ToFCompositeFilterWidget->setEnabled(false); m_Controls->SurfacePropertiesBox->setEnabled(false); this->m_Frametimer->stop(); } void QmitkToFUtilView::OnToFCameraSelected(const QString selected) { m_SelectedCamera = selected; if (selected.contains("O3D")) { MITK_INFO<<"Surface representation currently not available for CamBoard and O3. Intrinsic parameters missing."; this->m_Controls->m_SurfaceCheckBox->setEnabled(false); this->m_Controls->m_TextureCheckBox->setEnabled(false); this->m_Controls->m_KinectTextureCheckBox->setEnabled(false); this->m_Controls->m_SurfaceCheckBox->setChecked(false); this->m_Controls->m_TextureCheckBox->setChecked(false); this->m_Controls->m_KinectTextureCheckBox->setChecked(false); } else { this->m_Controls->m_SurfaceCheckBox->setEnabled(true); this->m_Controls->m_TextureCheckBox->setEnabled(true); this->m_Controls->m_KinectTextureCheckBox->setEnabled(true); } } void QmitkToFUtilView::OnSurfaceCheckboxChecked(bool checked) { if(checked) { //initialize the surface once MITK_DEBUG << "OnSurfaceCheckboxChecked true"; this->m_SurfaceNode->SetData(this->m_Surface); //this->m_SurfaceNode->SetMapper(mitk::BaseRenderer::Standard3D); this->m_ToFDistanceImageToSurfaceFilter->SetTriangulationThreshold( this->m_Controls->m_TriangulationThreshold->value() ); //we need to initialize (reinit) the surface, to make it fit into the renderwindow this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews( this->m_Surface->GetTimeGeometry(), mitk::RenderingManager::REQUEST_UPDATE_3DWINDOWS, true); // correctly place the vtk camera for appropriate surface rendering vtkCamera* camera3d = GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderer()->GetVtkRenderer()->GetActiveCamera(); //1m distance to camera should be a nice default value for most cameras camera3d->SetPosition(0,0,0); camera3d->SetViewUp(0,-1,0); camera3d->SetFocalPoint(0,0,1); if (this->m_CameraIntrinsics.IsNotNull()) { // compute view angle from camera intrinsics camera3d->SetViewAngle(mitk::ToFProcessingCommon::CalculateViewAngle(m_CameraIntrinsics,m_ToFImageGrabber->GetCaptureWidth())); } else { camera3d->SetViewAngle(45); } camera3d->SetClippingRange(1, 10000); } } void QmitkToFUtilView::OnUpdateCamera() { //##### Code for surface ##### if (m_Controls->m_SurfaceCheckBox->isChecked()) { // update surface m_ToFDistanceImageToSurfaceFilter->SetTextureIndex(m_Controls->m_ToFVisualisationSettingsWidget->GetSelectedImageIndex()); //get the colortransferfunction from the visualization widget //this->m_ToFSurfaceVtkMapper3D->SetVtkScalarsToColors(m_Controls->m_ToFVisualisationSettingsWidget->GetSelectedColorTransferFunction()); //update pipeline this->m_ToFImageGrabber->Modified(); this->m_Surface->Update(); } //##### End code for surface ##### else { // update pipeline this->m_ToFImageGrabber->Modified(); this->m_MitkDistanceImage->Update(); } this->RequestRenderWindowUpdate(); this->m_2DDisplayCount++; if ((this->m_2DDisplayCount % this->m_StepsForFramerate) == 0) { this->m_2DTimeAfter = this->m_RealTimeClock->GetCurrentStamp() - this->m_2DTimeBefore; MITK_INFO << " 2D-Display-framerate (fps): " << this->m_StepsForFramerate / (this->m_2DTimeAfter/1000); this->m_2DTimeBefore = this->m_RealTimeClock->GetCurrentStamp(); } } void QmitkToFUtilView::OnTextureCheckBoxChecked(bool checked) { if(m_SurfaceNode.IsNotNull()) { if (checked) { - //this->m_ToFSurfaceVtkMapper3D->SetVtkScalarsToColors(m_Controls->m_ToFVisualisationSettingsWidget->GetSelectedColorTransferFunction()); mitk::TransferFunction::Pointer transferFunction = mitk::TransferFunction::New(); transferFunction->SetColorTransferFunction(m_Controls->m_ToFVisualisationSettingsWidget->GetSelectedColorTransferFunction()); this->m_SurfaceNode->SetProperty("Surface.TransferFunction", mitk::TransferFunctionProperty::New(transferFunction)); this->m_SurfaceNode->SetBoolProperty("scalar visibility", true); } else { this->m_SurfaceNode->SetBoolProperty("scalar visibility", false); } } } void QmitkToFUtilView::OnKinectRGBTextureCheckBoxChecked(bool checked) { if((m_SelectedCamera.contains("Kinect")) && (m_ToFImageGrabber->GetBoolProperty("RGB"))) { if (checked) { // enable texture this->m_SurfaceNode->SetProperty("Surface.Texture",mitk::SmartPointerProperty::New(this->m_ToFImageGrabber->GetOutput(3))); } else { // disable texture this->m_SurfaceNode->GetPropertyList()->DeleteProperty("Surface.Texture"); } } } void QmitkToFUtilView::OnChangeCoronalWindowOutput(int index) { this->OnToFCameraStopped(); if(index == 0) { if(this->m_IntensityImageNode.IsNotNull()) this->m_IntensityImageNode->SetVisibility(false); if(this->m_RGBImageNode.IsNotNull()) this->m_RGBImageNode->SetVisibility(true); } else if(index == 1) { if(this->m_IntensityImageNode.IsNotNull()) this->m_IntensityImageNode->SetVisibility(true); if(this->m_RGBImageNode.IsNotNull()) this->m_RGBImageNode->SetVisibility(false); } this->RequestRenderWindowUpdate(); this->OnToFCameraStarted(); } mitk::DataNode::Pointer QmitkToFUtilView::ReplaceNodeData( std::string nodeName, mitk::BaseData* data ) { mitk::DataNode::Pointer node = this->GetDataStorage()->GetNamedNode(nodeName); if (node.IsNull()) { node = mitk::DataNode::New(); node->SetData(data); node->SetName(nodeName); node->SetBoolProperty("binary",false); this->GetDataStorage()->Add(node); } else { node->SetData(data); } return node; } void QmitkToFUtilView::UseToFVisibilitySettings(bool useToF) { //We need this property for every node. mitk::RenderingModeProperty::Pointer renderingModePropertyForTransferFunction = mitk::RenderingModeProperty::New(mitk::RenderingModeProperty::COLORTRANSFERFUNCTION_COLOR); // set node properties if (m_DistanceImageNode.IsNotNull()) { this->m_DistanceImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_DistanceImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if (m_AmplitudeImageNode.IsNotNull()) { this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_AmplitudeImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if (m_IntensityImageNode.IsNotNull()) { this->m_IntensityImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); this->m_IntensityImageNode->SetProperty("Image Rendering.Mode", renderingModePropertyForTransferFunction); } if ((m_RGBImageNode.IsNotNull())) { this->m_RGBImageNode->SetProperty( "visible" , mitk::BoolProperty::New( true )); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("axial")->GetRenderWindow() ) ); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("sagittal")->GetRenderWindow() ) ); this->m_RGBImageNode->SetVisibility( !useToF, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); } // initialize images if (m_MitkDistanceImage.IsNotNull()) { this->GetRenderWindowPart()->GetRenderingManager()->InitializeViews( this->m_MitkDistanceImage->GetTimeGeometry(), mitk::RenderingManager::REQUEST_UPDATE_2DWINDOWS, true); } if(this->m_SurfaceNode.IsNotNull()) { QHash renderWindowHashMap = this->GetRenderWindowPart()->GetQmitkRenderWindows(); QHashIterator i(renderWindowHashMap); while (i.hasNext()){ i.next(); this->m_SurfaceNode->SetVisibility( false, mitk::BaseRenderer::GetInstance(i.value()->GetRenderWindow()) ); } this->m_SurfaceNode->SetVisibility( true, mitk::BaseRenderer::GetInstance(GetRenderWindowPart()->GetQmitkRenderWindow("3d")->GetRenderWindow() ) ); } //disable/enable gradient background this->GetRenderWindowPart()->EnableDecorations(!useToF, QStringList(QString("background"))); if((this->m_RGBImageNode.IsNotNull())) { bool RGBImageHasDifferentResolution = false; m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty("RGBImageHasDifferentResolution",RGBImageHasDifferentResolution); if(RGBImageHasDifferentResolution) { //update the display geometry by using the RBG image node. Only for renderwindow coronal mitk::RenderingManager::GetInstance()->InitializeView( GetRenderWindowPart()->GetQmitkRenderWindow("coronal")->GetRenderWindow(), this->m_RGBImageNode->GetData()->GetGeometry() ); } } }