diff --git a/docs/measurement-tools.md b/docs/measurement-tools.md index 4bce7e58a..95b268b45 100644 --- a/docs/measurement-tools.md +++ b/docs/measurement-tools.md @@ -11,7 +11,11 @@ OpenCADStudio provides interactive tools for measuring distances, radii, angles, | Angle | `MEASUREANGLE` | Measure an angle using three points or two LINE entities. | | Area | `AREA` | Measure areas and perimeters, including accumulated areas. | -The **Measure** dropdown lists **Distance**, **Radius**, **Angle**, and **Area**, in that order. Each tool can be started from the menu or by entering its command. `MEASUREGEOM` and its `MEA` alias remain available with their four measurement modes. +The **Measure** dropdown lists **Distance**, **Radius**, **Angle**, and **Area**, in that order. Each tool can be started from the menu or by entering its command. `MEASUREGEOM` and its `MEA` alias offer the same four modes plus **Quick**. + +### Quick — `MEASUREGEOM` → `Q` + +As the cursor moves, the nearest geometry along the working plane's X and Y axes is measured live: cyan measurement lines and a Horizontal/Vertical readout appear by the cursor. A click prints the current readout to the command line and measuring continues; Enter ends the command. Angles where the lines meet slanted geometry are not shown yet. ## Using the measurement tools diff --git a/src/app/commands/attman.rs b/src/app/commands/attman.rs index fc3f0c553..af2107be2 100644 --- a/src/app/commands/attman.rs +++ b/src/app/commands/attman.rs @@ -16,7 +16,11 @@ use crate::ui::window::attman_dialog::{ impl OpenCADStudio { /// Open the dialog on the block of the first preselected attributed /// reference, else on the first attributed block. - pub(in crate::app) fn open_attman(&mut self, i: usize, preselected: &[Handle]) -> Task { + pub(in crate::app) fn open_attman( + &mut self, + i: usize, + preselected: &[Handle], + ) -> Task { let document = &self.tabs[i].scene.document; let table = BlockTable::of(document); let model = document diff --git a/src/mcp.rs b/src/mcp.rs index bd718dccc..de6e44c07 100644 --- a/src/mcp.rs +++ b/src/mcp.rs @@ -32,7 +32,7 @@ const MODERN_PROTOCOL_VERSION: &str = "2026-07-28"; /// /// `block_delete` gained its optional `force` parameter. #[cfg(test)] -const TOOL_SCHEMA_DIGEST: &str = "9a7aeb5e1fd76b94fabece3a7ba213f622f449076fac9c25c7e69592989094fd"; +const TOOL_SCHEMA_DIGEST: &str = "b303b4b551a5a00b6b78a8363c9d1c7f199a17367d08bdfe074d453fdf646ac6"; const MAX_REQUEST: usize = 1_048_576; const MAX_RESPONSE: u64 = 16 * 1024 * 1024; const CACHE_TTL_MS: u64 = 3_600_000; diff --git a/src/modules/insert/attman.rs b/src/modules/insert/attman.rs index 1bfa5c452..d367ae759 100644 --- a/src/modules/insert/attman.rs +++ b/src/modules/insert/attman.rs @@ -30,7 +30,11 @@ impl crate::command::CadCommand for AttmanPickCommand { true } - fn on_entity_pick(&mut self, handle: codec::Handle, _pt: glam::DVec3) -> crate::command::CmdResult { + fn on_entity_pick( + &mut self, + handle: codec::Handle, + _pt: glam::DVec3, + ) -> crate::command::CmdResult { if handle.is_null() { return crate::command::CmdResult::NeedPoint; } diff --git a/src/ui/window/attman_dialog.rs b/src/ui/window/attman_dialog.rs index b9fb15e40..b2d5d01dc 100644 --- a/src/ui/window/attman_dialog.rs +++ b/src/ui/window/attman_dialog.rs @@ -981,7 +981,7 @@ pub fn view<'a>( 15.0 ), text(error.clone()).size(11).width(Fill), - button(text("×").size(12)) + button(crate::ui::icons::semantic(crate::ui::icons::CLOSE, 12.0)) .on_press(msg(AttManMsg::DismissError)) .style(button_style(false)) .padding([1, 6]),