]> Creatis software - clitk.git/blob - vv/vvToolTest.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvToolTest.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17   ===========================================================================**/
18
19 // vv
20 #include "vvToolTest.h"
21 #include "vvSlicerManager.h"
22 #include "vvSlicer.h"
23 #include "vvToolInputSelectorWidget.h"
24
25 // clitk
26 #include "clitkBinarizeImageGenericFilter.h"
27
28 // vtk
29 #include <vtkImageActor.h>
30 #include <vtkCamera.h>
31 #include <vtkImageClip.h>
32 #include <vtkRenderWindow.h>
33 #include <vtkPolyDataMapper.h>
34 #include <vtkRenderer.h>
35 #include <vtkSphereSource.h>
36 #include <vtkProperty.h>
37
38 #include <itkGDCMImageIO.h>
39
40 //------------------------------------------------------------------------------
41 // Create the tool and automagically (I like this word) insert it in
42 // the main window menu.
43 ADD_TOOL(vvToolTest);
44 //------------------------------------------------------------------------------
45
46
47 //------------------------------------------------------------------------------
48 void vvToolTest::Initialize()
49 { cout << __func__ << endl;
50   SetToolName("Test");
51   SetToolMenuName("Test");
52   SetToolIconFilename(":/common/icons/binarize.png");
53   SetToolTip("try to display a sphere.");
54 }
55 //------------------------------------------------------------------------------
56
57
58 //------------------------------------------------------------------------------
59 vvToolTest::vvToolTest(vvMainWindowBase * parent, Qt::WindowFlags f)
60   :vvToolWidgetBase(parent,f),
61    vvToolBase<vvToolTest>(parent),
62    Ui::vvToolTest()
63 { cout << __func__ << endl;
64   // GUI Initialization
65
66   // Connect signals & slots
67   
68   // Main filter
69   mFilter = clitk::BinarizeImageGenericFilter::New();
70
71   // Set how many inputs are needed for this tool
72   AddInputSelector("Select one image", mFilter);
73 }
74 //------------------------------------------------------------------------------
75
76
77 //------------------------------------------------------------------------------
78 vvToolTest::~vvToolTest()
79 { cout << __func__ << endl;
80 }
81 //------------------------------------------------------------------------------
82
83
84 //------------------------------------------------------------------------------
85 /*
86 void vvToolTest::InteractiveDisplayToggled(bool b)
87 { cout << __func__ << endl;
88   mInteractiveDisplayIsEnabled = b;
89   if (!mInteractiveDisplayIsEnabled) {
90     RemoveVTKObjects();
91   } else {
92     for(unsigned int i=0; i<mImageContour.size(); i++) {
93       mImageContour[i]->ShowActors();
94       if (mRadioButtonLowerThan->isChecked())
95         mImageContourLower[i]->ShowActors();
96     }
97     if (mCurrentSlicerManager)
98       mCurrentSlicerManager->Render();
99   }
100 }
101 */
102 //------------------------------------------------------------------------------
103
104
105 //------------------------------------------------------------------------------
106
107 //------------------------------------------------------------------------------
108
109
110 //------------------------------------------------------------------------------
111 bool vvToolTest::close()
112 { cout << __func__ << endl;
113   return vvToolWidgetBase::close();
114 }
115 //------------------------------------------------------------------------------
116
117
118 //------------------------------------------------------------------------------
119
120 //------------------------------------------------------------------------------
121
122
123 //------------------------------------------------------------------------------
124 void vvToolTest::reject()
125 { cout << __func__ << endl;
126   // DD("vvToolBinarize::reject");
127   return vvToolWidgetBase::reject();
128 }
129 //------------------------------------------------------------------------------
130
131
132 //------------------------------------------------------------------------------
133
134 //------------------------------------------------------------------------------
135
136
137 //------------------------------------------------------------------------------
138
139 //------------------------------------------------------------------------------
140
141
142 //------------------------------------------------------------------------------
143
144 void vvToolTest::InputIsSelected(vvSlicerManager * m)
145 { cout << __func__ << endl;
146   mCurrentSlicerManager = m;
147
148
149   vtkSmartPointer<vtkSphereSource> sphereSource = 
150       vtkSmartPointer<vtkSphereSource>::New();
151   sphereSource->SetCenter(0, 0, 0);
152   //sphereSource->SetCenter(235.351, 175.781, 141.0);
153   sphereSource->SetRadius(10.0);
154   sphereSource->Update();
155   vtkSmartPointer<vtkPolyDataMapper> sphereMapper =
156       vtkSmartPointer<vtkPolyDataMapper>::New();
157   sphereMapper->SetInputConnection(sphereSource->GetOutputPort());
158   vtkSmartPointer<vtkActor> sphereActor = 
159       vtkSmartPointer<vtkActor>::New();
160   sphereActor->SetMapper(sphereMapper);
161   sphereActor->GetProperty()->SetColor(1.0, 0.0, 0.0);
162   sphereActor->GetProperty()->SetOpacity(0.995);
163   sphereActor->SetPosition(235.351, 175.781, -10);
164   
165   
166   // VTK Renderer
167   vtkSmartPointer<vtkRenderer> sphereRenderer = 
168       vtkSmartPointer<vtkRenderer>::New();
169   // Add Actor to renderer
170   for(int i=0;i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
171     mCurrentSlicerManager->GetSlicer(i)->GetRenderer()->AddActor(sphereActor);
172   }
173   //sphereRenderer->AddActor(sphereActor); //mettre le vvSlicer
174    
175   // VTK/Qt wedded
176   //this->qvtkWidgetLeft->GetRenderWindow()->AddRenderer(leftRenderer);
177  
178  
179  
180  
181
182   // VTK objects for interactive display
183   valueChangedT1();
184
185   //connect(mThresholdSlider1, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT1()));
186
187   connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
188   connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
189   
190   connect(mCurrentSlicerManager,SIGNAL(UpdateOrientation(int,int)),this,SLOT(UpdateSlice(int, int)));
191
192   //  connect(mCurrentSlicerManager, SIGNAL(LeftButtonReleaseSignal(int)), SLOT(LeftButtonReleaseEvent(int)));
193   //InteractiveDisplayToggled(mInteractiveDisplayIsEnabled);
194   
195   
196   
197 typedef signed short InputPixelType;
198 const unsigned int Dimension = 3;
199 typedef itk::Image< InputPixelType, Dimension > InputImageType;
200 typedef itk::ImageFileReader< InputImageType > ReaderType;
201 ReaderType::Pointer reader = ReaderType::New();
202 reader->SetFileName( "/home/tbaudier/BJ13/RTSTRUCT/1.2.840.113704.1.111.4140.1439902720.30/20160201/160325.000000_/2.16.840.1.113669.1919.1454339005/2.16.840.1.113669.1919.1454339005/1.2.840.10008.5.1.4.1.1.481.3.1454339000.dcm" );
203 typedef itk::GDCMImageIO ImageIOType;
204 ImageIOType::Pointer gdcmImageIO = ImageIOType::New();
205 reader->SetImageIO( gdcmImageIO ); 
206 try
207 {
208 reader->Update();
209 }
210 catch (itk::ExceptionObject & e)
211 {
212 std::cerr << "exception in file reader " << std::endl;
213 std::cerr << e.GetDescription() << std::endl;
214 std::cerr << e.GetLocation() << std::endl;
215 return;
216 }
217   
218 }
219 //------------------------------------------------------------------------------
220
221
222 //------------------------------------------------------------------------------
223 // void vvToolBinarize::LeftButtonReleaseEvent(int slicer) {
224 //   DD("LeftButtonReleaseEvent");
225 //   for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
226 //     if (i == slicer);
227 //     mCurrentSlicerManager->GetSlicer(i)->GetRenderWindow()->Render();
228 //   }
229 // }
230 //------------------------------------------------------------------------------
231
232
233 //------------------------------------------------------------------------------
234 void vvToolTest::apply()
235 { cout << __func__ << endl;
236   if (!mCurrentSlicerManager) close();
237   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
238   //GetArgsInfoFromGUI();  
239   
240   // Main filter
241
242
243
244   // Output
245   QApplication::restoreOverrideCursor();
246   close();
247 }
248 //------------------------------------------------------------------------------
249
250 //------------------------------------------------------------------------------
251 void vvToolTest::UpdateSlice(int slicer,int slices)
252 { cout << __func__ << endl;
253   Update(slicer);
254 }
255 //------------------------------------------------------------------------------
256
257 //------------------------------------------------------------------------------
258 void vvToolTest::Update(int slicer)
259 { cout << __func__ << endl;
260   if (!mCurrentSlicerManager) close();
261   mCurrentSlicerManager->Render();
262   //mImageContour[slicer]->Update(mThresholdSlider1->GetValue());
263 }
264 //------------------------------------------------------------------------------
265
266 //------------------------------------------------------------------------------
267 /* void vvToolTest::GetArgsInfoFromGUI()
268 { cout << __func__ << endl;
269
270   /* //KEEP THIS FOR READING GGO FROM FILE
271      int argc=1;
272      std::string a = "toto";
273      char * const* argv = new char*;
274      //a.c_str();
275      struct cmdline_parser_params p;
276      p.check_required = 0;
277      int good = cmdline_parser_ext(argc, argv, &args_info, &p);
278      DD(good);
279   */
280 /*  cmdline_parser_clitkBinarizeImage_init(&mArgsInfo); // Initialisation to default
281   bool inverseBGandFG = false;
282
283   mArgsInfo.lower_given = 1;
284   mArgsInfo.lower_arg = mThresholdSlider1->GetValue();
285   if (mRadioButtonLowerThan->isChecked()) {
286     mArgsInfo.upper_given = 1;
287     mArgsInfo.upper_arg = mThresholdSlider2->GetValue();
288     if (mArgsInfo.upper_arg<mArgsInfo.lower_arg) {
289       mArgsInfo.upper_given = 0;
290       DD("TODO : lower thres greater than greater thres ! Ignoring ");
291     }
292   }
293
294   mArgsInfo.fg_arg = mFGSlider->GetValue();
295   mArgsInfo.bg_arg = mBGSlider->GetValue();
296
297   if (inverseBGandFG) {
298     mArgsInfo.fg_arg = mFGSlider->GetValue();
299     mArgsInfo.bg_arg = mBGSlider->GetValue();
300   }
301   mArgsInfo.fg_given = 1;
302   mArgsInfo.bg_given = 1;
303
304   if (mCheckBoxUseBG->isChecked()) {
305     if (mCheckBoxUseFG->isChecked()) mArgsInfo.mode_arg = (char*)"both";
306     else mArgsInfo.mode_arg = (char*)"BG";
307   } else mArgsInfo.mode_arg = (char*)"FG";
308
309   mArgsInfo.verbose_flag = false;
310
311   // // Required (even if not used)
312   // mArgsInfo.input_given = 0;
313   // mArgsInfo.output_given = 0;
314
315   // mArgsInfo.input_arg = new char;
316   // mArgsInfo.output_arg = new char;
317 } */
318 //------------------------------------------------------------------------------
319
320
321 //------------------------------------------------------------------------------
322 void vvToolTest::valueChangedT1()
323 { cout << __func__ << endl;
324   //  DD("valueChangedT1");
325   if (!mCurrentSlicerManager) close();
326   for(int i=0;i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
327     //mImageContour[i]->Update(v);
328   }
329   mCurrentSlicerManager->Render();
330 }
331 //------------------------------------------------------------------------------