HistogramDialogComboBox.cxx

Go to the documentation of this file.
00001 #include "HistogramDialogComboBox.h"
00002 #include <vector>
00003 
00004 #include "Edit.xpm"
00005 
00006 #include "creaSystem.h"
00007 #include "HistogramDialog.h"
00008 //-------------------------
00009 //Constructor
00010 //-------------------------
00011 HistogramDialogComboBox::HistogramDialogComboBox(wxWindow* parent)
00012 : wxPanel(parent)
00013 {
00014         _img                            = NULL; 
00015         _bitmapcombo            = NULL;
00016         _slidercolor            = NULL;
00017         _sliderwindowlevel      = NULL; 
00018         colorBar_Bitmap         = NULL;
00019         _bitmapsizer            = NULL;
00020 
00021         this->SetSizer(getBitmapCombo());
00022         _img                            = NULL;
00023         _currentitem            = -1;
00024         _maxgreyvalue           = 0;
00025 printf("EED HistogramDialogComboBox\n");        
00026 }
00027 
00028 HistogramDialogComboBox::~HistogramDialogComboBox()
00029 {       
00030 }
00031 
00032 void HistogramDialogComboBox::SetColors(std::vector<double> greyvect, std::vector<double> redvect, std::vector<double> greenvect, std::vector<double> bluevect)
00033 {
00034         _greyvect       = greyvect;
00035         _redvect        = redvect;
00036         _greenvect      = greenvect;
00037         _bluevect       = bluevect;     
00038 }
00039 
00040 wxSizer* HistogramDialogComboBox::getBitmapCombo()
00041 {
00042         //_bitmapsizer = new wxBoxSizer(wxVERTICAL);
00043         _bitmapsizer = new wxBoxSizer(wxVERTICAL);
00044 
00045         wxBoxSizer* comboeditsizer = new wxBoxSizer(wxHORIZONTAL);
00046         _bitmapcombo = getBitmapComboElements();
00047 
00048         wxBitmap bitmap1(Edit_xpm);
00049         wxBitmapButton* edit = new wxBitmapButton(this, -1, bitmap1,wxDefaultPosition,wxSize(30,30));   
00050         Connect(edit->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialogComboBox::OnEditBitmapCombo);                       
00051         
00052         comboeditsizer->Add(_bitmapcombo,wxSizerFlags().Center().FixedMinSize());
00053         comboeditsizer->Add(edit,wxSizerFlags().Center());
00054 
00055 
00056         _bitmapsizer->Add(comboeditsizer,wxSizerFlags().FixedMinSize().Center());
00057         _bitmapsizer->AddSpacer(5);
00058         _bitmapsizer->Add(getSlidersWlCo(),wxSizerFlags().Expand().Center());
00059 
00060         return _bitmapsizer;
00061 }
00062 
00063 wxSizer* HistogramDialogComboBox::getSlidersWlCo(){
00064         wxBoxSizer* sizersliders = new wxBoxSizer(wxVERTICAL);
00065 
00066         _slidercolor = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
00067         _sliderwindowlevel = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
00068 
00069         sizersliders->Add(_slidercolor,wxSizerFlags().Expand().Center());
00070         sizersliders->Add(_sliderwindowlevel,wxSizerFlags().Expand().Center());
00071 
00072     Connect(_slidercolor->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnColorLevelChanged);
00073         Connect(_sliderwindowlevel->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnWindowLevelChanged);
00074 
00075         return sizersliders;
00076 }
00077 
00078 double HistogramDialogComboBox::GetWindowLevel()
00079 {
00080         if(_sliderwindowlevel != NULL)
00081         {
00082                 return _sliderwindowlevel->GetValue();
00083         }
00084 }
00085 
00086 double HistogramDialogComboBox::GetColorLevel()
00087 {
00088     if(_slidercolor != NULL)
00089         {
00090                 return _slidercolor->GetValue();
00091         }    
00092 }
00093 
00094 void HistogramDialogComboBox::OnColorLevelChanged(wxCommandEvent& event)
00095 {
00096         _slidercolor->GetValue();
00097         wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
00098         ProcessEvent(newevent);
00099 }
00100 
00101 void HistogramDialogComboBox::OnWindowLevelChanged(wxCommandEvent& event)
00102 {
00103         _sliderwindowlevel->GetValue();
00104         wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
00105     ProcessEvent(newevent);
00106 }
00107 
00108 void HistogramDialogComboBox::setImageData(vtkImageData* img)
00109 {
00110         _maxgreyvalue = img->GetScalarRange()[1];
00111         _img = img;
00112         setSlidersValue();
00113 }
00114 
00115 void HistogramDialogComboBox::setSlidersValue()
00116 {
00117         if(_img!=NULL){
00118                 if(_slidercolor!=NULL){
00119                         _slidercolor->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
00120                         _slidercolor->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
00121                 }
00122                 if(_sliderwindowlevel!=NULL){
00123                         _sliderwindowlevel->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
00124                         _sliderwindowlevel->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
00125                 }
00126         }
00127 }
00128 
00129 void HistogramDialogComboBox::OnEditBitmapCombo(wxCommandEvent& event)
00130 {       
00131         if(_img!=NULL)
00132         {
00133                 bool createaddandremovecontrols = true;
00134                 HistogramDialog* dialog = new HistogramDialog(this,_T("Color Configuration"),createaddandremovecontrols);
00135                 dialog->initializeHistogram(_img);              
00136                 dialog->setInfoPanExtraControls(_bitmapsitems);
00137 
00138                 if(dialog->ShowModal()==wxID_OK)
00139                 {
00140                         
00141                         dialog->UpdateCurrentComboElement();
00142                         _bitmapsitems = dialog->getComboBoxItems();
00143                         
00144 
00145                         std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");     
00146                         currentpath.append(FILENAME);
00147 
00148                         std::vector<double> redvect,greenvect,bluevect;
00149                         std::vector<double> greyvect;
00150 
00151                         saveCurrentConfiguration(_bitmapsitems, currentpath);
00152                         wxBitmapComboBox* tempbitmapcombo = _bitmapcombo;
00153                         for(int i = 0; i < _bitmapsitems.size();i++){
00154                                 delete _bitmapsitems[i];
00155                         }
00156                         _bitmapsitems.clear();
00157                         _bitmapcombo = getBitmapComboElements();
00158                         if(_bitmapsizer->Replace(tempbitmapcombo,_bitmapcombo)){                
00159                                 
00160                                 tempbitmapcombo->Destroy();
00161                         }
00162                         this->Layout();
00163                 }       
00164                 dialog->Destroy();
00165         }
00166 }
00167 
00168 void HistogramDialogComboBox::saveCurrentConfiguration(std::vector<HistogramDialogComboBoxItem*>& itembitmaps,std::string filename)
00169 {
00170         std::ofstream file;     
00171         file.open(  (const char*) (filename.c_str()) ); 
00172         double gv=-1,red=-1,gr=-1,bl=-1;
00173         int in=-1;
00174 
00175         if(file.is_open())
00176         {
00177                 file << "<ComboBoxData>" << std::endl;
00178                 for(int i = 0; i < itembitmaps.size();i++)
00179                 {
00180                         HistogramDialogComboBoxItem* item = itembitmaps[i];
00181                         std::vector<double> vecttransfer = item->getGreyVectorTransfer();
00182                         std::vector<double> value = item->getValueVector();
00183 
00184                         file << " <ComboBoxItem>"<< std::endl;
00185                         for(int j = 0; j < vecttransfer.size();j++)
00186                         {
00187                                 if(j==0){
00188                                         file << " <TransferenceFunction>"<< std::endl;
00189                                 }
00190                                 file << "               <Transferencepoint>" << std::endl;                              
00191                                 file << "                       <greyValue>" << vecttransfer[j] << "</greyValue>" <<std::endl;                          
00192                                 file << "                       <intensity>" << value[j] << "</intensity> "<<std::endl;
00193                                 file << "               </Transferencepoint>" << std::endl;
00194                                 if(j==vecttransfer.size()-1){
00195                     file << " </TransferenceFunction>"<< std::endl;
00196                                 }
00197                         }
00198                         std::vector<double> greyv = item->getGreyVector();
00199                         std::vector<double> red = item->getRedVector();
00200                         std::vector<double> green = item->getGreenVector();
00201                         std::vector<double> blue = item->getBlueVector();
00202                         for(int j = 0; j < greyv.size();j++)
00203                         {                                                       
00204                                 if(j==0){
00205                                         file << "       <Colors>" << std::endl;
00206                                 }
00207                                 file << "               <greyValueRGBpoint>" << std::endl;
00208                                 file << "                       <RGBgreyValue>" << greyv[j] << "</RGBgreyValue>" <<std::endl;
00209                                 file << "                       <red>" << red[j] << "</red>" <<std::endl;
00210                                 file << "                       <green>" << green[j] << "</green>" <<std::endl;
00211                                 file << "                       <blue>" << blue[j] << "</blue>" <<std::endl;
00212                                 file << "               </greyValueRGBpoint>" << std::endl;     
00213                                 if(j==greyv.size()-1){
00214                                         file << "       </Colors>" << std::endl;
00215                                 }
00216                         }
00217                         file << "       </ComboBoxItem>"<< std::endl;           
00218                 }
00219                 file << "</ComboBoxData>" << std::endl; 
00220         }
00221         file.close();
00222 }
00223 
00224 wxBitmapComboBox* HistogramDialogComboBox::getBitmapComboElements()
00225 {
00226         std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");     
00227         currentpath.append(FILENAME);
00228 
00229         std::vector<HistogramDialogComboBoxItem*> bitmapsitems;
00230         OnLoadComboBoxData(bitmapsitems, currentpath);  
00231         _bitmapsitems = bitmapsitems;
00232         wxString* choices;
00233         choices = new wxString[bitmapsitems.size()];
00234         for(int i = 0; i < bitmapsitems.size();i++)
00235         {
00236                 choices[i] = _T("");
00237         }
00238         wxBitmapComboBox* bitmapcombo = new wxBitmapComboBox(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, bitmapsitems.size(),choices);
00239         bitmapcombo->SetSize(65,30);
00240 
00241         Connect(bitmapcombo->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&HistogramDialogComboBox::OnBitmapComboItemSelected);                     
00242 
00243         for(int i = 0; i < bitmapsitems.size(); i++)
00244         {
00245         bitmapcombo->SetItemBitmap(i, bitmapsitems[i]->GetBitmap());
00246         }
00247         return  bitmapcombo;
00248 }
00249 
00250 void HistogramDialogComboBox::OnBitmapComboItemSelected(wxCommandEvent& event)
00251 {               
00252         if(_bitmapcombo!=NULL)
00253         {
00254                 _currentitem = event.GetInt();
00255                 if(_bitmapsitems.size()>_currentitem)
00256                 {
00257                         HistogramDialogComboBoxItem* currentconfig = _bitmapsitems[_currentitem];
00258                         _greyvect = currentconfig->getGreyVector();
00259                         _redvect = currentconfig->getRedVector();
00260                         _greenvect = currentconfig->getGreenVector();
00261                         _bluevect= currentconfig->getBlueVector();
00262                         _greyvecttransfer = currentconfig->getGreyVectorTransfer();
00263                         _value  = currentconfig->getValueVector();
00264                         wxCommandEvent newevent(wxEVT_COMMAND_COMBOBOX_SELECTED,this->GetId());
00265             ProcessEvent(newevent);
00266                 }       
00267         }
00268 }
00269 
00270 void HistogramDialogComboBox::OnLoadComboBoxData(std::vector<HistogramDialogComboBoxItem*>& itembitmaps, std::string filename)
00271 {       
00272         std::vector<double> redvect, greenvect, bluevect;
00273         std::vector<double> greyvect, greyvecttransfunct, value;
00274 
00275         redvect.clear(); 
00276         greenvect.clear(); 
00277         bluevect.clear();
00278         greyvect.clear(); 
00279         greyvecttransfunct.clear(); 
00280         value.clear();
00281 
00282         std::ifstream file;     
00283         file.open(  (const char*) (filename.c_str()) ); 
00284         double gv=-1,gvtransfer=-1,intensity=-1,red=-1,gr=-1,bl=-1;
00285         int in=-1;
00286 
00287         //std::cout<<filename<<std::endl;
00288         itembitmaps.clear();
00289         if(file.is_open())
00290         {       
00291                 bool add = false;
00292                 HistogramDialogComboBoxItem* item=NULL;
00293                 while(!file.eof())
00294                 {
00295                         std::string line;
00296                         std::getline(file,line);
00297                         //std::cout<<line<<std::endl;
00298             if( (int)(line.find("<ComboBoxItem>")!=-1))
00299                         {
00300                                 item = new HistogramDialogComboBoxItem();
00301                         }else if((int)(line.find("<greyValue>"))!=-1){
00302                 int pos1=line.find(">");
00303                                 int pos2=line.find("<",pos1+1);
00304                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00305                                 gvtransfer=atof(x.c_str());                             
00306                                 greyvecttransfunct.push_back(gvtransfer);
00307                         }else if((int)(line.find("<intensity>"))!=-1){
00308                 int pos1=line.find(">");
00309                                 int pos2=line.find("<",pos1+1);
00310                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00311                                 intensity=atof(x.c_str());                                      
00312                                 value.push_back(intensity);
00313                         }
00314                         else if( (int)(line.find("<RGBgreyValue>"))!=-1)
00315                         {
00316                                 int pos1=line.find(">");
00317                                 int pos2=line.find("<",pos1+1);
00318                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00319                                 gv=atof(x.c_str());                             
00320                                 greyvect.push_back(gv);                         
00321                         }
00322                         else if( (int)(line.find("<red>"))!=-1)
00323                         {
00324                                 int pos1=line.find(">");
00325                                 int pos2=line.find("<",pos1+1);
00326                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00327                                 red=atof(x.c_str());
00328                                 redvect.push_back(red);                         
00329                         }
00330                         else if( (int)(line.find("<green>"))!=-1)
00331                         {
00332                                 int pos1=line.find(">");
00333                                 int pos2=line.find("<",pos1+1);
00334                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00335                                 gr=atof(x.c_str());
00336                                 greenvect.push_back(gr);
00337                         }
00338                         else if( (int)(line.find("<blue>"))!=-1 )
00339                         {
00340                                 int pos1=line.find(">");
00341                                 int pos2=line.find("<",pos1+1);
00342                                 std::string x=line.substr(pos1+1,pos2-pos1-1);
00343                                 bl=atof(x.c_str());     
00344                                 bluevect.push_back(bl);
00345                                 
00346                         }else if( (int)(line.find("</ComboBoxItem>"))!=-1 ){
00347 
00348                                 item->SetColors(greyvect,redvect,greenvect,bluevect);
00349                                 item->SetTransferFunction(greyvecttransfunct,value);
00350                                 /*for(int i = 0; i < greyvecttransfunct.size();i++){
00351                                         std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvecttransfunct[i]<<std::endl;
00352                                         std::cout<<value[i]<<std::endl;
00353                                 }
00354                                 for(int i = 0; i < greyvect.size();i++){
00355                                         std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvect[i]<<std::endl;
00356                                         std::cout<<redvect[i]<<std::endl;
00357                                         std::cout<<greenvect[i]<<std::endl;
00358                                         std::cout<<bluevect[i]<<std::endl;
00359                                 }*/
00360                                 
00361                                 itembitmaps.push_back(item);
00362 
00363                                 greyvecttransfunct.clear();
00364                                 value.clear();
00365                                 greyvect.clear();
00366                                 redvect.clear();
00367                                 greenvect.clear();
00368                                 bluevect.clear();
00369                         }
00370                         line.clear();
00371                 }
00372                 file.close();                   
00373                 //std::cout<<itembitmaps.size()<<std::endl;
00374      }          
00375 }
00376 
00380 void HistogramDialogComboBox::GetValuesPointsFunction(std::vector<double>& greylevel,std::vector<double>& value)
00381 {       
00382         for(int i = 0; i < _greyvecttransfer.size();i++){               
00383                 greylevel.push_back(_greyvecttransfer[i]*_maxgreyvalue);
00384                 value.push_back(_value[i]);     
00385         }
00386 }
00387 
00392 void HistogramDialogComboBox::GetValuesColorPointsFunction(std::vector<double>& greylevel,
00393                                                                 std::vector<double>& red,
00394                                                                 std::vector<double>& green,
00395                                                                 std::vector<double>& blue)
00396 {       
00397         for(int i = 0; i < _greyvect.size();i++){               
00398                 greylevel.push_back(_greyvect[i]*_maxgreyvalue);
00399                 red.push_back(_redvect[i]);
00400                 green.push_back(_greenvect[i]);
00401                 blue.push_back(_bluevect[i]);           
00402         }
00403 }

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1