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

Method getLinkedObject

src/App/FeaturePython.cpp:374–430  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

372}
373
374bool FeaturePythonImp::getLinkedObject(DocumentObject*& ret,
375 bool recurse,
376 Base::Matrix4D* _mat,
377 bool transform,
378 int depth) const
379{
380 FC_PY_CALL_CHECK(getLinkedObject);
381 Base::PyGILStateLocker lock;
382 try {
383 Py::Tuple args(5);
384 args.setItem(0, Py::Object(object->getPyObject(), true));
385 args.setItem(1, Py::Boolean(recurse));
386 Base::MatrixPy* pyMat = new Base::MatrixPy(new Base::Matrix4D);
387 if (_mat) {
388 *pyMat->getMatrixPtr() = *_mat;
389 }
390 args.setItem(2, Py::asObject(pyMat));
391 args.setItem(3, Py::Boolean(transform));
392 args.setItem(4, Py::Long(depth));
393
394 Py::Object res(Base::pyCall(py_getLinkedObject.ptr(), args.ptr()));
395 if (!res.isTrue()) {
396 ret = object;
397 return true;
398 }
399 if (!res.isSequence()) {
400 throw Py::TypeError("getLinkedObject expects return type of (object,matrix)");
401 }
402 Py::Sequence seq(res);
403 if (seq.length() != 2
404 || (!seq.getItem(0).isNone()
405 && !PyObject_TypeCheck(seq.getItem(0).ptr(), &DocumentObjectPy::Type))
406 || !PyObject_TypeCheck(seq.getItem(1).ptr(), &Base::MatrixPy::Type)) {
407 throw Py::TypeError("getLinkedObject expects return type of (object,matrix)");
408 }
409 if (_mat) {
410 *_mat = *static_cast<Base::MatrixPy*>(seq.getItem(1).ptr())->getMatrixPtr();
411 }
412 if (seq.getItem(0).isNone()) {
413 ret = object;
414 }
415 else {
416 ret = static_cast<DocumentObjectPy*>(seq.getItem(0).ptr())->getDocumentObjectPtr();
417 }
418 return true;
419 }
420 catch (Py::Exception&) {
421 if (PyErr_ExceptionMatches(PyExc_NotImplementedError)) {
422 PyErr_Clear();
423 return false;
424 }
425 Base::PyException e; // extract the Python error text
426 e.reportException();
427 ret = nullptr;
428 return true;
429 }
430}
431

Callers 15

getMeasureHandlerMethod · 0.45
getTrueLinkedObjectMethod · 0.45
getLinksToMethod · 0.45
accessMethod · 0.45
resolveElementMethod · 0.45
getObjectMethod · 0.45
getObjectInfoMethod · 0.45
onTimerMethod · 0.45
updateChildrenMethod · 0.45
dropInDocumentMethod · 0.45
dropInObjectMethod · 0.45
populateItemMethod · 0.45

Calls 8

pyCallFunction · 0.85
isNoneMethod · 0.80
ObjectClass · 0.70
getPyObjectMethod · 0.45
ptrMethod · 0.45
lengthMethod · 0.45
getItemMethod · 0.45
reportExceptionMethod · 0.45

Tested by

no test coverage detected