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

#include <AC>

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

Public Types

typedef PolyLine::Point Point
 
- Public Types inherited from 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 More...
 
typedef std::vector< BaseNode * >::iterator ChildIter
 allows to iterate over children More...
 
typedef std::vector< BaseNode * >::const_reverse_iterator ConstChildRIter
 allows to reverse iterate over children More...
 
typedef std::vector< BaseNode * >::reverse_iterator ChildRIter
 allows to reverse iterate over children More...
 
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. More...
 
typedef unsigned int MultipassBitMask
 Multipass pass bit mask type. More...
 

Public Member Functions

 PolyLineNodeT (PolyLine &_pl, BaseNode *_parent=0, std::string _name="<PolyLineNode>")
 Constructor. More...
 
 ~PolyLineNodeT ()
 Destructor. More...
 
PolyLinepolyline ()
 
 ACG_CLASSNAME (PolyLineNodeT)
 static name of this class
 
DrawModes::DrawMode availableDrawModes () const override
 return available draw modes More...
 
void boundingBox (Vec3d &_bbMin, Vec3d &_bbMax) override
 update bounding box More...
 
void draw (GLState &, const DrawModes::DrawMode &_drawMode) override
 draw lines and normals More...
 
void pick (GLState &_state, PickTarget _target) override
 picking More...
 
void getRenderObjects (ACG::IRenderer *_renderer, ACG::GLState &_state, const ACG::SceneGraph::DrawModes::DrawMode &_drawMode, const ACG::SceneGraph::Material *_mat) override
 Add the objects to the given renderer. More...
 
void update ()
 Trigger an update of the vbo. More...
 
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::BaseNode
 BaseNode (BaseNode *_parent=0, std::string _name="<unknown>")
 Default constructor. More...
 
 BaseNode (BaseNode *_parent, BaseNode *_child, std::string _name="<unknown>")
 Put this node between _parent and _child. More...
 
virtual ~BaseNode ()
 Destructor. More...
 
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 DrawModes::DrawMode availableDrawModes () const
 
virtual void boundingBox (Vec3d &, Vec3d &)
 
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 getRenderObjects (IRenderer *_renderer, GLState &_state, const DrawModes::DrawMode &_drawMode, const Material *_mat)
 Deferred draw call with shader based renderer. 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) More...
 
void setDirty (bool _dirty=true)
 mark node for redrawn More...
 
bool isDirty () const
 Check if node should be redrawn. More...
 
ChildIter childrenBegin ()
 Returns: begin-iterator of children. More...
 
ConstChildIter childrenBegin () const
 Same but cont. More...
 
ChildIter childrenEnd ()
 Returns: end-iterator of children. More...
 
ConstChildIter childrenEnd () const
 Same but const. More...
 
ChildRIter childrenRBegin ()
 Returns: reverse begin-iterator of children. More...
 
ConstChildRIter childrenRBegin () const
 Same but const. More...
 
ChildRIter childrenREnd ()
 Returns: reverse end-iterator of children. More...
 
ConstChildRIter childrenREnd () const
 Same but const. More...
 
void push_back (BaseNode *_node)
 Insert _node at the end of the list of children. More...
 
void remove (ChildIter _pos)
 
size_t nChildren () const
 number of children More...
 
ChildIter find (BaseNode *_node)
 
BaseNodefind (const std::string &_name)
 
BaseNodeparent ()
 Get the nodes parent node. More...
 
const BaseNodeparent () const
 Get the nodes parent node. More...
 
void set_parent (BaseNode *_parent)
 Set the parent of this node. More...
 
StatusMode status () const
 Get node's status. More...
 
void set_status (StatusMode _s)
 Set the status of this node. More...
 
void hide ()
 Hide Node: set status to HideNode. More...
 
void show ()
 Show node: set status to Active. More...
 
bool visible ()
 Is node visible (status == Active)? More...
 
bool hidden ()
 Is node not visible (status != Active)? More...
 
std::string name () const
 Returns: name of node (needs not be unique) More...
 
void name (const std::string &_name)
 rename a node More...
 
unsigned int id () const
 
DrawModes::DrawMode drawMode () const
 Return the own draw modes of this node. More...
 
void drawMode (DrawModes::DrawMode _drawMode)
 
unsigned int traverseMode () const
 Return how the node should be traversed. More...
 
void setTraverseMode (unsigned int _mode)
 Set traverse mode for node. More...
 
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. More...
 
ACG::VertexDeclaration vertexDeclVCol_
 Vertex layout with vertex colors. More...
 
ACG::VertexDeclaration vertexDeclECol_
 Vertex layout with edge colors. More...
 
std::vector< std::pair< ACG::VertexElement, const void * > > customBuffers_
 Custom vertex data for shader based rendering. More...
 
std::map< typename PolyLine::CustomPropertyHandle, int > polylinePropMap_
 Map from custom properties in PolyLine to id in customBuffers_. More...
 
PolyLinepolyline_
 The associated poly line. More...
 
GeometryBuffer vbo_
 VBO used to render the poly line. More...
 
std::vector< unsigned int > selectedVertexIndexBuffer_
 Index buffer for selected vertices. More...
 
std::vector< unsigned int > selectedEdgeIndexBuffer_
 Index buffer for selected edges. More...
 
bool updateVBO_
 Flag to trigger update of vbo. More...
 
GLSpheresphere_
 Sphere for VertexSphere DrawMode. More...
 
DrawModes::DrawMode POINTS_SPHERES
 This defines a local point spheres draw mode for all polyLine nodes. More...
 
DrawModes::DrawMode POINTS_SPHERES_SCREEN
 This defines a local point spheres draw mode for all polyLine nodes with constant screen size. More...
 

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 Typedef Documentation

◆ Point

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

Definition at line 94 of file PolyLineNodeT.hh.

Constructor & Destructor Documentation

◆ PolyLineNodeT()

template<class PolyLine >
ACG::SceneGraph::PolyLineNodeT< PolyLine >::PolyLineNodeT ( PolyLine _pl,
BaseNode _parent = 0,
std::string  _name = "<PolyLineNode>" 
)

Constructor.

Definition at line 72 of file PolyLineNodeT_impl.hh.

◆ ~PolyLineNodeT()

Destructor.

Definition at line 98 of file PolyLineNodeT_impl.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 1132 of file PolyLineNodeT_impl.hh.

◆ availableDrawModes()

template<class PolyLine >
DrawModes::DrawMode ACG::SceneGraph::PolyLineNodeT< PolyLine >::availableDrawModes
overridevirtual

return available draw modes

Reimplemented from ACG::SceneGraph::BaseNode.

Definition at line 123 of file PolyLineNodeT_impl.hh.

◆ boundingBox()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::boundingBox ( Vec3d _bbMin,
Vec3d _bbMax 
)
overridevirtual

update bounding box

Reimplemented from ACG::SceneGraph::BaseNode.

Definition at line 107 of file PolyLineNodeT_impl.hh.

◆ draw()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::draw ( GLState _state,
const DrawModes::DrawMode _drawMode 
)
overridevirtual

draw lines and normals

Reimplemented from ACG::SceneGraph::BaseNode.

Definition at line 135 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 690 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 
)
overridevirtual

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::BaseNode.

Definition at line 892 of file PolyLineNodeT_impl.hh.

◆ pick()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::pick ( GLState _state,
PickTarget  _target 
)
overridevirtual

picking

Reimplemented from ACG::SceneGraph::BaseNode.

Definition at line 363 of file PolyLineNodeT_impl.hh.

◆ pick_edges()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::pick_edges ( GLState _state,
unsigned int  _offset 
)
private

Definition at line 558 of file PolyLineNodeT_impl.hh.

◆ pick_spheres()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::pick_spheres ( GLState _state)
private

Definition at line 508 of file PolyLineNodeT_impl.hh.

◆ pick_spheres_screen()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::pick_spheres_screen ( GLState _state)
private

Definition at line 528 of file PolyLineNodeT_impl.hh.

◆ pick_vertices()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::pick_vertices ( GLState _state)
private

Definition at line 441 of file PolyLineNodeT_impl.hh.

◆ polyline()

template<class PolyLine >
PolyLine & ACG::SceneGraph::PolyLineNodeT< PolyLine >::polyline ( )
inline

Definition at line 102 of file PolyLineNodeT.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 1152 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 637 of file PolyLineNodeT_impl.hh.

◆ update()

template<class PolyLine >
void ACG::SceneGraph::PolyLineNodeT< PolyLine >::update ( )
inline

Trigger an update of the vbo.

Definition at line 129 of file PolyLineNodeT.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 756 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 842 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 808 of file PolyLineNodeT_impl.hh.

Member Data Documentation

◆ customBuffers_

template<class PolyLine >
std::vector< std::pair<ACG::VertexElement, const void*> > ACG::SceneGraph::PolyLineNodeT< PolyLine >::customBuffers_
private

Custom vertex data for shader based rendering.

Definition at line 224 of file PolyLineNodeT.hh.

◆ POINTS_SPHERES

template<class PolyLine >
DrawModes::DrawMode ACG::SceneGraph::PolyLineNodeT< PolyLine >::POINTS_SPHERES
private

This defines a local point spheres draw mode for all polyLine nodes.

Definition at line 272 of file PolyLineNodeT.hh.

◆ POINTS_SPHERES_SCREEN

template<class PolyLine >
DrawModes::DrawMode ACG::SceneGraph::PolyLineNodeT< PolyLine >::POINTS_SPHERES_SCREEN
private

This defines a local point spheres draw mode for all polyLine nodes with constant screen size.

Definition at line 275 of file PolyLineNodeT.hh.

◆ polyline_

template<class PolyLine >
PolyLine& ACG::SceneGraph::PolyLineNodeT< PolyLine >::polyline_
private

The associated poly line.

Definition at line 254 of file PolyLineNodeT.hh.

◆ polylinePropMap_

template<class PolyLine >
std::map< typename PolyLine::CustomPropertyHandle, int> ACG::SceneGraph::PolyLineNodeT< PolyLine >::polylinePropMap_
private

Map from custom properties in PolyLine to id in customBuffers_.

Definition at line 227 of file PolyLineNodeT.hh.

◆ selectedEdgeIndexBuffer_

template<class PolyLine >
std::vector<unsigned int> ACG::SceneGraph::PolyLineNodeT< PolyLine >::selectedEdgeIndexBuffer_
private

Index buffer for selected edges.

Definition at line 263 of file PolyLineNodeT.hh.

◆ selectedVertexIndexBuffer_

template<class PolyLine >
std::vector<unsigned int> ACG::SceneGraph::PolyLineNodeT< PolyLine >::selectedVertexIndexBuffer_
private

Index buffer for selected vertices.

Definition at line 260 of file PolyLineNodeT.hh.

◆ sphere_

template<class PolyLine >
GLSphere* ACG::SceneGraph::PolyLineNodeT< PolyLine >::sphere_
private

Sphere for VertexSphere DrawMode.

Definition at line 269 of file PolyLineNodeT.hh.

◆ updateVBO_

template<class PolyLine >
bool ACG::SceneGraph::PolyLineNodeT< PolyLine >::updateVBO_
private

Flag to trigger update of vbo.

Definition at line 266 of file PolyLineNodeT.hh.

◆ vbo_

template<class PolyLine >
GeometryBuffer ACG::SceneGraph::PolyLineNodeT< PolyLine >::vbo_
private

VBO used to render the poly line.

Definition at line 257 of file PolyLineNodeT.hh.

◆ vertexDecl_

template<class PolyLine >
ACG::VertexDeclaration ACG::SceneGraph::PolyLineNodeT< PolyLine >::vertexDecl_
private

Vertex layout without vertex colors.

Definition at line 215 of file PolyLineNodeT.hh.

◆ vertexDeclECol_

template<class PolyLine >
ACG::VertexDeclaration ACG::SceneGraph::PolyLineNodeT< PolyLine >::vertexDeclECol_
private

Vertex layout with edge colors.

Definition at line 221 of file PolyLineNodeT.hh.

◆ vertexDeclVCol_

template<class PolyLine >
ACG::VertexDeclaration ACG::SceneGraph::PolyLineNodeT< PolyLine >::vertexDeclVCol_
private

Vertex layout with vertex colors.

Definition at line 218 of file PolyLineNodeT.hh.


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