cgv
Loading...
Searching...
No Matches
normal_renderer.cxx
1#include "normal_renderer.h"
2#include <cgv_gl/gl/gl.h>
3#include <cgv_gl/gl/gl_tools.h>
4
5namespace cgv {
6 namespace render {
7 normal_renderer& ref_normal_renderer(context& ctx, int ref_count_change)
8 {
9 static int ref_count = 0;
10 static normal_renderer r;
11 r.manage_singleton(ctx, "normal_renderer", ref_count, ref_count_change);
12 return r;
13 }
15 void normal_renderer::set_normal_scale(float _normal_scale)
16 {
17 normal_scale = _normal_scale;
18 }
19
21 {
22 // validate set attributes
24 if (!has_normals) {
25 ctx.error("normal_renderer::enable() normal attribute not set");
26 res = false;
27 }
28 return res;
29 }
31 {
32 const normal_render_style& nrs = get_style<normal_render_style>();
33 if (!line_renderer::enable(ctx))
34 return false;
35 ref_prog().set_uniform(ctx, "normal_length", nrs.normal_length * normal_scale);
36 return true;
37 }
38
39 void normal_renderer::draw(context& ctx, size_t start, size_t count, bool use_strips, bool use_adjacency, uint32_t strip_restart_index)
40 {
41 draw_impl(ctx, PT_POINTS, start, count, false, false, -1);
42 }
43
44 bool normal_render_style_reflect::self_reflect(cgv::reflect::reflection_handler& rh)
45 {
46 return
47 rh.reflect_base(*static_cast<line_render_style*>(this)) &&
48 rh.reflect_member("normal_length", normal_length);
49 }
50
52 {
54 }
55 }
56}
57
58#include <cgv/gui/provider.h>
59
60namespace cgv {
61 namespace gui {
62
64 {
66 bool create(provider* p, const std::string& label,
67 void* value_ptr, const std::string& value_type,
68 const std::string& gui_type, const std::string& options, bool*)
69 {
71 return false;
72 cgv::render::normal_render_style* nrs_ptr = reinterpret_cast<cgv::render::normal_render_style*>(value_ptr);
73 cgv::base::base* b = dynamic_cast<cgv::base::base*>(p);
74 p->add_member_control(b, "Normal Length", nrs_ptr->normal_length, "value_slider", "min=0.0001;step=0.0000001;max=10;log=true;ticks=true");
75 p->add_gui("line render style", *static_cast<cgv::render::line_render_style*>(nrs_ptr));
76 return true;
77 }
78 };
79
80#include "gl/lib_begin.h"
81
82CGV_API cgv::gui::gui_creator_registration<normal_render_style_gui_creator> normal_rs_gc_reg("normal_render_style_gui_creator");
83
84 }
85}
base class for all classes that can be registered with support for dynamic properties (see also secti...
Definition base.h:75
helper template for registration of gui creators
Definition gui_creator.h:32
derive from this class to provide a gui to the current viewer
Definition provider.h:64
bool add_gui(const std::string &label, T &value, const std::string &gui_type="", const std::string &options="")
Add a composed gui of the given gui_type for the given value.
Definition provider.h:247
data::ref_ptr< control< T > > add_member_control(cgv::base::base *base_ptr, const std::string &label, T &value, const std::string &gui_type="", const std::string &options="", const std::string &align="\n")
add control with callback to cgv::base::on_set method on cgv::gui::control::value_change
Definition provider.h:137
the self reflection handler is passed to the virtual self_reflect() method of cgv::base::base.
bool reflect_base(B &base_ref)
reflect a base class with its members
bool reflect_member(const std::string &member_name, T &member_ref, bool hard_cast=false)
call this to reflect a member by member name and reference to the member.
base class for all drawables, which is independent of the used rendering API.
Definition context.h:627
virtual void error(const std::string &message, const render_component *rc=0) const
error handling
Definition context.cxx:219
bool validate_attributes(const context &ctx) const
check additionally the group attributes
bool enable(context &ctx) override
overload to activate group style
renderer that supports rendering point normals
void set_normal_scale(float _normal_scale)
the normal scale is multiplied to the normal length of the normal render style
bool validate_attributes(const context &ctx) const override
check additionally the group attributes
void draw(context &ctx, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1) override
convenience function to render with default settings
bool enable(context &ctx) override
enable normal renderer
float normal_scale
scaling of normal length
void manage_singleton(context &ctx, const std::string &renderer_name, int &ref_count, int ref_count_change)
used by derived classes to manage singletons
Definition renderer.cxx:10
shader_program & ref_prog()
derived renderer classes have access to shader program
Definition renderer.h:79
void draw_impl(context &ctx, PrimitiveType pt, size_t start, size_t count, bool use_strips=false, bool use_adjacency=false, uint32_t strip_restart_index=-1)
default implementation of draw method with support for indexed rendering and different primitive type...
Definition renderer.cxx:248
bool set_uniform(const context &ctx, const std::string &name, const T &value, bool generate_error=false)
Set the value of a uniform by name, where the type can be any of int, unsigned, float,...
normal_renderer & ref_normal_renderer(context &ctx, int ref_count_change)
reference to a singleton normal renderer that can be shared among drawables
the cgv namespace
Definition print.h:11
interface for gui creators
Definition gui_creator.h:14
bool create(provider *p, const std::string &label, void *value_ptr, const std::string &value_type, const std::string &gui_type, const std::string &options, bool *)
attempt to create a gui and return whether this was successful
this reflection traits implementation is used for external self_reflect implementations of instances ...
traits class with a static function get_name() of type const char* that returns the type name of the ...
Definition type_name.h:54