+ add methods to get/set scene graph, add parameter to set window title of viewer

This commit is contained in:
wmayer 2016-05-01 17:50:40 +02:00
parent f8d21c4b8e
commit 5edeb99828
3 changed files with 46 additions and 5 deletions

View File

@ -1116,22 +1116,26 @@ PyObject* Application::sShowPreferences(PyObject * /*self*/, PyObject *args,PyOb
PyObject* Application::sCreateViewer(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) PyObject* Application::sCreateViewer(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/)
{ {
int num_of_views = 1; int num_of_views = 1;
char* title = nullptr;
// if one argument (int) is given // if one argument (int) is given
if (PyArg_ParseTuple(args, "|i", &num_of_views)) if (PyArg_ParseTuple(args, "|is", &num_of_views, &title))
{ {
if (num_of_views < 0) if (num_of_views < 0)
return NULL; return NULL;
else if (num_of_views==1) else if (num_of_views==1)
{ {
View3DInventor* viewer = new View3DInventor(0, 0); View3DInventor* viewer = new View3DInventor(0, 0);
if (title)
viewer->setWindowTitle(QString::fromUtf8(title));
Gui::getMainWindow()->addWindow(viewer); Gui::getMainWindow()->addWindow(viewer);
return viewer->getPyObject(); return viewer->getPyObject();
} }
else else
{ {
SplitView3DInventor* viewer = new SplitView3DInventor(num_of_views, 0, 0); SplitView3DInventor* viewer = new SplitView3DInventor(num_of_views, 0, 0);
if (title)
viewer->setWindowTitle(QString::fromUtf8(title));
Gui::getMainWindow()->addWindow(viewer); Gui::getMainWindow()->addWindow(viewer);
return viewer->getPyObject(); return viewer->getPyObject();
} }

View File

@ -57,7 +57,9 @@ void View3DInventorViewerPy::init_type()
"the viewer. It can be used to change the event processing. This must however be\n" "the viewer. It can be used to change the event processing. This must however be\n"
"done very carefully to not change the user interaction in an unpredictable manner.\n" "done very carefully to not change the user interaction in an unpredictable manner.\n"
); );
add_varargs_method("getSceneGraph", &View3DInventorViewerPy::getSceneGraph, "getSceneGraph() -> SoNode");
add_varargs_method("setSceneGraph", &View3DInventorViewerPy::setSceneGraph, "setSceneGraph(SoNode)");
add_varargs_method("seekToPoint",&View3DInventorViewerPy::seekToPoint,"seekToPoint(tuple) -> None\n" add_varargs_method("seekToPoint",&View3DInventorViewerPy::seekToPoint,"seekToPoint(tuple) -> None\n"
"Initiate a seek action towards the 3D intersection of the scene and the\n" "Initiate a seek action towards the 3D intersection of the scene and the\n"
"ray from the screen coordinate's point and in the same direction as the\n" "ray from the screen coordinate's point and in the same direction as the\n"
@ -146,7 +148,6 @@ int View3DInventorViewerPy::setattr(const char * attr, const Py::Object & value)
Py::Object View3DInventorViewerPy::getSoRenderManager(const Py::Tuple& args) Py::Object View3DInventorViewerPy::getSoRenderManager(const Py::Tuple& args)
{ {
if (!PyArg_ParseTuple(args.ptr(), "")) if (!PyArg_ParseTuple(args.ptr(), ""))
throw Py::Exception(); throw Py::Exception();
@ -161,6 +162,41 @@ Py::Object View3DInventorViewerPy::getSoRenderManager(const Py::Tuple& args)
} }
} }
Py::Object View3DInventorViewerPy::getSceneGraph(const Py::Tuple& args)
{
if (!PyArg_ParseTuple(args.ptr(), ""))
throw Py::Exception();
try {
SoNode* scene = _viewer->getSceneGraph();
PyObject* proxy = 0;
proxy = Base::Interpreter().createSWIGPointerObj("pivy.coin", "SoSeparator *", (void*)scene, 1);
scene->ref();
return Py::Object(proxy, true);
}
catch (const Base::Exception& e) {
throw Py::Exception(e.what());
}
}
Py::Object View3DInventorViewerPy::setSceneGraph(const Py::Tuple& args)
{
PyObject* proxy;
if (!PyArg_ParseTuple(args.ptr(), "O", &proxy))
throw Py::Exception();
void* ptr = 0;
try {
Base::Interpreter().convertSWIGPointerObj("pivy.coin", "SoNode *", proxy, &ptr, 0);
SoNode* node = static_cast<SoNode*>(ptr);
_viewer->setSceneGraph(node);
return Py::None();
}
catch (const Base::Exception& e) {
throw Py::Exception(e.what());
}
}
Py::Object View3DInventorViewerPy::getSoEventManager(const Py::Tuple& args) Py::Object View3DInventorViewerPy::getSoEventManager(const Py::Tuple& args)
{ {
if (!PyArg_ParseTuple(args.ptr(), "")) if (!PyArg_ParseTuple(args.ptr(), ""))
@ -177,7 +213,6 @@ Py::Object View3DInventorViewerPy::getSoEventManager(const Py::Tuple& args)
} }
} }
Py::Object View3DInventorViewerPy::seekToPoint(const Py::Tuple& args) Py::Object View3DInventorViewerPy::seekToPoint(const Py::Tuple& args)
{ {
PyObject* object; PyObject* object;

View File

@ -55,6 +55,8 @@ public:
//exposed methods //exposed methods
Py::Object getSoEventManager(const Py::Tuple&); Py::Object getSoEventManager(const Py::Tuple&);
Py::Object getSoRenderManager(const Py::Tuple&); Py::Object getSoRenderManager(const Py::Tuple&);
Py::Object getSceneGraph(const Py::Tuple&);
Py::Object setSceneGraph(const Py::Tuple&);
Py::Object seekToPoint(const Py::Tuple&); Py::Object seekToPoint(const Py::Tuple&);
Py::Object setFocalDistance(const Py::Tuple& args); Py::Object setFocalDistance(const Py::Tuple& args);