gtsam_points
Loading...
Searching...
No Matches
thin_lines.hpp
Go to the documentation of this file.
1#ifndef GLK_THIN_LINES_HPP
2#define GLK_THIN_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 ThinLines : public Drawable {
20public:
21 ThinLines(const float* vertices, int num_vertices, bool line_strip = false);
22 ThinLines(const float* vertices, const float* colors, int num_vertices, bool line_strip = false);
23 ThinLines(const float* vertices, const float* colors, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
24 ThinLines(const float* vertices, const float* colors, const float* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
25
26 ThinLines(const Eigen::Vector3f* vertices, int num_vertices, bool line_strip = false);
27 ThinLines(const Eigen::Vector3f* vertices, const Eigen::Vector4f* colors, int num_vertices, bool line_strip = false);
28 ThinLines(const Eigen::Vector3f* vertices, const Eigen::Vector4f* colors, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
29 ThinLines(const Eigen::Vector3f* vertices, const float* cmap, int num_vertices, bool line_strip = false);
30 ThinLines(const Eigen::Vector3f* vertices, const double* cmap, int num_vertices, bool line_strip = false);
31 ThinLines(const Eigen::Vector3f* vertices, const float* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
32 ThinLines(const Eigen::Vector3f* vertices, const double* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
33
34 template <typename T1, int D1>
35 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, bool line_strip = false);
36 template <typename T1, int D1>
37 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
38 template <typename T1, int D1, typename T2, int D2>
39 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const Eigen::Matrix<T2, D2, 1>* colors, int num_vertices, bool line_strip = false);
40 template <typename T1, int D1, typename T2, int D2>
42 const Eigen::Matrix<T1, D1, 1>* vertices,
43 const Eigen::Matrix<T2, D2, 1>* colors,
44 int num_vertices,
45 const unsigned int* indices,
46 int num_indices,
47 bool line_strip = false);
48 template <typename T1, int D1>
49 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const float* cmap, int num_vertices, bool line_strip = false);
50 template <typename T1, int D1>
51 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const double* cmap, int num_vertices, bool line_strip = false);
52 template <typename T1, int D1>
53 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const float* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
54 template <typename T1, int D1>
55 ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const double* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip = false);
56
57 template <typename T1, int D1, typename Allocator>
58 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, bool line_strip = false);
59 template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
60 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices, const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors, bool line_strip = false);
61 template <typename T1, int D1, typename Allocator>
62 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<unsigned int>& indices, bool line_strip = false);
63 template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
65 const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices,
66 const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors,
67 const std::vector<unsigned int>& indices,
68 bool line_strip = false);
69 template <typename T1, int D1, typename Allocator>
70 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<float>& cmap, bool line_strip = false);
71 template <typename T1, int D1, typename Allocator>
72 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<double>& cmap, bool line_strip = false);
73 template <typename T1, int D1, typename Allocator>
74 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<float>& cmap, const std::vector<unsigned int>& indices, bool line_strip = false);
75 template <typename T1, int D1, typename Allocator>
76 ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<double>& cmap, const std::vector<unsigned int>& indices, bool line_strip = false);
77
78 virtual ~ThinLines() override;
79
80 virtual void draw(glk::GLSLShader& shader) const override;
81
82 void set_line_width(float width) { line_width = width; }
83
84private:
85 ThinLines(const ThinLines&);
86 ThinLines& operator=(const ThinLines&);
87
88private:
89 float line_width;
90 int num_vertices;
91 int num_indices;
92
93 GLenum mode; // line mode (GL_LINES/GL_LINE_STRIP)
94 GLuint vao; // vertex array object
95 GLuint vbo; // vertices
96 GLuint cbo; // colors
97 GLuint cmbo; // colormap
98 GLuint ebo; // indices
99};
100
101// template members
102
103template <typename T1, int D1>
104ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, bool line_strip)
105: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), num_vertices, line_strip) {}
106
107template <typename T1, int D1>
108ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip)
109: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), static_cast<Eigen::Vector4f*>(nullptr), num_vertices, indices, num_indices, line_strip) {}
110
111template <typename T1, int D1, typename T2, int D2>
112ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const Eigen::Matrix<T2, D2, 1>* colors, int num_vertices, bool line_strip)
113: ThinLines(
114 convert_to_vector<float, 3, 1>(vertices, num_vertices).data(),
115 colors ? convert_to_vector<float, 4, 1>(colors, num_vertices).data() : nullptr,
116 num_vertices,
117 line_strip) {}
118
119template <typename T1, int D1, typename T2, int D2>
121 const Eigen::Matrix<T1, D1, 1>* vertices,
122 const Eigen::Matrix<T2, D2, 1>* colors,
123 int num_vertices,
124 const unsigned int* indices,
125 int num_indices,
126 bool line_strip)
127: ThinLines(
128 convert_to_vector<float, 3, 1>(vertices, num_vertices).data(),
129 colors ? convert_to_vector<float, 4, 1>(colors, num_vertices).data() : nullptr,
130 num_vertices,
131 indices,
132 num_indices,
133 line_strip) {}
134
135template <typename T1, int D1>
136ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const float* cmap, int num_vertices, bool line_strip)
137: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), cmap, num_vertices, nullptr, 0, line_strip) {}
138
139template <typename T1, int D1>
140ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const float* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip)
141: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), cmap, num_vertices, indices, num_indices, line_strip) {}
142
143template <typename T1, int D1>
144ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const double* cmap, int num_vertices, bool line_strip)
145: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), cmap, num_vertices, nullptr, 0, line_strip) {}
146
147template <typename T1, int D1>
148ThinLines::ThinLines(const Eigen::Matrix<T1, D1, 1>* vertices, const double* cmap, int num_vertices, const unsigned int* indices, int num_indices, bool line_strip)
149: ThinLines(convert_to_vector<float, 3, 1>(vertices, num_vertices).data(), cmap, num_vertices, indices, num_indices, line_strip) {}
150
151template <typename T1, int D1, typename Allocator>
152ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, bool line_strip) : ThinLines(vertices.data(), vertices.size(), line_strip) {}
153
154template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
155ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices, const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors, bool line_strip)
156: ThinLines(vertices.data(), colors.data(), vertices.size(), line_strip) {}
157
158template <typename T1, int D1, typename Allocator>
159ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<unsigned int>& indices, bool line_strip)
160: ThinLines(vertices.data(), static_cast<Eigen::Vector4f*>(nullptr), vertices.size(), indices.data(), indices.size(), line_strip) {}
161
162template <typename T1, int D1, typename Allocator1, typename T2, int D2, typename Allocator2>
164 const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator1>& vertices,
165 const std::vector<Eigen::Matrix<T2, D2, 1>, Allocator2>& colors,
166 const std::vector<unsigned int>& indices,
167 bool line_strip)
168: ThinLines(vertices.data(), colors.data(), vertices.size(), indices.data(), indices.size(), line_strip) {}
169
170template <typename T1, int D1, typename Allocator>
171ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<float>& cmap, bool line_strip)
172: ThinLines(vertices.data(), cmap.data(), vertices.size(), line_strip) {}
173
174template <typename T1, int D1, typename Allocator>
175ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<float>& cmap, const std::vector<unsigned int>& indices, bool line_strip)
176: ThinLines(vertices.data(), cmap.data(), vertices.size(), indices.data(), indices.size(), line_strip) {}
177
178template <typename T1, int D1, typename Allocator>
179ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<double>& cmap, bool line_strip)
180: ThinLines(vertices.data(), cmap.data(), vertices.size(), line_strip) {}
181
182template <typename T1, int D1, typename Allocator>
183ThinLines::ThinLines(const std::vector<Eigen::Matrix<T1, D1, 1>, Allocator>& vertices, const std::vector<double>& cmap, const std::vector<unsigned int>& indices, bool line_strip)
184: ThinLines(vertices.data(), cmap.data(), vertices.size(), indices.data(), indices.size(), line_strip) {}
185
186} // namespace glk
187
188#endif
Definition drawable.hpp:12
Definition glsl_shader.hpp:20
A class to draw a set of GL_LINES.
Definition thin_lines.hpp:19
ThinLines(const Eigen::Vector3f *vertices, const Eigen::Vector4f *colors, int num_vertices, bool line_strip=false)
void set_line_width(float width)
Definition thin_lines.hpp:82
ThinLines(const Eigen::Vector3f *vertices, const Eigen::Vector4f *colors, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip=false)
ThinLines(const Eigen::Vector3f *vertices, const double *cmap, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip=false)
ThinLines(const Eigen::Vector3f *vertices, const double *cmap, int num_vertices, bool line_strip=false)
ThinLines(const float *vertices, const float *colors, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip=false)
ThinLines(const Eigen::Vector3f *vertices, const float *cmap, int num_vertices, bool line_strip=false)
ThinLines(const float *vertices, const float *colors, int num_vertices, bool line_strip=false)
ThinLines(const Eigen::Vector3f *vertices, const float *cmap, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip=false)
virtual void draw(glk::GLSLShader &shader) const override
virtual ~ThinLines() override
ThinLines(const float *vertices, int num_vertices, bool line_strip=false)
ThinLines(const float *vertices, const float *colors, const float *cmap, int num_vertices, const unsigned int *indices, int num_indices, bool line_strip=false)
ThinLines(const Eigen::Vector3f *vertices, int num_vertices, 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