diff --git a/Modules/MapperExt/include/mitkVtkSmartVolumeMapper3D.h b/Modules/MapperExt/include/mitkVtkSmartVolumeMapper3D.h index 6a5d7a6cec..c42bf2fcae 100644 --- a/Modules/MapperExt/include/mitkVtkSmartVolumeMapper3D.h +++ b/Modules/MapperExt/include/mitkVtkSmartVolumeMapper3D.h @@ -1,65 +1,74 @@ /*=================================================================== 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 MITKVTKSMARTVOLUMEMAPPER_H_HEADER_INCLUDED #define MITKVTKSMARTVOLUMEMAPPER_H_HEADER_INCLUDED // MITK #include "MitkMapperExtExports.h" #include "mitkBaseRenderer.h" #include "mitkCommon.h" #include "mitkImage.h" #include "mitkVtkMapper.h" // VTK #include #include #include #include +#include +#include namespace mitk { //##Documentation //## @brief Vtk-based mapper for VolumeData //## //## @ingroup Mapper class MITKMAPPEREXT_EXPORT VtkSmartVolumeMapper3D : public VtkMapper { public: mitkClassMacro(VtkSmartVolumeMapper3D, VtkMapper); itkFactorylessNewMacro(Self) itkCloneMacro(Self) - virtual vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) override; + virtual vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) override; virtual void ApplyProperties(vtkActor *actor, mitk::BaseRenderer *renderer) override; static void SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer = nullptr, bool overwrite = false); virtual void MitkRenderVolumetricGeometry(mitk::BaseRenderer *renderer) override; protected: VtkSmartVolumeMapper3D(); virtual ~VtkSmartVolumeMapper3D(); virtual void GenerateDataForRenderer(mitk::BaseRenderer *renderer) override; + void createMapper(vtkImageData*); + void createVolume(); + void createVolumeProperty(); + vtkImageData* GetInputImage(); + vtkSmartPointer m_Volume = nullptr; + vtkSmartPointer m_Mapper = nullptr; + vtkSmartPointer m_VolumeProperty = nullptr; }; } // namespace mitk #endif /* MITKVTKSMARTVOLUMEMAPPER_H_HEADER_INCLUDED */ diff --git a/Modules/MapperExt/src/mitkVtkSmartVolumeMapper3D.cpp b/Modules/MapperExt/src/mitkVtkSmartVolumeMapper3D.cpp index 61ab8bb53d..c2eeb05ed8 100644 --- a/Modules/MapperExt/src/mitkVtkSmartVolumeMapper3D.cpp +++ b/Modules/MapperExt/src/mitkVtkSmartVolumeMapper3D.cpp @@ -1,53 +1,97 @@ /*=================================================================== 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 "mitkVtkSmartVolumeMapper3D.h" void mitk::VtkSmartVolumeMapper3D::GenerateDataForRenderer(mitk::BaseRenderer *renderer) { - mitk::Image *input = const_cast(static_cast(this->GetDataNode()->GetData())); - vtkImageData *inputData = input->GetVtkImageData(this->GetTimestep()); + } vtkProp* mitk::VtkSmartVolumeMapper3D::GetVtkProp(mitk::BaseRenderer *renderer) { - return nullptr; + if (!m_Volume) + { + createVolume(); + } + + return m_Volume; } void mitk::VtkSmartVolumeMapper3D::ApplyProperties(vtkActor *actor, mitk::BaseRenderer *renderer) { } void mitk::VtkSmartVolumeMapper3D::SetDefaultProperties(mitk::DataNode *node, mitk::BaseRenderer *renderer, bool overwrite) { } void mitk::VtkSmartVolumeMapper3D::MitkRenderVolumetricGeometry(mitk::BaseRenderer *renderer) { } -mitk::VtkSmartVolumeMapper3D::VtkSmartVolumeMapper3D() +vtkImageData* mitk::VtkSmartVolumeMapper3D::GetInputImage() +{ + mitk::Image *input = const_cast(static_cast(this->GetDataNode()->GetData())); + return input->GetVtkImageData(this->GetTimestep()); +} + +void mitk::VtkSmartVolumeMapper3D::createMapper(vtkImageData* imageData) +{ + vtkSmartPointer m_Mapper = + vtkSmartPointer::New(); + m_Mapper->SetBlendModeToComposite(); // composite first + m_Mapper->SetInputData(imageData); +} + +void mitk::VtkSmartVolumeMapper3D::createVolume() { + if (!m_Mapper) + { + createMapper(GetInputImage()); + } + if (!m_VolumeProperty) + { + createVolumeProperty(); + } + + m_Volume = vtkSmartPointer::New(); + m_Volume->VisibilityOff(); + m_Volume->SetMapper(m_Mapper); + m_Volume->SetProperty(m_VolumeProperty); +} + +void mitk::VtkSmartVolumeMapper3D::createVolumeProperty() +{ + m_VolumeProperty = vtkSmartPointer::New(); + m_VolumeProperty->ShadeOff(); + m_VolumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION); +} +mitk::VtkSmartVolumeMapper3D::VtkSmartVolumeMapper3D() +{ + } mitk::VtkSmartVolumeMapper3D::~VtkSmartVolumeMapper3D() { -} \ No newline at end of file +} + +