]> Creatis software - clitk.git/blob - vv/vvToolMedianFilter.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvToolMedianFilter.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
20   Program:   vv
21   Module:    $RCSfile: vvToolMedianFilter.cxx,v $
22   Language:  C++
23   Date:      $Date: 2010/10/22 07:38:05 $
24   Version:   $Revision: 1.5 $
25   Author :   Bharath Navalpakkam (Bharath.Navalpakkam@creatis.insa-lyon.fr)
26
27   Copyright (C) 2010
28   Léon Bérard cancer center http://www.centreleonberard.fr
29   CREATIS                   http://www.creatis.insa-lyon.fr
30
31   This program is free software: you can redistribute it and/or modify
32   it under the terms of the GNU General Public License as published by
33   the Free Software Foundation, version 3 of the License.
34
35   This program is distributed in the hope that it will be useful,
36   but WITHOUT ANY WARRANTY; without even the implied warranty of
37   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
38   GNU General Public License for more details.
39
40   You should have received a copy of the GNU General Public License
41   along with this program.  If not, see <http://www.gnu.org/licenses/>.
42
43   =========================================================================*/
44
45 #include "vvToolMedianFilter.h"
46 #include "vvSlicerManager.h"
47 #include "vvSlicer.h"
48 #include "vvToolInputSelectorWidget.h"
49 #include "clitkMedianImageGenericFilter.h"
50
51 //------------------------------------------------------------------------------
52 // Create the tool and automagically
53 ADD_TOOL(vvToolMedianFilter);
54 //------------------------------------------------------------------------------
55
56 //------------------------------------------------------------------------------
57 vvToolMedianFilter::vvToolMedianFilter(vvMainWindowBase * parent, Qt::WindowFlags f)
58   :vvToolWidgetBase(parent,f),
59    vvToolBase<vvToolMedianFilter>(parent),
60    Ui::vvToolMedianFilter()
61 {
62   // Setup the UI
63   Ui_vvToolMedianFilter::setupUi(mToolWidget);
64   mFilter = new clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>;
65
66   // Main filter
67   // Set how many inputs are needed for this tool
68   AddInputSelector("Select one image", mFilter);
69 }
70
71 //------------------------------------------------------------------------------
72 vvToolMedianFilter::~vvToolMedianFilter()
73 {
74 }
75 //------------------------------------------------------------------------------
76 void vvToolMedianFilter::Initialize()
77 {
78   SetToolName("MedianFilter");
79   SetToolMenuName("MedianFilter");
80   SetToolIconFilename(":common/icons/ducky.png");
81   SetToolTip("Make 'MedianFilter' on an image.");
82   SetToolExperimental(true);
83 }
84 //------------------------------------------------------------------------------
85
86 void vvToolMedianFilter::apply()
87 {
88
89   GetArgsInfoFromGUI();
90   if (!mCurrentSlicerManager) close();
91   QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
92   // Main filter
93   clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>::Pointer filter =
94     clitk::MedianImageGenericFilter<args_info_clitkMedianImageFilter>::New();
95   filter->SetInputVVImage(mCurrentImage);
96   filter->SetArgsInfo(mArgsInfo);
97   filter->EnableReadOnDisk(false);
98   filter->Update();
99   // Output
100   vvImage::Pointer output = filter->GetOutputVVImage();
101   std::ostringstream osstream;
102   osstream << "MedianFiltered_" << mCurrentSlicerManager->GetSlicer(0)->GetFileName() << ".mhd";
103   AddImage(output,osstream.str());
104   QApplication::restoreOverrideCursor();
105   close();
106 }
107 //------------------------------------------------------------------------------
108 void vvToolMedianFilter::GetArgsInfoFromGUI()
109 {
110   /* //KEEP THIS FOR READING GGO FROM FILE
111     int argc=1;
112     std::string a = "toto";
113     char * const* argv = new char*;
114     //a.c_str();
115     struct cmdline_parser_params p;
116     p.check_required = 0;
117     int good = cmdline_parser_ext(argc, argv, &args_info, &p);
118   DD(good);
119   */
120   mArgsInfo.radius_given=0;
121   mArgsInfo.verbose_flag = false;
122   // mArgsInfo.radius_arg = new int[3];
123   // Required (even if not used)
124   mArgsInfo.input_given = 0;
125   mArgsInfo.output_given = 0;
126   mArgsInfo.input_arg=new char;
127   mArgsInfo.output_arg = new char;
128   mArgsInfo.config_given=0;
129   mArgsInfo.verbose_given=0;
130 }
131 //------------------------------------------------------------------------------
132 void vvToolMedianFilter::InputIsSelected(vvSlicerManager *m)
133 {
134   mCurrentSlicerManager =m;
135   // Specific for this gui
136   mArgsInfo.radius_arg = new int[3];
137   int checkdimensions=mCurrentSlicerManager->GetDimension();
138   if(checkdimensions<3) {
139     horizontalSlider_3->hide();
140     spinBox_3->hide();
141     mArgsInfo.radius_arg[2]=0;
142     connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(UpdateH1slider()));
143     connect(horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(UpdateH2slider()));
144   } else {
145     horizontalSlider->show();
146     horizontalSlider_2->show();
147     horizontalSlider_3->show();
148     connect(horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(UpdateH1slider()));
149     connect(horizontalSlider_2, SIGNAL(valueChanged(int)), this, SLOT(UpdateH2slider()));
150     connect(horizontalSlider_3, SIGNAL(valueChanged(int)), this, SLOT(UpdateH3slider()));
151   }
152 }
153
154 //-----------------------------------------------------------------------------
155
156 void vvToolMedianFilter::UpdateH1slider()
157 {
158
159   mArgsInfo.radius_arg[0]=horizontalSlider->value();
160   spinBox->setValue(mArgsInfo.radius_arg[0]);
161 }
162 void vvToolMedianFilter::UpdateH2slider()
163 {
164   mArgsInfo.radius_arg[1]=horizontalSlider_2->value();
165   spinBox_2->setValue(mArgsInfo.radius_arg[1]);
166 }
167 void vvToolMedianFilter::UpdateH3slider()
168 {
169   mArgsInfo.radius_arg[2]=horizontalSlider_3->value();
170   spinBox_3->setValue(mArgsInfo.radius_arg[2]);
171 }