From b66d413debc57198ce4c83c569ad0ca2152e130e Mon Sep 17 00:00:00 2001 From: Alexey Chernov <4ernov@gmail.com> Date: Thu, 25 Jul 2024 03:09:52 +0300 Subject: [PATCH] Use lambda to prevent code duplication --- src/Mod/PartDesign/App/ShapeBinder.cpp | 34 ++++++++++++-------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/Mod/PartDesign/App/ShapeBinder.cpp b/src/Mod/PartDesign/App/ShapeBinder.cpp index 020526b221..cb1e58af6f 100644 --- a/src/Mod/PartDesign/App/ShapeBinder.cpp +++ b/src/Mod/PartDesign/App/ShapeBinder.cpp @@ -605,22 +605,8 @@ void SubShapeBinder::update(SubShapeBinder::UpdateOption options) { if (!copyerror) { std::vector props; getPropertyList(props); - for (auto prop : props) { - if (!App::LinkBaseExtension::isCopyOnChangeProperty(this, *prop)) - continue; - auto p = copied->getPropertyByName(prop->getName()); - if (p && p->getContainer() == copied - && p->getTypeId() == prop->getTypeId() - && !p->isSame(*prop)) - { - recomputeCopy = true; - std::unique_ptr pcopy(prop->Copy()); - p->Paste(*pcopy); - } - } - if (recomputeCopy && !copied->recomputeFeature(true)) - copyerror = 2; - if (!copyerror) { + // lambda for copying values of copy-on-change properties + const auto copyPropertyValues = [this, &recomputeCopy, &props, copied](const bool to_parent) { for (auto prop : props) { if (!App::LinkBaseExtension::isCopyOnChangeProperty(this, *prop)) continue; @@ -629,11 +615,21 @@ void SubShapeBinder::update(SubShapeBinder::UpdateOption options) { && p->getTypeId() == prop->getTypeId() && !p->isSame(*prop)) { - std::unique_ptr pcopy(p->Copy()); - prop->Paste(*pcopy); + recomputeCopy = true; + auto* const from = to_parent ? prop : p; + auto* const to = to_parent ? p : prop; + + std::unique_ptr pcopy(from->Copy()); + to->Paste(*pcopy); } } - } + }; + + copyPropertyValues(true); + if (recomputeCopy && !copied->recomputeFeature(true)) + copyerror = 2; + if (!copyerror) + copyPropertyValues(false); } obj = copied; _CopiedLink.setValue(copied, l.getSubValues(false));