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.
This commit is contained in:
Ajinkya Dahale
2025-07-19 03:13:54 +05:30
parent 018ac7b9dd
commit 114d3dcd87

View File

@@ -3276,6 +3276,7 @@ void createNewConstraintsForTrim(const SketchObject* obj,
const std::array<int, 2>& cuttingGeoIds,
const std::array<Base::Vector3d, 2>& cutPoints,
const std::vector<int>& newIds,
const std::vector<const Part::Geometry*> newGeos,
std::vector<int>& idsOfOldConstraints,
std::vector<Constraint*>& newConstraints,
std::set<int, std::greater<>>& 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<int> newIds;
std::vector<Part::Geometry*> newGeos;
std::vector<const Part::Geometry*> 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);