00001 #include "interfMainPanel.h"
00002
00003
00004 interfMainPanel* interfMainPanel::interfmainpanel=NULL;
00005 wxFrame* interfMainPanel::_newframe=NULL;
00006
00007 interfMainPanel::interfMainPanel(wxWindow * parent, int sizex, int sizey, wxEvtHandler * evtHandler, std::string datadir)
00008 : wxPanel(parent, -1, wxDefaultPosition, wxSize(sizex, sizey), wxBORDER_SUNKEN)
00009 {
00010
00011 PANEL = "New Contour";
00012 PANEL1 = "I/O";
00013 PANEL2 = "Edit";
00014 PANEL3 = "Delete";
00015 PANEL4 = "Contour Tools";
00016 PANEL5 = "Segmentation";
00017
00018 PANEL6 = "Image Tools";
00019
00020 segmentPanel = NULL;
00021 segmentPanelITK = NULL;
00022 configPanel = NULL;
00023 spreadPanel = NULL;
00024 infoWin = NULL;
00025 infoPanel = NULL;
00026 infoPanelMask = NULL;
00027 informationPanel = NULL;
00028 mirrorPanel = NULL;
00029 thresholdPanel = NULL;
00030 colorImageLayerPanel = NULL;
00031 currentWindow = NULL;
00032 testPanel = NULL;
00033
00034
00035 infoPanelCalibration = NULL;
00036 panelAux = NULL;
00037
00038 splitterwindow = new wxSplitterWindow(this,-1, wxDefaultPosition, wxSize(sizex, sizey), wxSP_3DSASH, wxString(_T("")));
00039
00040 splitterwindow->SetMinimumPaneSize( 10 );
00041 sizey = sizey/8;
00042
00043 wxPanel* toolpanel = new wxPanel(splitterwindow, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_DOUBLE, wxString(_T("")));
00044
00045 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(6,2,1,1);
00046 toolpanel->SetSizer(flexsizer, true);
00047 toolpanel->SetAutoLayout( true );
00048
00049 wxButton* b = getButton(toolpanel);
00050 b->SetClientData(&PANEL);
00051 wxButton* b1 = getButton(toolpanel);
00052 b1->SetClientData(&PANEL1);
00053 wxButton* b2 = getButton(toolpanel);
00054 b2->SetClientData(&PANEL2);
00055 wxButton* b3 = getButton(toolpanel);
00056 b3->SetClientData(&PANEL3);
00057 wxButton* b4 = getButton(toolpanel);
00058 b4->SetClientData(&PANEL4);
00059 wxButton* b5 = getButton(toolpanel);
00060 b5->SetClientData(&PANEL5);
00061
00062 wxButton* b6 = getButton(toolpanel);
00063 b6->SetClientData(&PANEL6);
00064
00065
00066 wxPanel* mentex = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00067 wxPanel* mentex1 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00068 wxPanel* mentex2 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00069 wxPanel* mentex3 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00070 wxPanel* mentex4 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00071 wxPanel* mentex5 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00072
00073 wxPanel* mentex6 = new wxPanel(toolpanel, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
00074
00075 menubar = new interfNewContourMenu (mentex, sizex, sizey, evtHandler, datadir);
00076 menubar1 = new interfIOMenu (mentex1, sizex, sizey, evtHandler, datadir);
00077 menubar2 = new interfEditMenu (mentex2, sizex, sizey, evtHandler, datadir);
00078 menubar3 = new interfDeleteMenu (mentex3, sizex, sizey, evtHandler, datadir);
00079 menubar4 = new interfToolsMenu (mentex4, sizex ,sizey, evtHandler, datadir);
00080 menubar5 = new interfSegmentationMenu(mentex5, sizex, sizey, evtHandler, datadir);
00081 menubar6 = new interfImageToolsMenu(mentex6, sizex, sizey, evtHandler, datadir);
00082
00083 statictext = getText(mentex, PANEL);
00084 statictext1 = getText(mentex1, PANEL1);
00085 statictext2 = getText(mentex2, PANEL2);
00086 statictext3 = getText(mentex3, PANEL3);
00087 statictext4 = getText(mentex4, PANEL4);
00088 statictext5 = getText(mentex5, PANEL5);
00089 statictext6 = getText(mentex6, PANEL6);
00090
00091 flexsizer->Add(b, wxFIXED_MINSIZE);
00092 flexsizer->Add(setMenuTextSizer(mentex, menubar,statictext), wxFIXED_MINSIZE);
00093
00094 flexsizer->Add(b1, wxFIXED_MINSIZE);
00095 flexsizer->Add(setMenuTextSizer(mentex1, menubar1,statictext1), wxFIXED_MINSIZE);
00096
00097 flexsizer->Add(b2, wxFIXED_MINSIZE);
00098 flexsizer->Add(setMenuTextSizer(mentex2, menubar2,statictext2), wxFIXED_MINSIZE);
00099
00100 flexsizer->Add(b3, wxFIXED_MINSIZE);
00101 flexsizer->Add(setMenuTextSizer(mentex3, menubar3,statictext3), wxFIXED_MINSIZE);
00102
00103 flexsizer->Add(b4, wxFIXED_MINSIZE);
00104 flexsizer->Add(setMenuTextSizer(mentex4, menubar4,statictext4), wxFIXED_MINSIZE);
00105
00106 flexsizer->Add(b5, wxFIXED_MINSIZE);
00107 flexsizer->Add(setMenuTextSizer(mentex5, menubar5,statictext5), wxFIXED_MINSIZE);
00108 flexsizer->Add(b6, wxFIXED_MINSIZE);
00109 flexsizer->Add(setMenuTextSizer(mentex6, menubar6,statictext6), wxFIXED_MINSIZE);
00110
00111 toolpanel->Update();
00112 toolpanel->Layout();
00113
00114 infoPanel = new wxPanel(splitterwindow, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_DOUBLE, wxString(_T("")));
00115 wxFlexGridSizer* infosizer = new wxFlexGridSizer(1,1,2,2);
00116 infoPanel->SetSizer(infosizer, true);
00117 infoPanel->SetAutoLayout( true );
00118
00119 splitterwindow->Initialize(toolpanel);
00120 splitterwindow->SetSashGravity(1);
00121
00122 splitterwindow->SetSashSize(5);
00123 splitterwindow->SplitHorizontally(toolpanel, infoPanel,8*73);
00124
00125 Connect(b->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00126 Connect(b1->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00127 Connect(b2->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00128 Connect(b3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00129 Connect(b4->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00130 Connect(b5->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00131 Connect(b6->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&interfMainPanel::onActionButtonPressed1);
00132
00133 this->Layout();
00134 }
00135
00136 interfMainPanel::~interfMainPanel(void)
00137 {
00138
00139 }
00140
00141 interfMainPanel* interfMainPanel::getInstance(wxWindow* parent, std::string datadir, wxEvtHandler * evtHandler)
00142 {
00143 _newframe = new wxFrame(parent, -1, wxT(" Contour Tools "), wxPoint(25,50), wxSize(350,900),wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT);
00144
00145 if(interfmainpanel == NULL){
00146 interfmainpanel = new interfMainPanel(_newframe, 350, 900, evtHandler, datadir);
00147 }
00148 _newframe->Show(TRUE);
00149 return interfmainpanel;
00150 }
00151
00152 interfMainPanel* interfMainPanel::getInstance(wxWindow* parent, wxEvtHandler * evtHandler)
00153 {
00154
00155 _newframe = new wxFrame(parent, -1, wxT(" Contour Tools "), wxPoint(25,50), wxSize(350,900),wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT );
00156
00157 if(interfmainpanel == NULL){
00158 interfmainpanel = new interfMainPanel(_newframe, 350, 900, evtHandler);
00159 }
00160 _newframe->Show(TRUE);
00161 return interfmainpanel;
00162 }
00163
00164 bool interfMainPanel::Show(bool show)
00165 {
00166 return _newframe->Show(show);
00167 }
00168
00169 interfMainPanel* interfMainPanel::getInstance()
00170 {
00171 return interfmainpanel;
00172 }
00173
00174 void interfMainPanel :: resetInstance()
00175 {
00176
00177 delete _newframe;
00178 interfmainpanel = NULL;
00179 }
00180
00181 wxPanel* interfMainPanel::initializeToolsPanel(wxWindow* parent, int sizex, int sizey, wxEvtHandler * evtHandler)
00182 {
00183 wxPanel* panel = new wxPanel(parent, -1, wxDefaultPosition, wxSize(sizex, sizey), wxBORDER_SUNKEN, wxString(_T("Spread")));
00184
00185 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2) ;
00186 panel->SetSizer(flexsizer, true);
00187 panel->SetAutoLayout( true );
00188
00189 interfToolsMenu* menu = new interfToolsMenu(panel, sizex, sizey, evtHandler);
00190 toolspread = new interfToolsSpreadPanel(panel, sizex, 300, evtHandler);
00191
00192 flexsizer->Add(menu, wxFIXED_MINSIZE);
00193 flexsizer->Add(toolspread, wxFIXED_MINSIZE);
00194
00195 panel->Layout();
00196
00197 return panel;
00198 }
00199
00205 void interfMainPanel::addContourCheckBox(std::string id)
00206 {
00207 toolspread->addContourCheckBox(id);
00208 }
00209
00215 void interfMainPanel::removeContourCheckBox(std::string id)
00216 {
00217 toolspread->removeContourCheckBox(id);
00218 }
00219
00220 void interfMainPanel::onActionButtonPressed1( wxCommandEvent& event )
00221 {
00222
00223 wxButton* b = (wxButton*)event.GetEventObject();
00224 wxPanel* dmenu;
00225 wxStaticText* text;
00226 std::string dstring = *((std::string*) b->GetClientData());
00227 int sizechange=0;
00228
00229 if(dstring.compare(PANEL)==0){
00230 dmenu = menubar;
00231 text = statictext;
00232 }else if(dstring.compare(PANEL1)==0 ){
00233 dmenu = menubar1;
00234 text = statictext1;
00235 }else if(dstring.compare(PANEL2)==0){
00236 dmenu = menubar2;
00237 text = statictext2;
00238 }else if(dstring.compare(PANEL3)==0){
00239 dmenu = menubar3;
00240 text = statictext3;
00241 }else if(dstring.compare(PANEL4)==0){
00242 dmenu = menubar4;
00243 text = statictext4;
00244 }else if(dstring.compare(PANEL5)==0){
00245 dmenu = menubar5;
00246 text = statictext5;
00247 }else if(dstring.compare(PANEL6)==0){
00248 dmenu = menubar6;
00249 text = statictext6;
00250 }
00251
00252 if(wxStrcmp(b->GetLabel(),_T("+"))==0 ){
00253 dmenu->Show(true);
00254 sizechange = 1;
00255 b->SetLabel(_T("-"));
00256 }else{
00257 dmenu->Show(false);
00258 sizechange = -1;
00259 b->SetLabel(_T("+"));
00260 }
00261
00262 sizechange *= (dmenu->GetSize().GetHeight()-10);
00263 splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+sizechange);
00264
00265 this->Layout();
00266 this->Refresh();
00267 }
00268
00269 wxStaticText* interfMainPanel::getText(wxWindow* parent, std::string nom)
00270 {
00271 return new wxStaticText(parent, -1, wxString(nom.c_str(),wxConvUTF8), wxDefaultPosition,
00272 wxDefaultSize, wxALIGN_CENTRE, wxString(nom.c_str(),wxConvUTF8));
00273 }
00274
00275 wxButton* interfMainPanel::getButton(wxWindow* parent)
00276 {
00277 wxButton* b = new wxButton(parent, -1, wxString(_T("-")), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT,
00278 wxDefaultValidator, wxString(_T("-")));
00279 return b;
00280 }
00281
00282 wxPanel* interfMainPanel::setMenuTextSizer(wxWindow* parent, wxPanel* panel, wxStaticText* text)
00283 {
00284
00285 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(2,1,2,2);
00286 parent->SetSizer(flexsizer, true);
00287 parent->SetAutoLayout( true );
00288
00289 flexsizer->Add(text, wxFLEX_GROWMODE_ALL);
00290 flexsizer->Add(panel, wxFLEX_GROWMODE_ALL);
00291
00292 parent->Layout();
00293 return (wxPanel*)parent;
00294 }
00295
00299 void interfMainPanel::showPanel(wxWindow* panel)
00300 {
00301 wxContourMainFrame::getInstance()->showAxis(false);
00302 wxSizer* sizer = infoPanel->GetSizer();
00303
00304 if(currentWindow != NULL){
00305 currentWindow->Hide();
00307 sizer->Remove(currentWindow);
00308 }
00309 sizer->Add(panel);
00310 currentWindow = panel;
00311 currentWindow->Show(true);
00312
00313 splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+1);
00314 splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()-1);
00315
00316 infoPanel->Layout();
00317 infoPanel->Refresh();
00318 this->Layout();
00319 this->Refresh();
00320 }
00321
00325 void interfMainPanel::hidePanel( )
00326 {
00327 wxContourMainFrame::getInstance()->showAxis(false);
00328 wxSizer* sizer = infoPanel->GetSizer();
00329
00330 if(currentWindow != NULL){
00331 currentWindow->Hide();
00333 sizer->Remove(currentWindow);
00334 }
00335 wxPanel * emptyPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00336 sizer->Add(emptyPanel);
00337 currentWindow = emptyPanel;
00338 currentWindow->Show(true);
00339
00340 splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()+1);
00341 splitterwindow->SetSashPosition(splitterwindow->GetSashPosition()-1);
00342
00343 infoPanel->Layout();
00344 infoPanel->Refresh();
00345 this->Layout();
00346 this->Refresh();
00347 }
00348
00352 wxPanel* interfMainPanel::getInfoPanel()
00353 {
00354 return infoPanel;
00355 }
00356
00357 void interfMainPanel::onCreateContourSpline( )
00358 {
00359 wxContourMainFrame::getInstance()->showAxis(false);
00360 wxContourMainFrame::getInstance()->onCreateContourSpline();
00361 }
00362
00363 void interfMainPanel::onCreateContourRectangle( )
00364 {
00365 wxContourMainFrame::getInstance()->showAxis(false);
00366 wxContourMainFrame::getInstance()->onCreateContourRectangle();
00367 }
00368 void interfMainPanel::onCreateContourCircle( )
00369 {
00370 wxContourMainFrame::getInstance()->showAxis(false);
00371 wxContourMainFrame::getInstance()->onCreateContourCircle();
00372 }
00373
00374 void interfMainPanel::onCreateContourLine( )
00375 {
00376 wxContourMainFrame::getInstance()->showAxis(false);
00377 wxContourMainFrame::getInstance()->onCreateContourLine();
00378 }
00379
00380
00381 void interfMainPanel::onCreateContourPoints( )
00382 {
00383 wxContourMainFrame::getInstance()->showAxis(false);
00384 wxContourMainFrame::getInstance()->onCreateContourPoints();
00385 }
00386
00387
00388
00389 void interfMainPanel::onCreateContourPolygon( )
00390 {
00391 wxContourMainFrame::getInstance()->showAxis(false);
00392 wxContourMainFrame::getInstance()->onCreateContourPolygon();
00393 }
00394
00395
00396 void interfMainPanel::onCreateContoursBullEye(wxPanel* panBull)
00397 {
00398 wxContourMainFrame::getInstance()->showAxis(false);
00399 wxContourMainFrame::getInstance()->onCreateContourBullEye(panBull);
00400 }
00401
00402 void interfMainPanel::onDeleteContour()
00403 {
00404 wxContourMainFrame::getInstance()->showAxis(false);
00405 wxContourMainFrame::getInstance()->onDeleteContour();
00406 }
00407
00408 void interfMainPanel::onDeleteContoursActSlice()
00409 {
00410 wxContourMainFrame::getInstance()->showAxis(false);
00411 wxContourMainFrame::getInstance()->onDeleteContoursActSlice();
00412 }
00413
00414 void interfMainPanel::onDeleteAllContours()
00415 {
00416 wxContourMainFrame::getInstance()->showAxis(false);
00417 wxContourMainFrame::getInstance()->onDeleteAllContours();
00418 }
00419
00420 void interfMainPanel::onCopy()
00421 {
00422 wxContourMainFrame::getInstance()->onCopy();
00423 }
00424
00425 void interfMainPanel::onPaste()
00426 {
00427 wxContourMainFrame::getInstance()->onPaste();
00428 }
00429
00430 void interfMainPanel::onUndo()
00431 {
00432 wxContourMainFrame::getInstance()->onUndo();
00433 }
00434
00435 void interfMainPanel::onRedo()
00436 {
00437 wxContourMainFrame::getInstance()->onRedo();
00438 }
00439
00440 void interfMainPanel::onLoad()
00441 {
00442 wxContourMainFrame::getInstance()->onLoad();
00443 }
00444
00445 void interfMainPanel::onSave()
00446 {
00447 wxContourMainFrame::getInstance()->onSave();
00448 }
00449
00450 void interfMainPanel::onImport(){
00451 wxContourMainFrame::getInstance()->onImport();
00452 }
00453
00454 void interfMainPanel::onTest(){
00455 if(testPanel==NULL)
00456 {
00457 testPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition,
00458 wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00459 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00460 testPanel->SetSizer(flexsizer, true);
00461 testPanel->SetAutoLayout( true );
00462 panelTest = new interfTestPanel(testPanel);
00463
00464 wxStaticText* stattext = new wxStaticText(mirrorPanel, -1,
00465 wxString(_T(" Test Panel ")),
00466 wxDefaultPosition, wxDefaultSize,
00467 wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00468
00469 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00470 flexsizer->Add(panelTest, wxEXPAND);
00471 testPanel->Layout();
00472 showPanel(testPanel);
00473 }
00474 }
00475
00476 void interfMainPanel::RefreshInterface()
00477 {
00478 wxContourMainFrame::getInstance()->RefreshInterface();
00479 }
00480
00481 vtkImageData* interfMainPanel::getImageData()
00482 {
00483 return wxContourMainFrame::getInstance()->getImageData();
00484 }
00485
00486 void interfMainPanel::getImageRange(double range[2] )
00487 {
00488 vtkImageData * img = getImageData();
00489 img->GetScalarRange(range);
00490 }
00491
00492 void interfMainPanel::onSegmentationOneSlice(int isovalue,int sampling,int method)
00493 {
00494 wxContourMainFrame::getInstance()->onSegmentationOneSlice(isovalue, sampling, method);
00495 }
00496
00497 void interfMainPanel::onSegmentationOneSliceITK(wxString distance, wxString sigma, wxString alfa, wxString beta, wxString propagation, wxString iterations, wxString inflation)
00498 {
00499 wxContourMainFrame::getInstance()->onSegmentationOneSliceITK(distance, sigma, alfa, beta, propagation, iterations, inflation);
00500 }
00501
00502 int interfMainPanel::GetImageDataSizeZ()
00503 {
00504 return wxContourMainFrame::getInstance()->GetImageDataSizeZ();
00505 }
00506
00507 void interfMainPanel::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,int sampling,int method)
00508 {
00509 wxContourMainFrame::getInstance()->onSegmentationAllSlice(minZ, maxZ,isovalue,sampling,method);
00510 }
00511
00512 void interfMainPanel::setLabelSegmentationPanelVTK(wxString tmpString)
00513 {
00514 ((interfSegmentationPanelVTK*)segmentationPanel)->setLabel(tmpString);
00515 }
00516 void interfMainPanel::onSegmentationPressed()
00517 {
00518 if(segmentPanel == NULL){
00519 segmentPanel = new wxPanel(getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00520 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00521 segmentPanel->SetSizer(flexsizer, true);
00522 segmentPanel->SetAutoLayout(true);
00523 segmentPanel->SetEventHandler(this);
00524
00525
00526 segmentationPanel = new interfSegmentationPanelVTK(segmentPanel);
00527
00528
00529 wxStaticText* stattext = new wxStaticText(segmentPanel, -1, wxString(_T(" Automatic Segmentation ")), wxDefaultPosition,
00530 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00531
00532 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00533 flexsizer->Add(segmentationPanel, wxEXPAND);
00534 segmentPanel->Layout();
00535 }
00536 showPanel(segmentPanel);
00537 wxContourMainFrame::getInstance()->showAxis(true);
00538 axisshown = true;
00539 }
00540
00541 void interfMainPanel::onSegmentationPressedITK()
00542 {
00543 if(segmentPanelITK == NULL){
00544 segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00545
00546
00547 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00548 segmentPanelITK->SetSizer(flexsizer, true);
00549 segmentPanelITK->SetAutoLayout( true );
00550
00551
00552
00553 wxPanel* panel = new interfSegmentationPanelITK(segmentPanelITK);
00554
00555 wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T(" Automatic ITK Segmentation ")), wxDefaultPosition,
00556 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00557
00558 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00559 flexsizer->Add(panel, wxEXPAND);
00560 segmentPanelITK->Layout();
00561 }
00562 showPanel(segmentPanelITK);
00563 wxContourMainFrame::getInstance()->showAxis(true);
00564 axisshown = true;
00565 }
00566
00567 void interfMainPanel::onRigidPressed()
00568 {
00569 wxContourMainFrame::getInstance()->onRigidPressed();
00570 }
00571
00572 void interfMainPanel::onWidthOfContour(double width)
00573 {
00574 wxContourMainFrame::getInstance()->onWidthOfContour(width);
00575 }
00576
00577 int interfMainPanel::getColorWindow()
00578 {
00579 return wxContourMainFrame::getInstance()->getColorWindow();
00580 }
00581 int interfMainPanel::getWindowLevel()
00582 {
00583 return wxContourMainFrame::getInstance()->getWindowLevel();
00584 }
00585 void interfMainPanel::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel)
00586 {
00587 wxContourMainFrame::getInstance()->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
00588 }
00589
00590 void interfMainPanel::onInterpolation(bool interpolate)
00591 {
00592 wxContourMainFrame::getInstance()->onInterpolation(interpolate);
00593 }
00594
00595
00596 void interfMainPanel::onConfigurationPressed()
00597 {
00598 if(configPanel == NULL){
00599 configPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(_T("")));
00600 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00601 configPanel->SetSizer(flexsizer, true);
00602 configPanel->SetAutoLayout( true );
00603
00604 wxPanel* panel = new interfConfigurationPanel(configPanel);
00605 wxStaticText* stattext = new wxStaticText(configPanel, -1, wxString(_T(" Interface Configuration ")), wxDefaultPosition,
00606 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00607 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00608 flexsizer->Add(panel, wxEXPAND);
00609 configPanel->Layout();
00610 }
00611 showPanel(configPanel);
00612 }
00613
00614 void interfMainPanel::onSpreadPressed()
00615 {
00616 if(spreadPanel==NULL){
00617
00618 spreadPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00619 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00620 spreadPanel->SetSizer(flexsizer, true);
00621 spreadPanel->SetAutoLayout( true );
00622
00623
00624
00625 panelSpread = new interfSpreadPanel(spreadPanel);
00626
00627
00628 wxStaticText* stattext = new wxStaticText(spreadPanel, -1, wxString(_T(" Automatic Spread ")), wxDefaultPosition,
00629 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00630
00631 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00632 flexsizer->Add(panelSpread, wxEXPAND);
00633 spreadPanel->Layout();
00634 }
00635 showPanel(spreadPanel);
00636
00637 }
00638
00639 void interfMainPanel::resetAppend()
00640 {
00641 wxContourMainFrame::getInstance()->resetAppend();
00642 }
00643
00644 void interfMainPanel::onSpreadAdd()
00645 {
00646 wxContourMainFrame::getInstance()->onSpreadAdd();
00647 }
00648
00649 void interfMainPanel::onSpreadAddAll()
00650 {
00651 wxContourMainFrame::getInstance()->onSpreadAddAll();
00652 }
00653
00654
00655 void interfMainPanel::appendStringSpread(std::string val)
00656 {
00657 panelSpread->appendStringSpread(val);
00658 }
00659
00660 void interfMainPanel::onSpreadGo(int type)
00661 {
00662 wxContourMainFrame::getInstance()->onSpreadGo(type);
00663 }
00664
00665 void interfMainPanel::setStringSpread(std::string stringtemp)
00666 {
00667 panelSpread->setStringSpread(stringtemp);
00668 }
00669
00670 void interfMainPanel::onInformationPressed()
00671 {
00672
00673
00674 if(infoWin ==NULL){
00675 infoWin = new wxFrame (this, -1,_T(" Statistics "), wxDefaultPosition, wxDefaultSize, wxFRAME_TOOL_WINDOW|wxSYSTEM_MENU | wxCAPTION | wxCLIP_CHILDREN |wxFRAME_FLOAT_ON_PARENT | wxRESIZE_BORDER );
00676 infoWin->SetSize( wxSize(825,650) );
00677
00678 wxSize sizepanel(825,675);
00679 informationPanel = new interfInformationPanel(infoWin);
00680
00681 wxBoxSizer * sizerPanel = new wxBoxSizer(wxHORIZONTAL);
00682 sizerPanel -> Add( informationPanel, 1, wxEXPAND ,0);
00683
00684 infoWin->SetSizer( sizerPanel );
00685 infoWin->SetAutoLayout( true );
00686 infoWin->Layout();
00687 infoWin->Show();
00688 }else {
00689
00690 if (infoWin->IsShown()==true)
00691 {
00692 infoWin->Show(false);
00693 } else {
00694
00695 infoWin->Show(true);
00696 }
00697 }
00698
00699
00700 if(panelAux == NULL)
00701 {
00702 panelAux = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(_T("")));
00703 }
00704
00705
00706
00707 if(infoPanelMask == NULL){
00708 infoPanelMask = new wxPanel(panelAux, -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(_T("")));
00709 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00710 infoPanelMask->SetSizer(flexsizer, true);
00711 infoPanelMask->SetAutoLayout( true );
00712
00713 wxPanel *panel = wxContourMainFrame::getInstance()->getMaskImageViewPanel( infoPanelMask );
00714 wxStaticText* stattext = new wxStaticText(infoPanelMask, -1, wxString(_T(" Mask segmentation ")), wxDefaultPosition,
00715 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00716
00717 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00718
00719 flexsizer->Add(panel, wxEXPAND);
00720 infoPanelMask->Layout();
00721
00722 }
00723
00724
00725
00726 if(infoPanelCalibration == NULL)
00727 {
00728 infoPanelCalibration = new wxPanel(panelAux, -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER , wxString(_T("")));
00729 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00730 infoPanelCalibration->SetSizer(flexsizer, true);
00731 infoPanelCalibration->SetAutoLayout( true );
00732
00733 wxPanel *panel = new interfCalibrationPanel(infoPanelCalibration);
00734 wxStaticText* stattext = new wxStaticText(infoPanelCalibration, -1, wxString(_T(" Calibration ")), wxDefaultPosition,
00735 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00736
00737 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00738
00739 flexsizer->Add(panel, wxEXPAND);
00740 infoPanelCalibration->Layout();
00741 }
00742
00743 wxFlexGridSizer* sizer = new wxFlexGridSizer(1);
00744 panelAux->SetSizer(sizer, true);
00745 panelAux->SetAutoLayout( true );
00746 sizer->Add(infoPanelMask);
00747 sizer->Add(infoPanelCalibration);
00748
00749 showPanel(panelAux);
00750
00751
00752
00753 wxContourMainFrame::getInstance()->changeInstant();
00754 }
00755
00756 void interfMainPanel::getInstantVector(std::vector<int>& tempVector)
00757 {
00758 wxContourMainFrame::getInstance()->getInstantVector(tempVector);
00759 }
00760
00761 std::vector<std::string> interfMainPanel::getOutlinesName(int slide)
00762 {
00763 return wxContourMainFrame::getInstance()->getOutlinesName(slide);
00764 }
00765
00766 void interfMainPanel::onInformationContourLabels(int typeContourGroup,int selection,int minZ,int maxZ,int grayRangeMin,int grayRangeMax){
00767 wxContourMainFrame::getInstance()->onInformationContourLabels(typeContourGroup, selection, minZ, maxZ,grayRangeMin,grayRangeMax);
00768 }
00769
00770 void interfMainPanel::setStringInfoPanel(wxString tmpString)
00771 {
00772 if(informationPanel!=NULL){
00773 ((interfInformationPanel*)informationPanel)->setStringInfoPanel(tmpString);
00774 }
00775 }
00776
00777 void interfMainPanel::setRowLabelInfoPanel(int z, wxString tempString)
00778 {
00779 ((interfInformationPanel*)informationPanel)->setRowLabelInfoPanel(z, tempString);
00780 }
00781
00782 int interfMainPanel::getNumberColsInformationPanel()
00783 {
00784 return ((interfInformationPanel*)informationPanel)->getNumberCols();
00785 }
00786
00787 void interfMainPanel::appendColsInformationPanel(int _numberOfVariablesStatistics)
00788 {
00789 ((interfInformationPanel*)informationPanel)->appendCols(_numberOfVariablesStatistics);
00790 }
00791
00792 void interfMainPanel::setCellValueInfoPanel(int z,int tmpIntA,wxString tempString)
00793 {
00794 ((interfInformationPanel*)informationPanel)->setCellValue(z, tmpIntA, tempString);
00795 }
00796
00797 void interfMainPanel::setColLableInfoPanel(int tmpIntB,wxString tmpTitleString)
00798 {
00799 ((interfInformationPanel*)informationPanel)->setColLabel(tmpIntB, tmpTitleString);
00800
00801 }
00802
00803 void interfMainPanel::SetScalarRange(int grayRangeMin,int grayRangeMax)
00804 {
00805 wxContourMainFrame::getInstance()->SetScalarRange(grayRangeMin, grayRangeMax);
00806 }
00807
00808 void interfMainPanel::onSaveResults(std::string directory,std::string namefile, std::string filename,
00809 int typeContourGroup, int selection, int minZ, int maxZ ,bool XYZValues, bool contourImage, bool statistics)
00810 {
00811 wxContourMainFrame::getInstance()->onSaveResults(directory, namefile, filename,
00812 typeContourGroup, selection, minZ,maxZ, XYZValues, contourImage, statistics);
00813 }
00814
00815 wxString interfMainPanel::getCellValue(int j,int i){
00816 return ((interfInformationPanel*)informationPanel)->getCellValue(j, i );
00817 }
00818
00819 void interfMainPanel::onSnakePressed()
00820 {
00821 axisshown=false;
00822 wxContourMainFrame::getInstance()->showAxis(axisshown);
00823 wxContourMainFrame::getInstance()->onSnakePressed();
00824 }
00825
00826 void interfMainPanel::onMirrorPressed(){
00827 if(mirrorPanel==NULL)
00828 {
00829
00830 mirrorPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T("")));
00831 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00832 mirrorPanel->SetSizer(flexsizer, true);
00833 mirrorPanel->SetAutoLayout( true );
00834 panelMirror = new interfMirrorPanel(mirrorPanel);
00835
00836 wxStaticText* stattext = new wxStaticText(mirrorPanel, -1, wxString(_T(" Mirroring Tool ")), wxDefaultPosition,
00837 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00838
00839 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00840 flexsizer->Add(panelMirror, wxEXPAND);
00841 mirrorPanel->Layout();
00842
00843 refLineShown=true;
00844 wxContourMainFrame::getInstance()->referenceLine();
00845 }
00846
00847 else
00848 {
00849
00850 if (!refLineShown)
00851 {
00852 wxContourMainFrame::getInstance()->refLineShow();
00853 refLineShown=true;
00854 }
00855 }
00856
00857 showPanel(mirrorPanel);
00858 }
00859
00860 void interfMainPanel::onMirror()
00861 {
00862 wxContourMainFrame::getInstance()->onMirror();
00863 }
00864
00865 void interfMainPanel::onMirrorAxisShow()
00866 {
00867 if (!refLineShown)
00868 {
00869 wxContourMainFrame::getInstance()->refLineShow();
00870 refLineShown=true;
00871 }
00872 }
00873
00874 void interfMainPanel::onMirrorAxisHide()
00875 {
00876 if (refLineShown)
00877 {
00878 wxContourMainFrame::getInstance()->refLineHide();
00879 refLineShown=false;
00880 }
00881 }
00882
00883 void interfMainPanel::onMirrorChangeWidth(int width)
00884 {
00885 wxContourMainFrame::getInstance()->refLineChangeWidth(width);
00886 }
00887
00888
00889 void interfMainPanel::onColorLayerImagePressed()
00890 {
00891
00892 if(colorImageLayerPanel == NULL){
00893 colorImageLayerPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(_T("")));
00894 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00895 colorImageLayerPanel->SetSizer(flexsizer, true);
00896 colorImageLayerPanel->SetAutoLayout( true );
00897
00898 wxPanel *panel = wxContourMainFrame::getInstance()->getColorLayerImageViewPanel( colorImageLayerPanel );
00899 wxStaticText* stattext = new wxStaticText(colorImageLayerPanel, -1, wxString(_T(" Color Image Layer ")), wxDefaultPosition,
00900 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00901 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00902 flexsizer->Add(panel, wxEXPAND);
00903 colorImageLayerPanel->Layout();
00904 }
00905 showPanel(colorImageLayerPanel);
00906 wxContourMainFrame::getInstance()->changeInstant();
00907 }
00908
00909
00910 void interfMainPanel::onThresholdPressed()
00911 {
00912
00913 if(thresholdPanel == NULL){
00914 thresholdPanel = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxNO_BORDER, wxString(_T("")));
00915 wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1);
00916 thresholdPanel->SetSizer(flexsizer, true);
00917 thresholdPanel->SetAutoLayout( true );
00918
00919 wxPanel *panel = wxContourMainFrame::getInstance()->getThresholdImageViewPanel( thresholdPanel );
00920 wxStaticText* stattext = new wxStaticText(thresholdPanel, -1, wxString(_T(" Threshold segmentation ")), wxDefaultPosition,
00921 wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T("")));
00922 flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
00923 flexsizer->Add(panel, wxEXPAND);
00924 thresholdPanel->Layout();
00925 }
00926 showPanel(thresholdPanel);
00927 wxContourMainFrame::getInstance()->changeInstant();
00928 }
00929
00930
00931 void interfMainPanel::ShowResultImages(int typeContourGroup, int selection, int minZ, int maxZ)
00932 {
00933 wxContourMainFrame::getInstance()->ShowResultImages(typeContourGroup, selection, minZ, maxZ);
00934 }
00935
00936
00937 void interfMainPanel::SetContourGroup(int contourGroup)
00938 {
00939 wxContourMainFrame::getInstance()->SetContourGroup( contourGroup);
00940 }
00941
00942
00943 void interfMainPanel::onPrintLabel ()
00944 {
00945 wxString label;
00946 manualBaseModel* manualModel = wxContourMainFrame::getInstance()->getContour();
00947
00948 if(manualModel==NULL)
00949 {
00950 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("Please select a Contour"), wxT("Warning"), wxOK | wxICON_EXCLAMATION);
00951 dial->ShowModal();
00952 return;
00953 }
00954
00955 wxTextEntryDialog* dialog = new wxTextEntryDialog(this,_T("Enter a tag name: ")) ;
00956
00957 if (dialog->ShowModal() == wxID_OK)
00958 {
00959 label = dialog->GetValue();
00960
00961 if(label.Len()!=0)
00962 {
00963 wxContourMainFrame::getInstance()->onPrintLabel(label,manualModel);
00964 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("The tag name was updated"), wxT("Information"), wxOK | wxICON_INFORMATION);
00965 dial->ShowModal();
00966 }
00967 else
00968 {
00969 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("Please enter a valid tag"), wxT("Warning"), wxOK | wxICON_EXCLAMATION);
00970 dial->ShowModal();
00971 }
00972 }
00973 }
00974
00975 void interfMainPanel::onCalibration(wxString size, int unit)
00976 {
00977 int type = 0;
00978 double contourSize = 0.0;
00979 double realSizeDouble = 0.0;
00980
00981 type = wxContourMainFrame::getInstance()->getType();
00982 contourSize = wxContourMainFrame::getInstance()->getContourSizeInPixels();
00983
00984 std::cout<<"Cata->Tamaņo del contorno en pixeles:"<<contourSize<<endl;
00985
00986 if ( type == 6 )
00987 {
00988 if (size.ToDouble(&realSizeDouble))
00989 {
00990 if(unit==1)
00991 {
00992 realSizeDouble = realSizeDouble * 10;
00993 }
00994 if(unit==2)
00995 {
00996 realSizeDouble = realSizeDouble * 25.4;
00997 }
00998 std::cout<< "Valor del usuario" << realSizeDouble<< endl ;
00999 onePixelSize (realSizeDouble,contourSize);
01000 }
01001 else
01002 {
01003 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("Please enter a numeric value"), wxT("Warning"), wxOK | wxICON_EXCLAMATION);
01004 dial->ShowModal();
01005 }
01006 }
01007 else
01008 {
01009 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("Please select a line contour"), wxT("Warning"), wxOK | wxICON_EXCLAMATION);
01010 dial->ShowModal();
01011 }
01012
01013 wxMessageDialog *dial = new wxMessageDialog(NULL, wxT("The calibration was made"), wxT("Information"), wxOK | wxICON_INFORMATION);
01014 dial->ShowModal();
01015 std::cout<< "Cata-> Se ha realizado la calibracion" << endl ;
01016 }
01017
01018 double interfMainPanel::onePixelSize (double realSize,double sizePixel)
01019 {
01020 _pixelValue = realSize/sizePixel;
01021 std::cout<< "Valor del un pixel = " << _pixelValue<< endl ;
01022 wxContourMainFrame::getInstance()->onePixelSize (_pixelValue);
01023 return _pixelValue ;
01024 }
01025
01026 double interfMainPanel::GetPixelValue()
01027 {
01028 return _pixelValue;
01029 }
01030