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 __BOOLEANFILTER_H__
00030 #define __BOOLEANFILTER_H__
00031
00032 #include "X3DChildNode.h"
00033 #include "SFBool.h"
00034
00035 namespace H3D {
00036
00049 class H3DAPI_API BooleanFilter : public X3DChildNode {
00050 public:
00053 class H3DAPI_API NegateSFBool: public SFBool {
00054 virtual void update() {
00055 BooleanFilter *bf =
00056 static_cast< BooleanFilter * >( getOwner() );
00057 value =
00058 !static_cast< SFBool * >( event.ptr )->getValue( bf->id );
00059 }
00060 };
00061
00062 friend class NegateSFBool;
00063
00067 class H3DAPI_API SetBoolean: public AutoUpdate< SFBool > {
00068 public:
00071 virtual void setValue( const bool &b, int id = 0 ) {
00072 SFBool::setValue( b );
00073 BooleanFilter *bf =
00074 static_cast< BooleanFilter * >( getOwner() );
00075 if( value )
00076 bf->inputTrue->setValue( true, bf->id );
00077 else
00078 bf->inputFalse->setValue( false, bf->id );
00079 }
00080 protected:
00083 virtual void update() {
00084 SFBool::update();
00085 BooleanFilter *bf =
00086 static_cast< BooleanFilter * >( getOwner() );
00087 if( value )
00088 bf->inputTrue->setValue( true, bf->id );
00089 else
00090 bf->inputFalse->setValue( false, bf->id );
00091 }
00092 };
00093
00094 friend class SetBoolean;
00095
00097 BooleanFilter( Inst< SFNode > _metadata = 0,
00098 Inst< SetBoolean > _set_boolean = 0,
00099 Inst< SFBool > _inputFalse = 0,
00100 Inst< NegateSFBool > _inputNegate = 0,
00101 Inst< SFBool > _inputTrue = 0 );
00102
00108 auto_ptr< SetBoolean > set_boolean;
00109
00116 auto_ptr< SFBool > inputFalse;
00117
00123 auto_ptr< NegateSFBool > inputNegate;
00124
00131 auto_ptr< SFBool > inputTrue;
00132
00134 static H3DNodeDatabase database;
00135 };
00136 }
00137
00138 #endif