]> Creatis software - clitk.git/blob - vv/vvSlicerManager.h
fix overlay problem
[clitk.git] / vv / vvSlicerManager.h
1 /*=========================================================================
2
3  Program:   vv
4  Language:  C++
5  Author :   Pierre Seroul (pierre.seroul@gmail.com)
6
7 Copyright (C) 2008
8 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
9 CREATIS-LRMN http://www.creatis.insa-lyon.fr
10
11 This program is free software: you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation, version 3 of the License.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program.  If not, see <http://www.gnu.org/licenses/>.
22
23 =========================================================================*/
24 #ifndef vvSlicerManager_h
25 #define vvSlicerManager_h
26
27 // std
28 #include <iostream>
29 #include <vector>
30 #include <string>
31
32 // QT
33 #include <QObject>
34
35 // VTK
36 #include <vtksys/SystemTools.hxx>
37 class vtkImageData;
38 class vtkInteractorStyle;
39 class vtkRenderWindow;
40 class vtkPolyData;
41
42 // VV
43 #include "vvConstants.h"
44 #include "clitkCommon.h"
45 #include "vvImage.h"
46 #include "vvMesh.h"
47 class vvSlicer;
48 class vvInteractorStyleNavigator;
49 class vvImageReader;
50 class vvImageReader;
51 class vvLandmarks;
52
53 class vvSlicerManager : public QObject {
54     Q_OBJECT
55
56 public:
57     vvSlicerManager(int numberOfSlicers);
58     ~vvSlicerManager();
59
60     std::string GetLastError() {
61         return mLastError;
62     }
63
64     bool SetImage(std::string filename,LoadedImageType type);
65     void SetImage(vvImage::Pointer image);
66     void SetExtractedImage(std::string filename, vvImage::Pointer image, int slice);
67     bool SetImages(std::vector<std::string> filenames,LoadedImageType type);
68
69     bool SetOverlay(std::string filename, int dim, std::string component);
70     bool SetFusion(std::string filename, int dim, std::string component);
71     ///Set a VF by loading it from the disk
72     bool SetVF(std::string filename);
73     ///Set a VF from memory
74     bool SetVF(vvImage::Pointer vf,std::string filename);
75     ///Add a mesh to the slicers, with optional propagation using a vector field
76     void AddContour(vvMesh::Pointer ,bool propagate=false);
77     ///Toggle temporal superposition of contours
78     void ToggleContourSuperposition();
79
80     std::string GetFileName() {
81         return mFileName;
82     }
83     std::string GetVFName() {
84         return mVFName;
85     }
86     std::string GetOverlayName() {
87         return mOverlayName;
88     }
89     std::string GetFusionName() {
90         return mFusionName;
91     }
92
93     ///Switch between nearest neighbor and linear interpolation
94     void ToggleInterpolation();
95     vvSlicer* GetSlicer(int i);
96     void UpdateSlicer(int num, bool state);
97     void SetSlicerWindow(int i, vtkRenderWindow* RW);
98     void SetInteractorStyleNavigator(int i,vtkInteractorStyle* style);
99     int NumberOfSlicers() {
100         return mSlicers.size();
101     }
102     vvImage::Pointer GetImage() {
103         return mImage;
104     }
105     vvImage::Pointer GetVF() {
106         return mVF;
107     }
108     int GetDimension() {
109         if (mImage) return mImage->GetNumberOfDimensions();
110         else return -1;
111     }
112
113     int GetType() {
114         return mType;
115     }
116
117     void SetId(std::string id) {
118         mId = id;
119     }
120     std::string GetId() {
121         return mId;
122     }
123
124     void SetFilename(std::string f) {
125         mFileName = f;
126     }
127
128     void SetTSlice(int slice);
129     void SetNextTSlice(int originating_slicer);
130     void SetPreviousTSlice(int originating_slicer);
131     void SetTSliceInSlicer(int tslice, int slicer);
132
133     void GenerateDefaultLookupTable();
134     void SetColorWindow(double s);
135     void SetColorLevel(double s);
136     void SetOpacity(int i, double factor);
137     void SetColorMap();
138     void SetColorMap(int colormap);
139     void SetPreset(int preset);
140     void SetOverlayColor(int color) {
141         mOverlayColor = color;
142     }
143     void SetFusionOpacity(int opacity) {
144         mFusionOpacity = opacity;
145     }
146     void SetFusionColorMap(int colorMap) {
147         mFusionColorMap = colorMap;
148     }
149     void SetFusionWindow(int window) {
150         mFusionWindow = window;
151     }
152     void SetFusionLevel(int level) {
153         mFusionLevel = level;
154     }
155
156     double GetColorWindow();
157     double GetColorLevel();
158     int GetColorMap() {
159         return mColorMap;
160     }
161     int GetPreset() {
162         return mPreset;
163     }
164     int GetOverlayColor() {
165         return mOverlayColor;
166     }
167
168     int GetFusionOpacity() {
169         return mFusionOpacity;
170     }
171     int GetFusionColorMap() {
172         return mFusionColorMap;
173     }
174     double GetFusionWindow() {
175         return mFusionWindow;
176     }
177     double GetFusionLevel() {
178         return mFusionLevel;
179     }
180
181     void SetCursorVisibility(int s);
182     void UpdateViews(int current, int slicer);
183     void UpdateLinked(int slicer);
184     void Render();
185
186     void AddLink(std::string newId) {
187         mLinkedId.push_back(newId);
188     }
189     void RemoveLink(std::string oldId) {
190         mLinkedId.remove(oldId);
191     }
192
193     ///Remove the actor defined by its type and index (example: 3rd contour)
194     void RemoveActor(const std::string& actor_type, int overlay_index);
195     void RemoveActors();
196     void Reload();
197     void ReloadOverlay();
198     void ReloadFusion();
199     void ReloadVF();
200
201     void Activated();
202     void UpdateInfoOnCursorPosition(int slicer);
203     void UpdateWindowLevel();
204     void UpdateSlice(int slicer);
205     void UpdateTSlice(int slicer);
206     void UpdateSliceRange(int slicer);
207
208     vvLandmarks *GetLandmarks();
209     void AddLandmark(float x,float y,float z,float t);
210
211 signals :
212     void currentImageChanged(std::string id);
213     void UpdatePosition(int visibility,double x, double y, double z, double X, double Y, double Z, double value);
214     void UpdateVector(int display, double x, double y, double z, double value);
215     void UpdateOverlay(int display, double valueOver, double valueRef);
216     void UpdateFusion(int display, double valueFus);
217     void UpdateWindows(int slicer, int view, int slice);
218     void UpdateSlice(int slicer, int slice);
219     void UpdateTSlice(int slicer, int slice);
220     void UpdateSliceRange(int slice, int min, int max, int tmin, int tmax);
221     void WindowLevelChanged(double window, double level, int preset, int colormap);
222     void UpdateLinkManager(std::string, int slicer, double x, double y, double z, int temps);
223     void LandmarkAdded();
224
225 protected:
226     std::vector<vvSlicer*> mSlicers;
227     vvImageReader* mReader;
228     vvImageReader* mOverlayReader;
229     vvImageReader* mFusionReader;
230     vvImage::Pointer mImage;
231     vvImage::Pointer mVF;
232     vvImageReader* mVectorReader;
233     int mColorMap;
234     int mOverlayColor;
235
236     int mFusionOpacity;
237     int mFusionColorMap;
238     double mFusionWindow;
239     double mFusionLevel;
240
241     int mPreset;
242     LoadedImageType mType;
243     std::string mVFComponent;
244     std::string mOverlayComponent;
245     std::string mFusionComponent;
246     std::string mFileName;
247     std::string mId;
248     std::string mVFName;
249     std::string mOverlayName;
250     std::string mFusionName;
251     std::string mVFId;
252     std::string mLastError;
253     std::list<std::string> mLinkedId;
254
255     vvLandmarks* mLandmarks;
256 };
257
258 #endif