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 __TRIANGLEFANSET_H__
00030 #define __TRIANGLEFANSET_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
00069 class H3DAPI_API TriangleFanSet : public X3DComposedGeometryNode {
00070 public:
00071
00074 H3D_VALUE_EXCEPTION( int, NotEnoughColors );
00075
00078 H3D_VALUE_EXCEPTION( int, NotEnoughTextureCoordinates );
00079
00081 H3D_VALUE_EXCEPTION( int, InvalidFanCount );
00082
00084 typedef CoordBoundField SFBound;
00085
00092
00093 class H3DAPI_API AutoNormal:
00094 public TypedField< SFNormalNode,
00095 Types< SFBool, SFCoordinateNode, MFInt32, SFBool > > {
00098 virtual void update();
00099
00116 virtual X3DNormalNode *generateNormalsPerVertex(
00117 X3DCoordinateNode *coord,
00118 const vector< int > &index,
00119 bool ccw );
00120
00121
00138 virtual X3DNormalNode *generateNormalsPerFace(
00139 X3DCoordinateNode *coord,
00140 const vector< int > &index,
00141 bool ccw );
00142
00143 };
00144
00146 TriangleFanSet( Inst< SFNode > _metadata = 0,
00147 Inst< SFBound > _bound = 0,
00148 Inst< DisplayList > _displayList = 0,
00149 Inst< SFColorNode > _color = 0,
00150 Inst< SFCoordinateNode > _coord = 0,
00151 Inst< SFNormalNode > _normal = 0,
00152 Inst< SFTextureCoordinateNode > _texCoord = 0,
00153 Inst< SFBool > _ccw = 0,
00154 Inst< SFBool > _colorPerVertex = 0,
00155 Inst< SFBool > _normalPerVertex = 0,
00156 Inst< SFBool > _solid = 0,
00157 Inst< MFVertexAttributeNode > _attrib = 0,
00158 Inst< AutoNormal > _autoNormal = 0,
00159 Inst< MFInt32 > _fanCount = 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
00185 auto_ptr< MFInt32 > fanCount;
00186
00188 static H3DNodeDatabase database;
00189 };
00190 }
00191
00192 #endif