00001 #ifndef COIN_SOINDEXEDSHAPE_H
00002 #define COIN_SOINDEXEDSHAPE_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <Inventor/nodes/SoSubNode.h>
00028 #include <Inventor/nodes/SoVertexShape.h>
00029 #include <Inventor/fields/SoMFInt32.h>
00030
00031 class SoTextureCoordinateElement;
00032 class SoCoordinateElement;
00033
00034 class COIN_DLL_API SoIndexedShape : public SoVertexShape {
00035 typedef SoVertexShape inherited;
00036
00037 SO_NODE_ABSTRACT_HEADER(SoIndexedShape);
00038
00039 public:
00040 static void initClass(void);
00041
00042 SoMFInt32 coordIndex;
00043 SoMFInt32 materialIndex;
00044 SoMFInt32 normalIndex;
00045 SoMFInt32 textureCoordIndex;
00046
00047 protected:
00048 SoIndexedShape(void);
00049 virtual ~SoIndexedShape();
00050
00051 virtual void computeBBox(SoAction * action, SbBox3f & box, SbVec3f & center);
00052 int getNumVerts(const int startCoord);
00053 void setupIndices(const int numParts, const int numFaces,
00054 const SbBool needNormals, const SbBool needTexCoords);
00055
00056 const int32_t * getNormalIndices(void);
00057 const int32_t * getColorIndices(void);
00058 const int32_t * getTexCoordIndices(void);
00059
00060 static SbBool areTexCoordsIndexed(SoAction * action);
00061
00062 SbBool getVertexData(SoState * state,
00063 const SoCoordinateElement *& coords,
00064 const SbVec3f *& normals,
00065 const int32_t *& cindices,
00066 const int32_t *& nindices,
00067 const int32_t *& tindices,
00068 const int32_t *& mindices,
00069 int & numcindices,
00070 const SbBool needNormals,
00071 SbBool & normalCacheUsed);
00072 };
00073
00074 #endif // !COIN_SOINDEXEDSHAPE_H