1#ifndef GUIK_LIGHT_VIEWER_CONTEXT_HPP
2#define GUIK_LIGHT_VIEWER_CONTEXT_HPP
9#include <unordered_map>
22class PointCloudBuffer;
27class AsyncLightViewerContext;
28class OrbitCameraControlXY;
29class OrbitCameraControlXZ;
30class TopDownCameraControl;
31class ArcBallCameraControl;
32class FPSCameraControl;
47 void set_pos(
const Eigen::Vector2i& pos, ImGuiCond cond = ImGuiCond_FirstUseEver, ImGuiWindowFlags = 0);
70 void set_point_shape(
float point_size = 1.0f,
bool metric =
true,
bool circle =
true);
91 std::unordered_map<std::string, std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr>>&
get_drawables();
93 std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr>
find_drawable(
const std::string& name);
114 template <
typename Vector>
116 const auto ptf = pt.eval().template cast<float>();
120 std::shared_ptr<OrbitCameraControlXY>
use_orbit_camera_control(
double distance = 80.0,
double theta = 0.0,
double phi = -60.0f * M_PI / 180.0f);
123 std::shared_ptr<ArcBallCameraControl>
use_arcball_camera_control(
double distance = 80.0,
double theta = 0.0,
double phi = -60.0f * M_PI / 180.0f);
133 Eigen::Vector4i
pick_info(
const Eigen::Vector2i& p,
int window = 2)
const;
134 float pick_depth(
const Eigen::Vector2i& p,
int window = 2)
const;
135 Eigen::Vector3f
unproject(
const Eigen::Vector2i& p,
float depth)
const;
136 std::optional<Eigen::Vector3f>
pick_point(
int button = 0,
int window = 2, Eigen::Vector4i* info =
nullptr)
const;
151 template <
typename Scalar,
int Dim>
154 template <
typename Scalar,
int Dim,
typename Allocator>
155 std::shared_ptr<glk::PointCloudBuffer>
159 template <
typename Scalar,
int Dim>
161 const std::string& name,
162 const Eigen::Matrix<Scalar, Dim, 1>* points,
163 const Eigen::Matrix<Scalar, Dim, Dim>* covs,
168 template <
typename Scalar,
int Dim,
typename Alloc1,
typename Alloc2>
170 const std::string& name,
171 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
172 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
178 const std::string& name,
179 const float* vertices,
182 const unsigned int* indices,
187 template <
typename Scalar,
int Dim>
188 std::shared_ptr<glk::ThinLines>
191 template <
typename ScalarV,
int DimV,
typename ScalarC,
int DimC>
193 const std::string& name,
194 const Eigen::Matrix<ScalarV, DimV, 1>* points,
195 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
200 template <
typename ScalarV,
int DimV,
typename ScalarC,
int DimC>
202 const std::string& name,
203 const Eigen::Matrix<ScalarV, DimV, 1>* points,
204 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
206 const unsigned int* indices,
211 template <
typename Po
int,
typename Alloc>
214 template <
typename Po
int,
typename Alloc>
216 const std::string& name,
217 const std::vector<Point, Alloc>& points,
218 const std::vector<unsigned int>& indices,
222 template <
typename Po
int,
typename AllocP,
typename Color,
typename AllocC>
224 const std::string& name,
225 const std::vector<Point, AllocP>& points,
226 const std::vector<Color, AllocC>& colors,
230 template <
typename Po
int,
typename AllocP,
typename Color,
typename AllocC>
232 const std::string& name,
233 const std::vector<Point, AllocP>& points,
234 const std::vector<Color, AllocC>& colors,
235 const std::vector<unsigned int>& indices,
267 std::unordered_map<std::string, std::pair<ShaderSetting::Ptr, glk::Drawable::ConstPtr>>
drawables;
276template <
typename Scalar,
int Dim>
277std::shared_ptr<glk::PointCloudBuffer>
279 if constexpr (std::is_same<Scalar, float>::value) {
287template <
typename Scalar,
int Dim,
typename Allocator>
288std::shared_ptr<glk::PointCloudBuffer>
294template <
typename Scalar,
int Dim,
typename Alloc1,
typename Alloc2>
296 const std::string& name,
297 const std::vector<Eigen::Matrix<Scalar, Dim, 1>, Alloc1>& points,
298 const std::vector<Eigen::Matrix<Scalar, Dim, Dim>, Alloc2>& covs,
305template <
typename Scalar,
int Dim>
306std::shared_ptr<glk::ThinLines>
308 if constexpr (std::is_same<Scalar, float>::value && Dim == 3) {
316template <
typename ScalarV,
int DimV,
typename ScalarC,
int DimC>
318 const std::string& name,
319 const Eigen::Matrix<ScalarV, DimV, 1>* points,
320 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
324 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
325 return update_thin_lines(name,
reinterpret_cast<const float*
>(points),
reinterpret_cast<const float*
>(colors), num_points,
nullptr, 0, line_strip,
shader_setting);
333template <
typename ScalarV,
int DimV,
typename ScalarC,
int DimC>
335 const std::string& name,
336 const Eigen::Matrix<ScalarV, DimV, 1>* points,
337 const Eigen::Matrix<ScalarC, DimC, 1>* colors,
339 const unsigned int* indices,
343 if constexpr (std::is_same<ScalarV, float>::value && DimV == 3 && std::is_same<ScalarC, float>::value && DimC == 4) {
344 return update_thin_lines(name,
reinterpret_cast<const float*
>(points),
reinterpret_cast<const float*
>(colors), num_points, indices, num_indices, line_strip,
shader_setting);
352template <
typename Po
int,
typename Alloc>
353std::shared_ptr<glk::ThinLines>
358template <
typename Po
int,
typename Alloc>
360 const std::string& name,
361 const std::vector<Point, Alloc>& points,
362 const std::vector<unsigned int>& indices,
365 return update_thin_lines(name, points.data(),
static_cast<const Eigen::Vector4f*
>(
nullptr), points.size(), indices.data(), indices.size(), line_strip,
shader_setting);
368template <
typename Po
int,
typename AllocP,
typename Color,
typename AllocC>
370 const std::string& name,
371 const std::vector<Point, AllocP>& points,
372 const std::vector<Color, AllocC>& colors,
378template <
typename Po
int,
typename AllocP,
typename Color,
typename AllocC>
380 const std::string& name,
381 const std::vector<Point, AllocP>& points,
382 const std::vector<Color, AllocC>& colors,
383 const std::vector<unsigned int>& indices,
std::shared_ptr< const Drawable > ConstPtr
Definition drawable.hpp:15
Definition texture.hpp:10
Async interface to manipulate LightViewerContext. All OpenGL operations will be done in the viewer th...
Definition async_light_viewer_context.hpp:13
Definition gl_canvas.hpp:17
Definition light_viewer_context.hpp:34
void set_screen_effect(const std::shared_ptr< glk::ScreenEffect > &effect)
std::shared_ptr< TopDownCameraControl > use_topdown_camera_control(double distance=80.0, double theta=0.0)
void update_frustum(const std::string &name, const ShaderSetting &shader_setting)
std::mutex sub_texts_mutex
Definition light_viewer_context.hpp:269
bool normal_buffer_enabled() const
void remove_drawable(const std::string &name)
std::vector< unsigned char > read_color_buffer() const
std::optional< Eigen::Vector3f > pick_point(int button=0, int window=2, Eigen::Vector4i *info=nullptr) const
Eigen::Vector2i canvas_rect_min
Definition light_viewer_context.hpp:255
void clear_drawables(const std::function< bool(const std::string &)> &fn)
void lookat(const Eigen::Vector3f &pt)
Eigen::Matrix4f last_projection_view_matrix
Definition light_viewer_context.hpp:264
const guik::ShaderSetting & shader_setting() const
Definition light_viewer_context.hpp:58
Eigen::Matrix4f projection_matrix() const
Definition light_viewer_context.hpp:131
void set_pos(const Eigen::Vector2i &pos, ImGuiCond cond=ImGuiCond_FirstUseEver, ImGuiWindowFlags=0)
Eigen::Vector2i canvas_br() const
Definition light_viewer_context.hpp:128
AsyncLightViewerContext async()
void clear_drawable_filters()
std::shared_ptr< OrbitCameraControlXZ > use_orbit_camera_control_xz(double distance=80.0, double theta=0.0, double phi=0.0)
void update_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
Eigen::Vector3f unproject(const Eigen::Vector2i &p, float depth) const
virtual void append_text(const std::string &text)
std::shared_ptr< glk::ThinLines > 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)
guik::GLCanvas & get_canvas()
std::shared_ptr< FPSCameraControl > use_fps_camera_control(double fovy_deg=60.0)
std::string context_name
Definition light_viewer_context.hpp:254
std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > drawables
Definition light_viewer_context.hpp:267
void remove_drawable(const std::regex ®ex)
Eigen::Vector4i pick_info(const Eigen::Vector2i &p, int window=2) const
const std::shared_ptr< glk::ScreenEffect > & get_screen_effect() const
const glk::Texture & info_buffer() const
void update_coord(const std::string &name, const ShaderSetting &shader_setting)
bool show_window
Definition light_viewer_context.hpp:260
std::shared_ptr< ArcBallCameraControl > use_arcball_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
void update_cone(const std::string &name, const ShaderSetting &shader_setting)
void set_size(const Eigen::Vector2i &size)
std::shared_ptr< glk::PointCloudBuffer > update_points(const std::string &name, const float *data, int stride, int num_points, const ShaderSetting &shader_setting)
void set_colormap(glk::COLORMAP colormap)
void update_sphere(const std::string &name, const ShaderSetting &shader_setting)
void set_point_shape(float point_size=1.0f, bool metric=true, bool circle=true)
std::deque< std::string > sub_texts
Definition light_viewer_context.hpp:270
bool save_depth_buffer(const std::string &filename, bool real_scale=true)
void update_wire_cube(const std::string &name, const ShaderSetting &shader_setting)
std::vector< float > read_depth_buffer(bool real_scale=true)
Eigen::Matrix4f view_matrix() const
Definition light_viewer_context.hpp:130
bool save_camera_settings(const std::string &path) const
Eigen::Vector2i canvas_tl() const
Definition light_viewer_context.hpp:127
std::unordered_map< std::string, std::function< void()> > sub_ui_callbacks
Definition light_viewer_context.hpp:271
virtual void clear_text()
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)
std::shared_ptr< OrbitCameraControlXY > use_orbit_camera_control(double distance=80.0, double theta=0.0, double phi=-60.0f *M_PI/180.0f)
guik::ShaderSetting global_shader_setting
Definition light_viewer_context.hpp:258
void enable_normal_buffer()
void set_bg_texture(const std::shared_ptr< glk::Texture > &bg_texture)
void update_wire_cone(const std::string &name, const ShaderSetting &shader_setting)
bool partial_rendering_enabled() const
void update_cube(const std::string &name, const ShaderSetting &shader_setting)
void enable_xy_grid()
Definition light_viewer_context.hpp:61
guik::ShaderSetting & shader_setting()
Definition light_viewer_context.hpp:57
std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > find_drawable(const std::string &name)
void set_clear_color(const Eigen::Vector4f &color)
const glk::Texture & normal_buffer() const
void enable_partial_rendering(double clear_thresh=1e-6)
void set_camera_control(const std::shared_ptr< CameraControl > &camera_control)
std::unordered_map< std::string, std::pair< ShaderSetting::Ptr, glk::Drawable::ConstPtr > > & get_drawables()
std::unordered_map< std::string, std::function< bool(const std::string &)> > drawable_filters
Definition light_viewer_context.hpp:266
void update_drawable(const std::string &name, const glk::Drawable::ConstPtr &drawable, const ShaderSetting &shader_setting=ShaderSetting())
bool decimal_rendering
Definition light_viewer_context.hpp:262
Eigen::Vector2i canvas_rect_max
Definition light_viewer_context.hpp:256
bool load_camera_settings(const std::string &path)
void clear_partial_rendering()
float pick_depth(const Eigen::Vector2i &p, int window=2) const
void set_draw_xy_grid(bool draw_xy_grid)
void update_wire_icosahedron(const std::string &name, const ShaderSetting &shader_setting)
bool save_color_buffer(const std::string &filename)
void disable_xy_grid()
Definition light_viewer_context.hpp:60
bool draw_xy_grid
Definition light_viewer_context.hpp:261
const std::shared_ptr< ProjectionControl > & get_projection_control() const
void disable_partial_rendering()
LightViewerContext(const std::string &context_name)
bool init_canvas(const Eigen::Vector2i &size)
void remove_drawable_filter(const std::string &filter_name)
std::unique_ptr< guik::GLCanvas > canvas
Definition light_viewer_context.hpp:257
void update_wire_frustum(const std::string &name, const ShaderSetting &shader_setting)
void set_rainbow_range(const Eigen::Vector2f &minmax_z)
bool info_buffer_enabled() const
void lookat(const Vector &pt)
Definition light_viewer_context.hpp:115
const glk::Texture & depth_buffer() const
virtual ~LightViewerContext()
const glk::Texture & color_buffer() const
void enable_info_buffer()
void update_wire_sphere(const std::string &name, const ShaderSetting &shader_setting)
void enable_decimal_rendering()
void set_projection_control(const std::shared_ptr< ProjectionControl > &projection_control)
void set_rainbow_axis(const Eigen::Vector3f &axis)
const glk::Texture & dynamic_flag_buffer() const
void remove_ui_callback(const std::string &name)
Eigen::Vector2i canvas_size() const
Definition light_viewer_context.hpp:129
void register_drawable_filter(const std::string &filter_name, const std::function< bool(const std::string &)> &filter=0)
const std::shared_ptr< CameraControl > & get_camera_control() const
virtual void register_ui_callback(const std::string &name, const std::function< void()> &callback=0)
Definition async_buffer_copy.hpp:6
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