MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / copyObject

Method copyObject

src/App/DocumentPyImp.cpp:459–514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457}
458
459PyObject* DocumentPy::copyObject(PyObject* args, PyObject* kwd)
460{
461 PyObject* obj;
462 PyObject* rec = Py_False;
463 PyObject* retAll = Py_False;
464 static constexpr std::array<const char*, 4> kwlist {"object", "recursive", "return_all", nullptr};
465 if (!Base::Wrapped_ParseTupleAndKeywords(args,
466 kwd,
467 "O|O!O!",
468 kwlist,
469 &obj,
470 &PyBool_Type,
471 &rec,
472 &PyBool_Type,
473 &retAll)) {
474 return nullptr;
475 }
476
477 std::vector<App::DocumentObject*> objs;
478 bool single = false;
479 if (PySequence_Check(obj)) {
480 Py::Sequence seq(obj);
481 for (Py_ssize_t i = 0; i < seq.size(); ++i) {
482 if (!PyObject_TypeCheck(seq[i].ptr(), &DocumentObjectPy::Type)) {
483 PyErr_SetString(PyExc_TypeError,
484 "Expect element in sequence to be of type document object");
485 return nullptr;
486 }
487 objs.push_back(static_cast<DocumentObjectPy*>(seq[i].ptr())->getDocumentObjectPtr());
488 }
489 }
490 else if (!PyObject_TypeCheck(obj, &DocumentObjectPy::Type)) {
491 PyErr_SetString(
492 PyExc_TypeError,
493 "Expect first argument to be either a document object or sequence of document objects");
494 return nullptr;
495 }
496 else {
497 objs.push_back(static_cast<DocumentObjectPy*>(obj)->getDocumentObjectPtr());
498 single = true;
499 }
500
501 PY_TRY
502 {
503 auto ret =
504 getDocumentPtr()->copyObject(objs, Base::asBoolean(rec), Base::asBoolean(retAll));
505 if (ret.size() == 1 && single) {
506 return ret[0]->getPyObject();
507 }
508
509 Py::Tuple tuple(ret.size());
510 for (size_t i = 0; i < ret.size(); ++i) {
511 tuple.setItem(i, Py::Object(ret[i]->getPyObject(), true));
512 }
513 return Py::new_reference_to(tuple);
514 }
515 PY_CATCH
516}

Callers

nothing calls this directly

Calls 8

asBooleanFunction · 0.85
new_reference_toFunction · 0.85
ObjectClass · 0.70
sizeMethod · 0.45
ptrMethod · 0.45
push_backMethod · 0.45
getPyObjectMethod · 0.45

Tested by

no test coverage detected