gtsam_points
Loading...
Searching...
No Matches
async_light_viewer_context.hpp
Go to the documentation of this file.
1#ifndef GUIK_ASYNC_LIGHT_VIEWER_CONTEXT_HPP
2#define GUIK_ASYNC_LIGHT_VIEWER_CONTEXT_HPP
3
5
6namespace guik {
7
14public:
15 AsyncLightViewerContext(); // context must be set manually
18
19 void clear();
20 void clear_text();
21 void append_text(const std::string& text);
22 void register_ui_callback(const std::string& name, const std::function<void()>& callback = 0);
23 void remove_ui_callback(const std::string& name);
24
27 void set_draw_xy_grid(bool draw_xy_grid);
29
30 void set_point_shape(float point_size = 1.0f, bool metric = true, bool circle = true);
31
33 void clear_drawables(const std::function<bool(const std::string&)>& fn);
34 void remove_drawable(const std::string& name);
35 void remove_drawable(const std::regex& regex);
36
37 void save_camera_settings(const std::string& path);
38 void load_camera_settings(const std::string& path);
39 void save_color_buffer(const std::string& filename);
40 void save_depth_buffer(const std::string& filename, bool real_scale = true);
41
43 void lookat(const Eigen::Vector3f& pt);
44 template <typename Vector>
45 void lookat(const Vector& pt) {
46 const auto ptf = pt.eval().template cast<float>();
47 lookat(ptf);
48 }
49 void use_orbit_camera_control(double distance = 80.0, double theta = 0.0, double phi = -60.0f * M_PI / 180.0f);
50 void use_orbit_camera_control_xz(double distance = 80.0, double theta = 0.0, double phi = 0.0);
51 void use_topdown_camera_control(double distance = 80.0, double theta = 0.0);
52 void use_arcball_camera_control(double distance = 80.0, double theta = 0.0, double phi = -60.0f * M_PI / 180.0f);
53 void use_fps_camera_control(double fovy_deg = 60.0);
54
55 void update_drawable_setting(const std::string& name, const ShaderSetting& shader_setting);
56
57 // utility methods to directly create and update drawables
58 // PointCloudBuffer
59 void update_points(const std::string& name, const float* data, int stride, int num_points, const ShaderSetting& shader_setting);
60 template <typename Scalar, int Dim>
61 void update_points(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, const ShaderSetting& shader_setting);
62 template <typename Scalar, int Dim, typename Allocator>
63 void update_points(const std::string& name, const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Allocator>& points, const ShaderSetting& shader_setting);
64
65 void update_points(const std::string& name, const float* vertices, int vertex_stride, const float* colors, int color_stride, int num_points, const ShaderSetting& shader_setting);
66 template <typename ScalarV, int DimV, typename ScalarC, int DimC>
67 void update_points(
68 const std::string& name,
69 const Eigen::Matrix<ScalarV, DimV, 1>* points,
70 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
71 int num_points,
72 const ShaderSetting& shader_setting);
73 template <typename ScalarV, int DimV, typename AllocatorV, typename ScalarC, int DimC, typename AllocatorC>
74 void update_points(
75 const std::string& name,
76 const std::vector<Eigen::Matrix<ScalarV, DimV, 1>, AllocatorV>& points,
77 const std::vector<Eigen::Matrix<ScalarC, DimC, 1>, AllocatorC>& colors,
78 const ShaderSetting& shader_setting);
79
80 // NormalDistributions
81 template <typename Scalar, int Dim>
83 const std::string& name,
84 const Eigen::Matrix<Scalar, Dim, 1>* points,
85 const Eigen::Matrix<Scalar, Dim, Dim>* covs,
86 int num_points,
87 float scale,
88 const ShaderSetting& shader_setting);
89
90 template <typename Scalar, int Dim, typename Alloc1, typename Alloc2>
92 const std::string& name,
93 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
94 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
95 float scale,
96 const ShaderSetting& shader_setting);
97
98 // ThinLines
100 const std::string& name,
101 const float* vertices,
102 const float* colors,
103 int num_vertices,
104 const unsigned int* indices,
105 int num_indices,
106 bool line_strip,
107 const ShaderSetting& shader_setting);
108
109 template <typename Scalar, int Dim>
110 void update_thin_lines(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, bool line_strip, const ShaderSetting& shader_setting);
111
112 template <typename ScalarV, int DimV, typename ScalarC, int DimC>
114 const std::string& name,
115 const Eigen::Matrix<ScalarV, DimV, 1>* points,
116 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
117 int num_points,
118 bool line_strip,
119 const ShaderSetting& shader_setting);
120
121 template <typename ScalarV, int DimV, typename ScalarC, int DimC>
123 const std::string& name,
124 const Eigen::Matrix<ScalarV, DimV, 1>* points,
125 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
126 int num_points,
127 const unsigned int* indices,
128 int num_indices,
129 bool line_strip,
130 const ShaderSetting& shader_setting);
131
132 template <typename Point, typename Alloc>
133 void update_thin_lines(const std::string& name, const std::vector<Point, Alloc>& points, bool line_strip, const ShaderSetting& shader_setting);
134
135 template <typename Point, typename Alloc>
137 const std::string& name,
138 const std::vector<Point, Alloc>& points,
139 const std::vector<unsigned int>& indices,
140 bool line_strip,
141 const ShaderSetting& shader_setting);
142
143 template <typename Point, typename AllocP, typename Color, typename AllocC>
145 const std::string& name,
146 const std::vector<Point, AllocP>& points,
147 const std::vector<Color, AllocC>& colors,
148 bool line_strip,
149 const ShaderSetting& shader_setting);
150
151 template <typename Point, typename AllocP, typename Color, typename AllocC>
153 const std::string& name,
154 const std::vector<Point, AllocP>& points,
155 const std::vector<Color, AllocC>& colors,
156 const std::vector<unsigned int>& indices,
157 bool line_strip,
158 const ShaderSetting& shader_setting);
159
160 // Primitives
161 void update_icosahedron(const std::string& name, const ShaderSetting& shader_setting);
162 void update_sphere(const std::string& name, const ShaderSetting& shader_setting);
163 void update_cube(const std::string& name, const ShaderSetting& shader_setting);
164 void update_cone(const std::string& name, const ShaderSetting& shader_setting);
165 void update_frustum(const std::string& name, const ShaderSetting& shader_setting);
166 void update_coord(const std::string& name, const ShaderSetting& shader_setting);
167
168 void update_wire_icosahedron(const std::string& name, const ShaderSetting& shader_setting);
169 void update_wire_sphere(const std::string& name, const ShaderSetting& shader_setting);
170 void update_wire_cube(const std::string& name, const ShaderSetting& shader_setting);
171 void update_wire_cone(const std::string& name, const ShaderSetting& shader_setting);
172 void update_wire_frustum(const std::string& name, const ShaderSetting& shader_setting);
173
174protected:
176};
177
178// template methods
179// PointCloud
180template <typename Scalar, int Dim>
181void AsyncLightViewerContext::update_points(const std::string& name, const Eigen::Matrix<Scalar, Dim, 1>* points, int num_points, const ShaderSetting& shader_setting) {
182 if constexpr (std::is_same<Scalar, float>::value) {
183 return update_points(name, reinterpret_cast<const float*>(points), sizeof(float) * Dim, num_points, shader_setting);
184 } else {
185 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
186 return update_points(name, points_3f.data(), num_points, shader_setting);
187 }
188}
189
190template <typename Scalar, int Dim, typename Allocator>
191void AsyncLightViewerContext::update_points(const std::string& name, const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Allocator>& points, const ShaderSetting& shader_setting) {
192 return update_points(name, points.data(), points.size(), shader_setting);
193}
194
195template <typename ScalarV, int DimV, typename ScalarC, int DimC>
197 const std::string& name,
198 const Eigen::Matrix<ScalarV, DimV, 1>* points,
199 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
200 int num_points,
201 const ShaderSetting& shader_setting) {
202 if constexpr (std::is_same<ScalarV, float>::value && std::is_same<ScalarC, float>::value) {
203 return update_points(
204 name,
205 reinterpret_cast<const float*>(points),
206 sizeof(float) * DimV,
207 reinterpret_cast<const float*>(colors),
208 sizeof(float) * DimC,
209 num_points,
210 shader_setting);
211 } else {
212 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
213 const auto colors_4f = glk::convert_to_vector<float, 4, 1>(colors, num_points);
214 return update_points(name, points_3f.data(), colors_4f.data(), num_points, shader_setting);
215 }
216}
217
218template <typename ScalarV, int DimV, typename AllocatorV, typename ScalarC, int DimC, typename AllocatorC>
220 const std::string& name,
221 const std::vector<Eigen::Matrix<ScalarV, DimV, 1>, AllocatorV>& points,
222 const std::vector<Eigen::Matrix<ScalarC, DimC, 1>, AllocatorC>& colors,
223 const ShaderSetting& shader_setting) {
224 return update_points(name, points.data(), colors.data(), points.size(), shader_setting);
225}
226
227// NormalDistributions
228template <typename Scalar, int Dim, typename Alloc1, typename Alloc2>
230 const std::string& name,
231 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
232 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
233 float scale,
234 const ShaderSetting& shader_setting) {
235 update_normal_dists(name, points.data(), covs.data(), points.size(), scale, shader_setting);
236}
237
238// ThinLines
239template <typename Scalar, int Dim>
241 const std::string& name,
242 const Eigen::Matrix<Scalar, Dim, 1>* points,
243 int num_points,
244 bool line_strip,
245 const ShaderSetting& shader_setting) {
246 if constexpr (std::is_same<Scalar, float>::value && Dim == 3) {
247 return update_thin_lines(name, reinterpret_cast<const float*>(points), nullptr, num_points, nullptr, 0, line_strip, shader_setting);
248 } else {
249 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
250 return update_thin_lines(name, points_3f.data(), num_points, line_strip, shader_setting);
251 }
252}
253
254template <typename ScalarV, int DimV, typename ScalarC, int DimC>
256 const std::string& name,
257 const Eigen::Matrix<ScalarV, DimV, 1>* points,
258 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
259 int num_points,
260 bool line_strip,
261 const ShaderSetting& shader_setting) {
262 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
263 return update_thin_lines(name, reinterpret_cast<const float*>(points), reinterpret_cast<const float*>(colors), num_points, nullptr, 0, line_strip, shader_setting);
264 } else {
265 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
266 const auto colors_4f = glk::convert_to_vector<float, 4, 1>(colors, num_points);
267 return update_thin_lines(name, points_3f.data(), colors_4f.data(), num_points, line_strip, shader_setting);
268 }
269}
270
271template <typename ScalarV, int DimV, typename ScalarC, int DimC>
273 const std::string& name,
274 const Eigen::Matrix<ScalarV, DimV, 1>* points,
275 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
276 int num_points,
277 const unsigned int* indices,
278 int num_indices,
279 bool line_strip,
280 const ShaderSetting& shader_setting) {
281 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
282 return update_thin_lines(name, reinterpret_cast<const float*>(points), reinterpret_cast<const float*>(colors), num_points, indices, num_indices, line_strip, shader_setting);
283 } else {
284 const auto points_3f = glk::convert_to_vector<float, 3, 1>(points, num_points);
285 const auto colors_4f = glk::convert_to_vector<float, 4, 1>(colors, num_points);
286 return update_thin_lines(name, points_3f.data(), colors_4f.data(), num_points, indices, num_indices, line_strip, shader_setting);
287 }
288}
289
290template <typename Point, typename Alloc>
291void AsyncLightViewerContext::update_thin_lines(const std::string& name, const std::vector<Point, Alloc>& points, bool line_strip, const ShaderSetting& shader_setting) {
292 return update_thin_lines(name, points.data(), points.size(), line_strip, shader_setting);
293}
294
295template <typename Point, typename Alloc>
297 const std::string& name,
298 const std::vector<Point, Alloc>& points,
299 const std::vector<unsigned int>& indices,
300 bool line_strip,
301 const ShaderSetting& shader_setting) {
302 return update_thin_lines(name, points.data(), static_cast<const Eigen::Vector4f*>(nullptr), points.size(), indices.data(), indices.size(), line_strip, shader_setting);
303}
304
305template <typename Point, typename AllocP, typename Color, typename AllocC>
307 const std::string& name,
308 const std::vector<Point, AllocP>& points,
309 const std::vector<Color, AllocC>& colors,
310 bool line_strip,
311 const ShaderSetting& shader_setting) {
312 return update_thin_lines(name, points.data(), colors.data(), points.size(), line_strip, shader_setting);
313}
314
315template <typename Point, typename AllocP, typename Color, typename AllocC>
317 const std::string& name,
318 const std::vector<Point, AllocP>& points,
319 const std::vector<Color, AllocC>& colors,
320 const std::vector<unsigned int>& indices,
321 bool line_strip,
322 const ShaderSetting& shader_setting) {
323 return update_thin_lines(name, points.data(), colors.data(), points.size(), indices.data(), indices.size(), line_strip, shader_setting);
324}
325
326} // namespace guik
327
328#endif
Async interface to manipulate LightViewerContext. All OpenGL operations will be done in the viewer th...
Definition async_light_viewer_context.hpp:13
AsyncLightViewerContext(LightViewerContext *context)
void set_point_shape(float point_size=1.0f, bool metric=true, bool circle=true)
void update_wire_frustum(const std::string &name, const ShaderSetting &shader_setting)
void update_wire_cone(const std::string &name, const ShaderSetting &shader_setting)
void load_camera_settings(const std::string &path)
void use_orbit_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
void lookat(const Eigen::Vector3f &pt)
void use_topdown_camera_control(double distance=80.0, double theta=0.0)
void save_camera_settings(const std::string &path)
void remove_ui_callback(const std::string &name)
void use_orbit_camera_control_xz(double distance=80.0, double theta=0.0, double phi=0.0)
void append_text(const std::string &text)
void disable_xy_grid()
Definition async_light_viewer_context.hpp:25
void use_fps_camera_control(double fovy_deg=60.0)
void update_cone(const std::string &name, const ShaderSetting &shader_setting)
void update_wire_sphere(const std::string &name, const ShaderSetting &shader_setting)
void update_normal_dists(const std::string &name, const Eigen::Matrix< Scalar, Dim, 1 > *points, const Eigen::Matrix< Scalar, Dim, Dim > *covs, int num_points, float scale, const ShaderSetting &shader_setting)
void update_points(const std::string &name, const float *data, int stride, int num_points, const ShaderSetting &shader_setting)
void update_drawable_setting(const std::string &name, const ShaderSetting &shader_setting)
void update_frustum(const std::string &name, const ShaderSetting &shader_setting)
void update_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
void update_coord(const std::string &name, const ShaderSetting &shader_setting)
void update_sphere(const std::string &name, const ShaderSetting &shader_setting)
void remove_drawable(const std::regex &regex)
void save_depth_buffer(const std::string &filename, bool real_scale=true)
void set_colormap(glk::COLORMAP colormap)
void enable_xy_grid()
Definition async_light_viewer_context.hpp:26
void update_points(const std::string &name, const float *vertices, int vertex_stride, const float *colors, int color_stride, int num_points, const ShaderSetting &shader_setting)
void update_wire_cube(const std::string &name, const ShaderSetting &shader_setting)
void remove_drawable(const std::string &name)
void register_ui_callback(const std::string &name, const std::function< void()> &callback=0)
void lookat(const Vector &pt)
Definition async_light_viewer_context.hpp:45
LightViewerContext * context
Definition async_light_viewer_context.hpp:175
void update_cube(const std::string &name, const ShaderSetting &shader_setting)
void set_draw_xy_grid(bool draw_xy_grid)
void update_thin_lines(const std::string &name, const float *vertices, const float *colors, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip, const ShaderSetting &shader_setting)
void use_arcball_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
void save_color_buffer(const std::string &filename)
void update_wire_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
void clear_drawables(const std::function< bool(const std::string &)> &fn)
Definition light_viewer_context.hpp:34
COLORMAP
Definition colormap.hpp:9
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20
Definition drawable_container.hpp:9
Shader setting class that holds rendering settings.
Definition shader_setting.hpp:187