00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SO_INDEXED_QUAD_MESH_
00025 #define _SO_INDEXED_QUAD_MESH_
00026
00027 #include <Inventor/fields/SoSFInt32.h>
00028 #include <Inventor/nodes/SoIndexedShape.h>
00029 #include <Inventor/SbPImpl.h>
00030
00031 SO_PIMPL_PUBLIC_DECLARATION(SoIndexedQuadMesh)
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00049
00136 class SoIndexedQuadMesh : public SoIndexedShape
00137 {
00138 SO_NODE_HEADER(SoIndexedQuadMesh);
00139 SO_PIMPL_PUBLIC_HEADER(SoIndexedQuadMesh)
00140
00141 public:
00142
00146 SoSFInt32 verticesPerColumn;
00150 SoSFInt32 verticesPerRow;
00151
00155 SoIndexedQuadMesh();
00156
00157 private:
00158
00159 virtual void GLRender( SoGLRenderAction* action );
00160
00161
00162
00163 virtual void generateDefaultNormals( SoState* state,
00164 const SbVec3f* coords,
00165 int numCoords,
00166 SoNormalBundle* nb,
00167 SbBool storeRef = FALSE );
00168
00170 virtual void shouldGenerateTangents( SoGLRenderAction* , const SoShapeStyleElement* ) {}
00171
00172 virtual void getPrimitiveCount( SoGetPrimitiveCountAction* action );
00173
00174 private:
00175 int getNumRows() const;
00176 int getNumCols() const;
00177 int getNumQuads() const;
00178 int getNumMeshVerts() const;
00179
00180
00181
00182 void generateDefaultNormals_QuadMesh( SoState* state, const SbVec3f* vecPQuadCoord[], SbVec3f normals[] );
00183
00184 static void initClass();
00185 static void exitClass();
00186
00187
00188 virtual void notify( SoNotList* list );
00189
00190
00191 virtual int getNumPrim( SoState* state = NULL );
00192
00193 private:
00194
00195 enum Binding {
00196 OVERALL,
00197 PER_ROW, PER_ROW_INDEXED,
00198 PER_QUAD, PER_QUAD_INDEXED,
00199 PER_VERTEX, PER_VERTEX_INDEXED
00200 };
00201
00202 virtual void generatePrimitives( SoAction* action );
00203
00204
00205 virtual SoDetail* createTriangleDetail( SoRayPickAction* action,
00206 const SoPrimitiveVertex* v1,
00207 const SoPrimitiveVertex* v2,
00208 const SoPrimitiveVertex* v3,
00209 SoPickedPoint* pp );
00210
00211 virtual void callSetupIndices( SoState* state, const SoShapeStyleElement* shapeStyle, uint32_t useTexCoordsAnyway );
00212
00213
00214 virtual void countPrim( SoState* state = NULL );
00215
00216
00217 void doRendering( SoGLRenderAction* action, const SoShapeStyleElement* shapeStyle );
00218
00219 virtual ~SoIndexedQuadMesh();
00220
00221 private :
00222
00223
00224 SoIndexedQuadMesh::Binding getNormalBinding( SoAction* action, SoNormalBundle* nb );
00225 };
00226
00227
00228 #endif
00229
00230
00231