cgv
Loading...
Searching...
No Matches
box_wire_renderer.h
1#pragma once
2
3#include "line_renderer.h"
4
5#include "gl/lib_begin.h"
6
7namespace cgv { // @<
8 namespace render { // @<
9 class CGV_API box_wire_renderer;
10
12
15 extern CGV_API box_wire_renderer& ref_box_wire_renderer(context& ctx, int ref_count_change = 0);
16
27
29 class CGV_API box_wire_renderer : public line_renderer
30 {
31 protected:
32 bool has_extents;
40 render_style* create_render_style() const;
42 bool build_shader_program(context& ctx, shader_program& prog, const shader_define_map& defines);
43 public:
46 void enable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
48 void disable_attribute_array_manager(const context& ctx, attribute_array_manager& aam);
50 void set_position_is_center(bool _position_is_center);
52 bool enable(context& ctx);
54 template <typename T>
55 void set_extent(const context& ctx, const T& extent) { has_extents = true; ref_prog().set_attribute(ctx, get_prog_attribute_location(ctx, "extent"), extent); }
57 template <typename T>
58 void set_extent_array(const context& ctx, const std::vector<T>& extents) { has_extents = true; set_attribute_array(ctx, "extent", extents); }
60 template <typename T>
61 void set_extent_array(const context& ctx, const T* extents, size_t nr_elements, unsigned stride_in_bytes = 0) { has_extents = true; set_attribute_array(ctx, "extent", extents, nr_elements, stride_in_bytes); }
63 void remove_extent_array(const context& ctx);
65 template <typename T>
66 void set_box(const context& ctx, const cgv::media::axis_aligned_box<T, 3>& box) {
67 set_position(ctx, box.get_min_pnt());
68 set_extent(ctx, box.get_max_pnt());
69 set_position_is_center(false);
70 }
72 template <typename T>
73 void set_box_array(const context& ctx, const std::vector<cgv::media::axis_aligned_box<T, 3> > & boxes) {
74 set_composed_attribute_array(ctx, "position", &boxes.front(), boxes.size(), boxes[0].get_min_pnt());
75 ref_composed_attribute_array(ctx, "extent", "position", &boxes.front(), boxes.size(), boxes[0].get_max_pnt());
76 has_positions = true;
77 has_extents = true;
78 set_position_is_center(false);
79 }
81 template <typename T>
82 void set_box_array(const context& ctx, const cgv::media::axis_aligned_box<T, 3> * boxes, size_t count) {
83 set_composed_attribute_array(ctx, "position", boxes, count, boxes[0].get_min_pnt());
84 ref_composed_attribute_array(ctx, "extent", "position", boxes, count, boxes[0].get_max_pnt());
85 has_positions = true;
86 has_extents = true;
87 set_position_is_center(false);
88 }
90 template <typename T>
91 void set_translation_array(const context& ctx, const std::vector<T>& translations) { has_translations = true; set_attribute_array(ctx, "translation", translations); }
93 template <typename T>
94 void set_translation_array(const context& ctx, const T* translations, size_t nr_elements, unsigned stride_in_bytes = 0) { has_translations = true; set_attribute_array(ctx, "translation", translations, nr_elements, stride_in_bytes); }
96 void remove_translation_array(const context& ctx);
98 template <typename T>
99 void set_rotation_array(const context& ctx, const std::vector<T>& rotations) { has_rotations = true; set_attribute_array(ctx, "rotation", rotations); }
101 template <typename T>
102 void set_rotation_array(const context& ctx, const T* rotations, size_t nr_elements, unsigned stride_in_bytes = 0) { has_rotations = true; set_attribute_array(ctx, "rotation", rotations, nr_elements, stride_in_bytes); }
104 void remove_rotation_array(const context& ctx);
106 bool disable(context& ctx);
108 void draw(context& ctx, size_t start, size_t count,
109 bool use_strips = false, bool use_adjacency = false, uint32_t strip_restart_index = -1);
110 };
112 {
113 bool self_reflect(cgv::reflect::reflection_handler& rh);
114 };
116 }
117}
118
119#include <cgv/config/lib_end.h>
An axis aligned box, defined by to points: min and max.
const fpnt_type & get_max_pnt() const
return a const reference to corner 7
const fpnt_type & get_min_pnt() const
return a const reference to corner 0
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
attribute array manager used to upload arrays to gpu
renderer that supports point splatting
void set_extent_array(const context &ctx, const T *extents, size_t nr_elements, unsigned stride_in_bytes=0)
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of...
void set_rotation_array(const context &ctx, const std::vector< T > &rotations)
template method to set the rotation from a vector of quaternions of type T, which should have 4 compo...
bool has_translations
whether array with per box translations has been specified
void set_translation_array(const context &ctx, const std::vector< T > &translations)
template method to set the translations from a vector of vectors of type T, which should have 3 compo...
void set_box(const context &ctx, const cgv::media::axis_aligned_box< T, 3 > &box)
specify a single box. This sets position_is_center to false as well as position and extent attributes
void set_box_array(const context &ctx, const std::vector< cgv::media::axis_aligned_box< T, 3 > > &boxes)
specify box array directly. This sets position_is_center to false as well as position and extent arra...
void set_box_array(const context &ctx, const cgv::media::axis_aligned_box< T, 3 > *boxes, size_t count)
specify box array directly. This sets position_is_center to false as well as position and extent arra...
void set_extent(const context &ctx, const T &extent)
specify a single extent for all boxes
bool has_rotations
whether array with per box rotations has been specified
void set_translation_array(const context &ctx, const T *translations, size_t nr_elements, unsigned stride_in_bytes=0)
template method to set the translations from a vector of vectors of type T, which should have 3 compo...
void set_rotation_array(const context &ctx, const T *rotations, size_t nr_elements, unsigned stride_in_bytes=0)
template method to set the rotation from a vector of quaternions of type T, which should have 4 compo...
bool position_is_center
whether position is box center, if not it is lower left bottom corner
void set_extent_array(const context &ctx, const std::vector< T > &extents)
extent array specifies box extends in case of position_is_center=true, otherwise the maximum point of...
base class for all drawables, which is independent of the used rendering API.
Definition context.h:621
renderer that supports point splatting
a shader program combines several shader code fragments to a complete definition of the shading pipel...
std::map< std::string, std::string > shader_define_map
typedef for shader define map data structure
Definition shader_code.h:52
box_wire_renderer & ref_box_wire_renderer(context &ctx, int ref_count_change)
reference to a singleton box_wire renderer that can be shared among drawables
the cgv namespace
Definition print.h:11
this reflection traits implementation is used for external self_reflect implementations of instances ...
box wires extend line render styles
vec3 default_extent
extent used in case extent array is not specified
vec3 relative_anchor
box anchor position relative to center that corresponds to the position attribute
base class for all render styles
Definition renderer.h:16