00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00027
00029 #ifndef __INDEXEDTRIANGLESET_H__
00030 #define __INDEXEDTRIANGLESET_H__
00031
00032 #include "X3DComposedGeometryNode.h"
00033 #include "DependentNodeFields.h"
00034 #include "X3DCoordinateNode.h"
00035 #include "X3DColorNode.h"
00036 #include "CoordBoundField.h"
00037 #include "MFInt32.h"
00038
00039 namespace H3D {
00040
00070 class H3DAPI_API IndexedTriangleSet : public X3DComposedGeometryNode {
00071 public:
00072
00075 H3D_VALUE_EXCEPTION( int, NotEnoughColors );
00076
00079 H3D_VALUE_EXCEPTION( int, NotEnoughTextureCoordinates );
00080
00082 typedef CoordBoundField SFBound;
00083
00090
00091 class H3DAPI_API AutoNormal:
00092 public TypedField< SFNormalNode,
00093 Types< SFBool, SFCoordinateNode, MFInt32, SFBool > > {
00096 virtual void update();
00097
00114 virtual X3DNormalNode *generateNormalsPerVertex(
00115 X3DCoordinateNode *coord,
00116 const vector< int > &index,
00117 bool ccw );
00118
00119
00136 virtual X3DNormalNode *generateNormalsPerFace(
00137 X3DCoordinateNode *coord,
00138 const vector< int > &index,
00139 bool ccw );
00140
00141 };
00142
00144 IndexedTriangleSet( Inst< SFNode > _metadata = 0,
00145 Inst< SFBound > _bound = 0,
00146 Inst< DisplayList > _displayList = 0,
00147 Inst< SFColorNode > _color = 0,
00148 Inst< SFCoordinateNode > _coord = 0,
00149 Inst< SFNormalNode > _normal = 0,
00150 Inst< SFTextureCoordinateNode > _texCoord = 0,
00151 Inst< SFBool > _ccw = 0,
00152 Inst< SFBool > _colorPerVertex = 0,
00153 Inst< SFBool > _normalPerVertex = 0,
00154 Inst< SFBool > _solid = 0,
00155 Inst< MFVertexAttributeNode > _attrib = 0,
00156 Inst< AutoNormal > _autoNormal = 0,
00157 Inst< MFInt32 > _set_index = 0,
00158 Inst< MFInt32 > _index = 0 );
00159
00160 #ifdef USE_HAPTICS
00163 virtual void traverseSG( TraverseInfo &ti );
00164 #endif
00165
00167 virtual void render();
00168
00173 auto_ptr< AutoNormal > autoNormal;
00174
00179 auto_ptr< MFInt32 > set_index;
00180
00191 auto_ptr< MFInt32 > index;
00192
00194 static H3DNodeDatabase database;
00195 };
00196 }
00197
00198 #endif