PyObject *SelectionSingleton::sAddSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; float x=0,y=0,z=0; if (PyArg_ParseTuple(args, "O!|sfff", &(App::DocumentObjectPy::Type),&object,&subname,&x,&y,&z)) { App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname,x,y,z); Py_Return; } PyErr_Clear(); PyObject *sequence; if (PyArg_ParseTuple(args, "O!O", &(App::DocumentObjectPy::Type),&object,&sequence)) { App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } try { if (PyTuple_Check(sequence) || PyList_Check(sequence)) { Py::Sequence list(sequence); for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { std::string subname = static_cast<std::string>(Py::String(*it)); Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname.c_str()); } Py_Return; } } catch (const Py::Exception&) { // do nothing here } } PyErr_SetString(PyExc_ValueError, "type must be 'DocumentObject[,subname[,x,y,z]]' or 'DocumentObject, list or tuple of subnames'"); return 0; }
PyObject *SelectionSingleton::sIsSelected(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; if (!PyArg_ParseTuple(args, "O!|s", &(App::DocumentObjectPy::Type), &object, &subname)) return NULL; // NULL triggers exception App::DocumentObjectPy* docObj = static_cast<App::DocumentObjectPy*>(object); bool ok = Selection().isSelected(docObj->getDocumentObjectPtr(), subname); return Py_BuildValue("O", (ok ? Py_True : Py_False)); }
PyObject *SelectionSingleton::sRemoveSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; if (!PyArg_ParseTuple(args, "O!|s", &(App::DocumentObjectPy::Type),&object,&subname)) return NULL; // NULL triggers exception App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(PyExc_Exception, "Cannot check invalid object"); return NULL; } Selection().rmvSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname); Py_Return; }
PyObject *SelectionSingleton::sAddSelection(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { PyObject *object; char* subname=0; float x=0,y=0,z=0; if (!PyArg_ParseTuple(args, "O!|sfff", &(App::DocumentObjectPy::Type),&object,&subname,&x,&y,&z)) return NULL; // NULL triggers exception App::DocumentObjectPy* docObjPy = static_cast<App::DocumentObjectPy*>(object); App::DocumentObject* docObj = docObjPy->getDocumentObjectPtr(); if (!docObj || !docObj->getNameInDocument()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot check invalid object"); return NULL; } Selection().addSelection(docObj->getDocument()->getName(), docObj->getNameInDocument(), subname,x,y,z); Py_Return; }
PyObject* AttachEnginePy::writeParametersToFeature(PyObject* args) { PyObject* obj; if (!PyArg_ParseTuple(args, "O!",&(App::DocumentObjectPy::Type),&obj)) return NULL; // NULL triggers exception try{ App::DocumentObjectPy* dobjpy = static_cast<App::DocumentObjectPy*>(obj); App::DocumentObject* dobj = dobjpy->getDocumentObjectPtr(); if (! dobj->hasExtension(Part::AttachExtension::getExtensionClassTypeId())){ throw Py::TypeError("Supplied object has no Part::AttachExtension"); } Part::AttachExtension* feat = dobj->getExtensionByType<Part::AttachExtension>(); const AttachEngine &attacher = *(this->getAttachEnginePtr()); AttachEngine::verifyReferencesAreSafe(attacher.references); feat->Support.Paste(attacher.references); feat->MapMode.setValue(attacher.mapMode); feat->MapReversed.setValue(attacher.mapReverse); feat->MapPathParameter.setValue(attacher.attachParameter); feat->AttachmentOffset.setValue(attacher.attachmentOffset); return Py::new_reference_to(Py::None()); } ATTACHERPY_STDCATCH_METH; }
PyObject* AttachEnginePy::readParametersFromFeature(PyObject* args) { PyObject* obj; if (!PyArg_ParseTuple(args, "O!",&(App::DocumentObjectPy::Type),&obj)) return NULL; // NULL triggers exception try{ App::DocumentObjectPy* dobjpy = static_cast<App::DocumentObjectPy*>(obj); App::DocumentObject* dobj = dobjpy->getDocumentObjectPtr(); if (! dobj->hasExtension(Part::AttachExtension::getExtensionClassTypeId())){ throw Py::TypeError("Supplied object has no Part::AttachExtension"); } Part::AttachExtension* feat = dobj->getExtensionByType<Part::AttachExtension>(); AttachEngine &attacher = *(this->getAttachEnginePtr()); attacher.setUp(feat->Support, eMapMode(feat->MapMode.getValue()), feat->MapReversed.getValue(), feat->MapPathParameter.getValue(), 0.0,0.0, feat->AttachmentOffset.getValue()); return Py::new_reference_to(Py::None()); } ATTACHERPY_STDCATCH_METH; }