00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00029 #ifndef __INDEXEDTRIANGLEFANSET_H__
00030 #define __INDEXEDTRIANGLEFANSET_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
00072 class H3DAPI_API IndexedTriangleFanSet : public X3DComposedGeometryNode {
00073 public:
00076 H3D_VALUE_EXCEPTION( int, NotEnoughColors );
00077
00080 H3D_VALUE_EXCEPTION( int, NotEnoughTextureCoordinates );
00081
00083 typedef CoordBoundField SFBound;
00084
00091
00092 class H3DAPI_API AutoNormal:
00093 public TypedField< SFNormalNode,
00094 Types< SFBool, SFCoordinateNode, MFInt32, SFBool > > {
00097 virtual void update();
00098
00115 virtual X3DNormalNode *generateNormalsPerVertex(
00116 X3DCoordinateNode *coord,
00117 const vector< int > &index,
00118 bool ccw );
00119
00120
00137 virtual X3DNormalNode *generateNormalsPerFace(
00138 X3DCoordinateNode *coord,
00139 const vector< int > &index,
00140 bool ccw );
00141
00142 };
00143
00145 IndexedTriangleFanSet( Inst< SFNode > _metadata = 0,
00146 Inst< SFBound > _bound = 0,
00147 Inst< DisplayList > _displayList = 0,
00148 Inst< SFColorNode > _color = 0,
00149 Inst< SFCoordinateNode > _coord = 0,
00150 Inst< SFNormalNode > _normal = 0,
00151 Inst< SFTextureCoordinateNode > _texCoord = 0,
00152 Inst< SFBool > _ccw = 0,
00153 Inst< SFBool > _colorPerVertex = 0,
00154 Inst< SFBool > _normalPerVertex = 0,
00155 Inst< SFBool > _solid = 0,
00156 Inst< MFVertexAttributeNode > _attrib = 0,
00157 Inst< AutoNormal > _autoNormal = 0,
00158 Inst< MFInt32 > _set_index = 0,
00159 Inst< MFInt32 > _index = 0 );
00160
00161 #ifdef USE_HAPTICS
00164 virtual void traverseSG( TraverseInfo &ti );
00165 #endif
00166
00168 virtual void render();
00169
00174 auto_ptr< AutoNormal > autoNormal;
00175
00181 auto_ptr< MFInt32 > set_index;
00182
00192 auto_ptr< MFInt32 > index;
00193
00195 static H3DNodeDatabase database;
00196
00197
00198 };
00199 }
00200
00201 #endif