1 #include "HistogramDialogComboBox.h"
6 #include "creaSystem.h"
7 #include "HistogramDialog.h"
8 //-------------------------
10 //-------------------------
11 HistogramDialogComboBox::HistogramDialogComboBox(wxWindow* parent)
17 _sliderwindowlevel = NULL;
18 colorBar_Bitmap = NULL;
21 this->SetSizer(getBitmapCombo());
25 printf("EED HistogramDialogComboBox\n");
27 std::string currentpath = crea::System::GetExecutablePath();
28 currentpath.append("../share/creaMaracasVisu/data/");
29 crea::System::createDirectory(currentpath.c_str());
33 HistogramDialogComboBox::~HistogramDialogComboBox()
37 void HistogramDialogComboBox::SetColors(std::vector<double> greyvect, std::vector<double> redvect, std::vector<double> greenvect, std::vector<double> bluevect)
41 _greenvect = greenvect;
45 wxSizer* HistogramDialogComboBox::getBitmapCombo()
47 //_bitmapsizer = new wxBoxSizer(wxVERTICAL);
48 _bitmapsizer = new wxBoxSizer(wxVERTICAL);
50 wxBoxSizer* comboeditsizer = new wxBoxSizer(wxHORIZONTAL);
51 _bitmapcombo = getBitmapComboElements();
53 wxBitmap bitmap1(Edit_xpm);
54 wxBitmapButton* edit = new wxBitmapButton(this, -1, bitmap1,wxDefaultPosition,wxSize(30,30));
55 Connect(edit->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialogComboBox::OnEditBitmapCombo);
57 comboeditsizer->Add(_bitmapcombo,wxSizerFlags().Center().FixedMinSize());
58 comboeditsizer->Add(edit,wxSizerFlags().Center());
60 _bitmapsizer->Add(comboeditsizer,wxSizerFlags().FixedMinSize().Center());
61 _bitmapsizer->AddSpacer(5);
62 _bitmapsizer->Add(getSlidersWlCo(),wxSizerFlags().Expand().Center());
67 wxSizer* HistogramDialogComboBox::getSlidersWlCo()
69 wxBoxSizer* sizersliders = new wxBoxSizer(wxVERTICAL);
71 _slidercolor = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
72 _sliderwindowlevel = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
74 sizersliders->Add(_slidercolor,wxSizerFlags().Expand().Center());
75 sizersliders->Add(_sliderwindowlevel,wxSizerFlags().Expand().Center());
77 Connect(_slidercolor->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnColorLevelChanged);
78 Connect(_sliderwindowlevel->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnWindowLevelChanged);
83 double HistogramDialogComboBox::GetWindowLevel()
86 if(_sliderwindowlevel != NULL)
87 val= _sliderwindowlevel->GetValue();
91 double HistogramDialogComboBox::GetColorLevel()
94 if(_slidercolor != NULL)
95 val = _slidercolor->GetValue();
99 void HistogramDialogComboBox::OnColorLevelChanged(wxCommandEvent& event)
101 _slidercolor->GetValue();
102 wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
103 ProcessEvent(newevent);
106 void HistogramDialogComboBox::OnWindowLevelChanged(wxCommandEvent& event)
108 _sliderwindowlevel->GetValue();
109 wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
110 ProcessEvent(newevent);
113 void HistogramDialogComboBox::setImageData(vtkImageData* img)
115 _maxgreyvalue = img->GetScalarRange()[1];
120 void HistogramDialogComboBox::setSlidersValue()
123 if(_slidercolor!=NULL){
124 _slidercolor->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
125 _slidercolor->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
127 if(_sliderwindowlevel!=NULL){
128 _sliderwindowlevel->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
129 _sliderwindowlevel->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
134 void HistogramDialogComboBox::OnEditBitmapCombo(wxCommandEvent& event)
138 bool createaddandremovecontrols = true;
139 HistogramDialog* dialog = new HistogramDialog(this,_T("Color Configuration"),createaddandremovecontrols);
140 dialog->initializeHistogram(_img);
141 dialog->setInfoPanExtraControls(_bitmapsitems);
143 if(dialog->ShowModal()==wxID_OK)
145 dialog->UpdateCurrentComboElement();
146 _bitmapsitems = dialog->getComboBoxItems();
148 //std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu"); // JPR
149 std::string dllLastName;
150 std::string currentpath;
152 dllLastName = "bbcreaMaracasVisu";
153 currentpath = crea::System::GetDllAppPath(dllLastName);
156 currentpath = crea::System::GetExecutablePath();
157 currentpath.append("../share/creaMaracasVisu/data/");
159 currentpath.append(FILENAME);
161 std::vector<double> redvect,greenvect,bluevect;
162 std::vector<double> greyvect;
164 saveCurrentConfiguration(_bitmapsitems, currentpath);
165 wxBitmapComboBox* tempbitmapcombo = _bitmapcombo;
166 for(int i = 0; i < _bitmapsitems.size();i++){
167 delete _bitmapsitems[i];
169 _bitmapsitems.clear();
170 _bitmapcombo = getBitmapComboElements();
171 if(_bitmapsizer->Replace(tempbitmapcombo,_bitmapcombo)){
173 tempbitmapcombo->Destroy();
181 void HistogramDialogComboBox::saveCurrentConfiguration(std::vector<HistogramDialogComboBoxItem*>& itembitmaps,std::string filename)
184 file.open( (const char*) (filename.c_str()) );
185 double gv=-1,red=-1,gr=-1,bl=-1;
190 file << "<ComboBoxData>" << std::endl;
191 for(int i = 0; i < itembitmaps.size();i++)
193 HistogramDialogComboBoxItem* item = itembitmaps[i];
194 std::vector<double> vecttransfer = item->getGreyVectorTransfer();
195 std::vector<double> value = item->getValueVector();
197 file << " <ComboBoxItem>"<< std::endl;
198 for(int j = 0; j < vecttransfer.size();j++)
201 file << " <TransferenceFunction>"<< std::endl;
203 file << " <Transferencepoint>" << std::endl;
204 file << " <greyValue>" << vecttransfer[j] << "</greyValue>" <<std::endl;
205 file << " <intensity>" << value[j] << "</intensity> "<<std::endl;
206 file << " </Transferencepoint>" << std::endl;
207 if(j==vecttransfer.size()-1){
208 file << " </TransferenceFunction>"<< std::endl;
211 std::vector<double> greyv = item->getGreyVector();
212 std::vector<double> red = item->getRedVector();
213 std::vector<double> green = item->getGreenVector();
214 std::vector<double> blue = item->getBlueVector();
215 for(int j = 0; j < greyv.size();j++)
218 file << " <Colors>" << std::endl;
220 file << " <greyValueRGBpoint>" << std::endl;
221 file << " <RGBgreyValue>" << greyv[j] << "</RGBgreyValue>" <<std::endl;
222 file << " <red>" << red[j] << "</red>" <<std::endl;
223 file << " <green>" << green[j] << "</green>" <<std::endl;
224 file << " <blue>" << blue[j] << "</blue>" <<std::endl;
225 file << " </greyValueRGBpoint>" << std::endl;
226 if(j==greyv.size()-1){
227 file << " </Colors>" << std::endl;
230 file << " </ComboBoxItem>"<< std::endl;
232 file << "</ComboBoxData>" << std::endl;
237 wxBitmapComboBox* HistogramDialogComboBox::getBitmapComboElements()
239 std::string currentpath = "";
241 currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");
244 currentpath = crea::System::GetExecutablePath();
245 currentpath.append("../share/CreaMaracasVisu/data/");
247 currentpath.append(FILENAME);
249 std::cout<<"current file name " <<currentpath<<std::endl;
251 std::vector<HistogramDialogComboBoxItem*> bitmapsitems;
252 OnLoadComboBoxData(bitmapsitems, currentpath);
253 _bitmapsitems = bitmapsitems;
255 choices = new wxString[bitmapsitems.size()];
256 for(int i = 0; i < bitmapsitems.size();i++)
260 wxBitmapComboBox* bitmapcombo = new wxBitmapComboBox(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, bitmapsitems.size(),choices);
261 bitmapcombo->SetSize(65,30);
263 Connect(bitmapcombo->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&HistogramDialogComboBox::OnBitmapComboItemSelected);
265 for(int i = 0; i < bitmapsitems.size(); i++)
267 bitmapcombo->SetItemBitmap(i, bitmapsitems[i]->GetBitmap());
272 void HistogramDialogComboBox::OnBitmapComboItemSelected(wxCommandEvent& event)
274 if(_bitmapcombo!=NULL)
276 _currentitem = event.GetInt();
277 if(_bitmapsitems.size()>_currentitem)
279 HistogramDialogComboBoxItem* currentconfig = _bitmapsitems[_currentitem];
280 _greyvect = currentconfig->getGreyVector();
281 _redvect = currentconfig->getRedVector();
282 _greenvect = currentconfig->getGreenVector();
283 _bluevect= currentconfig->getBlueVector();
284 _greyvecttransfer = currentconfig->getGreyVectorTransfer();
285 _value = currentconfig->getValueVector();
286 wxCommandEvent newevent(wxEVT_COMMAND_COMBOBOX_SELECTED,this->GetId());
287 ProcessEvent(newevent);
292 void HistogramDialogComboBox::OnLoadComboBoxData(std::vector<HistogramDialogComboBoxItem*>& itembitmaps, std::string filename)
294 std::vector<double> redvect, greenvect, bluevect;
295 std::vector<double> greyvect, greyvecttransfunct, value;
301 greyvecttransfunct.clear();
305 file.open( (const char*) (filename.c_str()) );
306 double gv=-1,gvtransfer=-1,intensity=-1,red=-1,gr=-1,bl=-1;
309 //std::cout<<filename<<std::endl;
314 HistogramDialogComboBoxItem* item=NULL;
318 std::getline(file,line);
319 //std::cout<<line<<std::endl;
320 if( (int)(line.find("<ComboBoxItem>")!=-1))
322 item = new HistogramDialogComboBoxItem();
323 }else if((int)(line.find("<greyValue>"))!=-1) {
324 int pos1=line.find(">");
325 int pos2=line.find("<",pos1+1);
326 std::string x=line.substr(pos1+1,pos2-pos1-1);
327 gvtransfer=atof(x.c_str());
328 greyvecttransfunct.push_back(gvtransfer);
329 }else if((int)(line.find("<intensity>"))!=-1) {
330 int pos1=line.find(">");
331 int pos2=line.find("<",pos1+1);
332 std::string x=line.substr(pos1+1,pos2-pos1-1);
333 intensity=atof(x.c_str());
334 value.push_back(intensity);
336 else if( (int)(line.find("<RGBgreyValue>"))!=-1)
338 int pos1=line.find(">");
339 int pos2=line.find("<",pos1+1);
340 std::string x=line.substr(pos1+1,pos2-pos1-1);
342 greyvect.push_back(gv);
344 else if( (int)(line.find("<red>"))!=-1)
346 int pos1=line.find(">");
347 int pos2=line.find("<",pos1+1);
348 std::string x=line.substr(pos1+1,pos2-pos1-1);
350 redvect.push_back(red);
352 else if( (int)(line.find("<green>"))!=-1)
354 int pos1=line.find(">");
355 int pos2=line.find("<",pos1+1);
356 std::string x=line.substr(pos1+1,pos2-pos1-1);
358 greenvect.push_back(gr);
360 else if( (int)(line.find("<blue>"))!=-1 )
362 int pos1=line.find(">");
363 int pos2=line.find("<",pos1+1);
364 std::string x=line.substr(pos1+1,pos2-pos1-1);
366 bluevect.push_back(bl);
368 }else if( (int)(line.find("</ComboBoxItem>"))!=-1 ) {
370 item->SetColors(greyvect,redvect,greenvect,bluevect);
371 item->SetTransferFunction(greyvecttransfunct,value);
372 /*for(int i = 0; i < greyvecttransfunct.size();i++){
373 std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvecttransfunct[i]<<std::endl;
374 std::cout<<value[i]<<std::endl;
376 for(int i = 0; i < greyvect.size();i++){
377 std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvect[i]<<std::endl;
378 std::cout<<redvect[i]<<std::endl;
379 std::cout<<greenvect[i]<<std::endl;
380 std::cout<<bluevect[i]<<std::endl;
383 itembitmaps.push_back(item);
385 greyvecttransfunct.clear();
395 //std::cout<<itembitmaps.size()<<std::endl;
400 ** Returns two vectors, the grey level of the point and its value, the value is between [0,1]
402 void HistogramDialogComboBox::GetValuesPointsFunction(std::vector<double>& greylevel,std::vector<double>& value)
404 for(int i = 0; i < _greyvecttransfer.size();i++) {
405 greylevel.push_back(_greyvecttransfer[i]*_maxgreyvalue);
406 value.push_back(_value[i]);
411 ** Returns two vectors, the grey level of the point and its value, the red, green
412 ** and blue value is between [0,1]
414 void HistogramDialogComboBox::GetValuesColorPointsFunction(std::vector<double>& greylevel,
415 std::vector<double>& red,
416 std::vector<double>& green,
417 std::vector<double>& blue)
419 for(int i = 0; i < _greyvect.size();i++) {
420 greylevel.push_back(_greyvect[i]*_maxgreyvalue);
421 red.push_back(_redvect[i]);
422 green.push_back(_greenvect[i]);
423 blue.push_back(_bluevect[i]);