| 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

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