Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- 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 <iostream>
#include "vvLandmarks.h"
#include "vvImage.h"
-#include "vtkImageViewer2.h"
#include "vvMesh.h"
-#include <vvMeshActor.h>
+#include "vvMeshActor.h"
+
#include <vtkSmartPointer.h>
+#include <vtkImageViewer2.h>
+#include <vtkImageReslice.h>
+#include <vtkImageMapToColors.h>
class vtkActor;
class vtkActor2D;
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();
- 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);
- 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();
- 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 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() ;
+ vtkImageMapToColors* GetFusionMapper() ;
+ vtkImageActor* GetFusionActor() ;
+ vtkActor* GetVFActor() ;
+ vtkCornerAnnotation* GetAnnotation();
- void EnableReducedExtent(bool b);
- void SetReducedExtent(int * ext);
-
- void ClipDisplayedExtent(int extent[6], int refExtent[6]);
- int GetOrientation();
- int * GetExtent();
+ void SetFusion(vvImage::Pointer inputFusion);
+ vvImage::Pointer GetFusion() {
+ return mFusion;
+ }
+
+ /**Get/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 **/
+ bool GetActorVisibility(const std::string& actor_type, int overlay_index);
+ 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, double 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, vtkImageData *image);
+
+ 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);
+
+ double GetOverlayColorWindow();
+ double GetOverlayColorLevel();
+ bool GetLinkOverlayWindowLevel() { return mLinkOverlayWindowLevel; }
+
+ void SetOverlayColorWindow(double s);
+ void SetOverlayColorLevel(double s);
+ void SetLinkOverlayWindowLevel(bool b) { mLinkOverlayWindowLevel = b; }
+
+ /**
+ * When it is enabled, beware of a call to GetExtent.
+ * we must have setted mReducedExtent otherwhise random values
+ * are returned by GetExtent
+ * */
+ 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<vtkImageMapToWindowLevelColors> mOverlayMapper;
- vtkSmartPointer<vvBlendImageActor> mOverlayActor;
- vtkSmartPointer<vtkImageMapToWindowLevelColors> mFusionMapper;
- vtkSmartPointer<vtkImageActor> mFusionActor;
- vtkSmartPointer<vtkCornerAnnotation> ca;
- vtkSmartPointer<vtkCursor2D> crossCursor;
- vtkSmartPointer<vtkPolyDataMapper2D> pdm;
- vtkSmartPointer<vtkActor2D> pdmA;
- vtkSmartPointer<vvGlyphSource> mArrow;
- vtkSmartPointer<vtkAssignAttribute> mAAFilter;
- vtkSmartPointer<vtkExtractVOI> mVOIFilter;
- vtkSmartPointer<vvGlyph2D> mGlyphFilter;
- vtkSmartPointer<vtkPolyDataMapper> mVFMapper;
- vtkSmartPointer<vtkActor> mVFActor;
- vtkSmartPointer<vtkGlyph3D> mLandGlyph;
- vtkSmartPointer<vtkCursor3D> mCross;
- vtkSmartPointer<vtkClipPolyData> mLandClipper;
- vtkSmartPointer<vtkPolyDataMapper> mLandMapper;
- vtkSmartPointer<vtkActor> mLandActor;
- vtkSmartPointer<vtkBox> mClipBox;
- vtkSmartPointer<vtkScalarBarActor> legend;
- std::vector<vvMeshActor*> mSurfaceCutActors;
-
- int mCurrentTSlice;
- double mCurrent[3];
- double mCursor[4];
- int mSubSampling;
- int mScale;
- int mVFLog;
- int mVFWidth;
- 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<vtkImageReslice> mImageReslice;
+ vtkSmartPointer<vtkImageReslice> mOverlayReslice;
+ vtkSmartPointer<vtkImageMapToWindowLevelColors> mOverlayMapper;
+ vtkSmartPointer<vvBlendImageActor> mOverlayActor;
+ vtkSmartPointer<vtkImageReslice> mFusionReslice;
+ vtkSmartPointer<vtkImageMapToColors> mFusionMapper;
+ vtkSmartPointer<vtkImageActor> mFusionActor;
+ vtkSmartPointer<vtkCornerAnnotation> ca;
+ vtkSmartPointer<vtkCursor2D> crossCursor;
+ vtkSmartPointer<vtkPolyDataMapper2D> pdm;
+ vtkSmartPointer<vtkActor2D> pdmA;
+ vtkSmartPointer<vvGlyphSource> mArrow;
+ vtkSmartPointer<vtkAssignAttribute> mAAFilter;
+ vtkSmartPointer<vtkExtractVOI> mVOIFilter;
+ vtkSmartPointer<vvGlyph2D> mGlyphFilter;
+ vtkSmartPointer<vtkPolyDataMapper> mVFMapper;
+ vtkSmartPointer<vtkLookupTable> mVFColorLUT;
+ vtkSmartPointer<vtkActor> mVFActor;
+ vtkSmartPointer<vtkGlyph3D> mLandGlyph;
+ vtkSmartPointer<vtkCursor3D> mCross;
+ vtkSmartPointer<vtkClipPolyData> mLandClipper;
+ vtkSmartPointer<vtkPolyDataMapper> mLandMapper;
+ vtkSmartPointer<vtkActor> mLandActor;
+ vtkSmartPointer<vtkBox> mClipBox;
+ vtkSmartPointer<vtkScalarBarActor> legend;
+ std::vector<vvMeshActor*> 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;
+ bool mLinkOverlayWindowLevel;
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]);
- ///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();
};