From 336dda316d2e9b7a6076d4d870bc86eb5dcf3891 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Fri, 25 Oct 2024 05:58:51 +0200 Subject: [PATCH] Sketcher: Symmetric: Do not copy names of constraints (#17433) * Sketcher: Symmetric: Do not copy names of constraints * Sketcher: Symmetric : Fix https://github.com/FreeCAD/FreeCAD/issues/17442 --- src/Mod/Sketcher/App/SketchObject.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index ba83358bf8..66151adab1 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -4757,13 +4757,10 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, Base::StateLocker lock(managedoperation, true); const std::vector& geovals = getInternalGeometry(); - std::vector newgeoVals(geovals); const std::vector& constrvals = this->Constraints.getValues(); std::vector newconstrVals(constrvals); - newgeoVals.reserve(geovals.size() + geoIdList.size()); - std::map geoIdMap; std::map isStartEndInverted; @@ -4783,15 +4780,10 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, } } - // add the geometry - std::vector symmetricVals = getSymmetric(geoIdList, geoIdMap, isStartEndInverted, refGeoId, refPosId); - newgeoVals.insert(newgeoVals.end(), symmetricVals.begin(), symmetricVals.end()); + std::vector symgeos = getSymmetric(geoIdList, geoIdMap, isStartEndInverted, refGeoId, refPosId); - // Block acceptGeometry in OnChanged to avoid unnecessary checks and updates { - Base::StateLocker lock(internaltransaction, true); - Geometry.setValues(std::move(newgeoVals)); - + addGeometry(symgeos); for (auto* constr : constrvals) { // we look in the map, because we might have skipped internal alignment geometry @@ -4812,6 +4804,7 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, if (constr->Type != Sketcher::DistanceX && constr->Type != Sketcher::DistanceY) { Constraint* constNew = constr->copy(); + constNew->Name = ""; // Make sure we don't have 2 constraint with same name. constNew->First = fit->second; newconstrVals.push_back(constNew); } @@ -4824,6 +4817,7 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, // diameter, weight,... Constraint* constNew = constr->copy(); + constNew->Name = ""; constNew->First = fit->second; newconstrVals.push_back(constNew); } @@ -4844,7 +4838,7 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, || constr->Type == Sketcher::PointOnObject || constr->Type == Sketcher::InternalAlignment) { Constraint* constNew = constr->copy(); - + constNew->Name = ""; constNew->First = fit->second; constNew->Second = sit->second; if (isStartEndInverted[constr->First]) { @@ -4876,6 +4870,7 @@ int SketchObject::addSymmetric(const std::vector& geoIdList, int refGeoId, if (tit != geoIdMap.end()) {// Third is also in the list Constraint* constNew = constr->copy(); + constNew->Name = ""; constNew->First = fit->second; constNew->Second = sit->second; constNew->Third = tit->second;