Developer Documentation
ACG::SceneGraph::PolyLineNodeT< PolyLine > Class Template Reference

#include <AC>

Inheritance diagram for ACG::SceneGraph::PolyLineNodeT< PolyLine >:
ACG::SceneGraph::ACG::SceneGraph::BaseNode

Public Types

typedef PolyLine::Point Point
 
- Public Types inherited from ACG::SceneGraph::ACG::SceneGraph::BaseNode
enum  StatusMode { Active = 0x1, HideNode = 0x2, HideChildren = 0x4, HideSubtree = 0x8 }
 Status modi. More...
 
enum  TraverseMode { NodeFirst = 0x1, ChildrenFirst = 0x2, SecondPass = 0x4 }
 Node traverse types. More...
 
typedef std::vector< BaseNode * >::const_iterator ConstChildIter
 allows to iterate over children
 
typedef std::vector< BaseNode * >::iterator ChildIter
 allows to iterate over children
 
typedef std::vector< BaseNode * >::const_reverse_iterator ConstChildRIter
 allows to reverse iterate over children
 
typedef std::vector< BaseNode * >::reverse_iterator ChildRIter
 allows to reverse iterate over children
 
enum  PASSES {
  NOPASS = 0, ALLPASSES = 1 << 0, PASS_1 = 1 << 1, PASS_2 = 1 << 2,
  PASS_3 = 1 << 3, PASS_4 = 1 << 4, PASS_5 = 1 << 5, PASS_6 = 1 << 6,
  PASS_7 = 1 << 7, PASS_8 = 1 << 8
}
 This enum should be used to enable rendering of a node in different.
 
typedef unsigned int MultipassBitMask
 Multipass pass bit mask type.
 

Public Member Functions

 PolyLineNodeT (PolyLine &_pl, BaseNode *_parent=0, std::string _name="<PolyLineNode>")
 Constructor.
 
 ~PolyLineNodeT ()
 Destructor.
 
PolyLinepolyline ()
 
 ACG_CLASSNAME (PolyLineNodeT)
 static name of this class
 
DrawModes::DrawMode availableDrawModes () const
 return available draw modes
 
void boundingBox (Vec3d &_bbMin, Vec3d &_bbMax)
 update bounding box
 
void draw (GLState &, const DrawModes::DrawMode &_drawMode)
 draw lines and normals
 
void pick (GLState &_state, PickTarget _target)
 picking
 
void getRenderObjects (ACG::IRenderer *_renderer, ACG::GLState &_state, const ACG::SceneGraph::DrawModes::DrawMode &_drawMode, const ACG::SceneGraph::Material *_mat)
 Add the objects to the given renderer. More...
 
void update ()
 Trigger an update of the vbo.
 
int addCustomBuffer (const ACG::VertexElement &_desc, const void *_buffer)
 
void setCustomBuffer (int _id, const void *_buffer)
 
void setupVertexDeclaration (VertexDeclaration *_dst, int _colorSource) const
 Create the vertex declaration. More...
 
size_t fillVertexBuffer (void *_buf, size_t _bufSize, bool _addLineStripEndVertex)
 Fill a buffer with vertex data. More...
 
- Public Member Functions inherited from ACG::SceneGraph::ACG::SceneGraph::BaseNode
 BaseNode (BaseNode *_parent=0, std::string _name="<unknown>")
 Default constructor.
 
 BaseNode (BaseNode *_parent, BaseNode *_child, std::string _name="<unknown>")
 Put this node between _parent and _child.
 
virtual ~BaseNode ()
 Destructor.
 
void delete_subtree ()
 Delete the whole subtree of this node. More...
 
virtual const std::string & className () const =0
 Return class name (implemented by the ACG_CLASSNAME macro)
 
virtual void enter (GLState &, const DrawModes::DrawMode &)
 
virtual void enter (IRenderer *, GLState &_state, const DrawModes::DrawMode &_drawMode)
 
virtual void draw (GLState &, const DrawModes::DrawMode &)
 Draw this node using the draw modes _drawMode. More...
 
virtual void leave (GLState &, const DrawModes::DrawMode &)
 
virtual void leave (IRenderer *, GLState &_state, const DrawModes::DrawMode &_drawMode)
 
virtual void enterPick (GLState &_state, PickTarget _target, const DrawModes::DrawMode &_drawMode)
 
virtual void pick (GLState &, PickTarget)
 
virtual void leavePick (GLState &_state, PickTarget _target, const DrawModes::DrawMode &_drawMode)
 
void enablePicking (bool _enable)
 
bool pickingEnabled ()
 
virtual void mouseEvent (GLState &, QMouseEvent *)
 Handle mouse event (some interaction, e.g. modeling)
 
void setDirty (bool _dirty=true)
 mark node for redrawn
 
bool isDirty () const
 Check if node should be redrawn.
 
ChildIter childrenBegin ()
 Returns: begin-iterator of children.
 
ConstChildIter childrenBegin () const
 Same but cont.
 
ChildIter childrenEnd ()
 Returns: end-iterator of children.
 
ConstChildIter childrenEnd () const
 Same but const.
 
ChildRIter childrenRBegin ()
 Returns: reverse begin-iterator of children.
 
ConstChildRIter childrenRBegin () const
 Same but const.
 
ChildRIter childrenREnd ()
 Returns: reverse end-iterator of children.
 
ConstChildRIter childrenREnd () const
 Same but const.
 
void push_back (BaseNode *_node)
 Insert _node at the end of the list of children.
 
void remove (ChildIter _pos)
 
size_t nChildren () const
 number of children
 
ChildIter find (BaseNode *_node)
 
BaseNodefind (const std::string &_name)
 
BaseNodeparent ()
 Get the nodes parent node.
 
const BaseNodeparent () const
 Get the nodes parent node.
 
void set_parent (BaseNode *_parent)
 Set the parent of this node. More...
 
StatusMode status () const
 Get node's status.
 
void set_status (StatusMode _s)
 Set the status of this node.
 
void hide ()
 Hide Node: set status to HideNode.
 
void show ()
 Show node: set status to Active.
 
bool visible ()
 Is node visible (status == Active)?
 
bool hidden ()
 Is node not visible (status != Active)?
 
std::string name () const
 Returns: name of node (needs not be unique)
 
void name (const std::string &_name)
 rename a node
 
unsigned int id () const
 
DrawModes::DrawMode drawMode () const
 Return the own draw modes of this node.
 
void drawMode (DrawModes::DrawMode _drawMode)
 
unsigned int traverseMode () const
 Return how the node should be traversed.
 
void setTraverseMode (unsigned int _mode)
 Set traverse mode for node.
 
MultipassBitMask multipassStatus () const
 Get the current multipass settings for the nodes status functions. More...
 
void setMultipassStatus (const MultipassBitMask _passStatus)
 Set multipass settings for the nodes status functions. More...
 
void multipassStatusSetActive (const unsigned int _i, bool _active)
 Set multipass status to traverse in a specific pass. More...
 
bool multipassStatusActive (const unsigned int _i) const
 Get multipass status to traverse in a specific pass. More...
 
MultipassBitMask multipassNode () const
 Get the current multipass settings for the node. More...
 
void setMultipassNode (const MultipassBitMask _passNode)
 Set multipass settings for the node. More...
 
void multipassNodeSetActive (const unsigned int _i, bool _active)
 Set Node status to traverse in a specific pass. More...
 
bool multipassNodeActive (const unsigned int _i) const
 Get Node status to traverse in a specific pass. More...
 
void setRenderObjectShaders (const std::string &_vertexShaderFile, const std::string &_geometryShaderFile, const std::string &_fragmentShaderFile, bool _relativePaths=true, DrawModes::DrawModePrimitive _primitiveType=DrawModes::PRIMITIVE_POLYGON)
 Set custom shaders. More...
 
void setRenderObjectShaders (const std::string &_vertexShaderFile, const std::string &_tessControlShaderFile, const std::string &_tessEvalShaderFile, const std::string &_geometryShaderFile, const std::string &_fragmentShaderFile, bool _relativePaths=true, DrawModes::DrawModePrimitive _primitiveType=DrawModes::PRIMITIVE_POLYGON)
 Set custom shaders. More...
 
void setRenderObjectUniformPool (const GLSL::UniformPool *_pool)
 Set uniforms for shader based rendering. More...
 
const GLSL::UniformPoolgetRenderObjectUniformPool ()
 Get uniforms for shader based rendering. More...
 
void setRenderObjectTexture (int _samplerSlot, GLuint _texId, GLenum _texType=GL_TEXTURE_2D)
 Set textures for shader based rendering. More...
 
void setRenderObjectModifier (RenderObjectModifier *_modifier)
 Set modifier for render objects. More...
 
RenderObjectModifiergetRenderObjectModifier ()
 Get render-object modifier. More...
 
void applyRenderObjectSettings (DrawModes::DrawModePrimitive _primitive, RenderObject *_obj) const
 Set shaders, textures and uniforms as provided by user to a render-object. More...
 

Private Member Functions

void pick_vertices (GLState &_state)
 
void pick_spheres (GLState &_state)
 
void pick_spheres_screen (GLState &_state)
 
void pick_edges (GLState &_state, unsigned int _offset)
 
 PolyLineNodeT (const PolyLineNodeT &_rhs)
 Copy constructor (not used)
 
PolyLineNodeToperator= (const PolyLineNodeT &_rhs)
 Assignment operator (not used)
 
void updateVBO ()
 Trigger an update of the vbo. More...
 
void writeVertex (unsigned int _vertex, void *_dst)
 Write vertex data for rendering to a buffer. More...
 
void writeVertexColor (unsigned int _vertex, bool _colorSourceVertex, void *_dst) const
 Write color for rendering to a buffer. More...
 

Private Attributes

ACG::VertexDeclaration vertexDecl_
 Vertex layout without vertex colors.
 
ACG::VertexDeclaration vertexDeclVCol_
 Vertex layout with vertex colors.
 
ACG::VertexDeclaration vertexDeclECol_
 Vertex layout with edge colors.
 
std::vector< std::pair< ACG::VertexElement, const void * > > customBuffers_
 Custom vertex data for shader based rendering.
 
std::map< typename PolyLine::CustomPropertyHandle, int > polylinePropMap_
 Map from custom properties in PolyLine to id in customBuffers_.
 
PolyLinepolyline_
 The associated poly line.
 
GeometryBuffer vbo_
 VBO used to render the poly line.
 
std::vector< unsigned int > selectedVertexIndexBuffer_
 Index buffer for selected vertices.
 
std::vector< unsigned int > selectedEdgeIndexBuffer_
 Index buffer for selected edges.
 
bool updateVBO_
 Flag to trigger update of vbo.
 
GLSpheresphere_
 Sphere for VertexSphere DrawMode.
 
DrawModes::DrawMode POINTS_SPHERES
 This defines a local point spheres draw mode for all polyLine nodes.
 
DrawModes::DrawMode POINTS_SPHERES_SCREEN
 This defines a local point spheres draw mode for all polyLine nodes with constant screen size.
 

Detailed Description

template<class PolyLine>
class ACG::SceneGraph::PolyLineNodeT< PolyLine >

/.../PolyLineNodeT.hh>

Brief Description.

A more elaborate description follows.

/.../PolyLineCollectionNodeT.hh>

This Node provides support for rendering polyline collections.

Definition at line 89 of file PolyLineNodeT.hh.

Member Function Documentation

◆ addCustomBuffer()

template<class PolyLine >
int ACG::SceneGraph::PolyLineNodeT< PolyLine >::addCustomBuffer ( const ACG::VertexElement _desc,
const void *  _buffer 
)

Add custom data to the vertex buffer for rendering with shaders

The element description declares the type of data and the name in the shader. The provided buffer has to store data for each vertex: num elements in buffer = polyline().n_vertices() If the stride offset in desc.pointer is 0, it is assumed that the buffer stores the data without memory alignment. This function does not create a local copy of the buffer, so the provided memory address has to be valid whenever an internal vbo update is triggered. Custom attributes are then available in the vertex shader by accessing the input with name tangentElement.shaderInputName_.

Example:

in plugin: have allocated buffer: tangentData_ of type Vec3f* (member of a class)

ACG::VertexElement tangentDesc; tangentDesc.type_ = GL_FLOAT; tangentDesc.numElements_ = 3; tangentDesc.usage_ = ACG::VERTEX_USAGE_USER_DEFINED; tangentDesc.shaderInputName_ = "myTangent"; tangentDesc.pointer_ = 0;

polylineNode->addCustomBuffer(tangentDesc, tangentData_);

in vertex shader: in vec3 myTangent; ..

Parameters
_desctype description of an element in the buffer
_bufferpointer to data buffer, has to be a valid address for the remaining time
Returns
id of custom buffer

Definition at line 1131 of file PolyLineNodeT_impl.hh.

◆ fillVertexBuffer()

template<class PolyLine >
size_t ACG::SceneGraph::PolyLineNodeT< PolyLine >::fillVertexBuffer ( void *  _buf,
size_t  _bufSize,
bool  _addLineStripEndVertex 
)

Fill a buffer with vertex data.

Fill the specified buffer with vertex buffer data. The buffer size in bytes can be calculated as vertex stride * num vertices. If _addLineStripEndVertex is true, then the buffer size is vertex stride * (num vertices + 1) instead. Vertex layout and stride can be queried with via setupVertexDeclaration.

Parameters
_bufaddress to buffer to which the vertices are written
_bufSizesize in bytes available in the specified buffer
_addLineStripEndVertexadd a copy of the first vertex to the end of the buffer (useful to close the line in line_strip rendering mode)
Returns
number of bytes written

Definition at line 691 of file PolyLineNodeT_impl.hh.

◆ getRenderObjects()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::getRenderObjects ( ACG::IRenderer _renderer,
ACG::GLState _state,
const ACG::SceneGraph::DrawModes::DrawMode _drawMode,
const ACG::SceneGraph::Material _mat 
)
virtual

Add the objects to the given renderer.

Parameters
_rendererThe renderer which will be used. Add your geometry into this class
_stateThe current GL State when this object is called
_drawModeThe active draw mode
_matCurrent material

Reimplemented from ACG::SceneGraph::ACG::SceneGraph::BaseNode.

Definition at line 893 of file PolyLineNodeT_impl.hh.

◆ setCustomBuffer()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::setCustomBuffer ( int  _id,
const void *  _buffer 
)

Update pointer to custom data

Parameters
_idid of the custom buffer; return value of addCustomBuffer
_bufferpointer to data buffer, has to be a valid address for the remaining time

Definition at line 1151 of file PolyLineNodeT_impl.hh.

◆ setupVertexDeclaration()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::setupVertexDeclaration ( VertexDeclaration _dst,
int  _colorSource 
) const

Create the vertex declaration.

The vertex data in the vbo contains both vertex and edge colors, so the vertex declaration decides which bytes to use for colored rendering (if any).

Parameters
_dstVertex declaration to initialize
_colorSource0 - no colors, 1 - vertex colors, 2 - edge colors

Definition at line 638 of file PolyLineNodeT_impl.hh.

◆ updateVBO()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::updateVBO ( )
private

Trigger an update of the vbo.

If the polyLine is changed, you have to call this function to update the buffers.

Definition at line 757 of file PolyLineNodeT_impl.hh.

◆ writeVertex()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::writeVertex ( unsigned int  _vertex,
void *  _dst 
)
private

Write vertex data for rendering to a buffer.

Parameters
_vertexindex of polyline vertex
_dstaddress of vertex in buffer

Definition at line 843 of file PolyLineNodeT_impl.hh.

◆ writeVertexColor()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::writeVertexColor ( unsigned int  _vertex,
bool  _colorSourceVertex,
void *  _dst 
) const
private

Write color for rendering to a buffer.

Parameters
_vertexindex of polyline vertex
_colorSourceVertexvertex or edge color?
_dstaddress of vertex in buffer

Definition at line 809 of file PolyLineNodeT_impl.hh.


The documentation for this class was generated from the following files: