improve active object handling

This commit is contained in:
Stefan Tröger 2015-05-01 16:16:21 +02:00
parent 884ae139fa
commit d112c41eca
2 changed files with 29 additions and 4 deletions

View File

@ -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<App::DocumentObjectPy*>(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<App::DocumentObject*>(name);
if(!obj)
return Py::None();
return Py::Object(obj->getPyObject());
}

View File

@ -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);