CPP-TOOLBOX
Loading...
Searching...
No Matches
vertex_geometry.hpp
Go to the documentation of this file.
1#ifndef VERTEX_GEOMETRY_HPP
2#define VERTEX_GEOMETRY_HPP
3
4#include <glm/glm.hpp>
5#include <vector>
6#include <cmath>
7#include <functional>
8#include <stdexcept>
9#include <array>
10
12
13// NOTE: One day I want to move grid font into this, but here all we want to do is just store more hpp/cpp files in this
14// one rather than forcing all that into this file as well.
15
16namespace vertex_geometry {
17
19 CentralFan, // Triangulate from center point
20 VertexFan // Triangulate from an existing vertex
21};
22
23class NGon {
24 public:
25 // Construct from explicit points
26 NGon(const std::vector<glm::vec3> &pts, TriangulationMode mode = TriangulationMode::CentralFan)
27 : points(pts), triangulation_mode(mode) {
28 if (points.size() < 3)
29 throw std::runtime_error("Ngon must have at least 3 vertices");
30 }
31
32 // Construct a regular ngon given radius, plane normal, and center offset
33 NGon(std::size_t n_vertices, float radius = 1.0f, const glm::vec3 &normal = glm::vec3(0, 0, 1),
34 const glm::vec3 &offset = glm::vec3(0, 0, 0), TriangulationMode mode = TriangulationMode::CentralFan)
35 : triangulation_mode(mode) {
36 if (n_vertices < 3)
37 throw std::runtime_error("Ngon must have at least 3 vertices");
38
39 points.resize(n_vertices);
40 glm::vec3 u, v;
41 make_basis_from_normal(normal, u, v);
42
43 float angle_step = glm::two_pi<float>() / static_cast<float>(n_vertices);
44 for (std::size_t i = 0; i < n_vertices; ++i) {
45 float angle = i * angle_step;
46 points[i] = offset + radius * (std::cos(angle) * u + std::sin(angle) * v);
47 }
48 }
49
50 const glm::vec3 &operator[](std::size_t index) const { return points[index]; }
51 glm::vec3 &operator[](std::size_t index) { return points[index]; }
52
53 std::size_t size() const { return points.size(); }
54 const std::vector<glm::vec3> &get_points() const { return points; }
55
56 TriangulationMode get_triangulation_mode() const { return triangulation_mode; }
57
58 private:
59 std::vector<glm::vec3> points;
60 TriangulationMode triangulation_mode;
61
62 static void make_basis_from_normal(const glm::vec3 &normal, glm::vec3 &u, glm::vec3 &v) {
63 glm::vec3 n = glm::normalize(normal);
64 glm::vec3 temp = (std::abs(n.x) > 0.9f) ? glm::vec3(0, 1, 0) : glm::vec3(1, 0, 0);
65 u = glm::normalize(glm::cross(n, temp));
66 v = glm::normalize(glm::cross(n, u));
67 }
68};
69
71 public:
73 AxisAlignedBoundingBox(const std::vector<glm::vec3> &xyz_positions) {
74 min = glm::vec3(std::numeric_limits<float>::max());
75 max = glm::vec3(std::numeric_limits<float>::lowest());
76
77 for (const auto &v : xyz_positions) {
78 min = glm::min(min, v);
79 max = glm::max(max, v);
80 }
81 }
82
83 glm::vec3 min;
84 glm::vec3 max;
85
86 std::array<glm::vec3, 8> get_corners() const {
87 return {
88 glm::vec3(min.x, min.y, min.z), glm::vec3(max.x, min.y, min.z), glm::vec3(min.x, max.y, min.z),
89 glm::vec3(max.x, max.y, min.z), glm::vec3(min.x, min.y, max.z), glm::vec3(max.x, min.y, max.z),
90 glm::vec3(min.x, max.y, max.z), glm::vec3(max.x, max.y, max.z),
91 };
92 }
93
95};
96
98 public:
99 AxisAlignedBoundingBox2D(const std::vector<glm::vec2> &xy_positions) {
100 min = glm::vec2(std::numeric_limits<float>::max());
101 max = glm::vec2(std::numeric_limits<float>::lowest());
102
103 for (const auto &v : xy_positions) {
104 min = glm::min(min, v);
105 max = glm::max(max, v);
106 }
107 }
108
109 glm::vec2 min;
110 glm::vec2 max;
111
112 // Returns the 4 corners of the 2D bounding box
113 std::array<glm::vec2, 4> get_corners() const {
114 return {glm::vec2(min.x, min.y), glm::vec2(max.x, min.y), glm::vec2(min.x, max.y), glm::vec2(max.x, max.y)};
115 }
116
117 // LATER
118 // draw_info::IndexedVertexPositions get_ivp();
119};
120
122draw_info::IndexedVertexPositions connect_ngons(const NGon &a, const NGon &b);
123
124// Triangulate any Ngon dynamically
125
127 public:
128 // by default we use width height 2 to take up the full [-1, 1] x [-1, 1] ndc space
129 Rectangle(glm::vec3 center = glm::vec3(0), float width = 2, float height = 2)
131 glm::vec3 center; // Center position
132 float width; // Width of the rectangle
133 float height; // Height of the rectangle
135 friend std::ostream &operator<<(std::ostream &os, const Rectangle &rect);
136
137 glm::vec3 get_top_left() const;
138 glm::vec3 get_top_center() const;
139 glm::vec3 get_top_right() const;
140 glm::vec3 get_center_left() const;
141 glm::vec3 get_center_right() const;
142 glm::vec3 get_bottom_left() const;
143 glm::vec3 get_bottom_center() const;
144 glm::vec3 get_bottom_right() const;
145};
146
147Rectangle expand_rectangle(const Rectangle &rect, float x_expand, float y_expand);
148Rectangle shrink_rectangle(const Rectangle &rect, float x_shrink, float y_shrink);
149// this function scales a rectangle keeping the left side in place
150Rectangle scale_rectangle_from_left_side(const Rectangle &rect, float x_shrink, float y_shrink = 1);
151Rectangle slide_rectangle(const Rectangle &rect, int x_offset, int y_offset);
152Rectangle get_bounding_rectangle(const std::vector<Rectangle> &rectangles);
153
154class Grid {
155 public:
156 Grid(int rows, int cols, float width = 2.0f, float height = 2.0f, float origin_x = 0.0f, float origin_y = 0.0f,
157 float origin_z = 0.0f);
158 Grid(int rows, int cols, const Rectangle &rect);
159
160 // this is like x, y
161 Rectangle get_at(int col, int row) const;
162 std::vector<Rectangle> get_selection(float x0, float y0, float x1, float y1) const;
163 std::vector<Rectangle> get_rectangles_in_bounding_box(int row1, int col1, int row2, int col2) const;
164 std::vector<Rectangle> get_row(int row) const;
165 std::vector<Rectangle> get_column(int col) const;
166
167 const int rows; // Number of rows in the grid
168 const int cols; // Number of columns in the grid
169
170 private:
171 float grid_width; // Total width of the grid in NDC
172 float grid_height; // Total height of the grid in NDC
173 float origin_x; // X-coordinate of the grid's origin
174 float origin_y; // Y-coordinate of the grid's origin
175 float origin_z; // Y-coordinate of the grid's origin
176 float rect_width; // Width of each rectangle
177 float rect_height; // Height of each rectangle
178};
179
180bool circle_intersects_rect(float cx, float cy, float radius, const Rectangle &rect);
181std::vector<Rectangle> get_rects_intersecting_circle(const Grid &grid, float cx, float cy, float radius);
182
184 const vertex_geometry::Rectangle bounding_rect);
185
186draw_info::IndexedVertexPositions generate_rectangle_between_2d(const glm::vec2 &p1, const glm::vec2 &p2,
187 float thickness = 0.01);
188
189Rectangle create_rectangle_from_corners(const glm::vec3 top_left, const glm::vec3 top_right,
190 const glm::vec3 bottom_left, const glm::vec3 bottom_right);
191Rectangle create_rectangle(float x_pos, float y_pos, float width, float height);
192Rectangle create_rectangle_from_top_left(const glm::vec3 &top_left, float width, float height);
193Rectangle create_rectangle_from_top_right(const glm::vec3 &top_right, float width, float height);
194Rectangle create_rectangle_from_bottom_left(const glm::vec3 &bottom_left, float width, float height);
195Rectangle create_rectangle_from_bottom_right(const glm::vec3 &bottom_right, float width, float height);
196Rectangle create_rectangle_from_center_left(const glm::vec3 &center_left, float width, float height);
197
198Rectangle create_rectangle_from_center(const glm::vec3 &center, float width, float height);
199
200std::vector<Rectangle> subdivide_rectangle(const Rectangle &rect, unsigned int num_subdivisions, bool vertical = true);
201
202// when you subdivide vertically think of it as cutting up and down like lines in a book
203std::vector<Rectangle> vertical_weighted_subdivision(const Rectangle &rect, const std::vector<unsigned int> &weights);
204
205// when you subdivide horizontally you're cutting a carrot on a cutting board
206std::vector<Rectangle> horizontal_weighted_subdivision(const Rectangle &rect, const std::vector<unsigned int> &weights);
207
208std::vector<Rectangle> weighted_subdivision(const Rectangle &rect, const std::vector<unsigned int> &weights,
209 bool vertical = true);
210
211std::vector<glm::vec3> generate_rectangle_normals();
212std::vector<Rectangle> generate_grid_rectangles(const glm::vec3 &center_position, float base_width, float base_height,
213 int num_rectangles_x, int num_rectangles_y, float spacing);
214
215draw_info::IndexedVertexPositions generate_grid(const glm::vec3 &center_position, float base_width, float base_height,
216 int num_rectangles_x, int num_rectangles_y, float spacing);
217
218draw_info::IndexedVertexPositions generate_grid(const glm::vec3 &center_position, float width, float height,
219 int num_rectangles_x, int num_rectangles_y, float spacing);
220
221std::vector<unsigned int> flatten_and_increment_indices(const std::vector<std::vector<unsigned int>> &indices);
222
223draw_info::IVPNormals generate_torus(int major_segments = 64, // Around the main ring
224 int minor_segments = 32, // Around the tube
225 float major_radius = 1.0f, // Distance from center to tube center
226 float minor_radius = 0.3f // Radius of the tube
227);
228
229draw_info::IVPNormals generate_cube(float size = 1.0f);
230
231draw_info::IVPNormals generate_box(float size_x = 1.0f, float size_y = 1.0f, float size_z = 1.0f);
232
233draw_info::IVPNormals generate_cone(int segments = 8, float height = 1.0f, float radius = 0.5f);
234
235draw_info::IndexedVertexPositions generate_cone_between(const glm::vec3 &base, const glm::vec3 &tip, int segments = 8,
236 float radius = 0.5);
237
238draw_info::IVPNormals generate_cylinder(int segments = 8, float height = 1.0f, float radius = 0.5f);
239
240draw_info::IndexedVertexPositions generate_cylinder_between(const glm::vec3 &p1, const glm::vec3 &p2, int segments,
241 float radius);
242
243draw_info::IVPNormals generate_icosphere(int subdivisions, float radius);
244
245draw_info::IVPNormals generate_terrain(float size_x = 100.0f, float size_z = 100.0f, int resolution_x = 50,
246 int resolution_z = 50, float max_height = 5.0f, float base_height = 0.0f,
247 int octaves = 4, float persistence = 0.5f, float scale = 50.0f,
248 float seed = 0.0f);
249
250draw_info::IndexedVertexPositions connect_points_by_rectangles(const std::vector<glm::vec2> &points);
251
252draw_info::IndexedVertexPositions generate_function_visualization(std::function<glm::vec3(double)> f, double t_start,
253 double t_end, double step_size,
254 double finite_diff_delta, float radius = .25,
255 int segments = 8);
256
257draw_info::IndexedVertexPositions generate_segmented_cylinder(const std::vector<std::pair<glm::vec3, glm::vec3>> &path,
258 float radius, int segments);
259
260draw_info::IndexedVertexPositions generate_quad_strip(const std::vector<std::pair<glm::vec3, glm::vec3>> &lines);
261
264 const std::vector<draw_info::IndexedVertexPositions> &extend_ivps);
265draw_info::IndexedVertexPositions merge_ivps(const std::vector<draw_info::IndexedVertexPositions> &ivps);
266
268std::vector<glm::vec3> generate_unit_cube_vertices();
269std::vector<unsigned int> generate_cube_indices();
270
271std::vector<glm::vec3> generate_square_vertices(float center_x, float center_y, float side_length);
272std::vector<unsigned int> generate_square_indices();
273
274draw_info::IndexedVertexPositions generate_rectangle(float center_x, float center_y, float width, float height);
275std::vector<glm::vec3> generate_rectangle_vertices(float center_x, float center_y, float width, float height);
276// TODO: the below shouldn't exist, instead the above should just take in z, but i don't want to bust the api right
277// now
278draw_info::IndexedVertexPositions generate_rectangle(float center_x, float center_y, float center_z, float width,
279 float height);
280std::vector<glm::vec3> generate_rectangle_vertices_with_z(float center_x, float center_y, float center_z, float width,
281 float height);
282std::vector<unsigned int> generate_rectangle_indices();
283std::vector<glm::vec2> generate_rectangle_texture_coordinates();
285
286std::vector<glm::vec3> generate_rectangle_vertices_3d(const glm::vec3 &center, const glm::vec3 &width_dir,
287 const glm::vec3 &height_dir, float width, float height);
288std::vector<glm::vec3> generate_rectangle_vertices_from_points(const glm::vec3 &point_a, const glm::vec3 &point_b,
289 const glm::vec3 &surface_normal, float height = 1);
290
291draw_info::IndexedVertexPositions generate_3d_arrow_with_ratio(const glm::vec3 &start, const glm::vec3 &end,
292 int num_segments = 16,
293 float length_thickness_ratio = 0.07);
294
295draw_info::IndexedVertexPositions generate_3d_arrow(const glm::vec3 &start, const glm::vec3 &end, int num_segments = 16,
296 float stem_thickness = 0.12);
297
298std::vector<glm::vec3> generate_arrow_vertices(glm::vec2 start, glm::vec2 end, float stem_thickness = 0.05,
299 float tip_length = .05);
300std::vector<unsigned int> generate_arrow_indices();
301
302std::vector<glm::vec3> scale_vertices(const std::vector<glm::vec3> &vertices, const glm::vec3 &scale_vector,
303 const glm::vec3 &origin = glm::vec3(0.0f));
304void scale_vertices_in_place(std::vector<glm::vec3> &vertices, const glm::vec3 &scale_vector,
305 const glm::vec3 &origin = glm::vec3(0.0f));
306void scale_vertices_in_place(std::vector<glm::vec3> &vertices, float scale_factor);
307void rotate_vertices_in_place(std::vector<glm::vec3> &vertices, const glm::vec3 &rotation_turns);
308
309// note: num sides >= 3
310draw_info::IndexedVertexPositions generate_circle(const glm::vec3 center = glm::vec3(0), float radius = 1,
311 unsigned int num_sides = 30);
312draw_info::IndexedVertexPositions generate_n_gon(const glm::vec3 center = glm::vec3(0), float radius = 1,
313 unsigned int num_sides = 30);
314std::vector<unsigned int> generate_n_gon_indices(unsigned int num_sides);
315std::vector<glm::vec3> generate_n_gon_vertices(const glm::vec3 &center, float radius = 1, unsigned int num_sides = 30);
316
317draw_info::IndexedVertexPositions generate_annulus(float center_x, float center_y, float outer_radius,
318 float inner_radius, int num_segments, float percent = 1);
319std::vector<glm::vec3> generate_annulus_vertices(float center_x, float center_y, float outer_radius, float inner_radius,
320 int num_segments, float percent = 1);
321std::vector<unsigned int> generate_annulus_indices(int num_segments, float percent = 1);
322
323// points are the points of the star
324std::vector<glm::vec3> generate_star_vertices(float center_x, float center_y, float outer_radius, float inner_radius,
325 int num_star_tips, bool blunt_tips = false);
326std::vector<unsigned int> generate_star_indices(int num_star_tips, bool blunt_tips);
327
328std::vector<glm::vec3> generate_fibonacci_sphere_vertices(int num_samples, float scale);
329
330void translate_vertices_in_place(std::vector<glm::vec3> &vertices, const glm::vec3 &translation);
331void increment_indices_in_place(std::vector<unsigned int> &indices, unsigned int increase);
332} // namespace vertex_geometry
333
334#endif // VERTEX_GEOMETRY_HPP
Definition draw_info.hpp:85
Definition draw_info.hpp:61
glm::vec2 max
Definition vertex_geometry.hpp:110
std::array< glm::vec2, 4 > get_corners() const
Definition vertex_geometry.hpp:113
glm::vec2 min
Definition vertex_geometry.hpp:109
AxisAlignedBoundingBox2D(const std::vector< glm::vec2 > &xy_positions)
Definition vertex_geometry.hpp:99
AxisAlignedBoundingBox()
Definition vertex_geometry.hpp:72
glm::vec3 min
Definition vertex_geometry.hpp:83
glm::vec3 max
Definition vertex_geometry.hpp:84
AxisAlignedBoundingBox(const std::vector< glm::vec3 > &xyz_positions)
Definition vertex_geometry.hpp:73
draw_info::IndexedVertexPositions get_ivp()
Definition vertex_geometry.cpp:322
std::array< glm::vec3, 8 > get_corners() const
Definition vertex_geometry.hpp:86
Definition vertex_geometry.hpp:154
std::vector< Rectangle > get_selection(float x0, float y0, float x1, float y1) const
Definition vertex_geometry.cpp:219
std::vector< Rectangle > get_rectangles_in_bounding_box(int row1, int col1, int row2, int col2) const
Definition vertex_geometry.cpp:246
std::vector< Rectangle > get_row(int row) const
Definition vertex_geometry.cpp:269
Rectangle get_at(int col, int row) const
Definition vertex_geometry.cpp:204
const int rows
Definition vertex_geometry.hpp:167
Grid(int rows, int cols, float width=2.0f, float height=2.0f, float origin_x=0.0f, float origin_y=0.0f, float origin_z=0.0f)
Definition vertex_geometry.cpp:195
const int cols
Definition vertex_geometry.hpp:168
std::vector< Rectangle > get_column(int col) const
Definition vertex_geometry.cpp:282
glm::vec3 & operator[](std::size_t index)
Definition vertex_geometry.hpp:51
NGon(std::size_t n_vertices, float radius=1.0f, const glm::vec3 &normal=glm::vec3(0, 0, 1), const glm::vec3 &offset=glm::vec3(0, 0, 0), TriangulationMode mode=TriangulationMode::CentralFan)
Definition vertex_geometry.hpp:33
const std::vector< glm::vec3 > & get_points() const
Definition vertex_geometry.hpp:54
NGon(const std::vector< glm::vec3 > &pts, TriangulationMode mode=TriangulationMode::CentralFan)
Definition vertex_geometry.hpp:26
const glm::vec3 & operator[](std::size_t index) const
Definition vertex_geometry.hpp:50
std::size_t size() const
Definition vertex_geometry.hpp:53
TriangulationMode get_triangulation_mode() const
Definition vertex_geometry.hpp:56
Definition vertex_geometry.hpp:126
float height
Definition vertex_geometry.hpp:133
glm::vec3 get_top_center() const
Definition vertex_geometry.cpp:186
glm::vec3 get_center_left() const
Definition vertex_geometry.cpp:188
glm::vec3 get_bottom_right() const
Definition vertex_geometry.cpp:192
float width
Definition vertex_geometry.hpp:132
glm::vec3 get_center_right() const
Definition vertex_geometry.cpp:189
glm::vec3 get_top_left() const
Definition vertex_geometry.cpp:185
Rectangle(glm::vec3 center=glm::vec3(0), float width=2, float height=2)
Definition vertex_geometry.hpp:129
glm::vec3 get_bottom_left() const
Definition vertex_geometry.cpp:190
glm::vec3 center
Definition vertex_geometry.hpp:131
friend std::ostream & operator<<(std::ostream &os, const Rectangle &rect)
Definition vertex_geometry.cpp:21
glm::vec3 get_bottom_center() const
Definition vertex_geometry.cpp:191
draw_info::IndexedVertexPositions get_ivs() const
Definition vertex_geometry.cpp:179
glm::vec3 get_top_right() const
Definition vertex_geometry.cpp:187
@ a
Definition input_state.hpp:27
@ u
Definition input_state.hpp:47
@ n
Definition input_state.hpp:40
@ i
Definition input_state.hpp:35
@ b
Definition input_state.hpp:28
@ v
Definition input_state.hpp:48
Definition vertex_geometry.cpp:19
std::vector< glm::vec3 > generate_rectangle_normals()
Generates normals for each corner of a rectangle.
Definition vertex_geometry.cpp:1667
Rectangle expand_rectangle(const Rectangle &rect, float x_expand, float y_expand)
Definition vertex_geometry.cpp:417
std::vector< glm::vec3 > generate_n_gon_vertices(const glm::vec3 &center, float radius, unsigned int num_sides)
generate n equally spaced points on the unit circle
Definition vertex_geometry.cpp:1789
draw_info::IndexedVertexPositions generate_unit_cube()
Definition vertex_geometry.cpp:1630
draw_info::IndexedVertexPositions generate_3d_arrow(const glm::vec3 &start, const glm::vec3 &end, int num_segments, float stem_thickness)
Definition vertex_geometry.cpp:1945
draw_info::IndexedVertexPositions triangulate_ngon(const NGon &ngon)
Definition vertex_geometry.cpp:349
Rectangle create_rectangle_from_top_right(const glm::vec3 &top_right, float width, float height)
Definition vertex_geometry.cpp:302
std::vector< unsigned int > generate_cube_indices()
Definition vertex_geometry.cpp:1658
draw_info::IndexedVertexPositions generate_3d_arrow_with_ratio(const glm::vec3 &start, const glm::vec3 &end, int num_segments, float length_thickness_ratio)
Definition vertex_geometry.cpp:1934
std::vector< Rectangle > weighted_subdivision(const Rectangle &rect, const std::vector< unsigned int > &weights, bool vertical)
Definition vertex_geometry.cpp:494
std::vector< Rectangle > vertical_weighted_subdivision(const Rectangle &rect, const std::vector< unsigned int > &weights)
Definition vertex_geometry.cpp:485
draw_info::IndexedVertexPositions generate_circle(const glm::vec3 center, float radius, unsigned int num_sides)
Definition vertex_geometry.cpp:1761
void scale_vertices_in_place(std::vector< glm::vec3 > &vertices, const glm::vec3 &scale_vector, const glm::vec3 &origin)
Definition vertex_geometry.cpp:2050
std::vector< unsigned int > generate_star_indices(int num_star_tips, bool blunt_tips)
Definition vertex_geometry.cpp:1901
draw_info::IndexedVertexPositions generate_rectangle_between_2d(const glm::vec2 &p1, const glm::vec2 &p2, float thickness)
Definition vertex_geometry.cpp:119
Rectangle shrink_rectangle(const Rectangle &rect, float x_shrink, float y_shrink)
Definition vertex_geometry.cpp:425
bool circle_intersects_rect(float cx, float cy, float radius, const Rectangle &rect)
Definition vertex_geometry.cpp:45
void increment_indices_in_place(std::vector< unsigned int > &indices, unsigned int increase)
Definition vertex_geometry.cpp:2095
std::vector< glm::vec3 > generate_unit_cube_vertices()
Definition vertex_geometry.cpp:1643
void rotate_vertices_in_place(std::vector< glm::vec3 > &vertices, const glm::vec3 &rotation_turns)
Definition vertex_geometry.cpp:2086
std::vector< glm::vec3 > generate_star_vertices(float center_x, float center_y, float outer_radius, float inner_radius, int num_star_tips, bool blunt_tips)
Definition vertex_geometry.cpp:1858
std::vector< Rectangle > subdivide_rectangle(const Rectangle &rect, unsigned int num_subdivisions, bool vertical)
Definition vertex_geometry.cpp:480
Rectangle create_rectangle_from_top_left(const glm::vec3 &top_left, float width, float height)
Definition vertex_geometry.cpp:298
draw_info::IVPNormals generate_icosphere(int subdivisions, float radius)
Definition vertex_geometry.cpp:1236
draw_info::IndexedVertexPositions generate_annulus(float center_x, float center_y, float outer_radius, float inner_radius, int num_segments, float percent)
Definition vertex_geometry.cpp:1807
Rectangle create_rectangle(float x_pos, float y_pos, float width, float height)
Definition vertex_geometry.cpp:294
draw_info::IndexedVertexPositions generate_cylinder_between(const glm::vec3 &p1, const glm::vec3 &p2, int segments, float radius)
Definition vertex_geometry.cpp:1019
std::vector< glm::vec2 > generate_rectangle_texture_coordinates()
Definition vertex_geometry.cpp:1740
std::vector< glm::vec3 > generate_fibonacci_sphere_vertices(int num_samples, float scale)
Definition vertex_geometry.cpp:1917
Rectangle create_rectangle_from_center_left(const glm::vec3 &center_left, float width, float height)
Definition vertex_geometry.cpp:314
draw_info::IndexedVertexPositions generate_rectangle(float center_x, float center_y, float width, float height)
Definition vertex_geometry.cpp:670
draw_info::IVPNormals generate_cone(int segments, float height, float radius)
Definition vertex_geometry.cpp:962
draw_info::IndexedVertexPositions generate_grid(const glm::vec3 &center_position, float base_width, float base_height, int num_rectangles_x, int num_rectangles_y, float spacing)
Definition vertex_geometry.cpp:567
std::vector< glm::vec3 > scale_vertices(const std::vector< glm::vec3 > &vertices, const glm::vec3 &scale_vector, const glm::vec3 &origin)
Definition vertex_geometry.cpp:2056
std::vector< glm::vec3 > generate_rectangle_vertices_3d(const glm::vec3 &center, const glm::vec3 &width_dir, const glm::vec3 &height_dir, float width, float height)
Definition vertex_geometry.cpp:1676
Rectangle slide_rectangle(const Rectangle &rect, int x_offset, int y_offset)
Definition vertex_geometry.cpp:437
std::vector< glm::vec3 > generate_annulus_vertices(float center_x, float center_y, float outer_radius, float inner_radius, int num_segments, float percent)
Definition vertex_geometry.cpp:1813
draw_info::IVPNormals generate_cylinder(int segments, float height, float radius)
Definition vertex_geometry.cpp:1084
std::vector< glm::vec3 > generate_rectangle_vertices_with_z(float center_x, float center_y, float center_z, float width, float height)
Definition vertex_geometry.cpp:694
std::vector< Rectangle > get_rects_intersecting_circle(const Grid &grid, float cx, float cy, float radius)
Definition vertex_geometry.cpp:56
void translate_vertices_in_place(std::vector< glm::vec3 > &vertices, const glm::vec3 &translation)
Definition vertex_geometry.cpp:2071
Rectangle create_rectangle_from_center(const glm::vec3 &center, float width, float height)
Definition vertex_geometry.cpp:318
std::vector< glm::vec2 > generate_rectangle_texture_coordinates_flipped_vertically()
Definition vertex_geometry.cpp:1752
draw_info::IndexedVertexPositions generate_cone_between(const glm::vec3 &base, const glm::vec3 &tip, int segments, float radius)
Definition vertex_geometry.cpp:709
Rectangle create_rectangle_from_corners(const glm::vec3 top_left, const glm::vec3 top_right, const glm::vec3 bottom_left, const glm::vec3 bottom_right)
Definition vertex_geometry.cpp:154
std::vector< glm::vec3 > generate_rectangle_vertices(float center_x, float center_y, float width, float height)
Definition vertex_geometry.cpp:680
std::vector< glm::vec3 > generate_arrow_vertices(glm::vec2 start, glm::vec2 end, float stem_thickness, float tip_length)
Create the points of an arrow pointing from one point to another.
Definition vertex_geometry.cpp:1993
std::vector< Rectangle > generate_grid_rectangles(const glm::vec3 &center_position, float width, float height, int num_rectangles_x, int num_rectangles_y, float spacing)
Definition vertex_geometry.cpp:538
draw_info::IndexedVertexPositions connect_ngons(const NGon &a, const NGon &b)
Definition vertex_geometry.cpp:381
Rectangle get_bounding_rectangle(const std::vector< Rectangle > &rectangles)
Definition vertex_geometry.cpp:447
draw_info::IVPNormals generate_torus(int major_segments, int minor_segments, float major_radius, float minor_radius)
Definition vertex_geometry.cpp:755
std::vector< glm::vec3 > generate_rectangle_vertices_from_points(const glm::vec3 &point_a, const glm::vec3 &point_b, const glm::vec3 &surface_normal, float height)
Definition vertex_geometry.cpp:1718
Rectangle scale_rectangle_from_left_side(const Rectangle &rect, float x_shrink, float y_shrink)
Definition vertex_geometry.cpp:433
std::vector< unsigned int > generate_rectangle_indices()
Definition vertex_geometry.cpp:1732
void merge_ivps(draw_info::IndexedVertexPositions &base_ivp, const draw_info::IndexedVertexPositions &extend_ivp)
Definition vertex_geometry.cpp:1600
draw_info::IndexedVertexPositions generate_n_gon(const glm::vec3 center, float radius, unsigned int num_sides)
Definition vertex_geometry.cpp:1765
draw_info::IVPNormals generate_terrain(float size_x, float size_z, int resolution_x, int resolution_z, float max_height, float base_height, int octaves, float persistence, float scale, float seed)
Definition vertex_geometry.cpp:1271
draw_info::IVPNormals generate_cube(float size)
Definition vertex_geometry.cpp:807
Rectangle create_rectangle_from_bottom_left(const glm::vec3 &bottom_left, float width, float height)
Definition vertex_geometry.cpp:306
std::vector< unsigned int > generate_square_indices()
Definition vertex_geometry.cpp:668
draw_info::IndexedVertexPositions generate_quad_strip(const std::vector< std::pair< glm::vec3, glm::vec3 > > &lines)
Definition vertex_geometry.cpp:1564
std::vector< unsigned int > flatten_and_increment_indices(const std::vector< std::vector< unsigned int > > &indices)
Flattens and increments a collection of index sets.
Definition vertex_geometry.cpp:606
std::vector< unsigned int > generate_arrow_indices()
Definition vertex_geometry.cpp:2048
std::vector< Rectangle > horizontal_weighted_subdivision(const Rectangle &rect, const std::vector< unsigned int > &weights)
Definition vertex_geometry.cpp:489
draw_info::IndexedVertexPositions generate_function_visualization(std::function< glm::vec3(double)> f, double t_start, double t_end, double step_size, double finite_diff_delta, float radius, int segments)
Definition vertex_geometry.cpp:1496
std::vector< unsigned int > generate_n_gon_indices(unsigned int num_sides)
Definition vertex_geometry.cpp:1769
draw_info::IndexedVertexPositions connect_points_by_rectangles(const std::vector< glm::vec2 > &points)
Definition vertex_geometry.cpp:1480
std::vector< glm::vec3 > generate_square_vertices(float center_x, float center_y, float side_length)
Definition vertex_geometry.cpp:664
draw_info::IndexedVertexPositions text_grid_to_rect_grid(const std::string &text_grid, const vertex_geometry::Rectangle bounding_rect)
Definition vertex_geometry.cpp:74
glm::vec3 f(double t)
Definition vertex_geometry.cpp:1458
draw_info::IVPNormals generate_box(float size_x, float size_y, float size_z)
Definition vertex_geometry.cpp:884
Rectangle create_rectangle_from_bottom_right(const glm::vec3 &bottom_right, float width, float height)
Definition vertex_geometry.cpp:310
TriangulationMode
Definition vertex_geometry.hpp:18
@ CentralFan
Definition vertex_geometry.hpp:19
@ VertexFan
Definition vertex_geometry.hpp:20
draw_info::IndexedVertexPositions generate_segmented_cylinder(const std::vector< std::pair< glm::vec3, glm::vec3 > > &path, float radius, int segments)
Definition vertex_geometry.cpp:1504
std::vector< unsigned int > generate_annulus_indices(int num_segments, float percent)
Definition vertex_geometry.cpp:1836