2 /*=========================================================================
3 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
6 - University of LYON http://www.universite-lyon.fr/
7 - Léon Bérard cancer center http://www.centreleonberard.fr
8 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the copyright notices for more information.
14 It is distributed under dual licence
16 - BSD See included LICENSE.txt file
17 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
18 ===========================================================================**/
20 #ifndef VVSLICERMANAGER_H
21 #define VVSLICERMANAGER_H
32 #include <vtksys/SystemTools.hxx>
34 class vtkInteractorStyle;
35 class vtkRenderWindow;
39 #include "clitkCommon.h"
42 #include "vvImageReader.h"
45 class vvInteractorStyleNavigator;
50 //------------------------------------------------------------------------------
51 class vvSlicerManager : public QObject {
55 typedef enum {WORLD_SLICING, VOXELS_SLICING} SlicingPresetType;
56 vvSlicerManager(int numberOfSlicers);
59 std::string GetLastError() {
63 bool SetImage(std::string filename, vvImageReader::LoadedImageType type, int n=0, unsigned int slice=0);
64 void SetImage(vvImage::Pointer image);
65 bool SetImages(std::vector<std::string> filenames, vvImageReader::LoadedImageType type, int n=0);
67 bool SetOverlay(std::vector<std::string> filenames, int dim, std::string component, vvImageReader::LoadedImageType type);
68 bool SetFusion(std::string filename, int dim, std::string component);
69 bool SetFusionSequence(std::vector<std::string> filenames, int dim, std::string component, vvImageReader::LoadedImageType type);
70 ///Set a VF by loading it from the disk
71 bool SetVF(std::string filename);
72 ///Set a VF from memory
73 bool SetVF(vvImage::Pointer vf,std::string filename);
74 ///Add a mesh to the slicers, with optional propagation using a vector field
75 void AddContour(vvMesh::Pointer ,bool propagate=false);
76 ///Toggle temporal superposition of contours
77 void ToggleContourSuperposition();
79 std::string GetFileName() { return mFileName; }
80 std::string GetBaseFileName() { return mBaseFileName; }
81 int GetBaseFileNameNumber() { return mBaseFileNameNumber; }
82 std::string GetVFName() { return mVFName; }
83 std::string GetOverlayName() { return mOverlayName; }
84 std::string GetFusionName() { return mFusionName; }
85 std::string GetListOfAbsoluteFilePathInOneString(const std::string &actorType);
87 ///Switch between nearest neighbor and linear interpolation
88 void ToggleInterpolation();
89 vvSlicer* GetSlicer(int i);
90 int GetSelectedSlicer() {
91 return mSelectedSlicer;
94 void UpdateSlicer(int num, bool state);
95 void SetSlicerWindow(int i, vtkRenderWindow* RW);
96 void SetInteractorStyleNavigator(int i,vtkInteractorStyle* style);
98 int GetNumberOfSlicers() { return mSlicers.size(); }
99 vvImage::Pointer GetImage() { return mImage; }
100 vvImage::Pointer GetVF() { return mVF; }
101 int GetType() { return mType; }
102 void SetId(std::string id) { mId = id; }
103 std::string GetId() const { return mId; }
105 if (mImage) return mImage->GetNumberOfDimensions();
109 void SetFilename(std::string f, int number=0);
111 void SetSliceOrientation(int slicer, int orientation);
113 void SetTSlice(int slice, bool updateLinkedImages = true);
114 void SetNextTSlice(int originating_slicer);
115 void SetPreviousTSlice(int originating_slicer);
116 void SetTSliceInSlicer(int tslice, int slicer);
118 void SetFusionSequenceTSlice(int slice);
120 void GenerateDefaultLookupTable();
121 void SetColorWindow(double s);
122 void SetColorLevel(double s);
123 void SetOverlayColorWindow(double s);
124 void SetOverlayColorLevel(double s);
125 void SetLinkOverlayWindowLevel(bool b);
126 void SetLocalColorWindowing(const int slicer, const bool bCtrlKey);
127 void SetOpacity(int i, double factor);
128 void SetColorMap(int colormap);
129 void SetPreset(int preset);
130 void SetOverlayColor(int color) {
131 mOverlayColor = (color/60)*60; //SR: new vvBlendImageActor needs 0 or 255 per component
133 void SetFusionOpacity(int opacity) {
134 mFusionOpacity = opacity;
136 void SetFusionThresholdOpacity(int thresOpacity) {
137 mFusionThresOpacity = thresOpacity;
139 void SetFusionColorMap(int colorMap) {
140 mFusionColorMap = colorMap;
142 void SetFusionWindow(double window) {
143 mFusionWindow = window;
145 void SetFusionLevel(double level) {
146 mFusionLevel = level;
148 void SetFusionShowLegend(int show) {
149 mFusionShowLegend = show;
153 //set/get fusionSequence related data
154 void SetFusionSequenceFrameIndex(int sequenceFrameIndex) { mFusionSequenceFrameIndex = sequenceFrameIndex; }
155 void SetFusionSequenceSpatialSyncFlag(bool spatialSync) { mFusionSequenceSpatialSyncFlag = spatialSync; }
156 void SetFusionSequenceLength(unsigned int fusionSequenceNbFrames) { mFusionSequenceNbFrames = fusionSequenceNbFrames; }
157 void SetFusionSequenceMainTransformMatrix(vtkSmartPointer<vtkMatrix4x4> mat) {
158 mFusionSequenceMainTransform = vtkSmartPointer<vtkMatrix4x4>::New();
159 mFusionSequenceMainTransform->DeepCopy(mat);
161 void AddFusionSequenceInitialTransformMatrices(vtkSmartPointer<vtkMatrix4x4> mat) {
162 vtkSmartPointer<vtkMatrix4x4> tmpMat = vtkSmartPointer<vtkMatrix4x4>::New();
163 tmpMat->DeepCopy(mat);
164 mFusionSequenceListInitialTransformMatrices.push_back( tmpMat );
166 void SetFusionSequenceIndexOfLinkedManager(int index) { mFusionSequenceIndexLinkedManager = index; }
168 int GetFusionSequenceIndexOfLinkedManager() { return mFusionSequenceIndexLinkedManager; }
169 int GetFusionSequenceFrameIndex() { return mFusionSequenceFrameIndex; }
170 bool GetFusionSequenceSpatialSyncFlag() { return mFusionSequenceSpatialSyncFlag; }
171 unsigned int GetFusionSequenceNbFrames() { return mFusionSequenceNbFrames; }
172 const vtkSmartPointer<vtkMatrix4x4>& GetFusionSequenceMainTransformMatrix() {return mFusionSequenceMainTransform;}
173 const std::vector< vtkSmartPointer<vtkMatrix4x4> >& GetFusionSequenceInitialTransformMatrices() {return mFusionSequenceListInitialTransformMatrices;}
174 const vtkSmartPointer<vtkMatrix4x4>& GetFusionSequenceInitialTransformMatrixAtFrame(unsigned i) {
175 return mFusionSequenceListInitialTransformMatrices[i];
178 double GetColorWindow() const;
179 double GetColorLevel() const;
180 double GetOverlayColorWindow() const;
181 double GetOverlayColorLevel() const;
182 bool GetLinkOverlayWindowLevel() const;
186 int GetPreset() const {
189 SlicingPresetType GetSlicingPreset() {
190 return mSlicingPreset;
192 int GetOverlayColor() const {
193 return mOverlayColor;
195 int GetFusionOpacity() const {
196 return mFusionOpacity;
198 int GetFusionThresholdOpacity() const {
199 return mFusionThresOpacity;
201 int GetFusionColorMap() const {
202 return mFusionColorMap;
204 double GetFusionWindow() const {
205 return mFusionWindow;
207 double GetFusionLevel() const {
212 void SetCursorAndCornerAnnotationVisibility(int s);
213 void UpdateViews(int current, int slicer);
214 void UpdateLinked(int slicer);
215 void UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate=false);
216 void ResetTransformationToIdentity(const std::string actorType);
219 void AddLink(std::string newId) {
220 mLinkedId.push_back(newId);
222 void RemoveLink(std::string oldId) {
223 mLinkedId.remove(oldId);
226 std::list<std::string> GetLinks() const {
231 return mLinkedId.size() > 0;
234 ///Remove the actor defined by its type and index (example: 3rd contour)
235 void RemoveActor(const std::string& actor_type, int overlay_index);
238 void ReloadOverlay();
240 void ReloadFusionSequence();
245 void UpdateInfoOnCursorPosition(int slicer);
246 void EmitMousePositionUpdated(int slicer);
247 void EmitKeyPressed(std::string keyPress);
248 void UpdateWindowLevel();
249 void UpdateSlice(int slicer);
250 void UpdateTSlice(int slicer);
251 void UpdateSliceRange(int slicer);
252 void SetSlicingPreset(SlicingPresetType preset);
254 vvLandmarks *GetLandmarks();
255 void AddLandmark(float x,float y,float z,float t);
257 void NextImage(int slicer);
258 void PrevImage(int slicer);
259 void LeftButtonReleaseEvent(int slicer);
260 void VerticalSliderHasChanged(int slicer, int slice);
261 double GetScalarComponentAsDouble(vtkImageData *image, double X, double Y, double Z, int component=0);
264 void currentImageChanged(std::string id);
265 void currentPickedImageChanged(std::string id);
266 void UpdatePosition(int visibility,double x, double y, double z, double X, double Y, double Z, double value);
267 void UpdateVector(int display, double x, double y, double z, double value);
268 void UpdateOverlay(int display, double valueOver, double valueRef);
269 void UpdateFusion(int display, double valueFus);
270 void UpdateFusionSequence(int fusionSequenceFrameIndex, bool fusionSequenceSpatialSyncFlag, unsigned int fusionSequenceNbFrames);
271 void MousePositionUpdatedSignal(int slicer);
272 void KeyPressedSignal(std::string KeyPressed);
273 void UpdateOrientation(int slicer, int orientation);
274 void UpdateSlice(int slicer, int slice);
275 void UpdateTSlice(int slicer, int slice);
276 void UpdateSliceRange(int slice, int min, int max, int tmin, int tmax);
277 void WindowLevelChanged();
278 void UpdateLinkManager(std::string, int slicer, double x, double y, double z, int temps);
279 void UpdateLinkedNavigation(std::string, vvSlicerManager*, vvSlicer*);
280 void LandmarkAdded();
281 void ChangeImageWithIndexOffset(vvSlicerManager *sm, int slicer, int offset);
282 void LeftButtonReleaseSignal(int slicer);
283 void AVerticalSliderHasChanged(int slicer, int slice);
286 std::vector< vtkSmartPointer<vvSlicer> > mSlicers;
288 vvImageReader::Pointer mReader;
289 vvImageReader::Pointer mOverlayReader;
290 vvImageReader::Pointer mFusionReader;
291 vvImageReader::Pointer mFusionSequenceReader;
292 vvImageReader::Pointer mVectorReader;
293 vvImage::Pointer mImage;
294 vvImage::Pointer mVF;
299 int mFusionThresOpacity;
301 double mFusionWindow;
303 bool mFusionShowLegend;
305 //fusionSequence related data
306 int mFusionSequenceIndexLinkedManager;
307 int mFusionSequenceFrameIndex;
308 bool mFusionSequenceSpatialSyncFlag;
309 unsigned int mFusionSequenceNbFrames;
310 vtkSmartPointer<vtkMatrix4x4> mFusionSequenceMainTransform;
311 std::vector< vtkSmartPointer<vtkMatrix4x4> > mFusionSequenceListInitialTransformMatrices;
314 SlicingPresetType mSlicingPreset;
315 vvImageReader::LoadedImageType mType;
316 std::string mVFComponent;
317 std::string mOverlayComponent;
318 std::string mFusionComponent;
319 std::string mFileName;
320 std::string mBaseFileName;
321 int mBaseFileNameNumber;
324 std::string mOverlayName;
325 std::string mFusionName;
327 std::string mLastError;
328 std::list<std::string> mLinkedId;
330 vvLandmarks* mLandmarks;
332 std::vector<int> mPreviousSlice;
333 std::vector<int> mPreviousTSlice;