diff --git a/src/app/command_driver.rs b/src/app/command_driver.rs index 453754747..d93c47950 100644 --- a/src/app/command_driver.rs +++ b/src/app/command_driver.rs @@ -3357,8 +3357,13 @@ impl OpenCADStudio { || equal_size_follower(&self.tabs[i].scene.document, first, other) .is_none() { - self.command_line - .push_error(EqualConstraintCommand::INVALID_OBJECT); + // The reference names the kind the first 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; } let exists = self.tabs[i] @@ -3378,7 +3383,10 @@ impl OpenCADStudio { } 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) = self.tabs[i].active_cmd.as_ref().map(|command| command.prompt()) { @@ -3601,7 +3609,7 @@ impl OpenCADStudio { ("No valid constraint point found.", Some(first)) } 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), ) }; diff --git a/src/modules/parametric/equal.rs b/src/modules/parametric/equal.rs index fde973082..023487e55 100644 --- a/src/modules/parametric/equal.rs +++ b/src/modules/parametric/equal.rs @@ -31,8 +31,12 @@ impl EqualConstraintCommand { pub const NO_OBJECT: &'static str = "No object found."; pub const INVALID_OBJECT: &'static str = "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 = - "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 { Self { diff --git a/src/modules/parametric/horizontal.rs b/src/modules/parametric/horizontal.rs index ca2aea80f..26de8718f 100644 --- a/src/modules/parametric/horizontal.rs +++ b/src/modules/parametric/horizontal.rs @@ -200,7 +200,7 @@ impl HorizontalConstraintCommand { if first.handle == second.handle && (first.point - second.point).length() <= 1.0e-9 { self.step = Step::SecondPoint(first); 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(), ); }