diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 2423e7019c..ddb5788dad 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -4557,30 +4557,38 @@ bool SketchObject::isExternalAllowed(App::Document* pDoc, App::DocumentObject* p bool SketchObject::isCarbonCopyAllowed(App::Document* pDoc, App::DocumentObject* pObj, bool& xinv, bool& yinv, eReasonList* rsn) const { - if (rsn) + if (rsn) { *rsn = rlAllowed; + } + + std::string sketchArchType ("Sketcher::SketchObjectPython"); // Only applicable to sketches - if (pObj->getTypeId() != Sketcher::SketchObject::getClassTypeId()) { - if (rsn) + if (pObj->getTypeId() != Sketcher::SketchObject::getClassTypeId() + && sketchArchType != pObj->getTypeId().getName()) { + if (rsn) { *rsn = rlNotASketch; + } return false; } + SketchObject* psObj = static_cast(pObj); // Sketches outside of the Document are NOT allowed if (this->getDocument() != pDoc) { - if (rsn) + if (rsn) { *rsn = rlOtherDoc; + } return false; } // circular reference prevention try { if (!(this->testIfLinkDAGCompatible(pObj))) { - if (rsn) + if (rsn) { *rsn = rlCircularReference; + } return false; } } diff --git a/src/Mod/Sketcher/Gui/DrawSketchHandlerCarbonCopy.h b/src/Mod/Sketcher/Gui/DrawSketchHandlerCarbonCopy.h index c7f88f9f24..75fab52e15 100644 --- a/src/Mod/Sketcher/Gui/DrawSketchHandlerCarbonCopy.h +++ b/src/Mod/Sketcher/Gui/DrawSketchHandlerCarbonCopy.h @@ -160,7 +160,9 @@ public: throw Base::ValueError("Sketcher: Carbon Copy: Invalid object in selection"); } - if (obj->is()) { + std::string sketchArchType("Sketcher::SketchObjectPython"); + + if (obj->is() || sketchArchType == obj->getTypeId().getName()) { try { Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Create a carbon copy"));