Equal: ask for the second object again after a refused pick, name the kind it needs

A second object of the wrong kind (a circle after a line, a line after a
circle) or a pair that already carries Equal now reports and asks for the
second object again instead of ending the command. The mismatch message
names what the first object asks for — `Select a line segment, polyline
segment, text, MText, major or minor axis of ellipse or elliptical arc.`
after a length object, `Select a circle or arc.` after a radius object —
and the same-pick message carries the reference's double space.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
ramox81andClaude Fable 5.1 committed 2026-09-21 09:46:13 +03:00
1 parent ad6f902ed7
commit 842ae461fc
3 files changed
+18 -6

No files matched your search

+12 -4
View File
@@ -3357,8 +3357,13 @@ impl OpenCADStudio {
|| equal_size_follower(&self.tabs[i].scene.document, first, other) || equal_size_follower(&self.tabs[i].scene.document, first, other)
.is_none() .is_none()
{ {
self.command_line // The reference names the kind the first object
.push_error(EqualConstraintCommand::INVALID_OBJECT); // asks for.
let message = match equal_size(&self.tabs[i].scene.document, first) {
Some(EqualSize::Radius(_)) => EqualConstraintCommand::INVALID_RADIUS_OBJECT,
_ => EqualConstraintCommand::INVALID_LENGTH_OBJECT,
};
self.command_line.push_error(message);
continue; continue;
} }
let exists = self.tabs[i] let exists = self.tabs[i]
@@ -3378,7 +3383,10 @@ impl OpenCADStudio {
} }
followers.push(other); followers.push(other);
} }
if multiple && !finishing { // A refused second object is asked for again, as in the
// reference; Multiple keeps asking anyway.
let keep = (multiple && !finishing) || (!multiple && followers.is_empty());
if keep {
if let Some(prompt) = if let Some(prompt) =
self.tabs[i].active_cmd.as_ref().map(|command| command.prompt()) self.tabs[i].active_cmd.as_ref().map(|command| command.prompt())
{ {
@@ -3601,7 +3609,7 @@ impl OpenCADStudio {
("No valid constraint point found.", Some(first)) ("No valid constraint point found.", Some(first))
} else { } else {
( (
"The object or point is already selected. Select a different object or constraint point.", "The object or point is already selected. Select a different object or constraint point.",
Some(first), Some(first),
) )
}; };
+5 -1
View File
@@ -31,8 +31,12 @@ impl EqualConstraintCommand {
pub const NO_OBJECT: &'static str = "No object found."; pub const NO_OBJECT: &'static str = "No object found.";
pub const INVALID_OBJECT: &'static str = pub const INVALID_OBJECT: &'static str =
"Invalid selection for Equal. Select a line, polyline segment, circle or arc."; "Invalid selection for Equal. Select a line, polyline segment, circle or arc.";
pub const INVALID_LENGTH_OBJECT: &'static str =
"Invalid selection for Equal. Select a line segment, polyline segment, text, MText, major or minor axis of ellipse or elliptical arc.";
pub const INVALID_RADIUS_OBJECT: &'static str =
"Invalid selection for Equal. Select a circle or arc.";
pub const SAME_OBJECT: &'static str = pub const SAME_OBJECT: &'static str =
"The object or point is already selected. Select a different object or constraint point."; "The object or point is already selected. Select a different object or constraint point.";
pub fn new() -> Self { pub fn new() -> Self {
Self { Self {
+1 -1
View File
@@ -200,7 +200,7 @@ impl HorizontalConstraintCommand {
if first.handle == second.handle && (first.point - second.point).length() <= 1.0e-9 { if first.handle == second.handle && (first.point - second.point).length() <= 1.0e-9 {
self.step = Step::SecondPoint(first); self.step = Step::SecondPoint(first);
return CmdResult::ReportError( return CmdResult::ReportError(
"The object or point is already selected. Select a different object or constraint point." "The object or point is already selected. Select a different object or constraint point."
.to_string(), .to_string(),
); );
} }