From d112c41eca6c12e505e9157e89797de45d5f8862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Fri, 1 May 2015 16:16:21 +0200 Subject: [PATCH] improve active object handling --- src/Gui/View3DPy.cpp | 28 ++++++++++++++++++++++++++-- src/Gui/View3DPy.h | 5 +++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/Gui/View3DPy.cpp b/src/Gui/View3DPy.cpp index 67a67a56c..84ce78b62 100644 --- a/src/Gui/View3DPy.cpp +++ b/src/Gui/View3DPy.cpp @@ -176,7 +176,9 @@ void View3DInventorPy::init_type() "Remove the DraggerCalback function from the coin node\n" "Possibles types :\n" "'addFinishCallback','addStartCallback','addMotionCallback','addValueChangedCallback'\n"); - add_varargs_method("setActiveObject", &View3DInventorPy::setActiveObject, "setActiveObject(name,object)\nadd or set a new active object"); + 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"); + } View3DInventorPy::View3DInventorPy(View3DInventor *vi) @@ -2176,8 +2178,17 @@ Py::Object View3DInventorPy::setActiveObject(const Py::Tuple& args) { PyObject* docObject = 0; char* name; - if (!PyArg_ParseTuple(args.ptr(), "sO!", &name, &App::DocumentObjectPy::Type, &docObject)) + + //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(); @@ -2185,3 +2196,16 @@ Py::Object View3DInventorPy::setActiveObject(const Py::Tuple& args) } return Py::None(); } + +Py::Object View3DInventorPy::getActiveObject(const Py::Tuple& args) +{ + char* name; + if (!PyArg_ParseTuple(args.ptr(), "s", &name)) + throw Py::Exception(); + + App::DocumentObject* obj = _view->getActiveObject(name); + if(!obj) + return Py::None(); + + return Py::Object(obj->getPyObject()); +} \ No newline at end of file diff --git a/src/Gui/View3DPy.h b/src/Gui/View3DPy.h index 604048ade..fd644b1eb 100644 --- a/src/Gui/View3DPy.h +++ b/src/Gui/View3DPy.h @@ -101,8 +101,9 @@ public: Py::Object setAxisCross(const Py::Tuple&); Py::Object hasAxisCross(const Py::Tuple&); Py::Object addDraggerCallback(const Py::Tuple&); - Py::Object removeDraggerCallback(const Py::Tuple&); - Py::Object setActiveObject(const Py::Tuple&); + Py::Object removeDraggerCallback(const Py::Tuple&); + Py::Object setActiveObject(const Py::Tuple&); + Py::Object getActiveObject(const Py::Tuple&); private: static void eventCallback(void * ud, SoEventCallback * n);