feat(view): implement LIMITS command

Closes #478
This commit is contained in:
Hakan Seven 2026-07-27 16:15:28 +03:00
commit 8018ab1523
15 changed files with 478 additions and 6 deletions

View file

@ -323,6 +323,9 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
if let Some((base, dir)) = self.otrack_active {
if let Some(dist) = crate::app::expr_eval::eval_number(text.trim()) {
let pt = base + dir * dist;
if !self.command_point_allowed(i, pt) {
return Task::none();
}
self.last_point = Some(pt);
self.dyn_user_reshaped = false;
self.sync_dyn_fields();
@ -365,6 +368,9 @@ pub(super) fn on_tab_close(&mut self, idx: usize) -> Task<Message> {
}
}
};
if !self.command_point_allowed(i, wcs_pt) {
return Task::none();
}
self.last_point = Some(wcs_pt);
self.dyn_user_reshaped = false;
self.sync_dyn_fields();

View file

@ -484,6 +484,9 @@ impl OpenCADStudio {
{
if let Some(dist) = crate::app::expr_eval::eval_number(text.trim()) {
let pt = base + dir * dist;
if !self.command_point_allowed(i, pt) {
return Some(Task::none());
}
self.last_point = Some(pt);
for f in self.tabs[i].dyn_fields.iter_mut() {
f.buffer = None;
@ -547,6 +550,9 @@ impl OpenCADStudio {
});
}
let pt = self.dyn_resolve_point()?;
if !self.command_point_allowed(i, pt) {
return Some(Task::none());
}
self.last_point = Some(pt);
self.dyn_user_reshaped = false;
self.sync_dyn_fields();

View file

@ -2383,6 +2383,8 @@ impl OpenCADStudio {
self.command_line.push_info("Select a tangent object.");
None
}
} else if !self.command_point_allowed(i, world_pt) {
None
} else {
// A scalar typed into the dynamic-input box but not
// yet confirmed with Enter is applied before the