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 __PYTHONSCRIPT_H__
00030 #define __PYTHONSCRIPT_H__
00031
00032 #include "Exception.h"
00033 #include "H3DScriptNode.h"
00034 #include "MFNode.h"
00035
00036 #ifdef HAVE_PYTHON
00037
00038 namespace H3D {
00039
00044 struct H3DAPI_API PythonScript : public H3DScriptNode {
00046 PythonScript( Inst< MFString > _url = 0,
00047 Inst< MFNode > _references = 0 );
00048
00049 virtual Field* getField( const string&name ) {
00050 Field *f = H3DScriptNode::getField( name );
00051 if( f ) return f;
00052 if ( name == "references" )
00053 return references.get();
00054 else
00055 return lookupField( name );
00056 }
00057
00059 ~PythonScript();
00060
00064 virtual Field *lookupField( const string &name );
00065
00066 #ifdef USE_HAPTICS
00069 virtual void traverseSG( TraverseInfo &ti );
00070 #endif
00071
00072 virtual void initialiseParser();
00073
00074 virtual string getInstanceName() {
00075 ostringstream namestr;
00076 namestr << "PythonScript_" << this;
00077 return namestr.str();
00078 }
00079
00080 virtual void loadScript( const string &script );
00081
00082 static void setargv( int _argc, char *_argv[] );
00083
00086 virtual void initialize();
00087
00091 auto_ptr< MFNode > references;
00092
00094 static H3DNodeDatabase database;
00095 private:
00096 void * module;
00097 void * module_dict;
00098 static int argc;
00099 static char** argv;
00100 };
00101 }
00102
00103 #endif // HAVE_PYTHON
00104 #endif