X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.h;h=8c79969fbc2ea4aabc7bfcfd47bb66606a45bca1;hb=48d89d66788d01a4fcce97bd58681e0e9e1ce057;hp=feb5f2dbfe55f1d65f7c06d579f6d52f510f41e0;hpb=0083c3fb2c66812489631c7551709d121de51625;p=clitk.git diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h index feb5f2d..8c79969 100644 --- a/vv/vvSlicer.h +++ b/vv/vvSlicer.h @@ -1,3 +1,20 @@ +/*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv + + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. + + It is distributed under dual licence + + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + ======================================================================-====*/ #ifndef __vvSlicer_h #define __vvSlicer_h #include @@ -5,10 +22,12 @@ #include "vvLandmarks.h" #include "vvImage.h" -#include "vtkImageViewer2.h" #include "vvMesh.h" -#include +#include "vvMeshActor.h" + #include +#include +#include class vtkActor; class vtkActor2D; @@ -17,6 +36,7 @@ class vtkPolyDataMapper2D; class vtkProperty2D; class vtkClipPolyData; class vtkImageActor; +class vvBlendImageActor; class vtkBox; class vtkCornerAnnotation; class vtkExtractVOI; @@ -29,175 +49,194 @@ class vtkCursor3D; class vtkCutter; class vtkAssignAttribute; class vtkScalarBarActor; - +class vtkTransform; +class vtkImageReslice; class vvSlicer: public vtkImageViewer2 { public: - static vvSlicer *New(); - vtkTypeRevisionMacro(vvSlicer,vtkImageViewer2); - void PrintSelf(ostream& os, vtkIndent indent); - - void SetImage(vvImage::Pointer inputImages); - vvImage::Pointer GetImage() { - return mImage; - } - - void SetOverlay(vvImage::Pointer inputOverlay); - vvImage::Pointer GetOverlay() { - return mOverlay; - } - - vtkImageMapToWindowLevelColors* GetOverlayMapper(); - vtkImageActor* GetOverlayActor() ; - vtkImageMapToWindowLevelColors* GetFusionMapper() ; - vtkImageActor* GetFusionActor() ; - vtkActor* GetVFActor() ; - vtkCornerAnnotation* GetAnnotation() ; - - void SetFusion(vvImage::Pointer inputFusion); - vvImage::Pointer GetFusion() { - return mFusion; - } - - /**Set an actor's visibility ("overlay, fusion, vf, contour...") - Overlay index is the index of the overlay by type, eg. if there are - 5 contours and we want to activate the 3rd one, pass 2 **/ - void SetActorVisibility(const std::string& actor_type, int overlay_index,bool vis); - void RemoveActor(const std::string& actor_type, int overlay_index); - - void SetVF(vvImage::Pointer vf); - vvImage *GetVF() { - return mVF; - } - - void SetLandmarks(vvLandmarks* landmarks); - void SetTSlice(int t); - void SetSliceOrientation(int orientation); - int GetTSlice(); - ///Reimplemented from vtkImageViewer2 to add polydata support - void SetSlice(int s); - int GetTMax() { - return mImage->GetVTKImages().size() - 1; - } - - void SetOpacity(double s); - void SetRenderWindow(int orientation, vtkRenderWindow * rw); - void SetDisplayMode(bool i); - void FlipHorizontalView(); - void FlipVerticalView(); - void Render(); - ///Sets the camera to fit the image in the window - void ResetCamera(); - - void SetVFSubSampling(int sub); - int GetVFSubSampling() { - return mSubSampling; - } - void SetVFScale(int scale); - int GetVFScale() { - return mScale; - } - void SetVFLog(int log); - int GetVFLog() { - return mVFLog; - } - - void SetFileName(std::string filename) { - mFileName = filename; - } - std::string GetFileName() { - return mFileName; - } - - double* GetCursorPosition() { - return mCursor; - } - - void SetCurrentPosition(double x, double y, double z, int t); - double* GetCurrentPosition() { - return mCurrent; - } - - void UpdateCursorPosition(); - void SetCursorVisibility(bool s); - bool GetCursorVisibility(); - void SetCursorColor(int r,int g, int b); - - void GetExtremasAroundMousePointer(double & min, double & max); - - void UpdateLandmarks(); - void ForceUpdateDisplayExtent(); - - int* GetDisplayExtent(); - /**Add a polydata to be displayed as a contour over the image - ** the contour can be propagated to a time sequence using a motion field */ - void AddContour(vvMesh::Pointer contours,bool propagate); - ///Toggle temporal superposition of contours - void ToggleContourSuperposition(); - - virtual void SetColorWindow(double s); - virtual void SetColorLevel(double s); + static vvSlicer *New(); + vtkTypeRevisionMacro(vvSlicer,vtkImageViewer2); + void PrintSelf(ostream& os, vtkIndent indent); + + void SetImage(vvImage::Pointer inputImages); + vvImage::Pointer GetImage() { + return mImage; + } + + void SetOverlay(vvImage::Pointer inputOverlay); + vvImage::Pointer GetOverlay() { + return mOverlay; + } + vtkImageMapToWindowLevelColors* GetOverlayMapper(); + vvBlendImageActor* GetOverlayActor() ; + vtkImageMapToWindowLevelColors* GetFusionMapper() ; + vtkImageActor* GetFusionActor() ; + vtkActor* GetVFActor() ; + vtkCornerAnnotation* GetAnnotation(); + + void SetFusion(vvImage::Pointer inputFusion); + vvImage::Pointer GetFusion() { + return mFusion; + } + + /**Set an actor's visibility ("overlay, fusion, vf, contour...") + Overlay index is the index of the overlay by type, eg. if there are + 5 contours and we want to activate the 3rd one, pass 2 **/ + void SetActorVisibility(const std::string& actor_type, int overlay_index,bool vis); + void RemoveActor(const std::string& actor_type, int overlay_index); + + void SetVF(vvImage::Pointer vf); + vvImage *GetVF() { + return mVF; + } + + void SetLandmarks(vvLandmarks* landmarks); + void SetTSlice(int t); + void SetSliceOrientation(int orientation); + void AdjustResliceToSliceOrientation(vtkImageReslice *reslice); + int GetTSlice(); + ///Reimplemented from vtkImageViewer2 to add polydata support + void SetSlice(int s); + int GetTMax() { + return (unsigned int)mImage->GetVTKImages().size() - 1; + } + + void SetOpacity(double s); + void SetRenderWindow(int orientation, vtkRenderWindow * rw); + void SetDisplayMode(bool i); + void FlipHorizontalView(); + void FlipVerticalView(); + static double GetScalarComponentAsDouble(vtkImageData *image, int X, double Y, double Z, int &ix, int &iy, int &iz, int component=0); + void Render(); + ///Sets the camera to fit the image in the window + void ResetCamera(); + + void SetVFSubSampling(int sub); + int GetVFSubSampling() { + return mSubSampling; + } + void SetVFScale(int scale); + void SetVFWidth(int width); + int GetVFScale() { + return mScale; + } + void SetVFLog(int log); + int GetVFLog() { + return mVFLog; + } + + void SetFileName(std::string filename) { + mFileName = filename; + } + std::string GetFileName() { + return mFileName; + } + + double* GetCursorPosition() { + return mCursor; + } + + void SetCurrentPosition(double x, double y, double z, int t); + double* GetCurrentPosition() { + return mCurrent; + } + + void UpdateCursorPosition(); + void SetCursorVisibility(bool s); + + bool GetCursorVisibility(); + void SetCursorColor(int r,int g, int b); + + void SetCornerAnnotationVisibility(bool s); + bool GetCornerAnnotationVisibility(); + + void GetExtremasAroundMousePointer(double & min, double & max); + + void UpdateLandmarks(); + void ForceUpdateDisplayExtent(); + + int* GetDisplayExtent(); + /**Add a polydata to be displayed as a contour over the image + ** the contour can be propagated to a time sequence using a motion field */ + void AddContour(vvMesh::Pointer contours,bool propagate); + ///Toggle temporal superposition of contours + void ToggleContourSuperposition(); + + virtual void SetColorWindow(double s); + virtual void SetColorLevel(double s); - void EnableReducedExtent(bool b); - void SetReducedExtent(int * ext); + void EnableReducedExtent(bool b); + void SetReducedExtent(int * ext); + + void ClipDisplayedExtent(int extent[6], int refExtent[6]); + int GetOrientation(); + int * GetExtent(); + + double* GetVFColor() { + return mVFColor; + } + void SetVFColor(double r, double g, double b); protected: - vvSlicer(); - ~vvSlicer(); - - std::string mFileName; - vvImage::Pointer mImage; - vvImage::Pointer mOverlay; - vvImage::Pointer mFusion; - vvImage::Pointer mVF; - - vvLandmarks* mLandmarks; - - vtkSmartPointer mOverlayMapper; - vtkSmartPointer mOverlayActor; - vtkSmartPointer mFusionMapper; - vtkSmartPointer mFusionActor; - vtkSmartPointer ca; - vtkSmartPointer crossCursor; - vtkSmartPointer pdm; - vtkSmartPointer pdmA; - vtkSmartPointer mArrow; - vtkSmartPointer mAAFilter; - vtkSmartPointer mVOIFilter; - vtkSmartPointer mGlyphFilter; - vtkSmartPointer mVFMapper; - vtkSmartPointer mVFActor; - vtkSmartPointer mLandGlyph; - vtkSmartPointer mCross; - vtkSmartPointer mLandClipper; - vtkSmartPointer mLandMapper; - vtkSmartPointer mLandActor; - vtkSmartPointer mClipBox; - vtkSmartPointer legend; - - std::vector mSurfaceCutActors; - - int mCurrentTSlice; - double mCurrent[3]; - double mCursor[4]; - int mSubSampling; - int mScale; - int mVFLog; - bool mUseReducedExtent; - int * mReducedExtent; - int * mInitialExtent; + vvSlicer(); + ~vvSlicer(); + + std::string mFileName; + vvImage::Pointer mImage; + vvImage::Pointer mOverlay; + vvImage::Pointer mFusion; + vvImage::Pointer mVF; + + vvLandmarks* mLandmarks; + + vtkSmartPointer mImageReslice; + vtkSmartPointer mOverlayReslice; + vtkSmartPointer mOverlayMapper; + vtkSmartPointer mOverlayActor; + vtkSmartPointer mFusionReslice; + vtkSmartPointer mFusionMapper; + vtkSmartPointer mFusionActor; + vtkSmartPointer ca; + vtkSmartPointer crossCursor; + vtkSmartPointer pdm; + vtkSmartPointer pdmA; + vtkSmartPointer mArrow; + vtkSmartPointer mAAFilter; + vtkSmartPointer mVOIFilter; + vtkSmartPointer mGlyphFilter; + vtkSmartPointer mVFMapper; + vtkSmartPointer mVFColorLUT; + vtkSmartPointer mVFActor; + vtkSmartPointer mLandGlyph; + vtkSmartPointer mCross; + vtkSmartPointer mLandClipper; + vtkSmartPointer mLandMapper; + vtkSmartPointer mLandActor; + vtkSmartPointer mClipBox; + vtkSmartPointer legend; + std::vector mSurfaceCutActors; + + int mCurrentTSlice; + double mCurrent[3]; + double mCursor[4]; + int mSubSampling; + int mScale; + int mVFLog; + int mVFWidth; + double mVFColor[3]; + bool mUseReducedExtent; + int * mReducedExtent; + int * mInitialExtent; private: - void UpdateOrientation(); - void UpdateDisplayExtent(); - void ComputeVFDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int extent[6]); - void ComputeOverlayDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int overExtent[6]); - void ComputeFusionDisplayedExtent(int x1,int x2,int y1,int y2,int z1,int z2,int overExtent[6]); - void ClipDisplayedExtent(int extent[6], int refExtent[6]); - ///Sets the surfaces to be cut on the image slice: update the vtkCutter - void SetContourSlice(); + void UpdateOrientation(); + void UpdateDisplayExtent(); + void ConvertImageToImageDisplayExtent(vtkImageData *sourceImage, const int sourceExtent[6], + vtkImageData *targetImage, int targetExtent[6]); + ///Sets the surfaces to be cut on the image slice: update the vtkCutter + void SetContourSlice(); };