1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
20 #include "vvToolTest.h"
21 #include "vvSlicerManager.h"
23 #include "vvToolInputSelectorWidget.h"
26 #include "clitkBinarizeImageGenericFilter.h"
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>
38 #include <itkGDCMImageIO.h>
40 //------------------------------------------------------------------------------
41 // Create the tool and automagically (I like this word) insert it in
42 // the main window menu.
44 //------------------------------------------------------------------------------
47 //------------------------------------------------------------------------------
48 void vvToolTest::Initialize()
49 { cout << __func__ << endl;
51 SetToolMenuName("Test");
52 SetToolIconFilename(":/common/icons/binarize.png");
53 SetToolTip("try to display a sphere.");
55 //------------------------------------------------------------------------------
58 //------------------------------------------------------------------------------
59 vvToolTest::vvToolTest(vvMainWindowBase * parent, Qt::WindowFlags f)
60 :vvToolWidgetBase(parent,f),
61 vvToolBase<vvToolTest>(parent),
63 { cout << __func__ << endl;
66 // Connect signals & slots
69 mFilter = clitk::BinarizeImageGenericFilter::New();
71 // Set how many inputs are needed for this tool
72 AddInputSelector("Select one image", mFilter);
74 //------------------------------------------------------------------------------
77 //------------------------------------------------------------------------------
78 vvToolTest::~vvToolTest()
79 { cout << __func__ << endl;
81 //------------------------------------------------------------------------------
84 //------------------------------------------------------------------------------
86 void vvToolTest::InteractiveDisplayToggled(bool b)
87 { cout << __func__ << endl;
88 mInteractiveDisplayIsEnabled = b;
89 if (!mInteractiveDisplayIsEnabled) {
92 for(unsigned int i=0; i<mImageContour.size(); i++) {
93 mImageContour[i]->ShowActors();
94 if (mRadioButtonLowerThan->isChecked())
95 mImageContourLower[i]->ShowActors();
97 if (mCurrentSlicerManager)
98 mCurrentSlicerManager->Render();
102 //------------------------------------------------------------------------------
105 //------------------------------------------------------------------------------
107 //------------------------------------------------------------------------------
110 //------------------------------------------------------------------------------
111 bool vvToolTest::close()
112 { cout << __func__ << endl;
113 return vvToolWidgetBase::close();
115 //------------------------------------------------------------------------------
118 //------------------------------------------------------------------------------
120 //------------------------------------------------------------------------------
123 //------------------------------------------------------------------------------
124 void vvToolTest::reject()
125 { cout << __func__ << endl;
126 // DD("vvToolBinarize::reject");
127 return vvToolWidgetBase::reject();
129 //------------------------------------------------------------------------------
132 //------------------------------------------------------------------------------
134 //------------------------------------------------------------------------------
137 //------------------------------------------------------------------------------
139 //------------------------------------------------------------------------------
142 //------------------------------------------------------------------------------
144 void vvToolTest::InputIsSelected(vvSlicerManager * m)
145 { cout << __func__ << endl;
146 mCurrentSlicerManager = m;
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);
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);
173 //sphereRenderer->AddActor(sphereActor); //mettre le vvSlicer
176 //this->qvtkWidgetLeft->GetRenderWindow()->AddRenderer(leftRenderer);
182 // VTK objects for interactive display
185 //connect(mThresholdSlider1, SIGNAL(valueChanged(double)), this, SLOT(valueChangedT1()));
187 connect(mCurrentSlicerManager,SIGNAL(UpdateSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
188 connect(mCurrentSlicerManager,SIGNAL(UpdateTSlice(int,int)),this,SLOT(UpdateSlice(int, int)));
190 connect(mCurrentSlicerManager,SIGNAL(UpdateOrientation(int,int)),this,SLOT(UpdateSlice(int, int)));
192 // connect(mCurrentSlicerManager, SIGNAL(LeftButtonReleaseSignal(int)), SLOT(LeftButtonReleaseEvent(int)));
193 //InteractiveDisplayToggled(mInteractiveDisplayIsEnabled);
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 );
210 catch (itk::ExceptionObject & e)
212 std::cerr << "exception in file reader " << std::endl;
213 std::cerr << e.GetDescription() << std::endl;
214 std::cerr << e.GetLocation() << std::endl;
219 //------------------------------------------------------------------------------
222 //------------------------------------------------------------------------------
223 // void vvToolBinarize::LeftButtonReleaseEvent(int slicer) {
224 // DD("LeftButtonReleaseEvent");
225 // for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
227 // mCurrentSlicerManager->GetSlicer(i)->GetRenderWindow()->Render();
230 //------------------------------------------------------------------------------
233 //------------------------------------------------------------------------------
234 void vvToolTest::apply()
235 { cout << __func__ << endl;
236 if (!mCurrentSlicerManager) close();
237 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
238 //GetArgsInfoFromGUI();
245 QApplication::restoreOverrideCursor();
248 //------------------------------------------------------------------------------
250 //------------------------------------------------------------------------------
251 void vvToolTest::UpdateSlice(int slicer,int slices)
252 { cout << __func__ << endl;
255 //------------------------------------------------------------------------------
257 //------------------------------------------------------------------------------
258 void vvToolTest::Update(int slicer)
259 { cout << __func__ << endl;
260 if (!mCurrentSlicerManager) close();
261 mCurrentSlicerManager->Render();
262 //mImageContour[slicer]->Update(mThresholdSlider1->GetValue());
264 //------------------------------------------------------------------------------
266 //------------------------------------------------------------------------------
267 /* void vvToolTest::GetArgsInfoFromGUI()
268 { cout << __func__ << endl;
270 /* //KEEP THIS FOR READING GGO FROM FILE
272 std::string a = "toto";
273 char * const* argv = new char*;
275 struct cmdline_parser_params p;
276 p.check_required = 0;
277 int good = cmdline_parser_ext(argc, argv, &args_info, &p);
280 /* cmdline_parser_clitkBinarizeImage_init(&mArgsInfo); // Initialisation to default
281 bool inverseBGandFG = false;
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 ");
294 mArgsInfo.fg_arg = mFGSlider->GetValue();
295 mArgsInfo.bg_arg = mBGSlider->GetValue();
297 if (inverseBGandFG) {
298 mArgsInfo.fg_arg = mFGSlider->GetValue();
299 mArgsInfo.bg_arg = mBGSlider->GetValue();
301 mArgsInfo.fg_given = 1;
302 mArgsInfo.bg_given = 1;
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";
309 mArgsInfo.verbose_flag = false;
311 // // Required (even if not used)
312 // mArgsInfo.input_given = 0;
313 // mArgsInfo.output_given = 0;
315 // mArgsInfo.input_arg = new char;
316 // mArgsInfo.output_arg = new char;
318 //------------------------------------------------------------------------------
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);
329 mCurrentSlicerManager->Render();
331 //------------------------------------------------------------------------------