X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvSlicer.h;h=a5156f28bc92e4f3c08e49db2c30b74c46d44ff9;hb=488f24aa984ae24adc9458bf5fbf3b2351415742;hp=184df43176a1efc63c974d76f499ce9cb9c2e741;hpb=931a42358442f4ee4f314613c991c838d4b4e3b7;p=clitk.git
diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h
index 184df43..a5156f2 100644
--- a/vv/vvSlicer.h
+++ b/vv/vvSlicer.h
@@ -1,41 +1,34 @@
/*=========================================================================
+ Program: vv http://www.creatis.insa-lyon.fr/rio/vv
- Program: vv
- Module: $RCSfile: vvSlicer.h,v $
- Language: C++
- Date: $Date: 2010/01/06 13:31:57 $
- Version: $Revision: 1.1 $
- Author : Pierre Seroul (pierre.seroul@gmail.com)
+ Authors belong to:
+ - University of LYON http://www.universite-lyon.fr/
+ - Léon Bérard cancer center http://www.centreleonberard.fr
+ - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
-Copyright (C) 2008
-Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
-CREATIS-LRMN 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.
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, version 3 of the License.
+ It is distributed under dual licence
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-
-=========================================================================*/
+ - 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
#include
#include "vvLandmarks.h"
#include "vvImage.h"
-#include "vtkImageViewer2.h"
#include "vvMesh.h"
-#include
+#include "vvMeshActor.h"
+
#include
+#include
+#include
+#include
class vtkActor;
class vtkActor2D;
@@ -44,6 +37,7 @@ class vtkPolyDataMapper2D;
class vtkProperty2D;
class vtkClipPolyData;
class vtkImageActor;
+class vvBlendImageActor;
class vtkBox;
class vtkCornerAnnotation;
class vtkExtractVOI;
@@ -54,167 +48,210 @@ class vvGlyph2D;
class vvGlyphSource;
class vtkCursor3D;
class vtkCutter;
-class vtkPlane;
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 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();
+ 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 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 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 mSlicePlane;
- vtkSmartPointer legend;
-
- std::vector mSurfaceCutActors;
-
- int mCurrentTSlice;
- double mCurrent[3];
- double mCursor[4];
- int mSubSampling;
- int mScale;
- int mVFLog;
+ 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;
+ 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]);
- 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();
};