OSG  3.4.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ScriptEngine.h
Go to the documentation of this file.
1 /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2013 Robert Osfield
2  *
3  * This library is open source and may be redistributed and/or modified under
4  * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5  * (at your option) any later version. The full license is in LICENSE file
6  * included with this distribution, and on the openscenegraph.org website.
7  *
8  * This library is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * OpenSceneGraph Public License for more details.
12 */
13 
14 #ifndef OSG_SCRIPTENGINE
15 #define OSG_SCRIPTENGINE 1
16 
17 #include <osg/Object>
18 #include <osg/Callback>
19 #include <osg/NodeVisitor>
20 #include <osg/UserDataContainer>
21 
22 namespace osg
23 {
24 
25 // forward declare
26 class ScriptEngine;
27 
28 /* Script class for wrapping a script and the language used in the script.*/
29 class Script : public osg::Object
30 {
31  public:
33  Script(const std::string& language, const std::string& str): _language(language), _script(str), _modifiedCount(0) {}
34  Script(const Script& rhs, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): osg::Object(rhs,copyop), _language(rhs._language), _script(rhs._script), _modifiedCount(0) {}
35 
37 
38  void setLanguage(const std::string& language) { _language = language; dirty(); }
39  const std::string& getLanguage() { return _language; }
40 
41  void setScript(const std::string& str) { _script = str; dirty(); }
42  const std::string& getScript() const { return _script; }
43 
44  void dirty() { ++_modifiedCount; }
45  unsigned int getModifiedCount() const { return _modifiedCount; }
46 
47  protected:
48 
49  virtual ~Script() {}
50 
51  std::string _language;
52  std::string _script;
53  unsigned int _modifiedCount;
54 };
55 
56 
59 {
60  public:
61  ScriptNodeCallback(Script* script=0, const std::string& entryPoint="") : _script(script), _entryPoint(entryPoint) {}
63  osg::Object(rhs,copyop),
64  osg::Callback(rhs,copyop),
65  osg::NodeCallback(rhs,copyop), _script(rhs._script) {}
66 
68 
69 
70  void setScript(osg::Script* script) { _script = script; }
71 
73  osg::Script* getScript() { return _script.get(); }
74 
76  const osg::Script* getScript() const { return _script.get(); }
77 
79  osg::ScriptEngine* getScriptEngine(osg::NodePath& nodePath);
80 
82  virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
83 
84  protected:
85 
86  virtual ~ScriptNodeCallback() {}
87 
89  std::string _entryPoint;
90 };
91 
94 class ScriptEngine : public osg::Object
95 {
96  public:
97 
99  inline const std::string& getLanguage() const { return _language; }
100 
102  bool run(osg::Script* script)
103  {
104  // assumpt empty input and output parameters lists
105  Parameters inputParameters, outputParameters;
106  return run(script, "", inputParameters, outputParameters);
107  }
108 
110  virtual bool run(osg::Script* script, const std::string& entryPoint, Parameters& inputParameters, Parameters& outputParameters) = 0;
111 
112  protected:
113 
114  ScriptEngine(const std::string& language):_language(language) { setName(language); }
115  virtual ~ScriptEngine() {}
116 
117  std::string _language;
118 };
119 
120 }
121 
122 #endif
#define OSG_EXPORT
Definition: Export.h:43
void dirty()
Definition: ScriptEngine.h:44
ScriptNodeCallback(const ScriptNodeCallback &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition: ScriptEngine.h:62
const std::string & getScript() const
Definition: ScriptEngine.h:42
Script(const std::string &language, const std::string &str)
Definition: ScriptEngine.h:33
unsigned int getModifiedCount() const
Definition: ScriptEngine.h:45
void setScript(const std::string &str)
Definition: ScriptEngine.h:41
ScriptEngine(const std::string &language)
Definition: ScriptEngine.h:114
META_Object(osg, Script) void setLanguage(const std
Definition: ScriptEngine.h:36
unsigned int _modifiedCount
Definition: ScriptEngine.h:53
ScriptNodeCallback(Script *script=0, const std::string &entryPoint="")
Definition: ScriptEngine.h:61
std::vector< osg::ref_ptr< osg::Object > > Parameters
Definition: Callback.h:92
META_Object(osg, ScriptNodeCallback) void setScript(osg
Definition: ScriptEngine.h:67
typedef void(GL_APIENTRY *GLTexImage3DProc)(GLenum target
virtual void setName(const std::string &name)
Definition: Object.h:134
std::string _language
Definition: ScriptEngine.h:51
virtual ~Script()
Definition: ScriptEngine.h:49
bool run(osg::Script *script)
Definition: ScriptEngine.h:102
virtual ~ScriptEngine()
Definition: ScriptEngine.h:115
virtual ~ScriptNodeCallback()
Definition: ScriptEngine.h:86
std::string _language
Definition: ScriptEngine.h:117
Definition: Node.h:71
Definition: AlphaFunc.h:19
const osg::Script * getScript() const
Definition: ScriptEngine.h:76
osg::ref_ptr< Script > _script
Definition: ScriptEngine.h:88
Script(const Script &rhs, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
Definition: ScriptEngine.h:34
const std::string & getLanguage() const
Definition: ScriptEngine.h:99
osg::Script * getScript()
Definition: ScriptEngine.h:73
const std::string & getLanguage()
Definition: ScriptEngine.h:39
std::vector< Node * > NodePath
Definition: Node.h:44
std::string _script
Definition: ScriptEngine.h:52