diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 156fbc1a6c..9a053b99a8 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -176,6 +176,7 @@ void View3DInventorPy::init_type() "'addFinishCallback','addStartCallback','addMotionCallback','addValueChangedCallback'\n"); add_varargs_method("setActiveObject", &View3DInventorPy::setActiveObject, "setActiveObject(name,object)\nadd or set a new active object"); add_varargs_method("getActiveObject", &View3DInventorPy::getActiveObject, "getActiveObject(name)\nreturns the active object for the given type"); + add_varargs_method("getViewProvidersOfType", &View3DInventorPy::getViewProvidersOfType, "getViewProvidersOfType(name)\nreturns a list of view providers for the given type"); add_varargs_method("redraw", &View3DInventorPy::redraw, "redraw(): renders the scene on screen (useful for animations)"); } @@ -2163,40 +2164,54 @@ Py::Object View3DInventorPy::removeDraggerCallback(const Py::Tuple& args) Py::Object View3DInventorPy::setActiveObject(const Py::Tuple& args) { - PyObject* docObject = 0; - char* name; - - //allow reset of active object by setting "None" - if( args.length() == 2 && args.back() == Py::None() ) { - PyArg_Parse(args.front().ptr(), "s", &name); - _view->setActiveObject(NULL, name); - return Py::None(); - } - - if (!PyArg_ParseTuple(args.ptr(), "sO!", &name, &App::DocumentObjectPy::Type, &docObject)) - throw Py::Exception(); - + PyObject* docObject = 0; + char* name; - if (docObject){ - App::DocumentObject* obj = static_cast(docObject)->getDocumentObjectPtr(); - _view->setActiveObject(obj, name); - } - return Py::None(); + //allow reset of active object by setting "None" + if (args.length() == 2 && args.back() == Py::None()) { + PyArg_Parse(args.front().ptr(), "s", &name); + _view->setActiveObject(NULL, name); + return Py::None(); + } + + if (!PyArg_ParseTuple(args.ptr(), "sO!", &name, &App::DocumentObjectPy::Type, &docObject)) + throw Py::Exception(); + + if (docObject){ + App::DocumentObject* obj = static_cast(docObject)->getDocumentObjectPtr(); + _view->setActiveObject(obj, name); + } + return Py::None(); } Py::Object View3DInventorPy::getActiveObject(const Py::Tuple& args) { char* name; if (!PyArg_ParseTuple(args.ptr(), "s", &name)) - throw Py::Exception(); - + throw Py::Exception(); + App::DocumentObject* obj = _view->getActiveObject(name); if(!obj) return Py::None(); - + return Py::Object(obj->getPyObject()); } +Py::Object View3DInventorPy::getViewProvidersOfType(const Py::Tuple& args) +{ + char* name; + if (!PyArg_ParseTuple(args.ptr(), "s", &name)) + throw Py::Exception(); + + std::vector vps = _view->getViewer()->getViewProvidersOfType(Base::Type::fromName(name)); + Py::List list; + for (std::vector::iterator it = vps.begin(); it != vps.end(); ++it) { + list.append(Py::asObject((*it)->getPyObject())); + } + + return list; +} + Py::Object View3DInventorPy::redraw(const Py::Tuple& args) { if (!PyArg_ParseTuple(args.ptr(), "")) diff --git a/src/Gui/View3DPy.h b/src/Gui/View3DPy.h index 5753903cb1..b1051db554 100644 --- a/src/Gui/View3DPy.h +++ b/src/Gui/View3DPy.h @@ -105,6 +105,7 @@ public: Py::Object removeDraggerCallback(const Py::Tuple&); Py::Object setActiveObject(const Py::Tuple&); Py::Object getActiveObject(const Py::Tuple&); + Py::Object getViewProvidersOfType(const Py::Tuple&); Py::Object redraw(const Py::Tuple&); private: