Coin Logo http://www.sim.no/
http://www.coin3d.org/

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
33class SoDetail;
34class SoPickedPoint;
35class SoFaceDetail;
36class SoState;
39class SbVec2f;
42
43class COIN_DLL_API SoShape : public SoNode {
44 typedef SoNode inherited;
45
47
48public:
49 static void initClass(void);
50
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
73protected:
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);
143private:
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
The SbBox3f class is an abstraction for an axis aligned 3 dimensional box.
Definition SbBox3f.h:37
The SbMatrix class is a 4x4 dimensional representation of a matrix.
Definition SbMatrix.h:37
The SbVec2f class is a 2 dimensional vector with floating point coordinates.
Definition SbVec2f.h:39
The SbVec2s class is a 2 dimensional vector with short integer coordinates.
Definition SbVec2s.h:41
The SbVec3f class is a 3 dimensional vector with floating point coordinates.
Definition SbVec3f.h:40
The SoAction class is the base class for all traversal actions.
Definition SoAction.h:68
The SoBoundingBoxCache class is used to cache bounding boxes.
Definition SoBoundingBoxCache.h:32
The SoCallbackAction class invokes callbacks at specific nodes.
Definition SoCallbackAction.h:71
The SoCoordinateElement class is yet to be documented.
Definition SoCoordinateElement.h:31
The SoDetail class is the superclass for all classes storing detailed information about particular sh...
Definition SoDetail.h:30
The SoFaceDetail class is for storing detailed polygon information.
Definition SoFaceDetail.h:29
The SoGLRenderAction class renders the scene graph with OpenGL calls.
Definition SoGLRenderAction.h:41
The SoGetBoundingBoxAction class calculates bounding boxes for nodes and subgraphs.
Definition SoGetBoundingBoxAction.h:36
The SoGetPrimitiveCountAction class counts the primitives in a scene.
Definition SoGetPrimitiveCountAction.h:34
The SoMaterialBundle class simplifies material handling.
Definition SoMaterialBundle.h:33
The SoNode class is the base class for nodes used in scene graphs.
Definition SoNode.h:47
virtual void notify(SoNotList *l)
Definition SoNode.cpp:439
virtual void getPrimitiveCount(SoGetPrimitiveCountAction *action)
Definition SoNode.cpp:870
virtual void getBoundingBox(SoGetBoundingBoxAction *action)
Definition SoNode.cpp:841
virtual void callback(SoCallbackAction *action)
Definition SoNode.cpp:1002
virtual SbBool affectsState(void) const
Definition SoNode.cpp:807
virtual void rayPick(SoRayPickAction *action)
Definition SoNode.cpp:1115
virtual void GLRender(SoGLRenderAction *action)
Definition SoNode.cpp:930
The SoNotList class is a list of SoNotRec notification records.
Definition SoNotification.h:34
The SoPickedPoint class is used for specifying picked points.
Definition SoPickedPoint.h:39
The SoPrimitiveVertex class represents a single vertex of a generated primitive.
Definition SoPrimitiveVertex.h:34
The SoRayPickAction class does ray intersection with scene graphs.
Definition SoRayPickAction.h:41
The SoShape class is the superclass for geometry shapes.
Definition SoShape.h:43
virtual void generatePrimitives(SoAction *action)=0
TriangleShape
Definition SoShape.h:51
virtual void computeBBox(SoAction *action, SbBox3f &box, SbVec3f &center)=0
The SoState class manages the Coin scenegraph traversal state data.
Definition SoState.h:35
The SoTextureCoordinateElement class is yet to be documented.
Definition SoTextureCoordinateElement.h:41
#define SO_NODE_ABSTRACT_HEADER(classname)
Definition macros.dox:54

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

Generated on Wed Jul 17 2024 for Coin by Doxygen 1.12.0.