X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvSlicer.h;h=6af3773adf26ebdb7096208b224cf7b9e318d49a;hb=HEAD;hp=e647a19ac8ea768390a64a94b97cd9332a5318d8;hpb=d38b545ea6b6428350b3a40c79df800cd62bef02;p=clitk.git diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h index e647a19..6af3773 100644 --- a/vv/vvSlicer.h +++ b/vv/vvSlicer.h @@ -20,6 +20,7 @@ #include #include +#include #include //TODO delete #include @@ -34,6 +35,7 @@ #include #include #include +#include class vtkActor; class vtkActor2D; @@ -58,11 +60,13 @@ class vtkScalarBarActor; class vtkTransform; class vtkImageReslice; -class vvSlicer: public vtkImageViewer2 -{ +class vvSlicer: public QObject, public vtkImageViewer2 { + +Q_OBJECT + public: static vvSlicer *New(); - vtkTypeRevisionMacro(vvSlicer,vtkImageViewer2); + vtkTypeMacro(vvSlicer,vtkImageViewer2); void PrintSelf(ostream& os, vtkIndent indent); void SetImage(vvImage::Pointer inputImages); @@ -81,7 +85,7 @@ public: vtkActor* GetVFActor() ; vtkCornerAnnotation* GetAnnotation(); - void SetFusion(vvImage::Pointer inputFusion, bool fusionSequenceFlag = false); + void SetFusion(vvImage::Pointer inputFusion, int fusionSequenceCode = -1); vvImage::Pointer GetFusion() { return mFusion; } @@ -119,7 +123,7 @@ public: 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); + 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(); @@ -148,7 +152,6 @@ public: double* GetCursorPosition() { return mCursor; } - vtkTransform * GetSlicingTransform() { return mSlicingTransform; } vtkTransform * GetConcatenatedTransform() { return mConcatenatedTransform; } vtkTransform * GetConcatenatedFusionTransform() { return mConcatenatedFusionTransform; } @@ -161,14 +164,15 @@ public: void SetCursorVisibility(bool s); bool GetCursorVisibility(); - void SetCursorColor(int r,int g, int b); + void SetCursorColor(double r,double g, double b); void SetCornerAnnotationVisibility(bool s); bool GetCornerAnnotationVisibility(); void GetExtremasAroundMousePointer(double & min, double & max, vtkImageData *image, vtkTransform *transform); - void UpdateLandmarks(); + void RemoveLandmarks(); + void DisplayLandmarks(); void ForceUpdateDisplayExtent(); int* GetDisplayExtent(); @@ -177,6 +181,7 @@ public: void AddContour(vvMesh::Pointer contours,bool propagate); ///Toggle temporal superposition of contours void ToggleContourSuperposition(); + void SetInterpolationImageReslice(int interpolation); virtual void SetColorWindow(double s); virtual void SetColorLevel(double s); @@ -197,7 +202,7 @@ public: void EnableReducedExtent(bool b); void SetReducedExtent(int * ext); - void ClipDisplayedExtent(int extent[6], int refExtent[6]); + bool ClipDisplayedExtent(int extent[6], int refExtent[6]); int GetOrientation(); int * GetExtent(); @@ -205,7 +210,19 @@ public: return mVFColor; } void SetVFColor(double r, double g, double b); - + + //necessary to flag the secondary sequence + void SetFusionSequenceCode(int code) {mFusionSequenceCode=code;} + void SetRegisterExtent(int [6]); + void GetRegisterExtent(int [6]); + + void SetSlicerNumber(const int nbSlicer) {mSlicerNumber = nbSlicer;} + int GetSlicerNumber() const {return mSlicerNumber;} + +signals: + void UpdateDisplayExtentBegin(int); + void UpdateDisplayExtentEnd(int); + protected: vvSlicer(); ~vvSlicer(); @@ -218,7 +235,7 @@ protected: vvLandmarks* mLandmarks; - bool mFusionSequenceFlag; //flag used to indicate whether the 'fusion' data is actually a 'fusionSequence' + int mFusionSequenceCode; //-1: not involved in a fusion sequence, 0: main sequence (CT), 1: secondary sequence (US) // __________ Image coordinates accounting for spacing and origin // Λ Λ @@ -231,6 +248,7 @@ protected: // ___|__|___ VTK world coordinates (mm) (never displayed) mCurrent vtkSmartPointer mSlicingTransform; + vtkSmartPointer mLandmarkTransform; vtkSmartPointer mImageReslice; vtkSmartPointer mConcatenatedTransform; vtkSmartPointer mOverlayReslice; @@ -252,6 +270,8 @@ protected: vtkSmartPointer mVFMapper; vtkSmartPointer mVFColorLUT; vtkSmartPointer mVFActor; + vtkSmartPointer mVFReslice; + vtkSmartPointer mConcatenatedVFTransform; vtkSmartPointer mLandGlyph; vtkSmartPointer mCross; vtkSmartPointer mLandClipper; @@ -262,6 +282,7 @@ protected: vtkSmartPointer legend; std::vector mSurfaceCutActors; + int mSlicerNumber; int mCurrentTSlice; int mCurrentFusionTSlice; int mCurrentOverlayTSlice; @@ -275,18 +296,28 @@ protected: double mVFColor[3]; bool mUseReducedExtent; int * mReducedExtent; - int * mInitialExtent; + int * mRegisterExtent; bool mLinkOverlayWindowLevel; bool showFusionLegend; private: void UpdateOrientation(); void UpdateDisplayExtent(); + void ConvertImageToImageDisplayExtent(vtkInformation *sourceImage, const int sourceExtent[6], + vtkImageData *targetImage, int targetExtent[6]); 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(); - + // Visibility of the different elements that can be set from outside the object. + // Note that vvSlicer also check if the element is to be displayed according to + // the extent of the displayed object. + // These members have been introduced to fix Bug #1883. + bool mImageVisibility; + bool mOverlayVisibility; + bool mFusionVisibility; + bool mVFVisibility; + bool mFirstSetSliceOrientation; }; #endif