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 __CYLINDER_H__
00030 #define __CYLINDER_H__
00031
00032 #include "X3DGeometryNode.h"
00033 #include "SFFloat.h"
00034
00035 namespace H3D {
00036
00074 class H3DAPI_API Cylinder : public X3DGeometryNode {
00075 public:
00076
00083 class SFBound: public X3DGeometryNode::SFBound {
00085 virtual void update() {
00086 H3DFloat h = static_cast< SFFloat * >( routes_in[0] )->getValue();
00087 H3DFloat r = static_cast< SFFloat * >( routes_in[1] )->getValue();
00088 BoxBound *bb = new BoxBound;
00089 H3DFloat d = 2 * r;
00090 bb->size->setValue( Vec3f( d, h, d ) );
00091 value = bb;
00092 }
00093 };
00094
00096 Cylinder( Inst< SFNode > _metadata = 0,
00097 Inst< SFBound > _bound = 0,
00098 Inst< SFBool > _bottom = 0,
00099 Inst< SFFloat> _height = 0,
00100 Inst< SFFloat> _radius = 0,
00101 Inst< SFBool > _side = 0,
00102 Inst< SFBool > _solid = 0,
00103 Inst< SFBool > _top = 0 );
00104
00106 virtual void render();
00107
00108 #ifdef USE_HAPTICS
00109
00110 virtual void traverseSG( TraverseInfo &ti );
00111 #endif
00112
00119 auto_ptr< SFBool > bottom;
00120
00128 auto_ptr< SFFloat > height;
00129
00137 auto_ptr< SFFloat > radius;
00138
00145 auto_ptr< SFBool > side;
00146
00155 auto_ptr< SFBool > solid;
00156
00163 auto_ptr< SFBool > top;
00164
00165 static H3DNodeDatabase database;
00166 };
00167 }
00168
00169 #endif