]> Creatis software - clitk.git/blob - vv/vvSlicerManager.h
remove antique RCS headers
[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(int colormap);
138     void SetPreset(int preset);
139     void SetOverlayColor(int color) {
140         mOverlayColor = color;
141     }
142     void SetFusionOpacity(int opacity) {
143         mFusionOpacity = opacity;
144     }
145     void SetFusionColorMap(int colorMap) {
146         mFusionColorMap = colorMap;
147     }
148     void SetFusionWindow(int window) {
149         mFusionWindow = window;
150     }
151     void SetFusionLevel(int level) {
152         mFusionLevel = level;
153     }
154
155     double GetColorWindow();
156     double GetColorLevel();
157     int GetColorMap() {
158         return mColorMap;
159     }
160     int GetPreset() {
161         return mPreset;
162     }
163     int GetOverlayColor() {
164         return mOverlayColor;
165     }
166
167     int GetFusionOpacity() {
168         return mFusionOpacity;
169     }
170     int GetFusionColorMap() {
171         return mFusionColorMap;
172     }
173     double GetFusionWindow() {
174         return mFusionWindow;
175     }
176     double GetFusionLevel() {
177         return mFusionLevel;
178     }
179
180     void SetCursorVisibility(int s);
181     void UpdateViews(int current, int slicer);
182     void UpdateLinked(int slicer);
183     void Render();
184
185     void AddLink(std::string newId) {
186         mLinkedId.push_back(newId);
187     }
188     void RemoveLink(std::string oldId) {
189         mLinkedId.remove(oldId);
190     }
191
192     ///Remove the actor defined by its type and index (example: 3rd contour)
193     void RemoveActor(const std::string& actor_type, int overlay_index);
194     void RemoveActors();
195     void Reload();
196     void ReloadOverlay();
197     void ReloadFusion();
198     void ReloadVF();
199
200     void Activated();
201     void UpdateInfoOnCursorPosition(int slicer);
202     void UpdateWindowLevel();
203     void UpdateSlice(int slicer);
204     void UpdateTSlice(int slicer);
205     void UpdateSliceRange(int slicer);
206
207     vvLandmarks *GetLandmarks();
208     void AddLandmark(float x,float y,float z,float t);
209
210 signals :
211     void currentImageChanged(std::string id);
212     void UpdatePosition(int visibility,double x, double y, double z, double X, double Y, double Z, double value);
213     void UpdateVector(int display, double x, double y, double z, double value);
214     void UpdateOverlay(int display, double valueOver, double valueRef);
215     void UpdateFusion(int display, double valueFus);
216     void UpdateWindows(int slicer, int view, int slice);
217     void UpdateSlice(int slicer, int slice);
218     void UpdateTSlice(int slicer, int slice);
219     void UpdateSliceRange(int slice, int min, int max, int tmin, int tmax);
220     void WindowLevelChanged(double window, double level, int preset, int colormap);
221     void UpdateLinkManager(std::string, int slicer, double x, double y, double z, int temps);
222     void LandmarkAdded();
223
224 protected:
225     std::vector<vvSlicer*> mSlicers;
226     vvImageReader* mReader;
227     vvImageReader* mOverlayReader;
228     vvImageReader* mFusionReader;
229     vvImage::Pointer mImage;
230     vvImage::Pointer mVF;
231     vvImageReader* mVectorReader;
232     int mColorMap;
233     int mOverlayColor;
234
235     int mFusionOpacity;
236     int mFusionColorMap;
237     double mFusionWindow;
238     double mFusionLevel;
239
240     int mPreset;
241     LoadedImageType mType;
242     std::string mVFComponent;
243     std::string mOverlayComponent;
244     std::string mFusionComponent;
245     std::string mFileName;
246     std::string mId;
247     std::string mVFName;
248     std::string mOverlayName;
249     std::string mFusionName;
250     std::string mVFId;
251     std::string mLastError;
252     std::list<std::string> mLinkedId;
253
254     vvLandmarks* mLandmarks;
255 };
256
257 #endif