X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FpPlotter%2FHistogramDialog.cxx;h=1a2c14093f0a03835514879350d6e7ee66f5a2af;hb=65c158dc171f8d3114ee3544b2a94a1f41880df0;hp=a60429eaad88f0730d6b8eb046f0cb4765048daa;hpb=0006c401e6399555e1cfa83989a3343ccce51813;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.cxx index a60429e..1a2c140 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.cxx @@ -1,6 +1,16 @@ #include "HistogramDialog.h" #include +#include "OpenImage.xpm" +#include "Save.xpm" +#include "Ok.xpm" +#include "Cancel.xpm" +#include "Delete.xpm" + +#include "creaSystem.h" + + + // IMPLEMENT_CLASS(HistogramDialog, wxDialog) @@ -14,41 +24,60 @@ enum { //------------------------- //Constructor //------------------------- -HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,vtkImageData* imageData,int type) +HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,vtkImageData* imageData,bool extracontrols) :wxDialog(parent,-1,title,wxDefaultPosition,wxDefaultSize,wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE ,_T("dialogBox")) { - _ctfun=NULL; + initializeHistogramDialog(extracontrols); + initializeHistogram(imageData); + +} + +HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,bool extracontrols) +:wxDialog(parent,-1,title,wxDefaultPosition,wxDefaultSize,wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE ,_T("dialogBox")){ + + initializeHistogramDialog(extracontrols); +} +HistogramDialog::~HistogramDialog(){ + +} + +void HistogramDialog::initializeHistogramDialog(bool extracontrols){ + _currentcolorselectedbitmap = -1; + _ctfun=NULL; _tfun=NULL; + _panextracontrols=NULL; + _maxgreyvalue = 1; SetBackgroundColour(wxColour(255,255,255)); /* Pointers */ - wxvtkmpr3Dview=NULL; - wxvtkclipping3Dview=NULL; + //wxvtkmpr3Dview=NULL; + //wxvtkclipping3Dview=NULL; /* Histogram */ - histogramW=new HistogramWidget(this, -1, wxPoint(0,0), wxSize(400,400),wxNO_BORDER ,imageData,type); + histogramW=new HistogramWidget(this, -1); - refreshed=false; - /* Buttons */ - okBtn = new wxButton(this,wxID_OK ,_T("OK")); - cancelBtn = new wxButton(this,wxID_CANCEL,_T("Cancel")); + wxBitmap bitmap0(Ok_xpm); + okBtn = new wxBitmapButton(this, wxID_OK, bitmap0,wxDefaultPosition,wxDefaultSize); - saveDataBtn = new wxButton(this,ID_SAVE,_T("Save")); - loadDataBtn = new wxButton(this,ID_LOAD,_T("Load")); - refreshBtn = new wxButton(this,ID_REFRESH,_T("Refresh")); + wxBitmap bitmap1(Cancel_xpm); + cancelBtn = new wxBitmapButton(this, wxID_CANCEL, bitmap1,wxDefaultPosition,wxDefaultSize); - Connect(saveDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnSaveData ); - Connect(loadDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnLoadData ); - Connect(refreshBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnRefreshBtn ); + //saveDataBtn = new wxButton(this,ID_SAVE,_T("Save")); + //loadDataBtn = new wxButton(this,ID_LOAD,_T("Load")); + //refreshBtn = new wxButton(this,ID_REFRESH,_T("Refresh")); + + //Connect(saveDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnSaveData ); + //Connect(loadDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnLoadData ); + //Connect(refreshBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnRefreshBtn ); //------------------- //GUI @@ -57,20 +86,22 @@ HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,vtkImageData* i //Upper Box wxBoxSizer * upper_box = new wxBoxSizer( wxHORIZONTAL ); //Including components for plotter control - upper_box->Add( histogramW, 4, wxGROW); + upper_box->Add( histogramW, 4, wxGROW); + upper_box->Add( getControls(extracontrols),wxSizerFlags().Center() ); //bottom Sizer wxBoxSizer *bottomBox = new wxBoxSizer( wxHORIZONTAL ); bottomBox->Add( okBtn, wxSizerFlags().Center()); bottomBox->AddSpacer(40); - bottomBox->Add( saveDataBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); - bottomBox->Add( loadDataBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); - bottomBox->Add( refreshBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); + //bottomBox->Add( saveDataBtn,wxSizerFlags().Center() ); + //bottomBox->AddSpacer(40); + //bottomBox->Add( loadDataBtn,wxSizerFlags().Center() ); + //bottomBox->AddSpacer(40); + //bottomBox->Add( refreshBtn,wxSizerFlags().Center() ); + //bottomBox->AddSpacer(40); bottomBox->Add( cancelBtn,wxSizerFlags().Center() ); + //Sizer wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(upper_box,1,wxEXPAND); @@ -79,69 +110,222 @@ HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,vtkImageData* i SetSizer( sizer ); SetBestSize(wxSize(600,600)); } +wxPanel* HistogramDialog::getPanExtraControls(){ + wxBoxSizer* sizer0 = new wxBoxSizer(wxVERTICAL); + _panextracontrols = new wxPanel(this); -HistogramDialog::HistogramDialog(wxWindow *parent,wxString title) -:wxDialog(parent,-1,title,wxDefaultPosition,wxDefaultSize,wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE ,_T("dialogBox")){ - _ctfun=NULL; - _tfun=NULL; + _panextracontrols->SetSizer(sizer0); + _panextracontrols->SetAutoLayout(true); - SetBackgroundColour(wxColour(255,255,255)); - /* - Pointers - */ - wxvtkmpr3Dview=NULL; - wxvtkclipping3Dview=NULL; + return _panextracontrols; +} +/** +** Set to true in the constructor +**/ +void HistogramDialog::setInfoPanExtraControls(std::vector comboitems){ + _comboitems = comboitems; + if(_panextracontrols!=NULL){ + _panextracontrols->Show(false); + for(int i=0; i < comboitems.size();i++){ + + wxBitmap bitmap = comboitems[i]->GetBitmap(); + + + _panextracontrols->GetSizer()->Add(getBitmapButtonDelete(bitmap),wxSizerFlags().Center()); + _panextracontrols->GetSizer()->AddSpacer(5); + + } + + wxButton* button = new wxButton(_panextracontrols,wxID_ANY); + button->SetToolTip(wxString("Add the current color to the list of predefined",wxConvUTF8)); + button->SetLabel(wxString(_T("Add"))); + Connect(button->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnEditColorsCombo); + _panextracontrols->GetSizer()->Add(button); + _panextracontrols->Layout(); + _panextracontrols->Refresh(); + _panextracontrols->Show(true); + this->Layout(); + this->Refresh(); + + } +} +wxSizer* HistogramDialog::getBitmapButtonDelete(wxBitmap bitmap){ + //wxCheckBox* checkbox = new wxCheckBox(_panextracontrols,wxID_ANY,_T("")); + wxBitmap bitmap0(Delete_xpm); + wxBitmapButton* deletebutton = new wxBitmapButton(_panextracontrols,wxID_ANY,bitmap0,wxDefaultPosition,wxSize(20,20)); + deletebutton->SetToolTip(wxString("Delete the color from the list",wxConvUTF8)); + Connect(deletebutton->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnDeleteColor); + _deletebuttonsvector.push_back(deletebutton); - /* - Histogram - */ + //wxBitmap bitmap0(OpenImage_xpm); + wxBitmapButton* button = new wxBitmapButton(_panextracontrols,wxID_ANY,bitmap,wxDefaultPosition,wxSize(30,30)); + button->SetToolTip(wxString("Load the current color configuration.",wxConvUTF8)); + bitmapbuttonsvect.push_back(button); + Connect(button->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnEditColorsCombo); + /*char c[10]; + wxString s; + s.Printf(_T("%d"),i);*/ - histogramW=new HistogramWidget(this, -1); + //button->SetBitmapLabel(comboitems[i]->GetBitmap()); + // wxStaticBitmap* button = new wxStaticBitmap(_panextracontrols,i,comboitems[i]->GetBitmap(),wxDefaultPosition,wxSize(30,30)); + wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); + sizer->Add(button,wxSizerFlags().Center()); + sizer->AddSpacer(5); + sizer->Add(deletebutton,wxSizerFlags().Center()); + return sizer; +} +void HistogramDialog::OnDeleteColor(wxCommandEvent& event){ + for(int i = 0; i < _deletebuttonsvector.size();i++){ + if(event.GetId()==_deletebuttonsvector[i]->GetId()){ + _currentcolorselectedbitmap = -1; + //this->eraseColorPoints(); + //this->erasePointsTransferenceFunction(); + HistogramDialogComboBoxItem* temp; + temp = _comboitems[i]; + _deletebuttonsvector[i]->Hide(); + bitmapbuttonsvect[i]->Hide(); + delete temp; + //Remove buttons + _panextracontrols->GetSizer()->Remove(i*2); + //Remove Space + _panextracontrols->GetSizer()->Remove(i*2); + for(int k = i; k < _comboitems.size()-1;k++){ + _comboitems[k] = _comboitems[k+1]; + _deletebuttonsvector[k] = _deletebuttonsvector[k+1]; + bitmapbuttonsvect[k] = bitmapbuttonsvect[k+1]; + } + _comboitems.pop_back(); + _deletebuttonsvector.pop_back(); + bitmapbuttonsvect.pop_back(); + } + } + _panextracontrols->Layout(); +} +void HistogramDialog::OnEditColorsCombo(wxCommandEvent& event){ + bool loadconfig = false; + UpdateCurrentComboElement(); + for(int i = 0; i < bitmapbuttonsvect.size();i++){ + if(event.GetId()==bitmapbuttonsvect[i]->GetId()){ + if(i<_comboitems.size()){ + _currentcolorselectedbitmap = i; + loadconfig = true; + HistogramDialogComboBoxItem* currentconfig = _comboitems[i]; + std::vector greyvect = currentconfig->getGreyVector(); + std::vector _redvect = currentconfig->getRedVector(); + std::vector _greenvect = currentconfig->getGreenVector(); + std::vector _bluevect= currentconfig->getBlueVector(); + this->eraseColorPoints(); + this->erasePointsTransferenceFunction(); + for(int i = 0; i < currentconfig->getGreyVector().size();i++){ + double greyv = currentconfig->getGreyVector()[i]; + double red = currentconfig->getRedVector()[i]; + double green = currentconfig->getGreenVector()[i]; + double blue = currentconfig->getBlueVector()[i]; + + this->addColorPoint(greyv*_maxgreyvalue, red*255.0, green*255.0, blue*255.0); + } + for(int i = 0; i < currentconfig->getGreyVectorTransfer().size();i++){ + double greyv = currentconfig->getGreyVectorTransfer()[i]; + double value = currentconfig->getValueVector()[i]; + std::cout<<"void HistogramDialog::OnEditColorsCombo(wxCommandEvent& event){"<addPointToTransferenceFunction(greyv*_maxgreyvalue, value*100); + } + } + } + } + if(!loadconfig){ + AddNewBitmapButton(); + } - refreshed=false; + _panextracontrols->Layout(); + this->Layout(); + this->Refresh(); +} +void HistogramDialog::UpdateCurrentComboElement(){ + if(_currentcolorselectedbitmap >= 0 && _currentcolorselectedbitmap < _comboitems.size()){ + setCurrentColorConfigurationIntoButton(); + } +} +void HistogramDialog::AddNewBitmapButton(){ + this->eraseColorPoints(); + this->erasePointsTransferenceFunction(); + HistogramDialogComboBoxItem* boxitem = new HistogramDialogComboBoxItem(); + wxBitmap bitmap = boxitem->GetBitmap(); + wxSizer* sizer = getBitmapButtonDelete(bitmap); + _panextracontrols->GetSizer()->Insert(_comboitems.size()*2,sizer,wxSizerFlags().Center()); + _panextracontrols->GetSizer()->InsertSpacer(_comboitems.size()*2+1,5); + _comboitems.push_back(boxitem); + _currentcolorselectedbitmap = _comboitems.size()-1; +} +void HistogramDialog::setCurrentColorConfigurationIntoButton(){ + + std::vector greylevel; + std::vector red; + std::vector green; + std::vector blue; + std::vector red0; + std::vector green0; + std::vector blue0; + GetValuesColorPointsFunction(greylevel,red,green,blue); + + for(int i = 0;i< greylevel.size();i++){ + greylevel[i] = greylevel[i]/_maxgreyvalue; + /*std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){red"< greylevel1; + std::vector value; + this->GetValuesPointsFunction(greylevel1,value); + + for(int i = 0;i< greylevel1.size();i++){ + greylevel1[i] = greylevel1[i]/_maxgreyvalue; + value[i] = value[i]; + std::cout<<"void HistogramDialog::setCurrentColorConfigurationIntoButton(){"<= 0 && _currentcolorselectedbitmap < _comboitems.size()){ + _comboitems[_currentcolorselectedbitmap]->SetColors(greylevel,red0,green0,blue0); + _comboitems[_currentcolorselectedbitmap]->SetTransferFunction(greylevel1,value); + bitmapbuttonsvect[_currentcolorselectedbitmap]->SetBitmapLabel(_comboitems[_currentcolorselectedbitmap]->GetBitmap()); + } +} - /* - Buttons - */ - okBtn = new wxButton(this,wxID_OK ,_T("OK")); - cancelBtn = new wxButton(this,wxID_CANCEL,_T("Cancel")); +wxSizer* HistogramDialog::getControls(bool extracontrols){ + + wxSizer* sizer = new wxBoxSizer(wxVERTICAL); - saveDataBtn = new wxButton(this,ID_SAVE,_T("Save")); - loadDataBtn = new wxButton(this,ID_LOAD,_T("Load")); - refreshBtn = new wxButton(this,ID_REFRESH,_T("Refresh")); + wxBitmap bitmap0(OpenImage_xpm); + wxBitmapButton* opendata = new wxBitmapButton(this, -1, bitmap0,wxDefaultPosition,wxSize(30,30)); + Connect(opendata->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnLoadData); + sizer->Add(opendata,wxSizerFlags().Center()); + sizer->AddSpacer(5); + - Connect(saveDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnSaveData ); - Connect(loadDataBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnLoadData ); - Connect(refreshBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &HistogramDialog::OnRefreshBtn ); + + wxBitmap bitmap1(Save_xpm); + wxBitmapButton* savedata = new wxBitmapButton(this, -1, bitmap1,wxDefaultPosition,wxSize(30,30)); + Connect(savedata->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnSaveData); + sizer->Add(savedata,wxSizerFlags().Center()); + sizer->AddSpacer(5); + + if(extracontrols){ + sizer->Add(getPanExtraControls(),wxSizerFlags().Center()); + } + //sizer->Add(getBitmapCombo(),wxSizerFlags().Center()); - //------------------- - //GUI - //------------------- - //Upper Box - wxBoxSizer * upper_box = new wxBoxSizer( wxHORIZONTAL ); - //Including components for plotter control - upper_box->Add( histogramW, 4, wxGROW); + return sizer; + - //bottom Sizer - wxBoxSizer *bottomBox = new wxBoxSizer( wxHORIZONTAL ); - bottomBox->Add( okBtn, wxSizerFlags().Center()); - bottomBox->AddSpacer(40); - bottomBox->Add( saveDataBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); - bottomBox->Add( loadDataBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); - bottomBox->Add( refreshBtn,wxSizerFlags().Center() ); - bottomBox->AddSpacer(40); - bottomBox->Add( cancelBtn,wxSizerFlags().Center() ); - //Sizer - wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); - sizer->Add(upper_box,1,wxEXPAND); - sizer->Add(bottomBox,0,wxCENTER); - SetAutoLayout( TRUE ); - SetSizer( sizer ); - SetBestSize(wxSize(600,600)); } //----------------------- @@ -392,16 +576,16 @@ void HistogramDialog::OnRefreshBtn(wxCommandEvent &event) NOTE I NEED THE UPDATE */ //if it was call from the clipping ctnrl panel - if(wxvtkclipping3Dview!=NULL) - { - wxvtkclipping3Dview->Refresh(); + //if(wxvtkclipping3Dview!=NULL) + //{ + // wxvtkclipping3Dview->Refresh(); - } - else if(wxvtkmpr3Dview!=NULL) - { - wxvtkmpr3Dview->Refresh(); + //} + //else if(wxvtkmpr3Dview!=NULL) + //{ + // wxvtkmpr3Dview->Refresh(); - } + //} } @@ -524,14 +708,14 @@ void HistogramDialog::OnRefreshBtn(wxCommandEvent &event) { newvol=vol; } - void HistogramDialog::setMPR3Dview(wxVtkMPR3DView *wxvtkmpr3Dview1) - { - wxvtkmpr3Dview=wxvtkmpr3Dview1; - } - void HistogramDialog::setClipping3DView(wxVtkClipping3DView *wxvtkclipping3Dview1) - { - wxvtkclipping3Dview=wxvtkclipping3Dview1; - } + //void HistogramDialog::setMPR3Dview(wxVtkMPR3DView *wxvtkmpr3Dview1) + //{ + // wxvtkmpr3Dview=wxvtkmpr3Dview1; + //} + //void HistogramDialog::setClipping3DView(wxVtkClipping3DView *wxvtkclipping3Dview1) + //{ + // wxvtkclipping3Dview=wxvtkclipping3Dview1; + //} void HistogramDialog::setTransferenceFunctionHasPoints(bool hasPoints) @@ -555,7 +739,8 @@ void HistogramDialog::OnRefreshBtn(wxCommandEvent &event) /** ** Initialize the histogram */ - void HistogramDialog::initializeHistogram(vtkImageData* img){ + void HistogramDialog::initializeHistogram(vtkImageData* img){ + _maxgreyvalue = img->GetScalarRange()[1]; histogramW->initializeHistogram(img); } /** @@ -581,4 +766,4 @@ void HistogramDialog::GetValuesColorPointsFunction(std::vector& greyleve void HistogramDialog::SetFunctions(vtkPiecewiseFunction* _opac, vtkColorTransferFunction* _color){ _tfun = _opac; _ctfun = _color; -} \ No newline at end of file +}