]> Creatis software - creaMaracasVisu.git/commitdiff
TransferFunctionfinish
authorJuan Prieto <Juan.Prieto@creatis.insa-lyon.fr>
Fri, 7 Aug 2009 14:55:08 +0000 (14:55 +0000)
committerJuan Prieto <Juan.Prieto@creatis.insa-lyon.fr>
Fri, 7 Aug 2009 14:55:08 +0000 (14:55 +0000)
12 files changed:
bbtk/src/bbmaracasvisuTransferFunctionView.cxx
bbtk/src/bbmaracasvisuTransferFunctionView.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramDialog.h
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/HistogramWidget.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/mathplot.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pGraphicalFunction.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pLogicalFunction.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/pPlotter/pPlotter.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManagerData.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererPanel.cxx
lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererPanel.h

index fb08960103c2527342858756b5930475927995cd..733b91dd07cf96e524947597a84f2f15dc1fe96e 100644 (file)
@@ -24,8 +24,9 @@ void TransferFunctionView::Process()
 
                if(_currentimg != bbGetInputIn()){
                        _currentimg =  bbGetInputIn();
-                       mwxwidget->initializeHistogram(_currentimg);    
-                       mwxwidget->Refresh();   
+                       //mwxwidget->initializeHistogram(_currentimg);                  
+                       mwxwidget->setImageData(_currentimg);   
+                       //mwxwidget->Refresh(); 
                }               
 
                mwxwidget->GetValuesPointsFunction(greylevel, value);
@@ -35,12 +36,12 @@ void TransferFunctionView::Process()
                _tfun->RemoveAllPoints();
                for(int i = 0; i < greylevel.size();i++){
                        _tfun->AddPoint(greylevel[i], value[i]);
-//                     std::cout<<"transfer function "<<greylevel[i]<<" "<< value[i]<<std::endl;
+                       std::cout<<"TransferFunctionView::Process()transfer function "<<greylevel[i]<<" "<< value[i]<<std::endl;
                }
                _ctfun->RemoveAllPoints();
                for(int i = 0; i < greylevelcolors.size();i++){
                        _ctfun->AddRGBPoint(greylevelcolors[i], red[i],green[i], blue[i]);
-//                     std::cout<<"transfer color function "<<greylevelcolors[i]<<" "<<red[i]<<" "<<green[i]<<" "<<blue[i]<<std::endl;
+               std::cout<<"TransferFunctionView::Process()transfer color function "<<greylevelcolors[i]<<" "<<red[i]<<" "<<green[i]<<" "<<blue[i]<<std::endl;
                }               
 
 
@@ -66,7 +67,9 @@ void TransferFunctionView::CreateWidget(wxWindow* parent)
 {
        bbtkDebugMessageInc("Core",9,"TransferFunctionView::CreateWxWindow()"<<std::endl);
 
-       mwxwidget = new HistogramWidget(parent, -1);
+       //mwxwidget = new HistogramWidget(parent, -1);
+       mwxwidget = new HistogramDialogComboBox(parent);
+
     bbtkDebugDecTab("Core",9);
        bbSetOutputWidget( mwxwidget ); 
 }
index 5f7a0fe8ed4999a3df9f79b1ccfbab416b33c5df..ef3fd0351e22aade539d8fc5b5592b7b0b4e4663 100644 (file)
@@ -4,7 +4,8 @@
 #include "bbtkWxBlackBox.h"
 
 #include "vtkImageData.h"
-#include "HistogramWidget.h"
+//#include "HistogramWidget.h"
+#include "HistogramDialogComboBox.h"
 
 #include "vtkPiecewiseFunction.h"
 #include "vtkColorTransferFunction.h"
@@ -33,8 +34,10 @@ class /*BBTK_EXPORT*/ TransferFunctionView
   void CreateWidget(wxWindow* parent);
 
   private:
-       HistogramWidget *mwxwidget;
+       //HistogramWidget *mwxwidget;
+         HistogramDialogComboBox *mwxwidget;
        vtkImageData* _currentimg;
+       
        vtkPiecewiseFunction* _tfun;
        vtkColorTransferFunction* _ctfun;
 };
index d4b9809df89e3eecac7c3e7c62df4313b2611b3a..bdbe707bca9748028c449631f15d7732e7008513 100644 (file)
@@ -5,7 +5,8 @@
 #include "Save.xpm"
 #include "Ok.xpm"
 #include "Cancel.xpm"
-#include "Edit.xpm"
+#include "Delete.xpm"
+
 #include "creaSystem.h"
 
 
@@ -23,24 +24,30 @@ 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"))
 {
 
-       initializeHistogramDialog();
+       initializeHistogramDialog(extracontrols);
        initializeHistogram(imageData);
 
 }
 
-HistogramDialog::HistogramDialog(wxWindow *parent,wxString title)
+HistogramDialog::HistogramDialog(wxWindow *parent,wxString title,bool extracontrols)
 :wxDialog(parent,-1,title,wxDefaultPosition,wxDefaultSize,wxRESIZE_BORDER|wxDEFAULT_DIALOG_STYLE   ,_T("dialogBox")){
-       initializeHistogramDialog();
+       
+       initializeHistogramDialog(extracontrols);
+}
+HistogramDialog::~HistogramDialog(){   
+
 }
 
-void HistogramDialog::initializeHistogramDialog(){
+void HistogramDialog::initializeHistogramDialog(bool extracontrols){
+       _currentcolorselectedbitmap = -1;
     _ctfun=NULL;
        _tfun=NULL;
-       _maxgreyvalue=0;
+       _panextracontrols=NULL;
+       _maxgreyvalue = 1;
 
        SetBackgroundColour(wxColour(255,255,255));
        /*
@@ -79,8 +86,9 @@ void HistogramDialog::initializeHistogramDialog(){
        //Upper Box
        wxBoxSizer * upper_box = new wxBoxSizer( wxHORIZONTAL );
        //Including components for plotter control
+       
        upper_box->Add( histogramW, 4, wxGROW);
-       upper_box->Add( getControls(),wxSizerFlags().Center() );
+       upper_box->Add( getControls(extracontrols),wxSizerFlags().Center() );   
 
        //bottom Sizer
        wxBoxSizer *bottomBox = new wxBoxSizer( wxHORIZONTAL );
@@ -102,194 +110,224 @@ void HistogramDialog::initializeHistogramDialog(){
        SetSizer( sizer );
        SetBestSize(wxSize(600,600));
 }
+wxPanel* HistogramDialog::getPanExtraControls(){
+       wxBoxSizer* sizer0 = new wxBoxSizer(wxVERTICAL);
+    _panextracontrols = new wxPanel(this);     
 
-wxSizer* HistogramDialog::getControls(){               
-               
-       wxSizer* sizer = new wxBoxSizer(wxVERTICAL);
-       
-       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);
-
-       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);
-
-    sizer->Add(getBitmapCombo(),wxSizerFlags().Center());
-       
-       
-       
-       return sizer;
-
+       _panextracontrols->SetSizer(sizer0);
+       _panextracontrols->SetAutoLayout(true);
 
+    return _panextracontrols;
 }
+/**
+** Set to true in the constructor
+**/
+void HistogramDialog::setInfoPanExtraControls(std::vector<HistogramDialogComboBoxItem*> comboitems){
+       _comboitems = comboitems;
+       if(_panextracontrols!=NULL){
+               _panextracontrols->Show(false);
+               for(int i=0; i < comboitems.size();i++){
 
-wxSizer* HistogramDialog::getBitmapCombo(){
-       _bitmapsizer = new wxBoxSizer(wxHORIZONTAL);
-
-       _bitmapcombo = getBitmapComboElements();
+                       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("Add the current color to the list of predefined");          
+               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();
 
-       wxBitmap bitmap1(Edit_xpm);
-       wxBitmapButton* edit = new wxBitmapButton(this, -1, bitmap1,wxDefaultPosition,wxSize(30,30));   
-       Connect(edit->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnEditBitmapCombo);                       
+       }
+}
+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("Delete the color from the list");
+       Connect(deletebutton->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnDeleteColor);
+       _deletebuttonsvector.push_back(deletebutton);
        
-       _bitmapsizer->Add(_bitmapcombo,wxSizerFlags().Center().FixedMinSize());
-       _bitmapsizer->Add(edit,wxSizerFlags().Center());
-
-       return _bitmapsizer;
+       //wxBitmap bitmap0(OpenImage_xpm);
+       wxBitmapButton* button = new wxBitmapButton(_panextracontrols,wxID_ANY,bitmap,wxDefaultPosition,wxSize(30,30));                 
+       button->SetToolTip("Load the current color configuration.");
+       bitmapbuttonsvect.push_back(button);                    
+       Connect(button->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialog::OnEditColorsCombo);
+       /*char c[10];
+       wxString s;
+       s.Printf(_T("%d"),i);*/
        
+       //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::OnEditBitmapCombo(wxCommandEvent& event){
-
-       wxBitmapComboBox* tempbitmapcombo = _bitmapcombo;
-
-       for(int i = 0; i < _bitmapsitems.size();i++){
-               delete _bitmapsitems[i];
-       }
-       _bitmapsitems.clear();
-
-       _bitmapcombo = getBitmapComboElements();
-       if(_bitmapsizer->Replace(tempbitmapcombo,_bitmapcombo)){
-               
-               
-               tempbitmapcombo->Destroy();
+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();
+               }
        }
-       this->Layout();
+    _panextracontrols->Layout();
 }
-
-wxBitmapComboBox* HistogramDialog::getBitmapComboElements(){
-       std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");     
-       currentpath.append(FILENAME);
-
-       std::vector<int> redvect,greenvect,bluevect;
-       std::vector<double> greyvect;
-
-
-       std::vector<HistogramDialogComboBoxItem*> bitmapsitems;
-       OnLoadComboBoxData(bitmapsitems, currentpath,greyvect, redvect,greenvect,bluevect);     
-       _bitmapsitems = bitmapsitems;
-       wxString* choices;
-       choices = new wxString[bitmapsitems.size()];
-       for(int i = 0; i < bitmapsitems.size();i++){
-               choices[i] = _T("");
+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<double> greyvect = currentconfig->getGreyVector();
+                               std::vector<double> _redvect = currentconfig->getRedVector();
+                               std::vector<double> _greenvect = currentconfig->getGreenVector();
+                               std::vector<double> _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){"<<greyv<<" "<<value<<std::endl;
+                                       this->addPointToTransferenceFunction(greyv*_maxgreyvalue, value*100);
+                               }
+                       }
+               }
        }
-       wxBitmapComboBox* bitmapcombo = new wxBitmapComboBox(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, bitmapsitems.size(),choices);
-
-       Connect(bitmapcombo->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&HistogramDialog::OnBitmapComboItemSelected);                     
-       
-
-       for(int i = 0; i < bitmapsitems.size(); i++){
-        bitmapcombo->SetItemBitmap(i, bitmapsitems[i]->GetBitmap());
+       if(!loadconfig){                
+               AddNewBitmapButton();           
        }
-
        
-       return  bitmapcombo;
+       _panextracontrols->Layout();
+       this->Layout();
+       this->Refresh();
 }
-void HistogramDialog::OnBitmapComboItemSelected(wxCommandEvent& event){
-       if(_bitmapcombo!=NULL){
-               int selecteditem = event.GetInt();              
-               if(_bitmapsitems.size()>selecteditem){
-                       HistogramDialogComboBoxItem* currentconfig = _bitmapsitems[selecteditem];
-                       this->eraseColorPoints();
-                       for(int i = 0; i < currentconfig->getGreyVector().size();i++){
-                               int greyv = currentconfig->getGreyVector()[i]*_maxgreyvalue;
-                               int red = currentconfig->getRedVector()[i];
-                               int green = currentconfig->getGreenVector()[i];
-                               int blue = currentconfig->getBlueVector()[i];
-
-                               this->addColorPoint(greyv, red, green, blue);
-                       }
-               }
-               
+void HistogramDialog::UpdateCurrentComboElement(){
+       if(_currentcolorselectedbitmap >= 0 && _currentcolorselectedbitmap < _comboitems.size()){
+               setCurrentColorConfigurationIntoButton();
        }
 }
-std::vector<wxBitmap*> HistogramDialog::GetBitmapsList(std::vector<double> greyvect, std::vector<int> redvect, std::vector<int> greenvect, std::vector<int> bluevect){
-
-       std::vector<wxBitmap*> bitmaps;
-       for(int i = 0; i < greyvect.size();i++){
-        //bitmaps.push_back();
+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<double> greylevel;
+               std::vector<double> red;
+               std::vector<double> green;
+               std::vector<double> blue;
+               std::vector<double> red0;
+               std::vector<double> green0;
+               std::vector<double> blue0;
+               GetValuesColorPointsFunction(greylevel,red,green,blue);
+
+               for(int i = 0;i< greylevel.size();i++){
+                       greylevel[i] = greylevel[i]/_maxgreyvalue;
+                       /*std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){red"<<red[i]<<std::endl;
+                       std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){green"<<green[i]<<std::endl;
+                       std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){blue"<<blue[i]<<std::endl;*/
+                       red0.push_back(red[i]);
+                       green0.push_back(green[i]);
+                       blue0.push_back(blue[i]);                       
+                       /*std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){red"<<red0[i]<<std::endl;
+                       std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){green"<<green0[i]<<std::endl;
+                       std::cout<<"HistogramDialog::setCurrentColorConfigurationIntoButton(){blue"<<blue0[i]<<std::endl;*/
+               }
+               
+               std::vector<double> greylevel1;
+               std::vector<double> 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(){"<<greylevel1[i]<<std::endl;
+                       std::cout<<"void HistogramDialog::setCurrentColorConfigurationIntoButton(){"<<value[i]<<std::endl;
+               }
+       if(_currentcolorselectedbitmap >= 0 && _currentcolorselectedbitmap < _comboitems.size()){
+               _comboitems[_currentcolorselectedbitmap]->SetColors(greylevel,red0,green0,blue0);
+               _comboitems[_currentcolorselectedbitmap]->SetTransferFunction(greylevel1,value);        
+               bitmapbuttonsvect[_currentcolorselectedbitmap]->SetBitmapLabel(_comboitems[_currentcolorselectedbitmap]->GetBitmap());
        }
 }
-void HistogramDialog::OnLoadComboBoxData(std::vector<HistogramDialogComboBoxItem*>& itembitmaps, std::string filename, std::vector<double>& greyvect, std::vector<int>& redvect, std::vector<int>& greenvect, std::vector<int>& bluevect){    
 
+wxSizer* HistogramDialog::getControls(bool extracontrols){             
+               
+       wxSizer* sizer = new wxBoxSizer(wxVERTICAL);
        
-       std::ifstream file;     
-       file.open(  (const char*) (filename.c_str()) ); 
-       double gv=-1;
-       int in=-1,red=-1,gr=-1,bl=-1;
-
-       std::cout<<filename<<std::endl;
-       itembitmaps.clear();
-       if(file.is_open())
-       {       
-               bool add = false;
-               HistogramDialogComboBoxItem* item=NULL;
-               while(!file.eof())
-               {
-                       std::string line;
-                       std::getline(file,line);
+       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);
 
-            if( (int)(line.find("<Colors>")!=-1))
-                       {
-                               item = new HistogramDialogComboBoxItem();
-                       }else if( (int)(line.find("RGBgreyValue"))!=-1)
-                       {
-                               int pos1=line.find(">");
-                               int pos2=line.find("<",pos1+1);
-                               std::string x=line.substr(pos1+1,pos2-pos1-1);
-                               gv=atof(x.c_str());                             
-                               
-                       }
-                       else if( (int)(line.find("red"))!=-1)
-                       {
-                               int pos1=line.find(">");
-                               int pos2=line.find("<",pos1+1);
-                               std::string x=line.substr(pos1+1,pos2-pos1-1);
-                               red=atoi(x.c_str());
-                               
-                       }
-                       else if( (int)(line.find("green"))!=-1)
-                       {
-                               int pos1=line.find(">");
-                               int pos2=line.find("<",pos1+1);
-                               std::string x=line.substr(pos1+1,pos2-pos1-1);
-                               gr=atoi(x.c_str());
-                       }
-                       else if( (int)(line.find("blue"))!=-1 )
-                       {
-                               int pos1=line.find(">");
-                               int pos2=line.find("<",pos1+1);
-                               std::string x=line.substr(pos1+1,pos2-pos1-1);
-                               bl=atoi(x.c_str());                                                             
-                               greyvect.push_back(gv);
-                               redvect.push_back(red);
-                               greenvect.push_back(gr);
-                               bluevect.push_back(bl);
-                       }else if( (int)(line.find("</Colors>"))!=-1 ){
+       
 
-                               item->SetColors(greyvect,redvect,greenvect,bluevect);
+       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);
 
-                               itembitmaps.push_back(item);
+       if(extracontrols){
+               sizer->Add(getPanExtraControls(),wxSizerFlags().Center());
+       }
+    //sizer->Add(getBitmapCombo(),wxSizerFlags().Center());
+       
+       
+       
+       return sizer;
 
-                               greyvect.clear();
-                               redvect.clear();
-                               greenvect.clear();
-                               bluevect.clear();
 
-                       }
-                       
-                       line.clear();
-               }
-               file.close();                   
-               std::cout<<itembitmaps.size()<<std::endl;
-     } 
-       
 }
+
 //-----------------------
 //Handling events
 //-----------------------
@@ -701,7 +739,7 @@ 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);
        }
index 011314d19e71d17e5e0fc5f4d64435b4a78e016d..8e9ece3e656942c30c50be79ddd2d57782e91414 100644 (file)
  #include <vtkVolumeRayCastMapper.h>
  #include <vtkVolume.h>
  #include "../wxMPRWidget.h"
-#include "HistogramDialogComboBoxItem.h"
-
-#include <wx/bmpcbox.h>
-
 
-#define FILENAME "/Data/colorsfunction.txt"
+#include "HistogramDialogComboBoxItem.h"
+#include <wx/checkbox.h>
+#include <wx/statbmp.h>
 
 class HistogramDialog:public wxDialog
 {
@@ -39,11 +37,12 @@ public:
        /*
         Constructor
        */
-       HistogramDialog(wxWindow *parent,wxString title,vtkImageData* imageData,int type);
+       HistogramDialog(wxWindow *parent,wxString title,vtkImageData* imageData,bool extracontrols=false);
        /*
         Constructor
        */
-       HistogramDialog(wxWindow *parent,wxString title);
+       HistogramDialog(wxWindow *parent,wxString title,bool extracontrols=false);
+       ~HistogramDialog();
        /*
         Methods
        */
@@ -134,7 +133,7 @@ public:
        void OnSaveData(wxCommandEvent& event);
        void OnLoadData(wxCommandEvent& event);
        void OnRefreshBtn(wxCommandEvent& event);
-       void OnEditBitmapCombo(wxCommandEvent& event);
+       
 
        /**
        **      Initialize the histogram 
@@ -155,7 +154,22 @@ public:
                                                                        std::vector<double>& blue);
        void SetFunctions(vtkPiecewiseFunction* _opac, vtkColorTransferFunction* _color);
 
-       void OnBitmapComboItemSelected(wxCommandEvent& event);
+       /**
+       ** Set to true in the constructor
+       **/
+       void setInfoPanExtraControls(std::vector<HistogramDialogComboBoxItem*> comboitems);
+       
+
+       /**
+       *
+       */
+       void OnEditColorsCombo(wxCommandEvent& event);
+       void OnDeleteColor(wxCommandEvent& event);
+
+       std::vector<HistogramDialogComboBoxItem*> getComboBoxItems(){return _comboitems;}
+
+       void UpdateCurrentComboElement();
+       
 private:
        /*
        Histogram Widget
@@ -164,7 +178,6 @@ private:
 /**
 **     
 **/
-       double _maxgreyvalue;
        /*
         ok Button
        */
@@ -188,7 +201,8 @@ private:
        */
        wxButton                *refreshBtn;
 
-       wxSizer* _bitmapsizer;
+       wxPanel* _panextracontrols;
+       
        
        // the user had pressed refresh
        bool refreshed;
@@ -202,18 +216,29 @@ private:
        wxVtkMPR3DView                                          *wxvtkmpr3Dview;
        wxVtkClipping3DView                                     *wxvtkclipping3Dview;
 
-       wxBitmapComboBox*       _bitmapcombo;   
-       std::vector<HistogramDialogComboBoxItem*> _bitmapsitems;
-       wxSizer* getControls();
-       wxSizer* getBitmapCombo();
-       wxBitmapComboBox* getBitmapComboElements();
-       void OnLoadComboBoxData(std::vector<HistogramDialogComboBoxItem*>& itembitmaps, std::string filename,std::vector<double>& greyvect, std::vector<int>& redvect, std::vector<int>& greenvect, std::vector<int>& bluevect);
-       std::vector<wxBitmap*> GetBitmapsList(std::vector<double> greyvect, std::vector<int> redvect, std::vector<int> greenvect, std::vector<int> bluevect);
+       
+       wxSizer* getControls(bool extracontrols = false);
+
+       
+       
 //     DECLARE_CLASS(HistogramDialog);
        // any class wishing to process wxWindows events must use this macro
        //DECLARE_EVENT_TABLE()
 
-       void initializeHistogramDialog();
+       void initializeHistogramDialog(bool extracontrols);
+
+        wxPanel* getPanExtraControls();
+
+        std::vector<wxBitmapButton*> bitmapbuttonsvect;
+        std::vector<HistogramDialogComboBoxItem*> _comboitems;
+
+        void setCurrentColorConfigurationIntoButton();
+        void AddNewBitmapButton();
+        wxSizer* getBitmapButtonDelete(wxBitmap bitmap);
+        std::vector<wxBitmapButton*> _deletebuttonsvector;
+
+        int _maxgreyvalue;
+        int _currentcolorselectedbitmap;
 };
 
 #endif
index 51a30e7354cf7e6b9c0b1237a89570c97b6a91e9..d3dbfc46b1898b5599aa4500d64b48504cd3cb73 100644 (file)
@@ -313,7 +313,7 @@ HistogramWidget::HistogramWidget( wxWindow *parent, wxWindowID id, const wxPoint
        {
                bool result=false;
                pGraphicalFunction* tf=plotter->getFunction(idTransferenceFunction);
-printf("EED %p HistogramWidget::addPointToTransferenceFunction tp%p x%f y%f %d\n",this, tf, x ,y, idTransferenceFunction);
+//printf("EED %p HistogramWidget::addPointToTransferenceFunction tp%p x%f y%f %d\n",this, tf, x ,y, idTransferenceFunction);
                if (tf!=NULL) { result=tf->AddPoint(x,y); }
                
                return result;
index 5a34b170b12e57d2a12b07b2a0f6a22c85771e47..b6b1e48c9784eb5a3a2a59ec9c4b5cce58e9f279 100644 (file)
@@ -408,6 +408,7 @@ mpWindow::mpWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const w
        m_lockaspect = FALSE;
        offsetX = offsetY = 0;
        offsetPixelX = offsetPixelY= 0;
+       _bitmap_functions=NULL;
 
        real_guideLine_X = -1;
        real_guideLine_Y = -1;
index c02da995befa6c75f63f27782b5a3d609dd50f38..5e3ce6310b642ff57065b254ad69d7258ed89761 100644 (file)
@@ -48,6 +48,7 @@ pGraphicalFunction:: pGraphicalFunction(wxString name, int flags)
        offsetPixelY=0;
        xTraslation=0;
        mType=DEFAULT;
+       
 }
 
 /**
index 3c8d9250a88bfbf1fb76ad1e801a37032131cf3f..5822083a1691f8b059fab7622e3d7c9a299c2764 100644 (file)
@@ -118,7 +118,11 @@ bool pLogicalFunction:: AddNewPoint(int x,int y)
        bool includedPoint = realPoints.Append(newPoint)!=NULL;
        if(includedPoint)
        {
-           bool order=orderPoints();
+               bool order=true;
+               if(realPoints.size()>1){
+                       order=orderPoints();
+               }
+           
                return order; 
        }
        return includedPoint;
@@ -141,8 +145,14 @@ bool pLogicalFunction::orderPoints()
        int nextX;
 
        // Used for validating 'leftToRigthDef'
-       pFunctionPoint* ordFirstPoint = (pFunctionPoint*)realPoints.GetFirst()-> GetData();
-       pFunctionPoint* ordLastPoint = (pFunctionPoint*)(lastNodeIncluded->GetPrevious())-> GetData();
+       pFunctionPoint* ordFirstPoint = NULL;
+       pFunctionPoint* ordLastPoint =  NULL;
+       if(node!=NULL){
+               ordFirstPoint = (pFunctionPoint*)realPoints.GetFirst()-> GetData();
+       }
+       if(lastNodeIncluded->GetPrevious()!=NULL){
+               ordLastPoint = (pFunctionPoint*)(lastNodeIncluded->GetPrevious())-> GetData();
+       }
 
 
        // Normal drawing
index 643743ca0d422b17f2598dc3f523bb40cffdf430..97015de50c4af851b37f436bfddc0460d0dd52fd 100644 (file)
@@ -100,7 +100,7 @@ END_EVENT_TABLE()
        {
                SetBackgroundColour(wxColour(255,255,255));
                m_plot = new pPlotterWindow( this, -1, wxPoint(0,0), wxSize(nWidth,nHeight), wxSUNKEN_BORDER );
-               
+               actualFunction =NULL;
                // Adding the axis layers to the plotter
                m_plot->AddLayer( new pPlotterScaleX() );
                m_plot->AddLayer( new pPlotterScaleY() );  
@@ -182,8 +182,9 @@ END_EVENT_TABLE()
 
 
        pPlotter :: ~pPlotter ()
-       {
-
+       {       
+               
+               
        }
 
 //---------------------------------------------------------------------------------------------
index de064e339aff011d3c87fdcbb66aa2a9b05cd896..fb0ef0a8e08e331bf321c308e84068293333d29b 100644 (file)
@@ -58,7 +58,7 @@ void wxMaracasMultipleVolumeRendererManagerData::setVolumeColor(std::vector<doub
        _ctfun->RemoveAllPoints();
        for(int i = 0; i < greylevelcolors.size();i++){
                _ctfun->AddRGBPoint(greylevelcolors[i], red[i],green[i], blue[i]);
-       //                      std::cout<<"transfer color function "<<greylevelcolors[i]<<" "<<red[i]<<" "<<green[i]<<" "<<blue[i]<<std::endl;
+                               //std::cout<<"wxMaracasMultipleVolumeRendererManagerData::setVolumeColor "<<greylevelcolors[i]<<" "<<red[i]<<" "<<green[i]<<" "<<blue[i]<<std::endl;
        }               
        _newvol->Update();      
 }
@@ -71,7 +71,7 @@ void wxMaracasMultipleVolumeRendererManagerData::setVolumeOpacity(std::vector<do
        _tfun->RemoveAllPoints();
        for(int i = 0; i < greylevel.size();i++){
                _tfun->AddPoint(greylevel[i], value[i]);
-//                     std::cout<<"transfer function "<<greylevel[i]<<" "<< value[i]<<std::endl;
+                       //std::cout<<"wxMaracasMultipleVolumeRendererManagerData::setVolumeOpacity "<<greylevel[i]<<" "<< value[i]<<std::endl;
        }
     _newvol->Update();
 }
index 6337f764210bbe01be1d5354aaf34b9e1599a489..de919ee40e6742181ca7281caf722a56dc7ff41d 100644 (file)
@@ -35,10 +35,15 @@ void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
 
        sizerirmprop->Add(checkbox,wxFIXED_MINSIZE);    
        
-       wxBitmap bitmap(Color_xpm);
-       _colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));    
-       Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);                      
-       sizerirmprop->Add(_colorchoose,wxFIXED_MINSIZE);        
+       //wxBitmap bitmap(Color_xpm);
+       //_colorchoose = new wxBitmapButton(this, -1, bitmap,wxDefaultPosition,wxSize(30,30));  
+       //Connect(_colorchoose->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);                    
+
+       mwxwidget = new HistogramDialogComboBox(this);
+       mwxwidget->setImageData(img);
+    //mwxwidget->PushEventHandler(this);
+       Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onColorChange);
+       sizerirmprop->Add(mwxwidget,wxFIXED_MINSIZE);   
 
        
        this->SetSizer(sizerirmprop, true);             
@@ -56,17 +61,14 @@ void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
        Connect(button3->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&wxMaracasMultipleVolumeRendererPanel::onUpdate);                                */
 
 
-       mwxwidget = new HistogramDialog(this, _T("Color Transfer Function"));
-       mwxwidget->initializeHistogram(img);
+       
 
-       mwxwidget->erasePointsTransferenceFunction();
+       /*mwxwidget->erasePointsTransferenceFunction();
        double range[2];
        img->GetScalarRange(range);
        double max = range[1];
 
-       /*
-       adding the poinst of the transference function
-       */
+       
        //X
        mwxwidget->addPointToTransferenceFunction(max * 0/2,0.0);
        mwxwidget->addPointToTransferenceFunction(max * 1/2,100.0);
@@ -76,7 +78,7 @@ void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
        mwxwidget->addColorPoint(max*1/4,(int)(1.0*255),(int)(0.0*255),(int)(0.0*255));
        mwxwidget->addColorPoint(max*2/4,(int)(0.0*255),(int)(0.0*255),(int)(1.0*255));
        mwxwidget->addColorPoint(max*3/4,(int)(0.0*255),(int)(1.0*255),(int)(0.0*255));
-       mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); 
+       mwxwidget->addColorPoint(max*4/4,(int)(0.0*255),(int)(0.0*255),(int)(0.2*255)); */
 
        /*wxBoxSizer* boxSizer0 = new wxBoxSizer(wxHORIZONTAL);
        boxSizer0->Add(mwxwidget, 4, wxGROW);
@@ -100,8 +102,8 @@ void wxMaracasMultipleVolumeRendererPanel::createControls(vtkImageData* img){
 
        _frame->Refresh();
        _frame->Update();*/     
-       mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
-                                                       wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
+       //mwxwidget->SetFunctions(wxMaracasMultipleVolumeRendererView::getInstance()->GetTransferFunction(getPropId()),
+       //                                              wxMaracasMultipleVolumeRendererView::getInstance()->GetColorFunction(getPropId()));
        mwxwidget->Refresh();   
 }
 void wxMaracasMultipleVolumeRendererPanel::onOK(wxCommandEvent& event){
@@ -133,10 +135,10 @@ void wxMaracasMultipleVolumeRendererPanel::updateVolume(){
 }
 void wxMaracasMultipleVolumeRendererPanel::onColorChange(wxCommandEvent& event){       
 
-       if(mwxwidget->ShowModal()==wxID_OK){
+       //if(mwxwidget->ShowModal()==wxID_OK){
         updateVolume();
-               mwxwidget->Show(false);
-       }       
+       //      mwxwidget->Show(false);
+       //}     
 }
 void wxMaracasMultipleVolumeRendererPanel::onCheckBoxChange(wxCommandEvent& event){    
        wxMaracasMultipleVolumeRendererView::getInstance()->addRemoveActor(this->getPropId(), checkbox->GetValue());    
index 13d240529d646ad97b3c601f4dc5db2e51047195..ab4e331e4697a366503e65cf196f5781705c4a73 100644 (file)
@@ -2,7 +2,7 @@
 #define wxMaracasMultipleVolumeRendererPanel_H_
 
 #include <wx/wx.h>
-#include "HistogramDialog.h"
+#include "HistogramDialogComboBox.h"
 
 class wxMaracasMultipleVolumeRendererPanel : public wxPanel{
        
@@ -21,13 +21,13 @@ public:
        
 private:
        wxCheckBox* checkbox;
-       wxBitmapButton* _colorchoose;
+       //wxBitmapButton* _colorchoose;
        
        int _propid;
 
        bool first;
 
-       HistogramDialog* mwxwidget;
+       HistogramDialogComboBox* mwxwidget;
        //wxFrame* _frame;
        
 };