#1
|
|||
|
|||
passing node3d to c++
hello,
xabbu already asked to access the underlaying osg::Node of a node3d object. We own a vizard developer license and could use the modifier plugin, but we'll like to pass a node3d object to c++ using a .dll/.pyd file. We're able to use PyArg_ParseTuple to parse the according PyObject*. We don't know the implementation of ob_type of node3d. Is it possible to reach the pointer to the underlaying osg::Node? Many Thanks for your advice |
#2
|
|||
|
|||
You cannot extract the underlying osg::Node object from the PyObject. You have to use a modifier plugin to get access to the osg::Node object. However, there is nothing stopping you from combining a modifier plugin and a python plugin into a single DLL. Here is the C++ code for a plugin that works both as a Python plugin and a modifier plugin:
Code:
#include "modifier.h" #include "Python.h" // DO NOT MODIFY THESE DECLARATIONS---------------- extern "C" __declspec(dllexport) void InitModifier(void *); extern "C" __declspec(dllexport) void PerformModifier(void *); extern "C" __declspec(dllexport) void TextureModifier(void *); extern "C" __declspec(dllexport) void SceneModifier(void *); extern "C" __declspec(dllexport) void CommandModifier(void *); extern "C" __declspec(dllexport) void CloseModifier(void *); void InitModifier(void *modifier) { strcpy(((VizModifierObj*)modifier)->version,"Modifier Example v1.0"); ((VizModifierObj*)modifier)->dataSize = 0; ((VizModifierObj*)modifier)->status = 1; } void PerformModifier(void *modifier) { fprintf(stdout,"modifiying node\n"); ((VizModifierObj*)modifier)->status = 1; } void TextureModifier(void *modifier) { ((VizModifierObj*)modifier)->status = 1; } void SceneModifier(void *modifier) { ((VizModifierObj*)modifier)->status = 1; } void CommandModifier(void *modifier) { } void CloseModifier(void *modifier) { } PyObject* py_do_something(PyObject *self, PyObject *args) { fprintf(stdout,"doing something\n"); Py_RETURN_NONE; } static PyMethodDef ModifierMethods[] = { {"do_something", py_do_something, METH_VARARGS}, {NULL, NULL} }; extern "C" __declspec(dllexport) void initmodifier() { Py_InitModule("modifier", ModifierMethods); } Code:
import viz viz.go() #Treat DLL as Python module import modifier modifier.do_something() #Treat DLL as modifier plugin mod = viz.addModifier('modifier.dll') node = viz.add('gallery.ive') node.modify(mod) |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Inheritence with node3d | dan12345 | Vizard | 1 | 05-23-2008 07:14 PM |
Passing sensor data to C++ GUI | vizmaster | Vizard | 2 | 10-05-2006 12:37 PM |
passing data to viz.director | vadrian | Vizard | 1 | 05-18-2005 04:30 PM |
Passing arguments to vizard script | hotspur1 | Vizard | 7 | 05-02-2003 03:03 PM |