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


librealsense2
Author(s): LibRealSense ROS Team
autogenerated on Thu Dec 22 2022 03:41:42