1 #include "HistogramDialogComboBox.h"
6 #include "creaSystem.h"
7 #include "HistogramDialog.h"
8 //-------------------------
10 //-------------------------
11 HistogramDialogComboBox::HistogramDialogComboBox(wxWindow* parent)
17 _sliderwindowlevel=NULL;
21 this->SetSizer(getBitmapCombo());
27 HistogramDialogComboBox::~HistogramDialogComboBox(){
30 void HistogramDialogComboBox::SetColors(std::vector<double> greyvect, std::vector<double> redvect, std::vector<double> greenvect, std::vector<double> bluevect){
39 wxSizer* HistogramDialogComboBox::getBitmapCombo(){
40 //_bitmapsizer = new wxBoxSizer(wxVERTICAL);
41 _bitmapsizer = new wxBoxSizer(wxVERTICAL);
45 wxBoxSizer* comboeditsizer = new wxBoxSizer(wxHORIZONTAL);
47 _bitmapcombo = getBitmapComboElements();
49 wxBitmap bitmap1(Edit_xpm);
50 wxBitmapButton* edit = new wxBitmapButton(this, -1, bitmap1,wxDefaultPosition,wxSize(30,30));
51 Connect(edit->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&HistogramDialogComboBox::OnEditBitmapCombo);
53 comboeditsizer->Add(_bitmapcombo,wxSizerFlags().Center().FixedMinSize());
54 comboeditsizer->Add(edit,wxSizerFlags().Center());
57 _bitmapsizer->Add(comboeditsizer,wxSizerFlags().FixedMinSize().Center());
58 _bitmapsizer->AddSpacer(5);
59 _bitmapsizer->Add(getSlidersWlCo(),wxSizerFlags().Expand().Center());
64 wxSizer* HistogramDialogComboBox::getSlidersWlCo(){
65 wxBoxSizer* sizersliders = new wxBoxSizer(wxVERTICAL);
67 _slidercolor = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
68 _sliderwindowlevel = new wxSlider(this, -1,1,0,1,wxDefaultPosition,wxDefaultSize,wxSL_LABELS);
70 sizersliders->Add(_slidercolor,wxSizerFlags().Expand().Center());
71 sizersliders->Add(_sliderwindowlevel,wxSizerFlags().Expand().Center());
73 Connect(_slidercolor->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnColorLevelChanged);
74 Connect(_sliderwindowlevel->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction)&HistogramDialogComboBox::OnWindowLevelChanged);
80 double HistogramDialogComboBox::GetWindowLevel(){
81 if(_sliderwindowlevel != NULL){
82 return _sliderwindowlevel->GetValue();
86 double HistogramDialogComboBox::GetColorLevel(){
87 if(_slidercolor != NULL){
88 return _slidercolor->GetValue();
92 void HistogramDialogComboBox::OnColorLevelChanged(wxCommandEvent& event){
93 _slidercolor->GetValue();
95 wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
96 ProcessEvent(newevent);
99 void HistogramDialogComboBox::OnWindowLevelChanged(wxCommandEvent& event){
100 _sliderwindowlevel->GetValue();
102 wxCommandEvent newevent(wxEVT_SCROLL_THUMBTRACK,this->GetId());
103 ProcessEvent(newevent);
107 void HistogramDialogComboBox::setImageData(vtkImageData* img){
108 _maxgreyvalue = img->GetScalarRange()[1];
114 void HistogramDialogComboBox::setSlidersValue(){
116 if(_slidercolor!=NULL){
117 _slidercolor->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
118 _slidercolor->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
120 if(_sliderwindowlevel!=NULL){
121 _sliderwindowlevel->SetRange(_img->GetScalarRange()[0],_img->GetScalarRange()[1]);
122 _sliderwindowlevel->SetValue((_img->GetScalarRange()[0]+_img->GetScalarRange()[1])/2);
127 void HistogramDialogComboBox::OnEditBitmapCombo(wxCommandEvent& event){
131 bool createaddandremovecontrols = true;
132 HistogramDialog* dialog = new HistogramDialog(this,_T("Color Configuration"),createaddandremovecontrols);
133 dialog->initializeHistogram(_img);
134 dialog->setInfoPanExtraControls(_bitmapsitems);
136 if(dialog->ShowModal()==wxID_OK){
138 dialog->UpdateCurrentComboElement();
139 _bitmapsitems = dialog->getComboBoxItems();
142 std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");
143 currentpath.append(FILENAME);
145 std::vector<double> redvect,greenvect,bluevect;
146 std::vector<double> greyvect;
148 saveCurrentConfiguration(_bitmapsitems, currentpath);
149 wxBitmapComboBox* tempbitmapcombo = _bitmapcombo;
150 for(int i = 0; i < _bitmapsitems.size();i++){
151 delete _bitmapsitems[i];
153 _bitmapsitems.clear();
154 _bitmapcombo = getBitmapComboElements();
155 if(_bitmapsizer->Replace(tempbitmapcombo,_bitmapcombo)){
157 tempbitmapcombo->Destroy();
164 void HistogramDialogComboBox::saveCurrentConfiguration(std::vector<HistogramDialogComboBoxItem*>& itembitmaps,std::string filename){
167 file.open( (const char*) (filename.c_str()) );
168 double gv=-1,red=-1,gr=-1,bl=-1;
173 file << "<ComboBoxData>" << std::endl;
174 for(int i = 0; i < itembitmaps.size();i++){
175 HistogramDialogComboBoxItem* item = itembitmaps[i];
176 std::vector<double> vecttransfer = item->getGreyVectorTransfer();
177 std::vector<double> value = item->getValueVector();
179 file << " <ComboBoxItem>"<< std::endl;
180 for(int j = 0; j < vecttransfer.size();j++){
182 file << " <TransferenceFunction>"<< std::endl;
184 file << " <Transferencepoint>" << std::endl;
185 file << " <greyValue>" << vecttransfer[j] << "</greyValue>" <<std::endl;
186 file << " <intensity>" << value[j] << "</intensity> "<<std::endl;
187 file << " </Transferencepoint>" << std::endl;
188 if(j==vecttransfer.size()-1){
189 file << " </TransferenceFunction>"<< std::endl;
192 std::vector<double> greyv = item->getGreyVector();
193 std::vector<double> red = item->getRedVector();
194 std::vector<double> green = item->getGreenVector();
195 std::vector<double> blue = item->getBlueVector();
196 for(int j = 0; j < greyv.size();j++)
199 file << " <Colors>" << std::endl;
201 file << " <greyValueRGBpoint>" << std::endl;
202 file << " <RGBgreyValue>" << greyv[j] << "</RGBgreyValue>" <<std::endl;
203 file << " <red>" << red[j] << "</red>" <<std::endl;
204 file << " <green>" << green[j] << "</green>" <<std::endl;
205 file << " <blue>" << blue[j] << "</blue>" <<std::endl;
206 file << " </greyValueRGBpoint>" << std::endl;
207 if(j==greyv.size()-1){
208 file << " </Colors>" << std::endl;
211 file << " </ComboBoxItem>"<< std::endl;
213 file << "</ComboBoxData>" << std::endl;
219 wxBitmapComboBox* HistogramDialogComboBox::getBitmapComboElements(){
220 std::string currentpath = crea::System::GetDllAppPath("bbcreaMaracasVisu");
221 currentpath.append(FILENAME);
223 std::vector<HistogramDialogComboBoxItem*> bitmapsitems;
224 OnLoadComboBoxData(bitmapsitems, currentpath);
225 _bitmapsitems = bitmapsitems;
227 choices = new wxString[bitmapsitems.size()];
228 for(int i = 0; i < bitmapsitems.size();i++){
231 wxBitmapComboBox* bitmapcombo = new wxBitmapComboBox(this, -1, _T(""), wxDefaultPosition, wxDefaultSize, bitmapsitems.size(),choices);
232 bitmapcombo->SetSize(65,30);
234 Connect(bitmapcombo->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction)&HistogramDialogComboBox::OnBitmapComboItemSelected);
236 for(int i = 0; i < bitmapsitems.size(); i++){
237 bitmapcombo->SetItemBitmap(i, bitmapsitems[i]->GetBitmap());
241 void HistogramDialogComboBox::OnBitmapComboItemSelected(wxCommandEvent& event){
243 if(_bitmapcombo!=NULL){
244 _currentitem = event.GetInt();
245 if(_bitmapsitems.size()>_currentitem){
246 HistogramDialogComboBoxItem* currentconfig = _bitmapsitems[_currentitem];
247 _greyvect = currentconfig->getGreyVector();
248 _redvect = currentconfig->getRedVector();
249 _greenvect = currentconfig->getGreenVector();
250 _bluevect= currentconfig->getBlueVector();
252 _greyvecttransfer = currentconfig->getGreyVectorTransfer();
253 _value = currentconfig->getValueVector();
254 wxCommandEvent newevent(wxEVT_COMMAND_COMBOBOX_SELECTED,this->GetId());
255 ProcessEvent(newevent);
260 void HistogramDialogComboBox::OnLoadComboBoxData(std::vector<HistogramDialogComboBoxItem*>& itembitmaps, std::string filename)
262 std::vector<double> redvect, greenvect, bluevect;
263 std::vector<double> greyvect, greyvecttransfunct, value;
269 greyvecttransfunct.clear();
273 file.open( (const char*) (filename.c_str()) );
274 double gv=-1,gvtransfer=-1,intensity=-1,red=-1,gr=-1,bl=-1;
277 //std::cout<<filename<<std::endl;
282 HistogramDialogComboBoxItem* item=NULL;
286 std::getline(file,line);
287 //std::cout<<line<<std::endl;
288 if( (int)(line.find("<ComboBoxItem>")!=-1))
290 item = new HistogramDialogComboBoxItem();
291 }else if((int)(line.find("<greyValue>"))!=-1){
292 int pos1=line.find(">");
293 int pos2=line.find("<",pos1+1);
294 std::string x=line.substr(pos1+1,pos2-pos1-1);
295 gvtransfer=atof(x.c_str());
296 greyvecttransfunct.push_back(gvtransfer);
297 }else if((int)(line.find("<intensity>"))!=-1){
298 int pos1=line.find(">");
299 int pos2=line.find("<",pos1+1);
300 std::string x=line.substr(pos1+1,pos2-pos1-1);
301 intensity=atof(x.c_str());
302 value.push_back(intensity);
304 else if( (int)(line.find("<RGBgreyValue>"))!=-1)
306 int pos1=line.find(">");
307 int pos2=line.find("<",pos1+1);
308 std::string x=line.substr(pos1+1,pos2-pos1-1);
310 greyvect.push_back(gv);
312 else if( (int)(line.find("<red>"))!=-1)
314 int pos1=line.find(">");
315 int pos2=line.find("<",pos1+1);
316 std::string x=line.substr(pos1+1,pos2-pos1-1);
318 redvect.push_back(red);
320 else if( (int)(line.find("<green>"))!=-1)
322 int pos1=line.find(">");
323 int pos2=line.find("<",pos1+1);
324 std::string x=line.substr(pos1+1,pos2-pos1-1);
326 greenvect.push_back(gr);
328 else if( (int)(line.find("<blue>"))!=-1 )
330 int pos1=line.find(">");
331 int pos2=line.find("<",pos1+1);
332 std::string x=line.substr(pos1+1,pos2-pos1-1);
334 bluevect.push_back(bl);
336 }else if( (int)(line.find("</ComboBoxItem>"))!=-1 ){
338 item->SetColors(greyvect,redvect,greenvect,bluevect);
339 item->SetTransferFunction(greyvecttransfunct,value);
340 for(int i = 0; i < greyvecttransfunct.size();i++){
341 std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvecttransfunct[i]<<std::endl;
342 std::cout<<value[i]<<std::endl;
344 for(int i = 0; i < greyvect.size();i++){
345 std::cout<<"HistogramDialogComboBox::OnLoadComboBoxData("<<greyvect[i]<<std::endl;
346 std::cout<<redvect[i]<<std::endl;
347 std::cout<<greenvect[i]<<std::endl;
348 std::cout<<bluevect[i]<<std::endl;
351 itembitmaps.push_back(item);
353 greyvecttransfunct.clear();
363 //std::cout<<itembitmaps.size()<<std::endl;
368 ** Returns two vectors, the grey level of the point and its value, the value is between [0,1]
370 void HistogramDialogComboBox::GetValuesPointsFunction(std::vector<double>& greylevel,std::vector<double>& value)
372 for(int i = 0; i < _greyvecttransfer.size();i++){
373 greylevel.push_back(_greyvecttransfer[i]*_maxgreyvalue);
374 value.push_back(_value[i]);
379 ** Returns two vectors, the grey level of the point and its value, the red, green
380 ** and blue value is between [0,1]
382 void HistogramDialogComboBox::GetValuesColorPointsFunction(std::vector<double>& greylevel,
383 std::vector<double>& red,
384 std::vector<double>& green,
385 std::vector<double>& blue)
387 for(int i = 0; i < _greyvect.size();i++){
388 greylevel.push_back(_greyvect[i]*_maxgreyvalue);
389 red.push_back(_redvect[i]);
390 green.push_back(_greenvect[i]);
391 blue.push_back(_bluevect[i]);