SoShape.h Source File

| http://www.sim.no/ http://www.coin3d.org/

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

SoShape.h
1 #ifndef COIN_SOSHAPE_H
2 #define COIN_SOSHAPE_H
3
4 /**************************************************************************\
5 *
6 * This file is part of the Coin 3D visualization library.
7 * Copyright (C) by Kongsberg Oil & Gas Technologies.
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * ("GPL") version 2 as published by the Free Software Foundation.
12 * See the file LICENSE.GPL at the root directory of this source
13 * distribution for additional information about the GNU GPL.
14 *
15 * For using Coin with software that can not be combined with the GNU
16 * GPL, and for taking advantage of the additional benefits of our
17 * support services, please contact Kongsberg Oil & Gas Technologies
18 * about acquiring a Coin Professional Edition License.
19 *
20 * See http://www.coin3d.org/ for more information.
21 *
22 * Kongsberg Oil & Gas Technologies, Bygdoy Alle 5, 0257 Oslo, NORWAY.
23 * http://www.sim.no/ sales@sim.no coin-support@coin3d.org
24 *
25 \**************************************************************************/
26
27 #include <Inventor/nodes/SoSubNode.h>
28 #include <Inventor/SbMatrix.h>
29 #include <Inventor/SbVec2s.h>
30 #include <Inventor/SbBox3f.h>
31
32 class SoPrimitiveVertex;
33 class SoDetail;
34 class SoPickedPoint;
35 class SoFaceDetail;
36 class SoState;
37 class SoTextureCoordinateElement;
38 class SoCoordinateElement;
39 class SbVec2f;
40 class SoMaterialBundle;
41 class SoBoundingBoxCache;
42
43 class COIN_DLL_API SoShape : public SoNode {
44 typedef SoNode inherited;
45
46 SO_NODE_ABSTRACT_HEADER(SoShape);
47
48 public:
49 static void initClass(void);
50
51 enum TriangleShape {
52 TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON,
53 // The rest of the enums are not part of the original Inventor API.
54 QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP
55 };
56
57 virtual SbBool affectsState(void) const;
58 virtual void notify(SoNotList * nl);
59
60 virtual void getBoundingBox(SoGetBoundingBoxAction * action);
61 virtual void GLRender(SoGLRenderAction * action);
62 virtual void rayPick(SoRayPickAction * action);
63 virtual void callback(SoCallbackAction * action);
64 virtual void computeBBox(SoAction * action, SbBox3f & box,
65 SbVec3f & center) = 0;
66 virtual void getPrimitiveCount(SoGetPrimitiveCountAction * action);
67
68 static void getScreenSize(SoState * const state, const SbBox3f & boundingbox,
69 SbVec2s & rectsize);
70 static float getDecimatedComplexity(SoState * state, float complexity);
71 const SoBoundingBoxCache * getBoundingBoxCache(void) const;
72
73 protected:
74 SoShape(void);
75 virtual ~SoShape();
76
77 float getComplexityValue(SoAction * action);
78 virtual void generatePrimitives(SoAction * action) = 0;
79 virtual SbBool shouldGLRender(SoGLRenderAction * action);
80 void beginSolidShape(SoGLRenderAction * action);
81 void endSolidShape(SoGLRenderAction * action);
82 void GLRenderBoundingBox(SoGLRenderAction * action);
83 SbBool shouldPrimitiveCount(SoGetPrimitiveCountAction * action);
84
85 SbBool shouldRayPick(SoRayPickAction * const action);
86 void computeObjectSpaceRay(SoRayPickAction * const action);
87 void computeObjectSpaceRay(SoRayPickAction * const action,
88 const SbMatrix & matrix);
89 virtual SoDetail * createTriangleDetail(SoRayPickAction * action,
90 const SoPrimitiveVertex * v1,
91 const SoPrimitiveVertex * v2,
92 const SoPrimitiveVertex * v3,
93 SoPickedPoint * pp);
94 virtual SoDetail * createLineSegmentDetail(SoRayPickAction * action,
95 const SoPrimitiveVertex * v1,
96 const SoPrimitiveVertex * v2,
97 SoPickedPoint * pp);
98 virtual SoDetail * createPointDetail(SoRayPickAction * action,
99 const SoPrimitiveVertex * v,
100 SoPickedPoint * pp);
101
102 void invokeTriangleCallbacks(SoAction * const action,
103 const SoPrimitiveVertex * const v1,
104 const SoPrimitiveVertex * const v2,
105 const SoPrimitiveVertex * const v3);
106 void invokeLineSegmentCallbacks(SoAction * const action,
107 const SoPrimitiveVertex * const v1,
108 const SoPrimitiveVertex * const v2);
109 void invokePointCallbacks(SoAction * const action,
110 const SoPrimitiveVertex * const v);
111 void beginShape(SoAction * const action, const TriangleShape shapetype,
112 SoDetail * const detail = NULL);
113 void shapeVertex(const SoPrimitiveVertex * const v);
114 void endShape(void);
115
116 void generateVertex(SoPrimitiveVertex * const pv,
117 const SbVec3f & point,
118 const SbBool useTexFunc,
119 const SoTextureCoordinateElement * const tce,
120 const float s,
121 const float t,
122 const SbVec3f & normal);
123 void generateVertex(SoPrimitiveVertex * const pv,
124 const SbVec3f & point,
125 const SbBool useTexFunc,
126 const SoTextureCoordinateElement * const tce,
127 const float s,
128 const float t,
129 const float r,
130 const SbVec3f & normal);
131
132 SbBool startVertexArray(SoGLRenderAction * action,
133 const SoCoordinateElement * coords,
134 const SbVec3f * pervertexnormals,
135 const SbBool texpervertex,
136 const SbBool colorpervertex);
137
138 void finishVertexArray(SoGLRenderAction * action,
139 const SbBool vbo,
140 const SbBool normpervertex,
141 const SbBool texpervertex,
142 const SbBool colorpervertex);
143 private:
144 class SoShapeP * pimpl;
145 void validatePVCache(SoGLRenderAction * action);
146 void getBBox(SoAction * action, SbBox3f & box, SbVec3f & center);
147 void rayPickBoundingBox(SoRayPickAction * action);
148 friend class soshape_primdata; // internal class
149 friend class so_generate_prim_private; // a very private class
150 };
151
152 #endif // !COIN_SOSHAPE_H
SbVec2f
The SbVec2f class is a 2 dimensional vector with floating point coordinates.This vector class is used...
Definition: SbVec2f.h:39
SoBase
The SoBase class is the top-level superclass for a number of class-hierarchies.SoBase provides the ba...
Definition: SoBase.h:36
SoRayPickAction
The SoRayPickAction class does ray intersection with scene graphs.For interaction with the scene grap...
Definition: SoRayPickAction.h:41
SoNode::notify
virtual void notify(SoNotList *l)
Definition: SoNode.cpp:439
SoNode::getPrimitiveCount
virtual void getPrimitiveCount(SoGetPrimitiveCountAction *action)
Definition: SoNode.cpp:870
SoPrimitiveVertex
The SoPrimitiveVertex class represents a single vertex of a generated primitive.Instances of SoPrimit...
Definition: SoPrimitiveVertex.h:34
SoMaterialBundle
The SoMaterialBundle class simplifies material handling.Every shape node should create (on the stack)...
Definition: SoMaterialBundle.h:33
SbBox3f
The SbBox3f class is an abstraction for an axis aligned 3 dimensional box.This box abstraction class ...
Definition: SbBox3f.h:37
SoNode
The SoNode class is the base class for nodes used in scene graphs.Coin is a retained mode 3D visualiz...
Definition: SoNode.h:47
SoState
The SoState class manages the Coin scenegraph traversal state data.The SoState class is used by actio...
Definition: SoState.h:35
SoFaceDetail
The SoFaceDetail class is for storing detailed polygon information.Instances of this class are used a...
Definition: SoFaceDetail.h:29
SoNode::rayPick
virtual void rayPick(SoRayPickAction *action)
Definition: SoNode.cpp:1115
SoBoundingBoxCache
The SoBoundingBoxCache class is used to cache bounding boxes.
Definition: SoBoundingBoxCache.h:32
SoCoordinateElement
The SoCoordinateElement class is yet to be documented.FIXME: write doc.
Definition: SoCoordinateElement.h:31
SoAction
The SoAction class is the base class for all traversal actions.Applying actions is the basic mechanis...
Definition: SoAction.h:68
SbVec3f
The SbVec3f class is a 3 dimensional vector with floating point coordinates.This vector class is used...
Definition: SbVec3f.h:40
SoShape::TriangleShape
TriangleShape
Definition: SoShape.h:51
SbMatrix
The SbMatrix class is a 4x4 dimensional representation of a matrix.SbMatrix is used by many other cla...
Definition: SbMatrix.h:37
SoGetPrimitiveCountAction
The SoGetPrimitiveCountAction class counts the primitives in a scene.Apply this action to a scene if ...
Definition: SoGetPrimitiveCountAction.h:34
SoGetBoundingBoxAction
The SoGetBoundingBoxAction class calculates bounding boxes for nodes and subgraphs.If this action is applied to a path or scene graph root, it will calculate the bounding box and the center point of the geometry contained within the scene.
Definition: SoGetBoundingBoxAction.h:36
SoTextureCoordinateElement
The SoTextureCoordinateElement class is yet to be documented.FIXME: write doc.
Definition: SoTextureCoordinateElement.h:41
SoPickedPoint
The SoPickedPoint class is used for specifying picked points.It holds miscellaneous information about...
Definition: SoPickedPoint.h:39
SoCallbackAction
The SoCallbackAction class invokes callbacks at specific nodes.This action has mechanisms for trackin...
Definition: SoCallbackAction.h:71
SoNode::getBoundingBox
virtual void getBoundingBox(SoGetBoundingBoxAction *action)
Definition: SoNode.cpp:841
SoShape
The SoShape class is the superclass for geometry shapes.The node types which have actual geometry to ...
Definition: SoShape.h:43
SoNode::GLRender
virtual void GLRender(SoGLRenderAction *action)
Definition: SoNode.cpp:930
SoNotList
The SoNotList class is a list of SoNotRec notification records.
Definition: SoNotification.h:34
SbVec2s
The SbVec2s class is a 2 dimensional vector with short integer coordinates.This vector class is used ...
Definition: SbVec2s.h:41
SoNode::affectsState
virtual SbBool affectsState(void) const
Definition: SoNode.cpp:807
SoNode::callback
virtual void callback(SoCallbackAction *action)
Definition: SoNode.cpp:1002
SO_NODE_ABSTRACT_HEADER
#define SO_NODE_ABSTRACT_HEADER(classname)
SoGLRenderAction
The SoGLRenderAction class renders the scene graph with OpenGL calls.Applying this method at a root n...
Definition: SoGLRenderAction.h:41
SoDetail
The SoDetail class is the superclass for all classes storing detailed information about particular sh...
Definition: SoDetail.h:30

Copyright © 1998-2010 by Kongsberg Oil & Gas Technologies. All rights reserved.