calibration-model.cpp
Go to the documentation of this file.
1 #include <glad/glad.h>
2 #include "calibration-model.h"
3 #include "model-views.h"
4 #include "os.h"
5 
6 #include "../src/ds5/ds5-private.h"
7 
8 using namespace rs2;
9 
11 {
12  bool is_d400 = dev.supports(RS2_CAMERA_INFO_PRODUCT_LINE) ?
14 
15  return dev.is<rs2::auto_calibrated_device>() && is_d400;
16 }
17 
19 {
21 }
22 
23 void calibration_model::draw_float(std::string name, float& x, const float& orig, bool& changed)
24 {
25  if (abs(x - orig) > 0.00001) ImGui::PushStyleColor(ImGuiCol_FrameBg, regular_blue);
27  if (ImGui::DragFloat(std::string(to_string() << "##" << name).c_str(), &x, 0.001f))
28  {
29  changed = true;
30  }
32 }
33 
35  const librealsense::float3x3& original, bool& changed)
36 {
38  ImGui::Text("%s:", name.c_str()); ImGui::SameLine();
40 
43  draw_float(name + "_XX", feild.x.x, original.x.x, changed);
45  draw_float(name + "_XY", feild.x.y, original.x.y, changed);
47  draw_float(name + "_XZ", feild.x.z, original.x.z, changed);
48 
50  draw_float(name + "_YX", feild.y.x, original.y.x, changed);
52  draw_float(name + "_YY", feild.y.y, original.y.y, changed);
54  draw_float(name + "_YZ", feild.y.z, original.y.z, changed);
55 
57  draw_float(name + "_ZX", feild.z.x, original.z.x, changed);
59  draw_float(name + "_ZY", feild.z.y, original.z.y, changed);
61  draw_float(name + "_ZZ", feild.z.z, original.z.z, changed);
62 
64 
66 }
67 
68 namespace helpers
69 {
70  #define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))
71 
72  static const uint32_t crc_32_tab[] = { /* CRC polynomial 0xedb88320 */
73  0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
74  0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
75  0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
76  0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
77  0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
78  0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
79  0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
80  0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
81  0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
82  0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
83  0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
84  0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
85  0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
86  0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
87  0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
88  0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
89  0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
90  0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
91  0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
92  0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
93  0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
94  0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
95  0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
96  0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
97  0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
98  0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
99  0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
100  0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
101  0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
102  0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
103  0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
104  0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
105  0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
106  0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
107  0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
108  0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
109  0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
110  0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
111  0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
112  0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
113  0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
114  0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
115  0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
116  };
117 
120  {
121  uint32_t oldcrc32 = 0xFFFFFFFF;
122  for (; bufsize; --bufsize, ++buf)
123  oldcrc32 = UPDC32(*buf, oldcrc32);
124  return ~oldcrc32;
125  }
126 }
127 
129 {
130  const auto window_name = "Calibration Window";
131 
132  if (to_open)
133  {
134  try
135  {
138  ImGui::OpenPopup(window_name);
139  }
140  catch(std::exception e)
141  {
142  error_message = e.what();
143  }
144  to_open = false;
145  }
146 
148  auto orig_table = (librealsense::ds::coefficients_table*)_original.data();
149  bool changed = false;
150 
151  const float w = 620;
152  const float h = 500;
153  const float x0 = std::max(window.width() - w, 0.f) / 2;
154  const float y0 = std::max(window.height() - h, 0.f) / 2;
155  ImGui::SetNextWindowPos({ x0, y0 });
156  ImGui::SetNextWindowSize({ w, h });
157 
160 
166 
167  if (ImGui::BeginPopupModal(window_name, nullptr, flags))
168  {
169  if (error_message != "") ImGui::CloseCurrentPopup();
170 
171  std::string title_message = "CAMERA CALIBRATION";
172  auto title_size = ImGui::CalcTextSize(title_message.c_str());
173  ImGui::SetCursorPosX(w / 2 - title_size.x / 2);
177  ImGui::Text("%s", title_message.c_str());
179  ImGui::PopFont();
181 
182  ImGui::SetCursorPosX(w / 2 - 260 / 2);
183  if (ImGui::Button(u8"\uF07C Load...", ImVec2(70, 30)))
184  {
185  try
186  {
187  if (auto fn = file_dialog_open(file_dialog_mode::open_file, "Calibration JSON\0*.json\0", nullptr, nullptr))
188  {
189  config_file cf(fn);
190  table->baseline = cf.get("baseline");
191 
192  auto load_float3x4 = [&](std::string name, librealsense::float3x3& m){
193  m.x.x = cf.get(std::string(to_string() << name << ".x.x").c_str());
194  m.x.y = cf.get(std::string(to_string() << name << ".x.y").c_str());
195  m.x.z = cf.get(std::string(to_string() << name << ".x.z").c_str());
196 
197  m.y.x = cf.get(std::string(to_string() << name << ".y.x").c_str());
198  m.y.y = cf.get(std::string(to_string() << name << ".y.y").c_str());
199  m.y.z = cf.get(std::string(to_string() << name << ".y.z").c_str());
200 
201  m.z.x = cf.get(std::string(to_string() << name << ".z.x").c_str());
202  m.z.y = cf.get(std::string(to_string() << name << ".z.y").c_str());
203  m.z.z = cf.get(std::string(to_string() << name << ".z.z").c_str());
204  };
205 
206  load_float3x4("intrinsic_left", table->intrinsic_left);
207  load_float3x4("intrinsic_right", table->intrinsic_right);
208  load_float3x4("world2left_rot", table->world2left_rot);
209  load_float3x4("world2right_rot", table->world2right_rot);
210 
211  for (int i = 0; i < librealsense::ds::max_ds5_rect_resolutions; i++)
212  {
213  table->rect_params[i].x = cf.get(std::string(to_string() << "rectified." << i << ".fx").c_str());
214  table->rect_params[i].y = cf.get(std::string(to_string() << "rectified." << i << ".fy").c_str());
215 
216  table->rect_params[i].z = cf.get(std::string(to_string() << "rectified." << i << ".ppx").c_str());
217  table->rect_params[i].w = cf.get(std::string(to_string() << "rectified." << i << ".ppy").c_str());
218  }
219  }
220 
221  changed = true;
222  }
223  catch (const std::exception& ex)
224  {
225  error_message = ex.what();
227  }
228  }
229  if (ImGui::IsItemHovered())
230  {
231  window.link_hovered();
232  ImGui::SetTooltip("%s", "Load calibration from file");
233  }
234  ImGui::SameLine();
235  if (ImGui::Button(u8"\uF0C7 Save As...", ImVec2(100, 30)))
236  {
237  try
238  {
239  if (auto fn = file_dialog_open(file_dialog_mode::save_file, "Calibration JSON\0*.json\0", nullptr, nullptr))
240  {
241  config_file cf(fn);
242  cf.set("baseline", table->baseline);
243 
244  auto save_float3x4 = [&](std::string name, librealsense::float3x3& m){
245  cf.set(std::string(to_string() << name << ".x.x").c_str(), m.x.x);
246  cf.set(std::string(to_string() << name << ".x.y").c_str(), m.x.y);
247  cf.set(std::string(to_string() << name << ".x.z").c_str(), m.x.z);
248 
249  cf.set(std::string(to_string() << name << ".y.x").c_str(), m.y.x);
250  cf.set(std::string(to_string() << name << ".y.y").c_str(), m.y.y);
251  cf.set(std::string(to_string() << name << ".y.z").c_str(), m.y.z);
252 
253  cf.set(std::string(to_string() << name << ".z.x").c_str(), m.z.x);
254  cf.set(std::string(to_string() << name << ".z.y").c_str(), m.z.y);
255  cf.set(std::string(to_string() << name << ".z.z").c_str(), m.z.z);
256  };
257 
258  save_float3x4("intrinsic_left", table->intrinsic_left);
259  save_float3x4("intrinsic_right", table->intrinsic_right);
260  save_float3x4("world2left_rot", table->world2left_rot);
261  save_float3x4("world2right_rot", table->world2right_rot);
262 
263  for (int i = 0; i < librealsense::ds::max_ds5_rect_resolutions; i++)
264  {
266  int w = xy.x; int h = xy.y;
267 
268  cf.set(std::string(to_string() << "rectified." << i << ".width").c_str(), w);
269  cf.set(std::string(to_string() << "rectified." << i << ".height").c_str(), h);
270 
271  cf.set(std::string(to_string() << "rectified." << i << ".fx").c_str(), table->rect_params[i].x);
272  cf.set(std::string(to_string() << "rectified." << i << ".fy").c_str(), table->rect_params[i].y);
273 
274  cf.set(std::string(to_string() << "rectified." << i << ".ppx").c_str(), table->rect_params[i].z);
275  cf.set(std::string(to_string() << "rectified." << i << ".ppy").c_str(), table->rect_params[i].w);
276  }
277  }
278  }
279  catch (const std::exception& ex)
280  {
281  error_message = ex.what();
283  }
284  }
285  if (ImGui::IsItemHovered())
286  {
287  window.link_hovered();
288  ImGui::SetTooltip("%s", "Save calibration image to file");
289  }
290  ImGui::SameLine();
291  if (_accept)
292  {
293  if (ImGui::Button(u8"\uF275 Restore Factory", ImVec2(115, 30)))
294  {
295  try
296  {
297  dev.as<rs2::auto_calibrated_device>().reset_to_factory_calibration();
300  changed = true;
301  }
302  catch(const std::exception& ex)
303  {
304  error_message = ex.what();
306  }
307  }
308  if (ImGui::IsItemHovered())
309  {
310  window.link_hovered();
311  ImGui::SetTooltip("%s", "Restore calibration in flash to factory settings");
312  }
313  }
314  else
315  {
318 
319  ImGui::Button(u8"\uF275 Restore Factory", ImVec2(115, 30));
320  if (ImGui::IsItemHovered())
321  {
322  ImGui::SetTooltip("%s", "Write selected calibration table to the device. For advanced users");
323  }
324 
326  }
327 
329 
330  ImGui::BeginChild("##CalibData",ImVec2(w - 15, h - 110), true);
331 
334 
335  ImGui::Text("Stereo Baseline(mm):"); ImGui::SameLine();
337 
339  draw_float("Baseline", table->baseline, orig_table->baseline, changed);
342 
343  draw_float4x4("Left Intrinsics", table->intrinsic_left, orig_table->intrinsic_left, changed);
344  draw_float4x4("Right Intrinsics", table->intrinsic_right, orig_table->intrinsic_right, changed);
345  draw_float4x4("World to Left Rotation", table->world2left_rot, orig_table->world2left_rot, changed);
346  draw_float4x4("World to Right Rotation", table->world2right_rot, orig_table->world2right_rot, changed);
347 
350 
351  ImGui::Text("Rectified Resolution:"); ImGui::SameLine();
353 
354  std::vector<std::string> resolution_names;
355  std::vector<const char*> resolution_names_char;
356  std::vector<int> resolution_offset;
357  for (int i = 0; i < librealsense::ds::max_ds5_rect_resolutions; i++)
358  {
360  int w = xy.x; int h = xy.y;
361  if (w != 0) {
362  resolution_offset.push_back(i);
363  std::string name = to_string() << w <<" x "<<h;
364  resolution_names.push_back(name);
365  }
366  }
367  for (size_t i = 0; i < resolution_offset.size(); i++)
368  {
369  resolution_names_char.push_back(resolution_names[i].c_str());
370  }
371 
373  ImGui::Combo("##RectifiedResolutions", &selected_resolution, resolution_names_char.data(), resolution_names_char.size());
374 
377 
378  ImGui::Text("Focal Length:"); ImGui::SameLine();
380 
381  draw_float("FocalX", table->rect_params[selected_resolution].x, orig_table->rect_params[selected_resolution].x, changed);
382  ImGui::SameLine();
383  draw_float("FocalY", table->rect_params[selected_resolution].y, orig_table->rect_params[selected_resolution].y, changed);
384 
386  ImGui::Text("Principal Point:"); ImGui::SameLine();
388 
389  draw_float("PPX", table->rect_params[selected_resolution].z, orig_table->rect_params[selected_resolution].z, changed);
390  ImGui::SameLine();
391  draw_float("PPY", table->rect_params[selected_resolution].w, orig_table->rect_params[selected_resolution].w, changed);
392 
394 
396 
398 
399  ImGui::EndChild();
401 
402  ImGui::SetCursorScreenPos({ (float)(x0 + 10), (float)(y0 + h - 30) });
403  if (ImGui::Checkbox("I know what I'm doing", &_accept))
404  {
406  }
407  if (ImGui::IsItemHovered())
408  {
409  ImGui::SetTooltip("%s", "Changing calibration will affect depth quality. Changes are persistent.\nThere is an option to get back to factory calibration, but it maybe worse than current calibration\nBefore writing to flash, we strongly recommend to make a file backup");
410  }
411 
412  ImGui::SetCursorScreenPos({ (float)(x0 + w - 230), (float)(y0 + h - 30) });
413 
414  if (ImGui::Button("Cancel", ImVec2(100, 25)))
415  {
417  }
418  if (ImGui::IsItemHovered())
419  {
420  window.link_hovered();
421  ImGui::SetTooltip("%s", "Close without saving any changes");
422  }
423  ImGui::SameLine();
424 
425  auto streams = dev.query_sensors()[0].get_active_streams();
426  if (_accept && streams.size())
427  {
428  if (ImGui::Button(u8"\uF2DB Write Table", ImVec2(120, 25)))
429  {
430  try
431  {
432  auto actual_data = _calibration.data() + sizeof(librealsense::ds::table_header);
433  auto actual_data_size = _calibration.size() - sizeof(librealsense::ds::table_header);
434  auto crc = helpers::calc_crc32(actual_data, actual_data_size);
435  table->header.crc32 = crc;
436  dev.as<rs2::auto_calibrated_device>().set_calibration_table(_calibration);
437  dev.as<rs2::auto_calibrated_device>().write_calibration();
440  }
441  catch (const std::exception& ex)
442  {
443  error_message = ex.what();
445  }
446  }
447  if (ImGui::IsItemHovered())
448  {
449  window.link_hovered();
450  ImGui::SetTooltip("%s", "Write selected calibration table to the device");
451  }
452  }
453  else
454  {
457 
458  ImGui::Button(u8"\uF2DB Write Table", ImVec2(120, 25));
459  if (ImGui::IsItemHovered())
460  {
461  ImGui::SetTooltip("%s", "Write selected calibration table to the device. For advanced users");
462  }
463 
465  }
466 
467  if (changed && streams.size())
468  {
469  try
470  {
471  dev.as<rs2::auto_calibrated_device>().set_calibration_table(_calibration);
472  }
473  catch (const std::exception&)
474  {
475  try
476  {
477  dev.query_sensors()[0].close();
478  dev.query_sensors()[0].open(streams);
479  dev.as<rs2::auto_calibrated_device>().set_calibration_table(_calibration);
480  }
481  catch (const std::exception& ex)
482  {
483  error_message = ex.what();
485  }
486  }
487  }
488 
490 
491  ImGui::EndPopup();
492  }
495 }
IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val)
Definition: imgui.cpp:4650
orig
Definition: rmse.py:46
std::vector< uint8_t > _calibration
static const ImVec4 white
Definition: model-views.h:45
def get_calibration_table(d435_imu_calib_table)
IMGUI_API void SetTooltip(const char *fmt,...) IM_PRINTFARGS(1)
Definition: imgui.cpp:3288
GLuint const GLchar * name
std::vector< sensor > query_sensors() const
Definition: rs_device.hpp:25
static const uint32_t crc_32_tab[]
const GLfloat * m
Definition: glext.h:6814
static const ImVec4 light_grey
Definition: model-views.h:40
Definition: imgui.h:88
static config_file & instance()
Definition: rs-config.cpp:80
uint32_t calc_crc32(const uint8_t *buf, size_t bufsize)
Calculate CRC code for arbitrary characters buffer.
IMGUI_API void SetNextWindowPos(const ImVec2 &pos, ImGuiSetCond cond=0)
Definition: imgui.cpp:4923
UINT8_TYPE u8
Definition: sqlite3.c:11450
IMGUI_API bool BeginChild(const char *str_id, const ImVec2 &size=ImVec2(0, 0), bool border=false, ImGuiWindowFlags extra_flags=0)
Definition: imgui.cpp:3531
GLenum GLuint GLsizei bufsize
Definition: glext.h:1776
Definition: cah-model.h:10
GLdouble GLdouble GLdouble w
static std::map< ds5_rect_resolutions, int2 > resolutions_list
Definition: ds5-private.h:686
GLsizei const GLchar *const * string
void draw_float4x4(std::string name, librealsense::float3x3 &feild, const librealsense::float3x3 &original, bool &changed)
IMGUI_API bool IsWindowHovered()
Definition: imgui.cpp:4743
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:1960
unsigned char uint8_t
Definition: stdint.h:78
e
Definition: rmse.py:177
static const ImVec4 grey
Definition: model-views.h:48
void draw_float(std::string name, float &x, const float &orig, bool &changed)
GLenum GLuint GLenum GLsizei const GLchar * buf
T get_or_default(const char *key, T def) const
Definition: rs-config.h:65
IMGUI_API void SameLine(float pos_x=0.0f, float spacing_w=-1.0f)
Definition: imgui.cpp:9246
GLdouble f
IMGUI_API void PopStyleVar(int count=1)
Definition: imgui.cpp:4675
dictionary streams
Definition: t265_stereo.py:140
IMGUI_API ImVec2 CalcTextSize(const char *text, const char *text_end=NULL, bool hide_text_after_double_hash=false, float wrap_width=-1.0f)
Definition: test-wrap.cpp:15
static const ImVec4 regular_blue
Definition: model-views.h:39
bool is() const
Definition: rs_device.hpp:122
GLdouble x
unsigned int uint32_t
Definition: stdint.h:80
std::string get(const char *key, const char *def) const
Definition: rs-config.cpp:32
const char * get_info(rs2_camera_info info) const
Definition: rs_device.hpp:79
IMGUI_API void SetNextWindowSize(const ImVec2 &size, ImGuiSetCond cond=0)
Definition: imgui.cpp:4937
static const ImVec4 sensor_bg
Definition: model-views.h:51
GLbitfield flags
IMGUI_API void SetCursorPosX(float x)
Definition: imgui.cpp:5101
GLuint GLfloat x0
Definition: glext.h:9721
IMGUI_API void PushItemWidth(float item_width)
Definition: imgui.cpp:4486
IMGUI_API void Text(const char *fmt,...) IM_PRINTFARGS(1)
Definition: imgui.cpp:5223
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui.cpp:5573
const char * file_dialog_open(file_dialog_mode flags, const char *filters, const char *default_path, const char *default_name)
Definition: os.cpp:169
calibration_model(rs2::device dev)
IMGUI_API bool DragFloat(const char *label, float *v, float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *display_format="%.3f", float power=1.0f)
Definition: imgui.cpp:6884
IMGUI_API void EndPopup()
Definition: imgui.cpp:3489
IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4 &col)
Definition: imgui.cpp:4599
static const ImVec4 black
Definition: model-views.h:43
bool supports(rs2_camera_info info) const
Definition: rs_device.hpp:66
IMGUI_API bool Combo(const char *label, int *current_item, const char **items, int items_count, int height_in_items=-1, bool show_arrow_down=true)
Definition: imgui.cpp:8418
IMGUI_API void PushFont(ImFont *font)
Definition: imgui.cpp:4539
IMGUI_API void EndChild()
Definition: imgui.cpp:3573
GLenum GLenum GLsizei void * table
std::vector< uint8_t > _original
void set(const char *key, const char *value)
Definition: rs-config.cpp:15
IMGUI_API void PopItemWidth()
Definition: imgui.cpp:4507
static const char * enable_writing
Definition: model-views.h:143
void set_hovered_over_input()
Definition: ux-window.h:82
IMGUI_API bool BeginPopupModal(const char *name, bool *p_open=NULL, ImGuiWindowFlags extra_flags=0)
Definition: imgui.cpp:3465
GLuint GLfloat GLfloat y0
Definition: glext.h:9721
IMGUI_API bool Checkbox(const char *label, bool *v)
Definition: imgui.cpp:7269
float width() const
Definition: ux-window.h:41
IMGUI_API void SetCursorScreenPos(const ImVec2 &pos)
Definition: imgui.cpp:5127
void update(ux_window &window, std::string &error_message)
int i
IMGUI_API void CloseCurrentPopup()
Definition: imgui.cpp:3408
ImFont * get_large_font() const
Definition: ux-window.h:62
IMGUI_API void OpenPopup(const char *str_id)
Definition: imgui.cpp:3343
IMGUI_API void SetCursorPosY(float y)
Definition: imgui.cpp:5108
#define UPDC32(octet, crc)
void link_hovered()
Definition: ux-window.cpp:166
static const ImVec4 dark_sensor_bg
Definition: model-views.h:63
IMGUI_API float GetCursorPosY()
Definition: imgui.cpp:5088
IMGUI_API bool IsItemHovered()
Definition: imgui.cpp:3200
IMGUI_API void PopFont()
Definition: imgui.cpp:4549
IMGUI_API void PopStyleColor(int count=1)
Definition: imgui.cpp:4609
float height() const
Definition: ux-window.h:42
T as() const
Definition: rs_device.hpp:129
std::string to_string(T value)


librealsense2
Author(s): Sergey Dorodnicov , Doron Hirshberg , Mark Horn , Reagan Lopez , Itay Carpis
autogenerated on Mon May 3 2021 02:45:07