Match Vertical geometric constraint behavior

1) VCONSTRAINT (and the new GCVERTICAL name) uses the axis constraint flow:
   "Select an object or [2Points] <2Points>:", 2Points mode with the
   reference's re-prompts and messages, and the same object types as
   Horizontal — line, polyline segment, text, MText, ellipse axis.
2) Object mode turns the object about its first vertex; a two-point relation
   across two objects slides the second object rigidly onto the axis.
3) Re-applying an axis constraint reports that the constraint already
   exists; Vertical follows the UCS Y direction.
4) The constraint bar draws Vertical as the reference's axis mark, with the
   point marker for a two-point relation.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
ramox81andClaude Fable 5.1 committed 2026-09-18 18:19:49 +03:00
1 parent 2b38f798c0
commit 26e458d6f7
6 files changed
+271 -75

No files matched your search

+6 -3
View File
@@ -1504,10 +1504,12 @@ pub enum CmdResult {
/// Undo-history label, e.g. `"Horizontal constraint"`.
label: &'static str,
},
/// Adds a Horizontal relation against the UCS X direction captured when
/// the command starts. The direction is persisted with the constraint so
/// later edits and save/reopen do not silently fall back to world X.
/// Adds a Horizontal or Vertical relation (`kind`) against the UCS X or
/// Y direction captured when the command starts. The direction is
/// persisted with the constraint so later edits and save/reopen do not
/// silently fall back to the world axis.
AddHorizontalConstraint {
kind: crate::scene::parametric_constraints::ConstraintKind,
selection: HorizontalConstraintSelection,
direction: acadrust::types::Vector3,
label: &'static str,
@@ -2797,6 +2799,7 @@ mod constraint_registry_tests {
"OCCONSTRAINT",
"GCHORIZONTAL",
"VCONSTRAINT",
"GCVERTICAL",
"PCONSTRAINT",
"QCONSTRAINT",
"GCPERPENDICULAR",