fix: align dynamic angle input with drawing units

This commit is contained in:
Hakan Seven committed 2026-09-17 09:50:41 +03:00
1 parent 58405025ee
commit 65c0fe5494
10 files changed
+100 -35

No files matched your search

+25 -4
View File
@@ -61,8 +61,18 @@ impl CadCommand for LengthenCommand {
LenState::Value(ValueMode::Delta) => format!("LENGTHEN Enter delta length <{}>:", LENGTHEN_DEFAULTS.lock().unwrap().delta),
LenState::Value(ValueMode::Total) => format!("LENGTHEN Enter total length <{}>:", LENGTHEN_DEFAULTS.lock().unwrap().total),
LenState::Value(ValueMode::Percent) => format!("LENGTHEN Enter percentage length <{}>:", LENGTHEN_DEFAULTS.lock().unwrap().percent),
LenState::Value(ValueMode::DeltaAngle) => format!("LENGTHEN Enter delta angle <{}>:", LENGTHEN_DEFAULTS.lock().unwrap().delta_angle),
LenState::Value(ValueMode::TotalAngle) => format!("LENGTHEN Enter total angle <{}>:", LENGTHEN_DEFAULTS.lock().unwrap().total_angle),
LenState::Value(ValueMode::DeltaAngle) => format!(
"LENGTHEN Enter delta angle <{}>:",
crate::entities::common::format_angle(
LENGTHEN_DEFAULTS.lock().unwrap().delta_angle.to_radians(),
)
),
LenState::Value(ValueMode::TotalAngle) => format!(
"LENGTHEN Enter total angle <{}>:",
crate::entities::common::format_angle(
LENGTHEN_DEFAULTS.lock().unwrap().total_angle.to_radians(),
)
),
LenState::DynamicPoint { .. } => "LENGTHEN Specify new end point:".into(),
LenState::Apply(_) | LenState::DynamicPick | LenState::Value(ValueMode::Dynamic) => t!("LENGTHEN Select an object to change or [Undo]:").into_owned(),
}
@@ -146,7 +156,13 @@ impl CadCommand for LengthenCommand {
};
return Some(CmdResult::NeedPoint);
}
let Some(value) = upper.replace(',', ".").parse::<f64>().ok().filter(|v| v.is_finite()) else {
let angle_mode = matches!(mode, ValueMode::DeltaAngle | ValueMode::TotalAngle);
let parsed = if angle_mode {
crate::entities::common::parse_typed_angle(&upper).map(f64::to_degrees)
} else {
upper.replace(',', ".").parse::<f64>().ok()
};
let Some(value) = parsed.filter(|v| v.is_finite()) else {
return Some(CmdResult::NeedPoint);
};
if !matches!(mode, ValueMode::Delta | ValueMode::DeltaAngle) && value <= 0.0 { return Some(CmdResult::NeedPoint); }
@@ -201,7 +217,12 @@ impl CadCommand for LengthenCommand {
match mode { ValueMode::Delta => defaults.delta, ValueMode::Total => defaults.total, ValueMode::Percent => defaults.percent,
ValueMode::DeltaAngle => defaults.delta_angle, ValueMode::TotalAngle => defaults.total_angle, ValueMode::Dynamic => 0.0 }
};
self.on_text_input(&value.to_string()).unwrap_or(CmdResult::NeedPoint)
let text = if matches!(mode, ValueMode::DeltaAngle | ValueMode::TotalAngle) {
format!("{value}d")
} else {
value.to_string()
};
self.on_text_input(&text).unwrap_or(CmdResult::NeedPoint)
}
_ => CmdResult::Cancel,
}
+6 -6
View File
@@ -237,22 +237,22 @@ impl CadCommand for RotateCommand {
}
// The value already carries the correct sign when it comes
// from dynamic input.
let deg: f64 = t.replace(',', ".").parse().ok()?;
Some(self.commit(center, deg.to_radians()))
let angle = crate::entities::common::parse_typed_angle(t)?;
Some(self.commit(center, angle))
}
Step::RefFirst { center } => {
let center = *center;
let ref_deg: f64 = t.replace(',', ".").parse().ok()?;
let ref_angle = crate::entities::common::parse_typed_angle(t)?;
self.step = Step::RefNew {
center,
ref_angle: ref_deg.to_radians(),
ref_angle,
};
Some(CmdResult::NeedPoint)
}
Step::RefNew { center, ref_angle } => {
let (center, ref_angle) = (*center, *ref_angle);
let new_deg: f64 = t.replace(',', ".").parse().ok()?;
Some(self.commit(center, new_deg.to_radians() - ref_angle))
let new_angle = crate::entities::common::parse_typed_angle(t)?;
Some(self.commit(center, new_angle - ref_angle))
}
Step::Center | Step::RefSecond { .. } => None,
}
+2 -2
View File
@@ -151,8 +151,8 @@ impl CadCommand for TorientCommand {
fn on_text_input(&mut self, text: &str) -> Option<CmdResult> {
if let Step::AngleOrFirstPoint = self.step {
let deg: f64 = text.trim().replace(',', ".").parse().ok()?;
Some(self.commit_angle(Some(deg.to_radians())))
let angle = crate::entities::common::parse_typed_angle(text)?;
Some(self.commit_angle(Some(angle)))
} else {
None
}