gtsam_points
Loading...
Searching...
No Matches
lines.hpp
Go to the documentation of this file.
1#ifndef GLK_LINES_HPP
2#define GLK_LINES_HPP
3
4#include <GL/gl3w.h>
5
6#include <vector>
7#include <Eigen/Core>
8
9#include <glk/drawable.hpp>
10#include <glk/glsl_shader.hpp>
12
13namespace glk {
14
19class Lines : public Drawable {
20public:
21 Lines(float line_width, const Eigen::Vector3f* vertices, int num_points, bool line_strip = false);
22 Lines(float line_width, const Eigen::Vector3f* vertices, const Eigen::Vector4f* colors, int num_points, bool line_strip = false);
23 Lines(float line_width, const Eigen::Vector3f* vertices, const Eigen::Vector4f* colors, const Eigen::Vector4i* infos, int num_points, bool line_strip = false);
24
25 template <typename T1, int D1>
26 Lines(float line_width, const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, bool line_strip = false);
27 template <typename T1, int D1, typename T2, int D2>
28 Lines(float line_width, const Eigen::Matrix<T1, D1, 1>* vertices, const Eigen::Matrix<T2, D2, 1>* colors, int num_vertices, bool line_strip = false);
29 template <typename T1, int D1, typename T2, int D2>
30 Lines(
31 float line_width,
32 const Eigen::Matrix<T1, D1, 1>* vertices,
33 const Eigen::Matrix<T2, D2, 1>* colors,
34 const Eigen::Vector4i* infos,
35 int num_vertices,
36 bool line_strip = false);
37
38 template <typename T1, int D1, typename Allocator>
39 Lines(float line_width, const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, bool line_strip = false);
40 template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
41 Lines(
42 float line_width,
43 const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices,
44 const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors,
45 bool line_strip = false);
46 template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2, typename Allocator3>
47 Lines(
48 float line_width,
49 const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices,
50 const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors,
51 const std::vector<Eigen::Vector4i, Allocator3>& infos,
52 bool line_strip = false);
53
54 virtual ~Lines() override;
55
56 virtual void draw(glk::GLSLShader& shader) const override;
57
58private:
59 Lines(const Lines&);
60 Lines& operator=(const Lines&);
61
62private:
63 int num_vertices;
64 int num_indices;
65
66 GLuint vao; // vertex array object
67 GLuint vbo; // vertices
68 GLuint cbo; // colors
69 GLuint ibo; // infos
70 GLuint ebo; // elements
71};
72
73// template methods
74
75template <typename T1, int D1>
76Lines::Lines(float line_width, const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, bool line_strip)
77: Lines(line_width, convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), num_vertices, line_strip) {}
78
79template <typename T1, int D1, typename T2, int D2>
80Lines::Lines(float line_width, const Eigen::Matrix<T1, D1, 1>* vertices, const Eigen::Matrix<T2, D2, 1>* colors, int num_vertices, bool line_strip)
81: Lines(line_width, convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), convert_to_vector<float, 4, 1>(colors, num_vertices).data(), num_vertices, line_strip) {}
82
83template <typename T1, int D1, typename T2, int D2>
84Lines::Lines(float line_width, const Eigen::Matrix<T1, D1, 1>* vertices, const Eigen::Matrix<T2, D2, 1>* colors, const Eigen::Vector4i* infos, int num_vertices, bool line_strip)
85: Lines(line_width, convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), convert_to_vector<float, 4, 1>(colors, num_vertices).data(), infos, num_vertices, line_strip) {}
86
87template <typename T1, int D1, typename Allocator>
88Lines::Lines(float line_width, const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, bool line_strip)
89: Lines(line_width, vertices.data(), vertices.size(), line_strip) {}
90
91template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
92Lines::Lines(float line_width, const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices, const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors, bool line_strip)
93: Lines(line_width, vertices.data(), colors.data(), vertices.size(), line_strip) {}
94
95template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2, typename Allocator3>
97 float line_width,
98 const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices,
99 const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors,
100 const std::vector<Eigen::Vector4i, Allocator3>& infos,
101 bool line_strip)
102: Lines(line_width, vertices.data(), colors.data(), infos.data(), vertices.size(), line_strip) {}
103
104} // namespace glk
105
106#endif
Definition drawable.hpp:12
Definition glsl_shader.hpp:20
A class to draw a set of lines.
Definition lines.hpp:19
Lines(float line_width, const Eigen::Vector3f *vertices, const Eigen::Vector4f *colors, const Eigen::Vector4i *infos, int num_points, bool line_strip=false)
virtual ~Lines() override
Lines(float line_width, const Eigen::Vector3f *vertices, const Eigen::Vector4f *colors, int num_points, bool line_strip=false)
virtual void draw(glk::GLSLShader &shader) const override
Lines(float line_width, const Eigen::Vector3f *vertices, int num_points, bool line_strip=false)
Definition async_buffer_copy.hpp:6
std::enable_if_t< std::is_same< Dst_Scalar, Src_Scalar >::value, std::vector< Eigen::Matrix< Dst_Scalar, Dst_Rows, Dst_Cols >, Allocator< Eigen::Matrix< Dst_Scalar, Dst_Rows, Dst_Cols > > > > convert_to_vector(const Eigen::Matrix< Src_Scalar, Src_Rows, Src_Cols > *points, int num_points)
Definition type_conversion.hpp:49
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20