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 __TEXGENGEOMETRY_H__
00030 #define __TEXGENGEOMETRY_H__
00031
00032 #include "X3DGeometryNode.h"
00033 #include "TextureCoordinateGenerator.h"
00034 #include "DependentNodeFields.h"
00035
00036 namespace H3D {
00037
00044 class H3DAPI_API TexGenGeometry :
00045 public X3DGeometryNode {
00046 public:
00047
00050 typedef DependentSFNode<
00051 TextureCoordinateGenerator,
00052 FieldRef< X3DGeometricPropertyNode,
00053 Field,
00054 &X3DGeometricPropertyNode::propertyChanged > >
00055 SFTexCoordGenNode;
00056
00060 class SFGeometryNode:
00061 public DependentSFNode< X3DGeometryNode,
00062 FieldRef< H3DDisplayListObject,
00063 H3DDisplayListObject::DisplayList,
00064 &H3DDisplayListObject::displayList >,
00065 true > {
00066 public:
00067 ~SFGeometryNode() { value = NULL; }
00068 protected:
00069 virtual void onAdd( Node *n ) {
00070 DependentSFNode< X3DGeometryNode,
00071 FieldRef< H3DDisplayListObject,
00072 H3DDisplayListObject::DisplayList,
00073 &H3DDisplayListObject::displayList >,
00074 true >::onAdd( n );
00075 X3DGeometryNode *g = dynamic_cast< X3DGeometryNode * >( n );
00076 X3DGeometryNode *own =
00077 dynamic_cast< X3DGeometryNode * >( getOwner() );
00078 if( g && own ) g->bound->route( own->bound );
00079 }
00080
00081 virtual void onRemove( Node *n ) {
00082 DependentSFNode< X3DGeometryNode,
00083 FieldRef< H3DDisplayListObject,
00084 H3DDisplayListObject::DisplayList,
00085 &H3DDisplayListObject::displayList >,
00086 true >::onRemove( n );
00087 X3DGeometryNode *g = dynamic_cast< X3DGeometryNode * >( n );
00088 X3DGeometryNode *own =
00089 dynamic_cast< X3DGeometryNode * >( getOwner() );
00090 if( g && own ) g->bound->unroute( own->bound );
00091 }
00092 };
00093
00095 TexGenGeometry( Inst< SFNode > _metadata = 0,
00096 Inst< SFBound > _bound = 0,
00097 Inst< DisplayList > _displayList = 0,
00098 Inst< MFBool > _isTouched = 0,
00099 Inst< MFVec3f > _force = 0,
00100 Inst< MFVec3f > _contactPoint = 0,
00101 Inst< MFVec3f > _contactNormal = 0,
00102 Inst< SFGeometryNode > _geometry = 0,
00103 Inst< SFTexCoordGenNode > _texCoord = 0 );
00104
00106 virtual void render();
00107
00108 #ifdef USE_HAPTICS
00109
00110 virtual void traverseSG( TraverseInfo &ti );
00111 #endif
00112
00117 auto_ptr< SFGeometryNode > geometry;
00118
00121 auto_ptr< SFTexCoordGenNode > texCoord;
00122
00124 static H3DNodeDatabase database;
00125 };
00126 }
00127
00128 #endif