diff --git a/src/Gui/Selection.cpp b/src/Gui/Selection.cpp index d9ba9ca99a..cffd9f60a0 100644 --- a/src/Gui/Selection.cpp +++ b/src/Gui/Selection.cpp @@ -979,6 +979,8 @@ PyMethodDef SelectionSingleton::Methods[] = { "document is given the selection of the active document is returned.\n" "The SelectionObjects contain a variety of information about the selection,\n" "e.g. sub-element names."}, + {"getSelectionObject", (PyCFunction) SelectionSingleton::sGetSelectionObject, 1, + "getSelectionObject(doc,obj,sub,(x,y,z)) -- Return a SelectionObject"}, {"addObserver", (PyCFunction) SelectionSingleton::sAddSelObserver, 1, "addObserver(Object) -- Install an observer\n"}, {"removeObserver", (PyCFunction) SelectionSingleton::sRemSelObserver, 1, @@ -1114,6 +1116,41 @@ PyObject *SelectionSingleton::sGetSelectionEx(PyObject * /*self*/, PyObject *arg } } +PyObject *SelectionSingleton::sGetSelectionObject(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) +{ + char *docName, *objName, *subName; + PyObject* tuple=0; + if (!PyArg_ParseTuple(args, "sss|O!", &docName, &objName, &subName, + &PyTuple_Type, &tuple)) + return NULL; + + try { + SelectionObject selObj; + selObj.DocName = docName; + selObj.FeatName = objName; + std::string sub = subName; + if (!sub.empty()) { + selObj.SubNames.push_back(sub); + if (tuple) { + Py::Tuple t(tuple); + double x = (double)Py::Float(t.getItem(0)); + double y = (double)Py::Float(t.getItem(1)); + double z = (double)Py::Float(t.getItem(2)); + selObj.SelPoses.push_back(Base::Vector3d(x,y,z)); + } + } + + return selObj.getPyObject(); + } + catch (const Py::Exception&) { + return 0; + } + catch (const Base::Exception& e) { + PyErr_SetString(PyExc_Exception, e.what()); + return 0; + } +} + PyObject *SelectionSingleton::sAddSelObserver(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject* o; diff --git a/src/Gui/Selection.h b/src/Gui/Selection.h index a8e38eb8ad..7aa6656154 100644 --- a/src/Gui/Selection.h +++ b/src/Gui/Selection.h @@ -309,6 +309,7 @@ protected: static PyObject *sCountObjectsOfType (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sGetSelection (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sGetSelectionEx (PyObject *self,PyObject *args,PyObject *kwd); + static PyObject *sGetSelectionObject (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sAddSelObserver (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sRemSelObserver (PyObject *self,PyObject *args,PyObject *kwd); static PyObject *sAddSelectionGate (PyObject *self,PyObject *args,PyObject *kwd);