Draft : Added knots support for snapping (#26571)

* Draft : Added knots support for snapping

Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>

* Use Special snap for knots and rename snapToBSpline to snapToBSplineKnots

---------

Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>
Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
This commit is contained in:
Yash Suthar
2026-02-02 22:41:20 +05:30
committed by GitHub
parent 21a597a85e
commit 8f2a3a4d7d

View File

@@ -413,6 +413,8 @@ class Snapper:
elif et == "Ellipse":
# extra ellipse options
snaps.extend(self.snapToCenter(edge))
elif et == "BSplineCurve":
snaps.extend(self.snapToBSplineKnots(edge))
elif "Face" in comp:
# we are snapping to a face
if shape.ShapeType == "Face":
@@ -800,6 +802,17 @@ class Snapper:
snaps.append([mp, "midpoint", self.toWP(mp)])
return snaps
def snapToBSplineKnots(self, edge):
"""Return a list of knot snap locations for a BSpline."""
snaps = []
if self.isEnabled("Special"):
if hasattr(edge, "Curve") and isinstance(edge.Curve, Part.BSplineCurve):
knots = edge.Curve.getKnots()
for k in knots:
p = edge.Curve.value(k)
snaps.append([p, "special", self.toWP(p)])
return snaps
def snapToNear(self, shape, point):
"""Return a list with a near snap location for an edge."""
if self.isEnabled("Near") and point: