00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _SO_TRIANGLE_SET_
00026 #define _SO_TRIANGLE_SET_
00027
00028 #include <Inventor/fields/SoSFInt32.h>
00029 #include <Inventor/nodes/SoNonIndexedShape.h>
00030 #include <Inventor/SbPImpl.h>
00031
00032
00033
00034 #define SO_TRIANGLE_SET_USE_REST_OF_VERTICES (-1)
00035
00036 class SoNormalBundle;
00037 class SoState;
00038
00039 SO_PIMPL_PUBLIC_DECLARATION(SoTriangleSet)
00040
00041
00122 class SoTriangleSet : public SoNonIndexedShape
00123 {
00124 SO_NODE_HEADER(SoTriangleSet);
00125 SO_PIMPL_PUBLIC_HEADER(SoTriangleSet)
00126
00127 public:
00128
00134 SoSFInt32 numTriangles;
00135
00139 SoTriangleSet();
00140
00141 private:
00142
00143
00145 virtual void GLRender( SoGLRenderAction* action );
00146
00148 virtual void getPrimitiveCount( SoGetPrimitiveCountAction* action );
00149
00151 virtual void generateDefaultNormals( SoState* state,
00152 const SbVec3f* coords,
00153 int numCoords,
00154 SoNormalBundle* nb,
00155 SbBool storeRef = FALSE );
00156
00158 virtual void shouldGenerateTangents( SoGLRenderAction* , const SoShapeStyleElement* ) {}
00159
00160 private:
00161
00163 static void initClass();
00164
00166 static void exitClass();
00167
00168 virtual int getNumVert( SoState* state = NULL );
00169
00170 virtual int getNumPrim( SoState* state = NULL );
00171
00172 private:
00173
00174
00175 enum Binding {
00176 OVERALL,
00177 PER_FACE,
00178 PER_VERTEX
00179 };
00180
00181
00182 virtual void exitRender( SoState* state,
00183 int stateFlag,
00184 SoTextureCoordinateBundle* tcb,
00185 SoTextureCoordinate3Bundle* tc3b);
00186
00187 virtual void countPrim( SoState* state = NULL );
00188
00189
00190 virtual void generatePrimitives( SoAction* action );
00191
00192
00193 void doRendering( SoGLRenderAction* action, const SoShapeStyleElement* shapeStyle );
00194
00195
00196 virtual SoDetail* createTriangleDetail( SoRayPickAction* action,
00197 const SoPrimitiveVertex* v1,
00198 const SoPrimitiveVertex* v2,
00199 const SoPrimitiveVertex* v3,
00200 SoPickedPoint* pp);
00201
00203 ~SoTriangleSet();
00204
00205 private:
00206
00207
00208 virtual void notify( SoNotList* list );
00209
00210 private:
00211
00212 friend class SoVolumeTriangleSetDl;
00213 };
00214
00215 #endif
00216
00217