H3D API  2.4.1
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
H3D::PythonScript Class Reference

Interface to the dynamic Python library for executing script code as part of the API. More...

#include <H3D/PythonScript.h>

Inheritance diagram for H3D::PythonScript:
Inheritance graph

Public Member Functions

 PythonScript (Inst< MFString > _url=0, Inst< MFNode > _references=0, Inst< SFString > _moduleName=0)
 Constructor.
 
virtual FieldgetField (const string &_name) const
 return a pointer to the field specified by name within this instance
 
 ~PythonScript ()
 Destructor.
 
virtual FieldlookupField (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.
 
- Public Member Functions inherited from H3D::H3DScriptNode
 ~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.
 
NodegetNamedNode (const string &_name)
 Returns the named node with the given name. More...
 
- Public Member Functions inherited from H3D::X3DChildNode
 X3DChildNode (Inst< SFNode > _metadata=0)
 Constructor.
 
- Public Member Functions inherited from H3D::X3DNode
 X3DNode (Inst< SFNode > _metadata=0)
 Constructor.
 
X3DMetadataObjectgetMetadataByName (const string &_name)
 Given a name, the first X3DMetadataObject in the metadata field that matches that name is returned. More...
 
- Public Member Functions inherited from H3D::Node
 Node ()
 Constructor.
 
virtual Nodeclone (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.
 
X3DPrototypeInstancegetProtoInstanceParent ()
 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...
 
- Public Member Functions inherited from H3D::X3DUrlObject
 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 Public Member Functions inherited from H3D::Node
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< MFNodereferences
 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< SFStringmoduleName
 Specify a specific moduleName for the pythonscript. More...
 
- Public Attributes inherited from H3D::X3DNode
H3DUniquePtr< SFNodemetadata
 Meta data about the node. More...
 
- Public Attributes inherited from H3D::X3DUrlObject
H3DUniquePtr< MFStringurl
 The urls in decreasing order of preference.
 

Static Public Attributes

static H3DNodeDatabase database
 The H3DNodeDatabase for this node.
 
- Static Public Attributes inherited from H3D::H3DScriptNode
static H3DNodeDatabase database
 The H3DNodeDatabase for this node.
 
- Static Public Attributes inherited from H3D::X3DNode
static H3DNodeDatabase database
 The H3DNodeDatabase for this node.
 

Additional Inherited Members

- Public Types inherited from H3D::Node
typedef std::map< Node *, Node * > DeepCopyMap
 A map type used during a deep copy clone() to map from original nodes to cloned nodes.
 
- Public Types inherited from H3D::X3DUrlObject
enum  LoadStatus { INIT , LOADED , LOADING , FAILED }
 The load status of the given url. More...
 
- Protected Member Functions inherited from H3D::Node
void cloneFieldValue (Field &_from, Field &_to, bool deepCopy, DeepCopyMap &deepCopyMap)
 A helper function for the clone() method. More...
 
- Protected Member Functions inherited from H3D::X3DUrlObject
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 Protected Member Functions inherited from H3D::Node
static NodegetClonedInstance (Node *original, bool deepCopy, DeepCopyMap &deepCopyMap)
 A helper function for nodes that implement clone() More...
 
- Protected Attributes inherited from H3D::X3DUrlObject
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...
 

Detailed Description

Interface to the dynamic Python library for executing script code as part of the API.

Examples:

Member Function Documentation

◆ allowMainThreadPython()

void PythonScript::allowMainThreadPython ( )
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.

◆ getPythonAttribute()

PyObject * PythonScript::getPythonAttribute ( const string &  _name)
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().

◆ initPythonHome()

bool PythonScript::initPythonHome ( const std::string &  exe_with_full_path)
static

Initialize the python home environment.

Parameters
exe_with_full_pathThe absolute path to the executable (current process), including the executable
Returns
True if the python home was found and set properly, False otherwise
Note
This function does nothing if the cmake option PYTHON_USE_LOCAL_ENV is not defined or not TRUE
Otherwise, it tries to find the python libs near the given executable path, to deduce which
directory should be set as python home.
This method should be called before Py_Inititalize, i.e. any PythonScript ctor (instanciation)
Warning
Keep in mind that most method do not support long path (> 256 characters), so keep in mind that any dev, installation and deployment must keep a short path

◆ traverseSG()

void PythonScript::traverseSG ( TraverseInfo ti)
virtual

Traverse the scenegraph.

Used in PythonScript to call a function in python once per scene graph loop.

Parameters
tiThe TraverseInfo object containing information about the traversal.

Reimplemented from H3D::Node.

Member Data Documentation

◆ moduleName

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

◆ references

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


The documentation for this class was generated from the following files: