#include "interfSegmentationPanels.h" #include "interfMainPanel.h" interfSegmentationPanelVTK::interfSegmentationPanelVTK(wxWindow * parent) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN) { int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ(); //int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ(); double range[2]; //_theViewPanel->getSceneManager()->GetImageDataRange(range); interfMainPanel::getInstance()->GetImageDataRange(range); wxButton *segmentationOneSliceBtn = new wxButton(this,-1,_T("Current slice"), wxDefaultPosition, wxSize(200,35) ); wxButton *segmentationAllSliceBtn = new wxButton(this,-1,_T("All slices") ,wxDefaultPosition, wxSize(200,35) ); _isovalue = new wxSlider(this, -1, 40 , (int)(range[0]), (int)(range[1]), wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator); _sampling = new wxSlider(this, -1, 20 , 4, 50, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator); wxString lstOptions[3]; lstOptions[0]=_T("A"); lstOptions[1]=_T("B"); lstOptions[2]=_T("C"); methodRadiobox = new wxRadioBox(this, -1, _T("Method (find ctrl. Points)"), wxDefaultPosition, wxSize(200,45), 3 , lstOptions, 3, wxRA_SPECIFY_COLS); methodRadiobox->SetSelection(2); _staticTextSegmentation = new wxStaticText(this,-1,_T(" ")); _mbarrange = new mBarRange(this,70, 65); _mbarrange->SetMin(0); _mbarrange->SetStart(0); _mbarrange->SetOrientation( true ); _mbarrange->setActiveStateTo(true); _mbarrange->setVisibleLabels( true ); _mbarrange->setDeviceEndMargin(10); _mbarrange->setRepresentedValues( 0 , sizeZ ); _mbarrange->setDeviceBlitStart(10,10); _mbarrange->setIfWithActualDrawed( false ); _mbarrange->SetStart( 0 ); _mbarrange->SetEnd( sizeZ ); wxFlexGridSizer * sizer = new wxFlexGridSizer(1); sizer->Add( new wxStaticText(this, -1, _T("Isovalue (Gray level)")), 1, wxGROW ); sizer->Add( _isovalue, 1, wxGROW ); sizer->Add( methodRadiobox , 1, wxGROW ); sizer->Add( new wxStaticText(this, -1 ,_T("Sampling (%)")), 1, wxGROW ); sizer->Add( _sampling, 1, wxGROW ); sizer->Add( segmentationOneSliceBtn, 1, wxGROW ); sizer->Add( new wxStaticText(this, -1, _T(" ")), 1, wxGROW ); sizer->Add( _staticTextSegmentation, 1, wxGROW ); sizer->Add( segmentationAllSliceBtn, 1, wxGROW ); sizer->Add( _mbarrange, 1, wxGROW ); this->SetSizer( sizer ); // panel->SetSize( sizePanel ); this->SetSize( wxDefaultSize ); this->SetAutoLayout( true ); this->Layout(); //_segmentationFrame->SetEventHandler( this ); //segmentationOneSliceBtn->SetEventHandler( this ); //segmentationAllSliceBtn->SetEventHandler( this ); //panel->SetEventHandler(this); Connect( segmentationOneSliceBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationOneSlice); Connect( segmentationAllSliceBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction) &interfSegmentationPanelVTK::onSegmentationAllSlice); } interfSegmentationPanelVTK::~interfSegmentationPanelVTK() { } /** ** Responds to the events of the buttons, when the same panel is responsible for it. It gets the name ** of the button corresponding to the method that has to be executed, ** it uses attribute eventHandler to call the methods define by the application. ** see setEventHandler(wxEventHandler*) **/ void interfSegmentationPanelVTK::onSegmentationPressedITK(wxCommandEvent& event){ if(segmentPanelITK == NULL) { segmentPanelITK = new wxPanel(interfMainPanel::getInstance()->getInfoPanel(), -1, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC, wxString(_T(""))); wxFlexGridSizer* flexsizer = new wxFlexGridSizer(1); segmentPanelITK->SetSizer(flexsizer, true); segmentPanelITK->SetAutoLayout( true ); wxPanel* panel = new wxPanel(this, -1);//contourevent->getSegmentationPanelITK(segmentPanelITK); wxStaticText* stattext = new wxStaticText(segmentPanelITK, -1, wxString(_T(" Automatic ITK Segmentation ")), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE|wxBORDER_SIMPLE|wxFULL_REPAINT_ON_RESIZE, wxString(_T(""))); flexsizer->Add(stattext, wxALIGN_CENTER | wxALIGN_CENTRE); flexsizer->Add(panel, wxEXPAND); segmentPanelITK->Layout(); } interfMainPanel::getInstance()->showPanel(segmentPanelITK); //contourevent->showAxis(true); //axisshown = true; } void interfSegmentationPanelVTK::onSegmentationOneSlice( wxCommandEvent& event ) { int isovalue = _isovalue->GetValue(); int sampling = _sampling->GetValue(); int method = methodRadiobox->GetSelection(); interfMainPanel::getInstance()->onSegmentationOneSlice(isovalue, sampling, method); } void interfSegmentationPanelVTK::onSegmentationAllSlice( wxCommandEvent& event ) { int minZ=_mbarrange->GetStart(); int maxZ=_mbarrange->GetEnd(); int isovalue = _isovalue->GetValue(); int sampling = _sampling->GetValue(); int method = methodRadiobox->GetSelection(); interfMainPanel::getInstance()->onSegmentationAllSlice(minZ, maxZ, isovalue, sampling, method); } void interfSegmentationPanelVTK::setLabel(wxString tmpString){ _staticTextSegmentation->SetLabel(tmpString); } /** ** start of new implementation ** interfSegmentationPanelITK **/ interfSegmentationPanelITK::interfSegmentationPanelITK(wxWindow * parent) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN) { int sizeZ = interfMainPanel::getInstance()->GetImageDataSizeZ(); //int sizeZ = _theViewPanel->getSceneManager()->GetImageDataSizeZ(); double range[2]; //_theViewPanel->getSceneManager()->GetImageDataRange(range); interfMainPanel::getInstance()->GetImageDataRange(range); //The labels wxStaticText * distance = new wxStaticText(this, wxID_ANY, wxT("Initial Distance"), wxPoint(5, 5)); wxStaticText * sigma = new wxStaticText(this, wxID_ANY, wxT("Sigma"), wxPoint(5, 30)); wxStaticText * alfa = new wxStaticText(this, wxID_ANY, wxT("Sigmoid Alfa"), wxPoint(5, 55)); wxStaticText * beta = new wxStaticText(this, wxID_ANY, wxT("Sigmoid Beta"), wxPoint(5, 80)); wxStaticText * propagation = new wxStaticText(this, wxID_ANY, wxT("Propagation Scaling"),wxPoint(5, 105)); wxStaticText * iterations = new wxStaticText(this, wxID_ANY, wxT("Iterations"), wxPoint(5, 130)); wxStaticText * infStrength = new wxStaticText(this, wxID_ANY, wxT("Inflation Strength"), wxPoint(5, 155)); //Text Controls _distance = new wxTextCtrl(this, wxID_ANY, wxT("5.0"), wxPoint(98,5), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _sigma = new wxTextCtrl(this, wxID_ANY, wxT("1.2"), wxPoint(98,30), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _alfa = new wxTextCtrl(this, wxID_ANY, wxT("-1.0"), wxPoint(98,55), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _beta = new wxTextCtrl(this, wxID_ANY, wxT("5.0"), wxPoint(98,80), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _propagation = new wxTextCtrl(this, wxID_ANY, wxT("6.0"), wxPoint(98,105), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _iterations = new wxTextCtrl(this, wxID_ANY, wxT("800"), wxPoint(98,130), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); _infStrength = new wxTextCtrl(this, wxID_ANY, wxT("3.0"), wxPoint(98,155), wxSize(80, 20), 0, wxDefaultValidator, wxTextCtrlNameStr); //El boton wxButton * bot = new wxButton(this, 6, wxT("One Slice"), wxPoint(98, 180), wxSize(70, 25), 0, wxDefaultValidator, wxT("button")); //Conexion del boton con su respectivo manejador Connect(6, wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction) &interfSegmentationPanelITK::onSegmentationOneSlice); } interfSegmentationPanelITK::~interfSegmentationPanelITK(){ } void interfSegmentationPanelITK::onSegmentationOneSlice( wxCommandEvent& event ) { wxString distanc=_distance->GetValue(); wxString sigm=_sigma->GetValue(); wxString alf=_alfa->GetValue(); wxString bet=_beta->GetValue(); wxString prop=_propagation->GetValue(); wxString iter=_iterations->GetValue(); wxString infS=_infStrength->GetValue(); interfMainPanel::getInstance()->onSegmentationOneSliceITK(distanc, sigm, alf, bet, prop, iter, infS); } void interfSegmentationPanelITK::onSegmentationAllSlice( wxCommandEvent& event ) { /*int minZ=_mbarrange->GetStart(); int maxZ=_mbarrange->GetEnd(); int isovalue = _isovalue->GetValue(); int sampling = _sampling->GetValue(); int method = methodRadiobox->GetSelection(); interfMainPanel::getInstance()->onSegmentationAllSlice(minZ, maxZ, isovalue, sampling, method);*/ } //------------------------------------------------------------------------------------------------------------ /** ** Begin of the mirror panel **/ interfMirrorPanel::interfMirrorPanel(wxWindow* parent) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN) { wxButton *mirrorGoBtn = new wxButton(this,-1,_T("Go"), wxDefaultPosition, wxSize(200,35) ); _thickness = new wxSlider(this, -1, 4, 1, 10, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator); Connect( mirrorGoBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onMirrorGo ); wxFlexGridSizer * sizer = new wxFlexGridSizer(1); sizer -> Add( new wxStaticText(this,-1,_T("Thickness")) , 1, wxGROW ); sizer -> Add( _thickness, 1, wxGROW ); sizer -> Add( mirrorGoBtn, 1, wxGROW ); this->SetSizer( sizer ); this->SetAutoLayout( true ); this->Layout(); } interfMirrorPanel::~interfMirrorPanel(){ } void interfMirrorPanel::onMirrorGo(wxCommandEvent& event) { interfMainPanel::getInstance()->onMirror(); } void interfMirrorPanel::onChangeWidth(wxScrollEvent& event) { int width = _thickness->GetValue(); interfMainPanel::getInstance()->onMirrorChangeWidth(width); } /** ** Begin of the threshold panel **/ interfThresholdPanel::interfThresholdPanel(wxWindow* parent) : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN) { wxButton *thresholdGoBtn = new wxButton(this,-1,_T("Threshold Go"), wxDefaultPosition, wxSize(200,30) ); _thresholdGo = false; double range[2]; interfMainPanel::getInstance()->getImageRange(range); _mBarThreshold = new mBarRange(this,70,65); _mBarThreshold->SetMin(0); _mBarThreshold->SetStart(0); _mBarThreshold-> SetOrientation( true ); _mBarThreshold-> setActiveStateTo(true); _mBarThreshold-> setVisibleLabels( true ); _mBarThreshold-> setDeviceEndMargin(10); _mBarThreshold-> setRepresentedValues( range[0] , range[1] ); _mBarThreshold-> setDeviceBlitStart(10,10); _mBarThreshold-> setIfWithActualDrawed( false ); _mBarThreshold-> SetStart( range[0] ); _mBarThreshold-> SetEnd( range[1] ); Connect( thresholdGoBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfThresholdPanel::onThresholdGo ); wxFlexGridSizer * sizer = new wxFlexGridSizer(1); sizer -> Add( _mBarThreshold, 1, wxGROW ); sizer -> Add( thresholdGoBtn, 1, wxGROW ); sizer -> Add( new wxStaticText(this,-1,_T(" ")) , 1, wxGROW ); sizer -> Add( new wxStaticText(this,-1,_T(" ")) , 1, wxGROW ); //sizer -> Add( new wxStaticText(this,-1,_T("Select the image's range to superpose a Fake Color")) , 1, wxGROW ); this->SetSizer( sizer ); this->SetAutoLayout( true ); this->Layout(); } interfThresholdPanel::~interfThresholdPanel(){ } void interfThresholdPanel::onThresholdChange(wxCommandEvent& event) { if (_thresholdGo) { int minVal = _mBarThreshold->GetStart(); int maxVal = _mBarThreshold->GetEnd(); interfMainPanel::getInstance()->onThreshold(minVal, maxVal); std::cout<< "Valor Min: " << minVal << " & Valor Max: " << maxVal << std::endl; } } void interfThresholdPanel::onThresholdGo(wxCommandEvent& event) { if (!_thresholdGo) { int minVal = _mBarThreshold->GetStart(); int maxVal = _mBarThreshold->GetEnd(); interfMainPanel::getInstance()->onThreshold(minVal, maxVal); _thresholdGo=true; } } void interfThresholdPanel::onThresholdStop() { _thresholdGo=false; } BEGIN_EVENT_TABLE(interfMirrorPanel, wxPanel) EVT_SCROLL(interfMirrorPanel :: onChangeWidth) END_EVENT_TABLE() BEGIN_EVENT_TABLE(interfThresholdPanel, wxPanel) EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_START, interfThresholdPanel :: onThresholdChange) EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_END, interfThresholdPanel :: onThresholdChange) EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_MOVED, interfThresholdPanel :: onThresholdChange) END_EVENT_TABLE()