Developer Documentation
CoordsysNode.hh
1 /*===========================================================================*\
2  * *
3  * OpenFlipper *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openflipper.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenFlipper. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39  * *
40 \*===========================================================================*/
41 
42 
43 
44 
45 
46 
47 //=============================================================================
48 //
49 // CLASS PointNode
50 //
51 //=============================================================================
52 
53 
54 #ifndef ACG_COORDSYSNODE_HH
55 #define ACG_COORDSYSNODE_HH
56 
57 
58 //== INCLUDES =================================================================
59 
60 #include "BaseNode.hh"
61 #include "DrawModes.hh"
62 #include <ACG/GL/GLPrimitives.hh>
63 #include <ACG/ShaderUtils/GLSLShader.hh>
64 #include <vector>
65 
66 //== NAMESPACES ===============================================================
67 
68 namespace ACG {
69 namespace SceneGraph {
70 
71 //== CLASS DEFINITION =========================================================
72 
73 
82 class ACGDLLEXPORT CoordsysNode : public BaseNode
83 {
84 
85 public:
86 
90  PERSPECTIVE_PROJECTION
91  };
92 
94  {
96  SCREENPOS
97  };
98 
105  CoordsysNode(
106  BaseNode* _parent = 0,
107  std::string _name = "<TextNode>",
108  CoordsysMode _mode = SCREENPOS,
109  ProjectionMode _projectionMode = PERSPECTIVE_PROJECTION);
110 
112  ~CoordsysNode();
113 
115  ACG_CLASSNAME(CoordsysNode);
116 
118  ACG::SceneGraph::DrawModes::DrawMode availableDrawModes() const;
119 
121  void boundingBox(Vec3d& _bbMin, Vec3d& _bbMax);
122 
124  void draw(GLState& _state, const DrawModes::DrawMode& _drawMode);
125 
127  void getRenderObjects(IRenderer* _renderer, GLState& _state, const DrawModes::DrawMode& _drawMode, const Material* _mat);
128 
130  void pick(GLState& _state, PickTarget _target);
131 
133  void setMode(const CoordsysMode _mode);
134 
136  void setProjectionMode(const ProjectionMode _mode);
137 
139  void setPosition(const Vec3f& _pos);
140 
142  CoordsysMode getMode() const;
143 
145  ProjectionMode getProjectionMode() const;
146 
147  private:
148 
149  void drawCoordsys(GLState& _state);
150  void drawCoordsys(IRenderer* _renderer, RenderObject* _baseRO);
151  void drawCoordsysPick(GLState& _state, GLSL::Program* _pickShader = 0);
152  void clearPickArea(GLState& _state, bool _draw, GLfloat _depth, GLSL::Program* _pickShader = 0);
153  void boundingCircle(std::vector<Vec2f> &_in, Vec2f &_center, float &_radius);
154 
155  CoordsysMode mode_;
156  ProjectionMode projectionMode_;
157 
158  Vec3f pos3f_;
159 
160 
161  ACG::GLSphere* sphere_;
162  ACG::GLCylinder* cylinder_;
163  ACG::GLCone* cone_;
164  ACG::GLDisk* disk_;
165 };
166 
167 
168 //=============================================================================
169 } // namespace SceneGraph
170 } // namespace ACG
171 //=============================================================================
172 #endif // ACG_COORDSYSNODE_HH defined
Namespace providing different geometric functions concerning angles.
ACG::SceneGraph::CoordinateSystemNode CoordsysNode
Simple Name for CoordsysNode.
Draws the Coordsys at the coordsys origin.
Definition: CoordsysNode.hh:95
Interface class between scenegraph and renderer.
Definition: RenderObject.hh:98
GLSL program class.
Definition: GLSLShader.hh:211
ProjectionMode
projection mode
Definition: CoordsysNode.hh:88
PickTarget
What target to use for picking.
Definition: PickTarget.hh:73