Match Fix geometric constraint behavior

1) FXCONSTRAINT (and the new GCFIX name) prompts "Select point or [Object]
   <Object>:" — a pick fixes that constraint point; Enter or O asks for one
   line, polyline segment, circle, arc, ellipse or spline; misses and
   unsupported objects report the reference messages and re-prompt.
2) Point, block, text, MText, attribute and table insertion points are
   addressable constraint points.
3) Re-applying Fixed to the same point or object reports that the constraint
   already exists instead of adding a duplicate.
4) A persistent Fixed holds its pre-edit geometry through MOVE, ROTATE,
   SCALE, STRETCH, grip and Properties edits: fixed points stay, free points
   of a partly fixed entity follow the edit, and size retention skips fixed
   entities.
5) Object mode on a polyline fixes the picked segment (natively persisted)
   instead of the whole polyline; arc segments pin endpoints, center and
   radius.
6) Ribbon label "Fix" with a padlock icon.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
ramox81andClaude Fable 5.1 committed 2026-09-18 15:38:33 +03:00
1 parent 2b38f798c0
commit f998b59193
9 files changed
+483 -206

No files matched your search

+6
View File
@@ -1570,6 +1570,11 @@ pub enum CmdResult {
kind: crate::scene::parametric_constraints::ConstraintKind,
label: &'static str,
},
/// Add a persistent `Fixed` constraint (`crate::modules::parametric::fixed`)
/// at one picked constraint point (`whole_curve == false`, resolved by the
/// host like `AddPointOnEntityConstraint`'s point) or on the whole curve /
/// polyline segment under the pick (`whole_curve == true`).
AddFixedConstraint(CoincidentPick),
/// Add a persistent `EqualDistance` constraint
/// (`crate::modules::parametric::equal_distance`): the distance
/// between `points[0]`/`points[1]` equals the distance between
@@ -2806,6 +2811,7 @@ mod constraint_registry_tests {
"NRCONSTRAINT",
"LCONSTRAINT",
"FXCONSTRAINT",
"GCFIX",
"SYCONSTRAINT",
"DCONSTRAINT",
"ACONSTRAINT",