00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date$ 00006 Version: $Revision$ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 00019 #ifndef MITKVOLUMEDATAVTKMAPPER3D_H_HEADER_INCLUDED 00020 #define MITKVOLUMEDATAVTKMAPPER3D_H_HEADER_INCLUDED 00021 00022 #include "mitkCommon.h" 00023 #include "mitkVtkMapper3D.h" 00024 #include "mitkBaseRenderer.h" 00025 #include "mitkImage.h" 00026 #include <vtkVolumeProperty.h> 00027 #include <vtkRenderWindowInteractor.h> 00028 #include <vtkPlane.h> 00029 #include <vtkImplicitPlaneWidget.h> 00030 #include <vtkImageMask.h> 00031 00032 #include <vector> 00033 #include <set> 00034 00035 class vtkAssembly; 00036 class vtkVolumeRayCastMapper; 00037 class vtkFixedPointVolumeRayCastMapper; 00038 class vtkVolumeTextureMapper2D; 00039 class vtkVolumeMapper; 00040 class vtkVolume; 00041 class vtkObject; 00042 class vtkImageShiftScale; 00043 class vtkImageChangeInformation; 00044 class vtkLODProp3D; 00045 class vtkImageResample; 00046 class vtkCubeSource; 00047 class vtkPolyDataMapper; 00048 class vtkActor; 00049 00050 00051 namespace mitk { 00052 00053 /************************************************************************/ 00054 /* Properties that influence the mapper are: 00055 * 00056 * - \b "level window": for the level window of the volume data 00057 * - \b "LookupTable" : for the lookup table of the volume data 00058 * - \b "TransferFunction" (mitk::TransferFunctionProperty): for the used transfer function of the volume data 00059 ************************************************************************/ 00060 00061 //##Documentation 00062 //## @brief Vtk-based mapper for VolumeData 00063 //## 00064 //## @ingroup Mapper 00065 class MITK_CORE_EXPORT VolumeDataVtkMapper3D : public VtkMapper3D 00066 { 00067 public: 00068 mitkClassMacro(VolumeDataVtkMapper3D, VtkMapper3D); 00069 00070 itkNewMacro(Self); 00071 00072 virtual const mitk::Image* GetInput(); 00073 00074 virtual void ApplyProperties(vtkActor* actor, mitk::BaseRenderer* renderer); 00075 00076 virtual void EnableMask(); 00077 virtual void DisableMask(); 00078 Image::Pointer GetMask(); 00079 bool SetMask(const Image* mask); 00080 virtual void UpdateMask(); 00081 00082 static void SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer = NULL, bool overwrite = false); 00083 00087 virtual bool IsLODEnabled( BaseRenderer *renderer = NULL ) const; 00088 00089 virtual vtkProp *GetVtkProp(mitk::BaseRenderer *renderer); 00090 00091 protected: 00092 00093 00094 VolumeDataVtkMapper3D(); 00095 00096 00097 virtual ~VolumeDataVtkMapper3D(); 00098 00099 virtual void GenerateData(mitk::BaseRenderer* renderer); 00100 00101 void CreateDefaultTransferFunctions(); 00102 00103 void UpdateTransferFunctions( mitk::BaseRenderer *renderer ); 00104 00105 void SetPreferences(); 00106 00107 void SetClippingPlane(vtkRenderWindowInteractor* interactor); 00108 void DelClippingPlane(); 00109 00110 vtkImageShiftScale* m_ImageCast; 00111 vtkImageChangeInformation* m_UnitSpacingImageFilter; 00112 vtkVolumeProperty* m_VolumePropertyLow; 00113 vtkVolumeProperty* m_VolumePropertyMed; 00114 vtkVolumeProperty* m_VolumePropertyHigh; 00115 vtkVolumeTextureMapper2D* m_T2DMapper; 00116 vtkVolumeRayCastMapper* m_HiResMapper; 00117 vtkImageResample* m_Resampler; 00118 00119 vtkLODProp3D* m_VolumeLOD; 00120 00121 vtkCubeSource *m_BoundingBox; 00122 vtkPolyDataMapper *m_BoundingBoxMapper; 00123 vtkActor *m_BoundingBoxActor; 00124 00125 vtkAssembly *m_Prop3DAssembly; 00126 00127 vtkPlane* m_ClippingPlane; 00128 vtkImplicitPlaneWidget* m_PlaneWidget; 00129 00130 vtkImageData *m_Mask; 00131 vtkImageMask *m_ImageMaskFilter; 00132 00133 vtkPiecewiseFunction *m_DefaultOpacityTransferFunction; 00134 vtkPiecewiseFunction *m_DefaultGradientTransferFunction; 00135 vtkColorTransferFunction *m_DefaultColorTransferFunction; 00136 00137 int m_LowResID; 00138 int m_MedResID; 00139 int m_HiResID; 00140 bool m_PlaneSet; 00141 double m_PlaneNormalA; 00142 double m_PlaneNormalB; 00143 double m_PlaneNormalC; 00144 00145 std::set< vtkRenderWindow * > m_RenderWindowInitialized; 00146 00147 }; 00148 00149 } // namespace mitk 00150 00151 #endif /* MITKVOLUMEDATAVTKMAPPER3D_H_HEADER_INCLUDED */