From fe90c2e9ca87b5d26eb62711d942496ef73a8df1 Mon Sep 17 00:00:00 2001 From: Ajinkya Dahale Date: Fri, 11 Nov 2022 13:28:10 +0530 Subject: [PATCH] [Sketcher] Do not filter out point-on-B-spline when trimming Fixes #7770. Until Point-on-B-spline is actually merged this will result in a malformed constraint. It will however still allow a trim of the B-spline to result in a coincident constraint. --- src/Mod/Sketcher/App/SketchObject.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index bcc7ec90fc..2201c87ec0 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -2518,15 +2518,6 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) addConstraint(std::move(newConstr)); }; - // Adds a Point on ObjectConstraint except if the object is a B-Spline - auto addConstraintIfNoPointOnBSpline = [this](ConstraintType constrType, int GeoId1, PointPos pos1, int GeoId2, PointPos pos2) - { - if (constrType == PointOnObject && getGeometry(GeoId2)->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()) - return; // There is no support for PointOnObject in BSpline - - addConstraint(constrType, GeoId1, pos1, GeoId2, pos2); - }; - // Removes all internal geometry of a BSplineCurve and updates the GeoId index after removal auto ifBSplineRemoveInternalAlignmentGeometry = [this](int &GeoId) { @@ -2802,12 +2793,12 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) // Segment comprising the start transformPreexistingConstraints (GeoId, GeoId1, point1, constrType1, secondPos1); - addConstraintIfNoPointOnBSpline (constrType1, GeoId, Sketcher::PointPos::end, GeoId1, secondPos1); + addConstraint (constrType1, GeoId, Sketcher::PointPos::end, GeoId1, secondPos1); // Segment comprising the end transformPreexistingConstraints (GeoId, GeoId2, point2, constrType2, secondPos2); - addConstraintIfNoPointOnBSpline (constrType2, newGeoId, Sketcher::PointPos::start, GeoId2, secondPos2); + addConstraint (constrType2, newGeoId, Sketcher::PointPos::start, GeoId2, secondPos2); // Both segments have a coincident center if(!isLineSegment && !isBSpline) { @@ -2859,12 +2850,12 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) if (op.Type == Operation::trim_start) { delConstraintOnPoint(GeoId, PointPos::start, false); // constrain the trimming point on the corresponding geometry - addConstraintIfNoPointOnBSpline (constrType, GeoId, PointPos::start, op.intersectingGeoId, secondPos); + addConstraint (constrType, GeoId, PointPos::start, op.intersectingGeoId, secondPos); } else if (op.Type == Operation::trim_end) { delConstraintOnPoint(GeoId, PointPos::end, false); // constrain the trimming point on the corresponding geometry - addConstraintIfNoPointOnBSpline (constrType, GeoId, PointPos::end, op.intersectingGeoId, secondPos); + addConstraint (constrType, GeoId, PointPos::end, op.intersectingGeoId, secondPos); } if (isNonPeriodicBSpline) @@ -2956,9 +2947,9 @@ int SketchObject::trim(int GeoId, const Base::Vector3d& point) THROWM(ValueError,"Invalid position Sketcher::PointPos::none when creating a Coincident constraint") // constrain the trimming points on the corresponding geometries - addConstraintIfNoPointOnBSpline (constrType1, GeoId, PointPos::end, GeoId1, secondPos1); + addConstraint (constrType1, GeoId, PointPos::end, GeoId1, secondPos1); - addConstraintIfNoPointOnBSpline (constrType2, GeoId, PointPos::start, GeoId2, secondPos2); + addConstraint (constrType2, GeoId, PointPos::start, GeoId2, secondPos2); if (isBSpline) exposeInternalGeometry(GeoId);