NVIDIA Index example code nvidia_logo_transpbg.gif Up
attribute_line_set.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright 2023 NVIDIA Corporation. All rights reserved.
3 *****************************************************************************/
6
7#ifndef NVIDIA_INDEX_EXAMPLE_ATTRIBUTE_LINE_SET_H
8#define NVIDIA_INDEX_EXAMPLE_ATTRIBUTE_LINE_SET_H
9
10#include <mi/dice.h>
11#include <mi/base/interface_implement.h>
12#include <mi/base/handle.h>
13#include <mi/base/uuid.h>
14
15#include <nv/index/iline_set.h>
16
17#include <vector>
18
23 : public mi::neuraylib::Element<0xe5165851,0xf363,0x4dd7,0x8b,0x5c,0xaa,0xd5,0x18,0x15,0x16,0xd0,
24 nv::index::ILine_set>
25{
26public:
32 const std::vector<mi::math::Vector_struct<mi::Float32, 3> >& line_segments_vec,
33 const std::vector< mi::Float32 > & attribute_vec);
34
37 :
38 m_line_segments(),
39 m_per_segment_colors(),
40 m_per_segment_widths(),
41 m_rendering_enabled(true),
42 m_pickable(true)
43 {
44 // empty
45 }
46
49 void set_attribute(std::vector< mi::Float32 > const & attribute_vec);
50
51public:
52
57 virtual Cap_style get_cap_style() const;
58
63 virtual void set_cap_style(Cap_style style);
64
68 virtual mi::Size get_nb_lines() const;
69
73 virtual mi::Size get_nb_vertices() const;
74
78 virtual const mi::math::Vector_struct<mi::Float32, 3>* get_lines() const;
79
84 virtual mi::Size get_nb_colors() const { return m_per_segment_colors.size(); };
85
90 virtual const mi::math::Color_struct* get_colors() const;
91
96 virtual mi::Size get_nb_widths() const { return m_per_segment_widths.size(); }
97
103 virtual const mi::Float32* get_widths() const;
104
109 virtual nv::index::ILine_set::Line_style get_line_style() const;
110
115 virtual nv::index::ILine_set::Line_type get_line_type() const;
116
117public:
118 // IShape implementation
119
125 virtual bool get_pickable() const { return m_pickable; }
126 virtual void set_pickable(bool pickable) { m_pickable = pickable; }
127
128public:
129 // IScene_element implementation
130
134 virtual void set_enabled(bool is_enable);
135
139
140 virtual bool get_enabled() const;
150 virtual void set_meta_data(mi::neuraylib::Tag_struct tag) { m_meta_data = tag; }
151
157 virtual mi::neuraylib::Tag_struct get_meta_data() const { return m_meta_data; }
158
159public:
160 // IElement implementation
161
162 virtual mi::neuraylib::IElement* copy() const;
163 virtual const char* get_class_name() const;
164 virtual void serialize(mi::neuraylib::ISerializer *serializer) const;
165 virtual void deserialize(mi::neuraylib::IDeserializer* deserializer);
166 virtual void get_references(mi::neuraylib::ITag_set* result) const
167 {
168 if(m_meta_data.is_valid())
169 result->add_tag(m_meta_data);
170 }
171
172protected:
176 mi::math::Color_struct get_color_from_attribute(mi::Float32 attrib);
177
181 mi::Float32 get_width_from_attribute(mi::Float32 attrib);
182
183private:
184 virtual void set_line_type(nv::index::ILine_set::Line_type type) { }
185 virtual void set_line_style(nv::index::ILine_set::Line_style style) { }
186 virtual void set_lines(
187 mi::math::Vector_struct<mi::Float32, 3>* line_segments,
188 mi::Size nb_line_segments) { }
189 virtual void set_colors(
190 mi::math::Color_struct* colors,
191 mi::Size nb_colors) { }
192 virtual void set_widths(
193 mi::Float32* widths,
194 mi::Size nb_widths) { }
195
196 // line segment vertex
197 std::vector<mi::math::Vector_struct<mi::Float32, 3> > m_line_segments;
198 // line segment color
199 std::vector<mi::math::Color_struct> m_per_segment_colors;
200 // line segment width
201 std::vector<mi::Float32> m_per_segment_widths;
202 // status of enabled rendering
203 bool m_rendering_enabled;
204 // status of enabled pick-ability
205 bool m_pickable;
206 // Meta data
207 mi::neuraylib::Tag m_meta_data;
208};
209
210#endif // NVIDIA_INDEX_EXAMPLE_ATTRIBUTE_LINE_SET_H
An example of line set that contains 3D line segments (stored as vertices in a array) and a color as ...
virtual const mi::Float32 * get_widths() const
Get the pointer to the array of per-segment widths (for rasterized lines) or radii (for ray traced cy...
virtual const mi::math::Vector_struct< mi::Float32, 3 > * get_lines() const
Get the pointer to the array of line vertices (two vertices per line segment)
virtual void serialize(mi::neuraylib::ISerializer *serializer) const
void set_attribute(std::vector< mi::Float32 > const &attribute_vec)
set line attribute
virtual mi::Size get_nb_vertices() const
Get number of line segment in this line set.
virtual bool get_pickable() const
Each shape may be set pickable, i.e., the ray cast through the scene can intersect the shape.
mi::math::Color_struct get_color_from_attribute(mi::Float32 attrib)
attribute to color map example
virtual void set_enabled(bool is_enable)
Set graphical representation can be enabled or disabled from rendering.
virtual void set_meta_data(mi::neuraylib::Tag_struct tag)
Each scene element can store additional user-defined meta data.
virtual nv::index::ILine_set::Line_type get_line_type() const
Get the line style.
virtual mi::neuraylib::IElement * copy() const
virtual void get_references(mi::neuraylib::ITag_set *result) const
virtual Cap_style get_cap_style() const
Get the line cap style.
virtual mi::Size get_nb_colors() const
Get number of color values.
mi::Float32 get_width_from_attribute(mi::Float32 attrib)
attribute to width map example
virtual void set_pickable(bool pickable)
Attribute_line_set()
Constructing the attribute line set shape for serialization.
virtual const char * get_class_name() const
virtual void set_cap_style(Cap_style style)
Set the line cap style.
virtual mi::Size get_nb_lines() const
Get number of line segment in this line set.
virtual const mi::math::Color_struct * get_colors() const
Get the pointer to the array of per-segment color values.
virtual void deserialize(mi::neuraylib::IDeserializer *deserializer)
virtual bool get_enabled() const
get rendering mode
virtual mi::Size get_nb_widths() const
Get number of radii.
virtual mi::neuraylib::Tag_struct get_meta_data() const
Retrieve the scene element's reference to the user-defined meta data.
virtual nv::index::ILine_set::Line_style get_line_style() const
Get the line style.