Basic Image AlgorithmS Library  2.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
VideoSource_Controller_XB3.cpp
1 #ifdef WIN32
2 // workaround for wx 2.6.x redefiniton of _CRT_SECURE_NO_DEPRECATE
3 // fixed in wx 2.7.2
4 # pragma warning(disable: 4005)
5 #endif
6 
7 //include first, avoid macro collision (wx/imagemagic)
8 #include <Gui/StringConv.hh>
9 
10 #include "VideoSource_Controller_XB3.hh"
11 
12 #ifdef WIN32
13 # include <Base/Common/getopt_W32.h>
14 #endif
15 
16 #include <iostream>
17 #include <Base/Image/ImageIO.hh>
18 #include <Image/Camera.hh>
19 
20 using namespace std;
21 using namespace BIAS;
22 
23 BEGIN_EVENT_TABLE(VideoSource_Controller_XB3, wxFrame)
24  EVT_BUTTON(ID_HIDE, VideoSource_Controller_XB3::OnHide)
25  EVT_COMMAND_SCROLL(ID_GAIN, VideoSource_Controller_XB3::OnGain)
26  EVT_COMMAND_SCROLL(ID_SHUTTER, VideoSource_Controller_XB3::OnShutter)
27  EVT_BUTTON(ID_BUTTON_AUTO_SHUTTER, VideoSource_Controller_XB3::OnAuto_Shutter)
28  EVT_BUTTON(ID_BUTTON_WHITEBALANCE, VideoSource_Controller_XB3::OnWhiteBalance)
29  EVT_BUTTON(ID_BUTTON_AUTO_GAIN, VideoSource_Controller_XB3::OnAuto_Gain)
30  EVT_BUTTON(ID_BUTTON_UPDATE, VideoSource_Controller_XB3::OnUpdate)
31  EVT_RADIOBUTTON(ID_CHECKBOX_LEFT, VideoSource_Controller_XB3::OnRadioButton)
32  EVT_RADIOBUTTON(ID_CHECKBOX_RIGHT, VideoSource_Controller_XB3::OnRadioButton)
33  EVT_RADIOBUTTON(ID_CHECKBOX_CENTER, VideoSource_Controller_XB3::OnRadioButton)
34  EVT_RADIOBUTTON(ID_CHECKBOX_ALL, VideoSource_Controller_XB3::OnRadioButton)
35  EVT_RADIOBUTTON(ID_CHECKBOX_RAW, VideoSource_Controller_XB3::OnRadioButton)
36 END_EVENT_TABLE()
37 
38 
40 VideoSource_Controller_XB3(VideoSource *cam, wxWindow *parent,const string &title,
41  const unsigned int imageToShow,
42  double minShutter, double maxShutter,
43  double minGain,double maxGain)
44  : VideoSource_Controller_Base(parent, -1
45  ,(AsciiToWx(title.c_str()))
46  ,wxDefaultPosition,wxSize(400,500),wxSTAY_ON_TOP |wxCAPTION){
47  minShutter_=minShutter;
48  maxShutter_=maxShutter;
49  minGain_= minGain;
50  maxGain_= maxGain;
51  Cam_ = dynamic_cast<VideoSource_DCAM_BumbleBee*>(cam);
52  Initialize();
53 
54  ImageToShow_ = imageToShow;
55 
56  SetShutterRange((unsigned)minShutter_,(unsigned)maxShutter_);
57  SetGainRange((unsigned)minGain_,(unsigned)maxGain_);
58 }
59 
60 
61 
62 VideoSource_Controller_XB3::
63 ~VideoSource_Controller_XB3()
64 {
65 
66 }
67 
68 void VideoSource_Controller_XB3::
69 Initialize(){
70  //Shut the Automode DOWN
71  auto_gain = false;
72  auto_shutter = false;
73 
74  sliderBox_ShGa_Visible = true;
75  vBoxVisible = true;
76 
77  wxSize SlSize(70,200);
78  wxSize BtSize(55,30);
79 
80 
81  wxBoxSizer *slGa = new wxBoxSizer(wxVERTICAL);
82  wxStaticText *textGain = new wxStaticText(this,ID_TEXT, wxT("Gain\n[dB]"));
83  SliderGain = new wxSlider(this, ID_GAIN, 1500, 0, 3000,
84  wxDefaultPosition,SlSize,
85  wxSL_VERTICAL | wxSL_LABELS | wxSL_RIGHT,
86  wxDefaultValidator, wxT("Gain"));
87 
88  auto_ga_Button = new wxButton(this, ID_BUTTON_AUTO_GAIN,
89  wxT("MAN"),wxDefaultPosition,BtSize);
90 
91  SliderGain->Enable(true);
92  slGa->Add(textGain,0,wxALL,2);
93  slGa->Add(SliderGain,0, wxALL,2);
94  slGa->Add(auto_ga_Button,0,wxALL, 2);
95 
96  wxBoxSizer *slSh = new wxBoxSizer(wxVERTICAL);
97  wxStaticText *textShutter = new wxStaticText(this,ID_TEXT, wxT("Shutter\n[ms]"));
98  SliderShutter = new wxSlider(this, ID_SHUTTER, 20, 1, 80,
99  wxDefaultPosition,SlSize,
100  wxSL_VERTICAL | wxSL_LABELS | wxSL_RIGHT,
101  wxDefaultValidator, wxT("Shutter"));
102 
103  auto_sh_Button = new wxButton(this, ID_BUTTON_AUTO_SHUTTER,
104  wxT("MAN"),wxDefaultPosition,BtSize);
105  SliderShutter->Enable(true);
106  slSh->Add(textShutter,0,wxALL,2);
107  slSh->Add(SliderShutter,0,wxALL, 2);
108  slSh->Add(auto_sh_Button,0,wxALL, 2);
109 
110  wxBoxSizer *sl = new wxBoxSizer(wxHORIZONTAL);
111  sl->Add(slSh,0,wxALL,2);
112  sl->Add(slGa,0,wxALL, 2);
113 
114  whiteBalanceButton = new wxButton(this, ID_BUTTON_WHITEBALANCE,
115  wxT("WB"),wxDefaultPosition,BtSize);
116  sl->Add(whiteBalanceButton,0,wxALL, 2);
117 
118  showButton = new wxButton(this, ID_HIDE, wxT("Hide"),
119  wxDefaultPosition,BtSize);
120  update_Button = new wxButton(this, ID_BUTTON_UPDATE,
121  wxT("UPDATE"),wxDefaultPosition,BtSize);
122 
123  vBox = new wxBoxSizer(wxHORIZONTAL);
124  vBox->Add(showButton,0,wxALIGN_LEFT | wxBOTTOM);
125  vBox->Add(update_Button, 0, wxALIGN_RIGHT | wxBOTTOM);
126 
127 
128  sliderBox_ShGa = new wxBoxSizer(wxVERTICAL);
129  sliderBox_ShGa->Add(sl,0,wxALL, 2);
130  sliderBox_ShGa->Add(vBox,0,wxALL,2);
131 
132  wxBoxSizer *checkBoxes = new wxBoxSizer(wxVERTICAL);
133 
134  all_CheckBox = new wxRadioButton(this,ID_CHECKBOX_ALL,wxT("Alle Bilder anzeigen"),wxDefaultPosition, wxDefaultSize,wxRB_GROUP);
135  all_CheckBox->SetValue(true);
136  checkBoxes->Add(all_CheckBox,0,wxALL,2);
137 
138  left_CheckBox = new wxRadioButton(this,ID_CHECKBOX_LEFT,wxT("Linkes Bild anzeigen"));
139  checkBoxes->Add(left_CheckBox,0,wxALL,2);
140 
141  if (Cam_->GetNumImages()==3) {
142  center_CheckBox = new wxRadioButton(this,ID_CHECKBOX_CENTER,wxT("Mittleres Bild anzeigen"));
143  checkBoxes->Add(center_CheckBox,0,wxALL,2);
144  }
145 
146  right_CheckBox = new wxRadioButton(this,ID_CHECKBOX_RIGHT,wxT("Rechtes Bild anzeigen"));
147  checkBoxes->Add(right_CheckBox,0,wxALL,2);
148 
149  raw_CheckBox = new wxRadioButton(this,ID_CHECKBOX_RAW,wxT("RAW Bild anzeigen"));
150  checkBoxes->Add(raw_CheckBox,0,wxALL,2);
151 
152  layoutBox = new wxBoxSizer(wxHORIZONTAL);
153  layoutBox->Add(sliderBox_ShGa,0,wxALL,2);
154  layoutBox->Add(checkBoxes,0,wxALL,2);
155 
156  vBox->SetSizeHints(this);
157  this->SetSizer(layoutBox);
158  SetAutoLayout(true);
159  Layout();
160  Fit();
161  wxCommandEvent fakeEvent;
162  OnUpdate(fakeEvent);
163  Show(TRUE);
164 }
165 
166 void VideoSource_Controller_XB3::
167 SetVideoSource(BIAS::VideoSource *cam){
168  Cam_ = dynamic_cast<VideoSource_DCAM_BumbleBee*>(cam);
169 }
170 
171 
172 void VideoSource_Controller_XB3::
173 OnHide(wxCommandEvent& event){
174  Show(false);
175 }
176 
177 void VideoSource_Controller_XB3::
178 OnClose(wxCloseEvent& event) {
179  Show(false);
180 }
181 
182 void VideoSource_Controller_XB3::
183 OnGain(wxScrollEvent& event) {
184  float value = (float)SliderGain->GetValue();
185  if(Cam_ != NULL){
186  auto_off(1);
187  Cam_->SetGain(value/100.0f);
188  }
189 }
190 
191 void VideoSource_Controller_XB3::
192 OnShutter(wxScrollEvent& event) {
193  float value = (float)SliderShutter->GetValue();
194  if(Cam_ != NULL){
195  auto_off(0);
196  Cam_->SetShutter(value/1000.0f);
197  }
198 }
199 void VideoSource_Controller_XB3::
200 OnWhiteBalance(wxCommandEvent& event) {
201  if(Cam_!=NULL)
202  Cam_->SoftwareWhiteBalance();
203 }
204 
205 void VideoSource_Controller_XB3::
206 OnAuto_Shutter(wxCommandEvent& event) {
207  if(!auto_shutter) {
208  auto_on(0);
209  }
210  else {
211  auto_off(0);
212  }
213 }
214 
215 void VideoSource_Controller_XB3::
216 OnAuto_Gain(wxCommandEvent& event) {
217  if(!auto_gain) {
218  auto_on(1);
219  }
220  else {
221  auto_off(1);
222  }
223 }
224 
225 
226 void VideoSource_Controller_XB3::
227 Update() {
228  if (Cam_!= NULL) {
229  float current =0.0;
230  current= Cam_->GetShutter();
231  SliderShutter->SetValue(int(current*1000.0f));
232  current = Cam_->GetGain();
233 
234  if (current <0)
235  BIASERR("Got no gain value from camera")
236  else
237  SliderGain->SetValue(int(current*100));
238 
239  bool autoon = Cam_->GetAutoShutter();
240  if (autoon) auto_on(0);
241  else auto_off(0);
242  autoon = Cam_->GetAutoGain();
243  if (autoon) auto_on(1);
244  else auto_off(1);
245  }
246 }
247 
248 void VideoSource_Controller_XB3::
249 OnUpdate(wxCommandEvent& event) {
250  Update();
251 }
252 
253 void VideoSource_Controller_XB3::
254 OnRadioButton(wxCommandEvent& event){
255  switch(event.GetId()){
256  case ID_CHECKBOX_LEFT: ImageToShow_ = 1;
257  break;
258  case ID_CHECKBOX_RIGHT: ImageToShow_ = 3;
259  break;
260  case ID_CHECKBOX_CENTER: ImageToShow_ = 2;
261  break;
262  case ID_CHECKBOX_RAW: ImageToShow_ = 4;
263  break;
264  case ID_CHECKBOX_ALL: ImageToShow_ = 0;
265  break;
266  default: cout << "Could not recognize sender of event" << endl;
267  break;
268  }
269 }
270 
271 
272 
273 void VideoSource_Controller_XB3::
274 auto_on(int param) {
275  //SHUTTER
276  if(param == 0){
277  auto_shutter = true;
278  Cam_->SetAutoShutter(true);
279  auto_sh_Button->SetLabel(wxT("AUTO"));
280  }
281  //GAIN
282  else if(param == 1){
283  auto_gain = true;
284  Cam_->SetAutoGain(true);
285  auto_ga_Button->SetLabel(wxT("AUTO"));
286  }
287 }
288 
289 void VideoSource_Controller_XB3::
290 auto_off(int param) {
291  //SHUTTER
292  if(param == 0){
293  auto_shutter = false;
294  Cam_->SetAutoShutter(false);
295  auto_sh_Button->SetLabel(wxT("MAN"));
296  }
297  //GAIN
298  else if(param == 1){
299  auto_gain = false;
300  Cam_->SetAutoGain(false);
301  auto_ga_Button->SetLabel(wxT("MAN"));
302  }
303 }
304 
305 void VideoSource_Controller_XB3::
306 SetShutterRange(unsigned int min,unsigned int max)
307 {
308  SliderShutter->SetRange(min,max);
309 
310 }
311 
312 void VideoSource_Controller_XB3::
313 SetGainRange(unsigned int min,unsigned int max)
314 {
315  SliderGain->SetRange(min,max);
316 }
317 
318 int VideoSource_Controller_XB3::
319 GetSelectedImage()
320 {
321  return ImageToShow_;
322 }
Defines a common interface to different devices.
const float maxGain