H3D API
2.4.1
|
Interface to the dynamic Python library for executing script code as part of the API. More...
#include <H3D/PythonScript.h>
Public Member Functions | |
PythonScript (Inst< MFString > _url=0, Inst< MFNode > _references=0, Inst< SFString > _moduleName=0) | |
Constructor. | |
virtual Field * | getField (const string &_name) const |
return a pointer to the field specified by name within this instance | |
~PythonScript () | |
Destructor. | |
virtual Field * | lookupField (const string &_name) const |
lookupField() returns the field pointer to the field with the specified string field name, used when creating nodes via the H3DNodeDatabase service. | |
virtual PyObject * | getPythonAttribute (const string &_name) |
Returns the python object with the specified name from the python module used by the PythonScript node. More... | |
virtual void | getTopLevelFields (vector< pair< string, Field * > > &fields) |
Adds the fields at the top level of the PythonScript node and its Python variable name to the given vector. | |
virtual void | traverseSG (TraverseInfo &ti) |
Traverse the scenegraph. More... | |
std::string | execute (const std::string &_command) |
Execute the specified python code string, returning the stdout, stderr or the string representation of the resulting object. | |
virtual void | initialize () |
Initialize is called once upon the first reference of the RefCountedClass. | |
PyObject * | getPythonModule () |
Returns a borrowed reference to the PyModule object use by the PythonScript node. | |
![]() | |
~H3DScriptNode () | |
Destructor. | |
void | addNamedNodes (X3D::DEFNodes *dn) |
Add all nodes from the given DEFNodes instance to the scripts set of named nodes. More... | |
void | addNamedNode (const string &_name, Node *n) |
Add a named node to the script. More... | |
int | removeNamedNode (const string &_name) |
Remove the named node with the provided name. More... | |
void | clearNamedNodes () |
Remove all named nodes. | |
Node * | getNamedNode (const string &_name) |
Returns the named node with the given name. More... | |
![]() | |
X3DChildNode (Inst< SFNode > _metadata=0) | |
Constructor. | |
![]() | |
X3DNode (Inst< SFNode > _metadata=0) | |
Constructor. | |
X3DMetadataObject * | getMetadataByName (const string &_name) |
Given a name, the first X3DMetadataObject in the metadata field that matches that name is returned. More... | |
![]() | |
Node () | |
Constructor. | |
virtual Node * | clone (bool deepCopy=true, DeepCopyMap *deepCopyMap=NULL) |
Returns a new instance of this node type with the same state as this one. More... | |
virtual | ~Node () |
Destructor. | |
X3DPrototypeInstance * | getProtoInstanceParent () |
If this node is the root node in the proto body of a X3DPrototypeInstance then this will return that node. More... | |
void | setProtoInstanceParent (X3DPrototypeInstance *p) |
Set the X3DPrototypeInstance this node is the the root node if applicaple. | |
virtual void | render () |
the render() function is used for the depth-first rendering traversal of the scene-graph. More... | |
virtual bool | lineIntersect (const Vec3f &from, const Vec3f &to, LineIntersectResult &result) |
Detect intersection between a line segment and the Node. More... | |
virtual void | closestPoint (const Vec3f &p, NodeIntersectResult &result) |
Find closest point on Node to p. More... | |
virtual bool | movingSphereIntersect (H3DFloat radius, const Vec3f &from, const Vec3f &to, NodeIntersectResult &result) |
Detect collision between a moving sphere and the Node. More... | |
virtual string | defaultXMLContainerField () |
Returns the default xml containerField attribute value. More... | |
int | addDestructCallback (void(*func)(Node *, void *), void *args) |
Add a callback function to be run on destruction of node. More... | |
int | removeDestructCallback (void(*func)(Node *, void *), void *args) |
Add a callback function to be run on destruction of node. More... | |
![]() | |
X3DUrlObject (Inst< MFString > _url=0) | |
Constructor. | |
virtual LoadStatus | loadStatus () |
The loadStatus function returns the status of the loading of the current urls in order to be used with the LoadSensor node. | |
virtual H3DFloat | loadProgress () |
The loadProgress() functions returns a value between 0 and 1 indicating how much of the current url has been loaded. More... | |
void | setURLUsed (const string &_url_used) |
Set the url that is currently loaded. | |
const string & | getURLUsed () |
Get the url that is currently loaded. | |
void | setURLBase (const string &_url_base) |
Set the url base address. | |
const string & | getURLBase () |
Get the current url base address. | |
string | resolveURLAsFile (const string &url, bool *is_tmp_file=NULL) |
Get the url as a local file. | |
string | resolveURLAsString (const string &url) |
Get the content of the URL as a string. | |
bool | removeTmpFile (const string &file) |
Remove a tmpfile with the given name. More... | |
Static Public Member Functions | |
static bool | initPythonHome (const std::string &exe_with_full_path) |
Initialize the python home environment. More... | |
static void | allowMainThreadPython () |
Allow python code to run in the main thread. More... | |
static void | disallowMainThreadPython () |
Don't allow python code to run in the main thread, instead letting other python threads run without disruptions(see allowMainThreadPython for more info). | |
static bool | mainThreadPythonAllowed () |
Returns true if python code is allowed to run in main thread at the moment. | |
![]() | |
static unsigned int | nrNodesAlive () |
Returns the nr of nodes currently alive, i.e. nodes created but not destructed. | |
static int | nrNodesCreated () |
Returns the number of nodes created in total since the start of the program. | |
Public Attributes | |
H3DUniquePtr< MFNode > | references |
Through this field one can pass references to Nodes in the scene graph that can then be access through the 'references' variable in the Python script. More... | |
H3DUniquePtr< SFString > | moduleName |
Specify a specific moduleName for the pythonscript. More... | |
![]() | |
H3DUniquePtr< SFNode > | metadata |
Meta data about the node. More... | |
![]() | |
H3DUniquePtr< MFString > | url |
The urls in decreasing order of preference. | |
Static Public Attributes | |
static H3DNodeDatabase | database |
The H3DNodeDatabase for this node. | |
![]() | |
static H3DNodeDatabase | database |
The H3DNodeDatabase for this node. | |
![]() | |
static H3DNodeDatabase | database |
The H3DNodeDatabase for this node. | |
Additional Inherited Members | |
![]() | |
typedef std::map< Node *, Node * > | DeepCopyMap |
A map type used during a deep copy clone() to map from original nodes to cloned nodes. | |
![]() | |
enum | LoadStatus { INIT , LOADED , LOADING , FAILED } |
The load status of the given url. More... | |
![]() | |
void | cloneFieldValue (Field &_from, Field &_to, bool deepCopy, DeepCopyMap &deepCopyMap) |
A helper function for the clone() method. More... | |
![]() | |
string | resolveURL (const string &_url, bool return_contents, bool *is_tmp_file=NULL) |
Helper function for resolveURLAs*() functions. | |
void | addInlinePrefix (const string &s) |
Add a inline prefix that this node supports. | |
int | getInlinedContentOffset (const std::string &url) |
If the URL contains any inline prefix, return the index of the start of the inlined content. More... | |
![]() | |
static Node * | getClonedInstance (Node *original, bool deepCopy, DeepCopyMap &deepCopyMap) |
A helper function for nodes that implement clone() More... | |
![]() | |
string | url_used |
If loadStatus() returns LOADED this string should contain the url that is loaded. More... | |
string | url_base |
The base URL for urls in this url object. More... | |
list< string > | supported_inline_prefixes |
A list of inline prefixes that are supported by this url object. More... | |
Interface to the dynamic Python library for executing script code as part of the API.
Examples:
|
static |
Allow python code to run in the main thread.
This must be called before any calls to python functions from the main thread.
The reason for this is to be able to start and run other Python threads from within the script. Python handles tread safety by only allowing one python thread to execute at any one time. It lets on thread run for a certain number of instructions then switch to the next thread for the same number of instructions and so on. The problem is that the main python script in H3D most of the time does not execute anything. Things only happen on events by fields and in the traverseSG function which causes the other python threads to lock up since the main thread never executes the number of instructions required to move on to the next thread. In order to let these other threads run when the main python thread does nothing we encapsulate all python code that is executed in main thread within allowMainThreadPython/disallowMainThreadPython calls. After disallowMainThreadPython is called all other python threads can run without waiting for the main thread. However this means that we must call allowMainThreadPython before any python code that runs in the main thread or the program will crash.
|
virtual |
Returns the python object with the specified name from the python module used by the PythonScript node.
NULL if no object with the specified name is found. The return value is a new reference to the python object.
Referenced by H3D::PyNode::getAttr().
|
static |
Initialize the python home environment.
exe_with_full_path | The absolute path to the executable (current process), including the executable |
|
virtual |
Traverse the scenegraph.
Used in PythonScript to call a function in python once per scene graph loop.
ti | The TraverseInfo object containing information about the traversal. |
Reimplemented from H3D::Node.
H3DUniquePtr< SFString > H3D::PythonScript::moduleName |
Specify a specific moduleName for the pythonscript.
This name should be unique among all PythonScript nodes in the scene. It should also differ from previously existing python modules. If this field is empty an automatically generated name will be used. This field should be used if one python script should import the functionality from another python script. See the H3DAPI manual for an example.
Access type: initializeOnly
H3DUniquePtr< MFNode > H3D::PythonScript::references |
Through this field one can pass references to Nodes in the scene graph that can then be access through the 'references' variable in the Python script.
Access type: initializeOnly