]> Creatis software - creaContours.git/blob - lib/Interface_Icons_NDimensions/interfSegmentationPanels.cxx
306370d4af8a886afb2a5c9b38ca86135413d645
[creaContours.git] / lib / Interface_Icons_NDimensions / interfSegmentationPanels.cxx
1 #include "interfSegmentationPanels.h"
2 #include "interfMainPanel.h"
3
4 interfSegmentationPanelVTK::interfSegmentationPanelVTK(wxWindow * parent)
5 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
6 {
7         int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ();
8         //int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ();
9         double range[2];
10         //_theViewPanel->getSceneManager()->GetImageDataRange(range);
11         interfMainPanel::getInstance()->GetImageDataRange(range);
12
13         wxButton *segmentationOneSliceBtn       = new wxButton(this,-1,_T("Current slice"), wxDefaultPosition, wxSize(200,35) );
14         wxButton *segmentationAllSliceBtn       = new wxButton(this,-1,_T("All slices") ,wxDefaultPosition, wxSize(200,35) );
15         _isovalue                                                       = new wxSlider(this, -1, 40 , (int)(range[0]), (int)(range[1]), wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
16         _sampling                                                       = new wxSlider(this, -1, 20 , 4, 50, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
17         wxString lstOptions[3];
18         lstOptions[0]=_T("A");
19         lstOptions[1]=_T("B");
20         lstOptions[2]=_T("C");
21         methodRadiobox                                          = new wxRadioBox(this, -1, _T("Method (find ctrl. Points)"), wxDefaultPosition, wxSize(200,45), 3 , lstOptions,  3, wxRA_SPECIFY_COLS);
22         methodRadiobox->SetSelection(2);
23         _staticTextSegmentation                         = new wxStaticText(this,-1,_T("    "));
24
25         _mbarrange                                      =  new mBarRange(this,70, 65);
26         _mbarrange->SetMin(0);
27         _mbarrange->SetStart(0);
28
29         _mbarrange-> SetOrientation( true );
30         _mbarrange-> setActiveStateTo(true);
31         _mbarrange-> setVisibleLabels( true );
32         _mbarrange-> setDeviceEndMargin(10);
33         _mbarrange-> setRepresentedValues( 0 , sizeZ );
34         _mbarrange-> setDeviceBlitStart(10,10); 
35         _mbarrange-> setIfWithActualDrawed( false );
36         _mbarrange-> SetStart( 0 );
37         _mbarrange-> SetEnd( sizeZ );  
38
39
40         wxFlexGridSizer * sizer                         = new wxFlexGridSizer(1);
41         sizer -> Add( new wxStaticText(this,-1,_T("Isovalue (Gray level)"))  , 1, wxGROW );
42         sizer -> Add( _isovalue , 1, wxGROW );
43         sizer -> Add( methodRadiobox , 1, wxGROW );
44         sizer -> Add( new wxStaticText(this,-1,_T("Sampling (%)"))  , 1, wxGROW );
45         sizer -> Add( _sampling , 1, wxGROW );
46         sizer -> Add( segmentationOneSliceBtn , 1, wxGROW );
47         sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
48         sizer -> Add( _staticTextSegmentation  , 1, wxGROW );
49         sizer -> Add( segmentationAllSliceBtn , 1, wxGROW );
50         sizer -> Add( _mbarrange  , 1, wxGROW );
51
52         this->SetSizer( sizer );
53 //              panel->SetSize( sizePanel );
54         this->SetSize( wxDefaultSize );
55         this->SetAutoLayout( true );
56         this->Layout();
57         
58 //_segmentationFrame->SetEventHandler( this );
59         //segmentationOneSliceBtn->SetEventHandler( this );
60         //segmentationAllSliceBtn->SetEventHandler( this );
61         //panel->SetEventHandler(this);
62         Connect( segmentationOneSliceBtn->GetId(),   wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationOneSlice); 
63         Connect( segmentationAllSliceBtn->GetId(),   wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationAllSlice); 
64 }
65
66
67 interfSegmentationPanelVTK::~interfSegmentationPanelVTK()
68 {
69 }
70
71 /**
72         **      Responds to the events of the buttons, when the same panel is responsible for it. It gets the name
73         **      of the button corresponding to the method that has to be executed,
74         **      it uses attribute eventHandler to call the methods define by the application.
75         **      see setEventHandler(wxEventHandler*)
76         **/
77
78 void  interfSegmentationPanelVTK::onSegmentationPressedITK(wxCommandEvent& event){
79     if(segmentPanelITK == NULL){
80                 segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
81                         
82
83                 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);    
84                 segmentPanelITK->SetSizer(flexsizer, true);
85                 segmentPanelITK->SetAutoLayout( true ); 
86                                 
87                 wxPanel* panel = new wxPanel(this, -1);//contourevent->getSegmentationPanelITK(segmentPanelITK);
88         
89
90                 wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T("   Automatic ITK Segmentation   ")), wxDefaultPosition,
91                         wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
92
93                 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
94                 flexsizer->Add(panel, wxEXPAND);
95                 segmentPanelITK->Layout();
96         }
97         interfMainPanel::getInstance()->showPanel(segmentPanelITK);
98         //contourevent->showAxis(true);
99         //axisshown = true;
100 }
101
102 void interfSegmentationPanelVTK::onSegmentationOneSlice( wxCommandEvent& event )
103 {
104
105
106         int     isovalue = _isovalue->GetValue();
107         int     sampling = _sampling->GetValue();
108         int method = methodRadiobox->GetSelection();
109         interfMainPanel::getInstance()->onSegmentationOneSlice(isovalue, sampling, method);
110         
111 }
112 void interfSegmentationPanelVTK::onSegmentationAllSlice( wxCommandEvent& event )
113 {
114
115         int minZ=_mbarrange->GetStart();
116         int maxZ=_mbarrange->GetEnd();
117
118         int                             isovalue        = _isovalue->GetValue();
119         int                             sampling        = _sampling->GetValue();
120         int method = methodRadiobox->GetSelection();
121
122
123         interfMainPanel::getInstance()->onSegmentationAllSlice(minZ, maxZ, isovalue, sampling, method);
124         
125 }
126
127 void interfSegmentationPanelVTK::setLabel(wxString tmpString){
128         _staticTextSegmentation->SetLabel(tmpString);
129 }
130 /**
131 ** start of new implementation
132 **      interfSegmentationPanelITK
133 **/
134 interfSegmentationPanelITK::interfSegmentationPanelITK(wxWindow * parent)
135 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
136 {
137         int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ();
138         //int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ();
139         double range[2];
140         //_theViewPanel->getSceneManager()->GetImageDataRange(range);
141         interfMainPanel::getInstance()->GetImageDataRange(range);
142         
143         //The labels
144         wxStaticText * distance = new wxStaticText(this, wxID_ANY, wxT("Initial Distance"), wxPoint(5, 5));
145         wxStaticText * sigma = new wxStaticText(this, wxID_ANY, wxT("Sigma"),wxPoint(5, 30));
146         wxStaticText * alfa = new wxStaticText(this, wxID_ANY, wxT("Sigmoid Alfa"), wxPoint(5, 55));
147         wxStaticText * beta = new wxStaticText(this, wxID_ANY, wxT("Sigmoid Beta"), wxPoint(5, 80));
148         wxStaticText * propagation = new wxStaticText(this, wxID_ANY, wxT("Propagation Scaling"),wxPoint(5, 105));
149         wxStaticText * iterations = new wxStaticText(this, wxID_ANY, wxT("Iterations"), wxPoint(5, 130));
150         wxStaticText * infStrength = new wxStaticText(this, wxID_ANY, wxT("Inflation Strength"), wxPoint(5, 155));
151
152         //Text Controls
153
154         _distance= new wxTextCtrl(this, wxID_ANY, "5.0", wxPoint(98,5), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
155
156         _sigma= new wxTextCtrl(this, wxID_ANY, "1.2", wxPoint(98,30), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
157
158         _alfa= new wxTextCtrl(this, wxID_ANY, "-1.0", wxPoint(98,55), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
159         
160         _beta= new wxTextCtrl(this, wxID_ANY, "5.0", wxPoint(98,80), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
161         
162         _propagation= new wxTextCtrl(this, wxID_ANY, "6.0", wxPoint(98,105), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
163         
164         _iterations= new wxTextCtrl(this, wxID_ANY, "800", wxPoint(98,130), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
165         
166         _infStrength= new wxTextCtrl(this, wxID_ANY, "3.0", wxPoint(98,155), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
167         
168         //El boton
169         wxButton * bot= new wxButton(this, 6, wxT("One Slice"), wxPoint(98, 180), wxSize(70, 25), 0, wxDefaultValidator, "button");
170
171         //Conexion del boton con su respectivo manejador
172         Connect(6, wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction) &interfSegmentationPanelITK::onSegmentationOneSlice);
173         
174         
175 }
176 interfSegmentationPanelITK::~interfSegmentationPanelITK(){
177
178 }
179
180 void interfSegmentationPanelITK::onSegmentationOneSlice( wxCommandEvent& event )
181 {
182         wxString distanc=_distance->GetValue();
183         wxString sigm=_sigma->GetValue();
184         wxString alf=_alfa->GetValue();
185         wxString bet=_beta->GetValue();
186         wxString prop=_propagation->GetValue();
187         wxString iter=_iterations->GetValue();
188         wxString infS=_infStrength->GetValue();
189         
190         interfMainPanel::getInstance()->onSegmentationOneSliceITK(distanc, sigm, alf, bet, prop, iter, infS);
191         
192 }
193 void interfSegmentationPanelITK::onSegmentationAllSlice( wxCommandEvent& event )
194 {
195
196         /*int minZ=_mbarrange->GetStart();
197         int maxZ=_mbarrange->GetEnd();
198
199         int                             isovalue        = _isovalue->GetValue();
200         int                             sampling        = _sampling->GetValue();
201         int method = methodRadiobox->GetSelection();
202
203
204         interfMainPanel::getInstance()->onSegmentationAllSlice(minZ, maxZ, isovalue, sampling, method);*/
205         
206 }
207 //------------------------------------------------------------------------------------------------------------
208