improve active object handling
This commit is contained in:
parent
884ae139fa
commit
d112c41eca
|
@ -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());
|
||||
}
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user