00001 #include "interfSegmentationPanels.h"
00002 #include "interfMainPanel.h"
00003
00004 interfSegmentationPanelVTK::interfSegmentationPanelVTK(wxWindow * parent)
00005 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
00006 {
00007 int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ();
00008
00009 double range[2];
00010 interfMainPanel::getInstance()->getImageRange(range);
00011
00012 int min = (int)floor (range[0]);
00013 int max = (int)ceil (range[1]);
00014
00015 wxButton *segmentationOneSliceBtn = new wxButton(this,-1,_T("Current slice"), wxDefaultPosition, wxSize(200,35) );
00016 wxButton *segmentationAllSliceBtn = new wxButton(this,-1,_T("All slices") ,wxDefaultPosition, wxSize(200,35) );
00017 _isovalue = new wxSlider(this, -1, 40 , min, max, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
00018 _sampling = new wxSlider(this, -1, 20 , 4, 50, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
00019 wxString lstOptions[3];
00020 lstOptions[0]=_T("A");
00021 lstOptions[1]=_T("B");
00022 lstOptions[2]=_T("C");
00023 methodRadiobox = new wxRadioBox(this, -1, _T("Method (find ctrl. Points)"), wxDefaultPosition, wxSize(200,45), 3 , lstOptions, 3, wxRA_SPECIFY_COLS);
00024 methodRadiobox->SetSelection(2);
00025 _staticTextSegmentation = new wxStaticText(this,-1,_T(" "));
00026
00027 _mbarrange = new mBarRange(this,70, 65);
00028 _mbarrange->SetMin(0);
00029 _mbarrange->SetStart(0);
00030
00031 _mbarrange->SetOrientation( true );
00032 _mbarrange->setActiveStateTo(true);
00033 _mbarrange->setVisibleLabels( true );
00034 _mbarrange->setDeviceEndMargin(10);
00035 _mbarrange->setRepresentedValues( 0 , sizeZ );
00036 _mbarrange->setDeviceBlitStart(10,10);
00037 _mbarrange->setIfWithActualDrawed( false );
00038 _mbarrange->SetStart( 0 );
00039 _mbarrange->SetEnd( sizeZ );
00040
00041 wxFlexGridSizer * sizer = new wxFlexGridSizer(1);
00042 sizer->Add( new wxStaticText(this, -1, _T("Isovalue (Gray level)")), 1, wxGROW );
00043 sizer->Add( _isovalue, 1, wxGROW );
00044 sizer->Add( methodRadiobox , 1, wxGROW );
00045 sizer->Add( new wxStaticText(this, -1 ,_T("Sampling (%)")), 1, wxGROW );
00046 sizer->Add( _sampling, 1, wxGROW );
00047 sizer->Add( segmentationOneSliceBtn, 1, wxGROW );
00048 sizer->Add( new wxStaticText(this, -1, _T(" ")), 1, wxGROW );
00049 sizer->Add( _staticTextSegmentation, 1, wxGROW );
00050 sizer->Add( segmentationAllSliceBtn, 1, wxGROW );
00051 sizer->Add( _mbarrange, 1, wxGROW );
00052
00053 this->SetSizer( sizer );
00054
00055 this->SetSize( wxDefaultSize );
00056 this->SetAutoLayout( true );
00057 this->Layout();
00058
00059
00060
00061
00062
00063 Connect( segmentationOneSliceBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationOneSlice);
00064 Connect( segmentationAllSliceBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationAllSlice);
00065 }
00066
00067
00068 interfSegmentationPanelVTK::~interfSegmentationPanelVTK()
00069 {
00070 }
00071
00079 void interfSegmentationPanelVTK::onSegmentationPressedITK(wxCommandEvent& event){
00080 if(segmentPanelITK == NULL) {
00081 segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00082
00083 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00084 segmentPanelITK->SetSizer(flexsizer, true);
00085 segmentPanelITK->SetAutoLayout( true );
00086
00087 wxPanel* panel = new wxPanel(this, -1);
00088
00089 wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T(" Automatic ITK Segmentation ")), wxDefaultPosition,
00090 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00091
00092 flexsizer->Add(stattext, wxALIGN_CENTER | wxALIGN_CENTRE);
00093 flexsizer->Add(panel, wxEXPAND);
00094 segmentPanelITK->Layout();
00095 }
00096 interfMainPanel::getInstance()->showPanel(segmentPanelITK);
00097
00098
00099 }
00100
00101 void interfSegmentationPanelVTK::onSegmentationOneSlice( wxCommandEvent& event )
00102 {
00103 int isovalue = _isovalue->GetValue();
00104 int sampling = _sampling->GetValue();
00105 int method = methodRadiobox->GetSelection();
00106 interfMainPanel::getInstance()->onSegmentationOneSlice(isovalue, sampling, method);
00107
00108 }
00109 void interfSegmentationPanelVTK::onSegmentationAllSlice( wxCommandEvent& event )
00110 {
00111 int minZ=_mbarrange->GetStart();
00112 int maxZ=_mbarrange->GetEnd();
00113
00114 int isovalue = _isovalue->GetValue();
00115 int sampling = _sampling->GetValue();
00116 int method = methodRadiobox->GetSelection();
00117
00118 interfMainPanel::getInstance()->onSegmentationAllSlice(minZ, maxZ, isovalue, sampling, method);
00119 }
00120
00121 void interfSegmentationPanelVTK::setLabel(wxString tmpString){
00122 _staticTextSegmentation->SetLabel(tmpString);
00123 }
00128 interfSegmentationPanelITK::interfSegmentationPanelITK(wxWindow * parent)
00129 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
00130 {
00131 double range[2];
00132 interfMainPanel::getInstance()->getImageRange(range);
00133
00134
00135
00136
00137
00138
00139 new wxStaticText(this, wxID_ANY, wxT("Initial Distance"), wxPoint(5, 5));
00140
00141 new wxStaticText(this, wxID_ANY, wxT("Sigma"), wxPoint(5, 30));
00142
00143 new wxStaticText(this, wxID_ANY, wxT("Sigmoid Alfa"), wxPoint(5, 55));
00144
00145 new wxStaticText(this, wxID_ANY, wxT("Sigmoid Beta"), wxPoint(5, 80));
00146
00147 new wxStaticText(this, wxID_ANY, wxT("Propagation Scaling"),wxPoint(5, 105));
00148
00149 new wxStaticText(this, wxID_ANY, wxT("Iterations"), wxPoint(5, 130));
00150
00151 new wxStaticText(this, wxID_ANY, wxT("Inflation Strength"), wxPoint(5, 155));
00152
00153
00154
00155 _distance = new wxTextCtrl(this, wxID_ANY, wxT("5.0"), wxPoint(98,5), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00156 _sigma = new wxTextCtrl(this, wxID_ANY, wxT("1.2"), wxPoint(98,30), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00157 _alfa = new wxTextCtrl(this, wxID_ANY, wxT("-1.0"), wxPoint(98,55), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00158 _beta = new wxTextCtrl(this, wxID_ANY, wxT("5.0"), wxPoint(98,80), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00159 _propagation = new wxTextCtrl(this, wxID_ANY, wxT("6.0"), wxPoint(98,105), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00160 _iterations = new wxTextCtrl(this, wxID_ANY, wxT("800"), wxPoint(98,130), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00161 _infStrength = new wxTextCtrl(this, wxID_ANY, wxT("3.0"), wxPoint(98,155), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr);
00162
00163
00164
00165 new wxButton(this, 6, wxT("One Slice"), wxPoint(98, 180), wxSize(70, 25), 0, wxDefaultValidator, wxT("button"));
00166
00167
00168 Connect(6, wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction) &interfSegmentationPanelITK::onSegmentationOneSlice);
00169
00170
00171 }
00172 interfSegmentationPanelITK::~interfSegmentationPanelITK(){
00173
00174 }
00175
00176 void interfSegmentationPanelITK::onSegmentationOneSlice( wxCommandEvent& event )
00177 {
00178 wxString distanc=_distance->GetValue();
00179 wxString sigm=_sigma->GetValue();
00180 wxString alf=_alfa->GetValue();
00181 wxString bet=_beta->GetValue();
00182 wxString prop=_propagation->GetValue();
00183 wxString iter=_iterations->GetValue();
00184 wxString infS=_infStrength->GetValue();
00185
00186 interfMainPanel::getInstance()->onSegmentationOneSliceITK(distanc, sigm, alf, bet, prop, iter, infS);
00187
00188 }
00189 void interfSegmentationPanelITK::onSegmentationAllSlice( wxCommandEvent& event )
00190 {
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202 }
00203
00204
00205
00206
00211 interfMirrorPanel::interfMirrorPanel(wxWindow* parent)
00212 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
00213 {
00214 _axisStatus = true;
00215
00216 wxButton *axisShowBtn = new wxButton(this,wxID_ANY,_T("Show/Hide Axis"), wxDefaultPosition, wxSize(200,35) );
00217 wxButton *mirrorGoBtn = new wxButton(this,wxID_ANY,_T("Mirror Contour"), wxDefaultPosition, wxSize(200,35) );
00218 _thickness = new wxSlider(this, -1, 4, 1, 10, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
00219
00220 Connect( axisShowBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onAxisShow );
00221 Connect( mirrorGoBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onMirrorGo );
00222
00223 wxFlexGridSizer * sizer = new wxFlexGridSizer(1);
00224 sizer -> Add( axisShowBtn, 1, wxGROW );
00225 sizer -> Add( new wxStaticText(this,-1,_T(" ")) , 1, wxGROW );
00226 sizer -> Add( new wxStaticText(this,-1,_T("Thickness")) , 1, wxGROW );
00227 sizer -> Add( _thickness, 1, wxGROW );
00228 sizer -> Add( mirrorGoBtn, 1, wxGROW );
00229
00230 this->SetSizer( sizer );
00231 this->SetAutoLayout( true );
00232 this->Layout();
00233 }
00234
00235 interfMirrorPanel::~interfMirrorPanel(){
00236 }
00237
00238 void interfMirrorPanel::onAxisShow(wxCommandEvent& event)
00239 {
00240
00241 if (!_axisStatus)
00242 {
00243 interfMainPanel::getInstance()->onMirrorAxisShow();
00244 _axisStatus=true;
00245 }
00246 else
00247 {
00248 interfMainPanel::getInstance()->onMirrorAxisHide();
00249 _axisStatus=false;
00250 }
00251 }
00252
00253 void interfMirrorPanel::onMirrorGo(wxCommandEvent& event)
00254 {
00255 if (_axisStatus)
00256 {
00257 interfMainPanel::getInstance()->onMirror();
00258 }
00259 }
00260
00261 void interfMirrorPanel::onChangeWidth(wxScrollEvent& event)
00262 {
00263 int width = _thickness->GetValue();
00264 interfMainPanel::getInstance()->onMirrorChangeWidth(width);
00265 }
00266
00267
00268
00269
00270
00271
00272
00273 BEGIN_EVENT_TABLE(interfMirrorPanel, wxPanel)
00274 EVT_SCROLL(interfMirrorPanel :: onChangeWidth)
00275 END_EVENT_TABLE()
00276
00278
00279 interfTestPanel::interfTestPanel(wxWindow* parent)
00280 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
00281 {
00282 wxButton *button1 = new wxButton(this,wxID_ANY,_T("Button 1"), wxDefaultPosition, wxSize(200,35) );
00283 wxButton *button2 = new wxButton(this,wxID_ANY,_T("Button 2"), wxDefaultPosition, wxSize(200,35) );
00284
00285 Connect( button1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfTestPanel::onButton1Pressed );
00286 Connect( button2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfTestPanel::onButton2Pressed );
00287
00288 wxFlexGridSizer * sizer = new wxFlexGridSizer(1);
00289 sizer -> Add( button1, 1, wxGROW );
00290 sizer -> Add( button2, 1, wxGROW );
00291
00292 this->SetSizer( sizer );
00293 this->SetAutoLayout( true );
00294 this->Layout();
00295 }
00296
00297 interfTestPanel::~interfTestPanel(){
00298 }
00299
00300 void interfTestPanel::onButton1Pressed(wxCommandEvent& event)
00301 {
00302 std::cout << "Button 1 has been pressed" << std::endl;
00303 }
00304
00305 void interfTestPanel::onButton2Pressed(wxCommandEvent& event)
00306 {
00307 std::cout << "Button 2 has been pressed" << std::endl;
00308 }