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 __SPHERE_H__
00030 #define __SPHERE_H__
00031
00032 #include "X3DGeometryNode.h"
00033 #include "SFFloat.h"
00034
00035 namespace H3D {
00036
00057 class H3DAPI_API Sphere : public X3DGeometryNode {
00058 public:
00059
00065 class SFBound: public TypedField< X3DGeometryNode::SFBound,
00066 SFFloat >{
00068 virtual void update() {
00069 H3DFloat d = 2 * static_cast< SFFloat * >( routes_in[0] )->getValue();
00070 BoxBound *bb = new BoxBound;
00071 bb->size->setValue( Vec3f( d, d, d ) );
00072 value = bb;
00073 }
00074 };
00075
00077 Sphere( Inst< SFNode > _metadata = 0,
00078 Inst< SFBound > _bound = 0,
00079 Inst< SFFloat> _radius = 0,
00080 Inst< SFBool > _solid = 0 );
00081
00083 virtual void render();
00084
00085 #ifdef USE_HAPTICS
00086
00087 virtual void traverseSG( TraverseInfo &ti );
00088 #endif
00089
00097 auto_ptr< SFFloat > radius;
00098
00106 auto_ptr< SFBool > solid;
00107
00109 static H3DNodeDatabase database;
00110
00111 protected:
00112 GLUquadricObj* gl_quadric;
00113 };
00114 }
00115
00116 #endif