From 114d3dcd8716b1f5659c5b5c95231a18f13caae0 Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Sat, 19 Jul 2025 03:13:54 +0530 Subject: [PATCH] Sketcher: Improve constraint transfer in `SketchObject::trim()` Provide new geos to `deriveConstraintsForPieces` manually, since they are not (and likely cannot be at time of calling) added to the sketch. This will make sure that the method has sufficient information to properly transfer/create new constraints. --- src/Mod/Sketcher/App/SketchObject.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index c88fde3c20..92c7a9b703 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -3276,6 +3276,7 @@ void createNewConstraintsForTrim(const SketchObject* obj, const std::array& cuttingGeoIds, const std::array& cutPoints, const std::vector& newIds, + const std::vector newGeos, std::vector& idsOfOldConstraints, std::vector& newConstraints, std::set>& geoIdsToBeDeleted) @@ -3320,7 +3321,7 @@ void createNewConstraintsForTrim(const SketchObject* obj, continue; } // constraint has not yet been changed - obj->deriveConstraintsForPieces(GeoId, newIds, con, newConstraints); + obj->deriveConstraintsForPieces(GeoId, newIds, newGeos, con, newConstraints); } // Add point-on-object/coincidence constraints with the newly exposed points. @@ -3403,6 +3404,7 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) //****************************************// std::vector newIds; std::vector newGeos; + std::vector newGeosAsConsts; switch (paramsOfNewGeos.size()) { case 0: { @@ -3424,6 +3426,9 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) } createArcsFromGeoWithLimits(geoAsCurve, paramsOfNewGeos, newGeos); + for (const auto* geo : newGeos) { + newGeosAsConsts.push_back(geo); + } //******************* Step C => Creation of new constraints //****************************************// @@ -3461,6 +3466,7 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) cuttingGeoIds, cutPoints, newIds, + newGeosAsConsts, idsOfOldConstraints, newConstraints, geoIdsToBeDeleted);