diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index 23adf1c33..8e2ca1fce 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -1116,22 +1116,26 @@ PyObject* Application::sShowPreferences(PyObject * /*self*/, PyObject *args,PyOb PyObject* Application::sCreateViewer(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { - int num_of_views = 1; + char* title = nullptr; // 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) return NULL; else if (num_of_views==1) { View3DInventor* viewer = new View3DInventor(0, 0); + if (title) + viewer->setWindowTitle(QString::fromUtf8(title)); Gui::getMainWindow()->addWindow(viewer); return viewer->getPyObject(); } else { SplitView3DInventor* viewer = new SplitView3DInventor(num_of_views, 0, 0); + if (title) + viewer->setWindowTitle(QString::fromUtf8(title)); Gui::getMainWindow()->addWindow(viewer); return viewer->getPyObject(); } diff --git a/src/Gui/View3DViewerPy.cpp b/src/Gui/View3DViewerPy.cpp index d5fc8e515..3a749e0df 100644 --- a/src/Gui/View3DViewerPy.cpp +++ b/src/Gui/View3DViewerPy.cpp @@ -57,7 +57,9 @@ void View3DInventorViewerPy::init_type() "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" ); - + 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" "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" @@ -146,7 +148,6 @@ int View3DInventorViewerPy::setattr(const char * attr, const Py::Object & value) Py::Object View3DInventorViewerPy::getSoRenderManager(const Py::Tuple& args) { - if (!PyArg_ParseTuple(args.ptr(), "")) 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(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) { 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) { PyObject* object; diff --git a/src/Gui/View3DViewerPy.h b/src/Gui/View3DViewerPy.h index 1432cdac6..9c71a8fb7 100644 --- a/src/Gui/View3DViewerPy.h +++ b/src/Gui/View3DViewerPy.h @@ -55,6 +55,8 @@ public: //exposed methods Py::Object getSoEventManager(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 setFocalDistance(const Py::Tuple& args);