From 977135fbbde6c6fa0516fe3580c51875f4ed458c Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Fri, 16 Oct 2026 00:42:03 +0300 Subject: [PATCH] feat(grid): the coloured grid axis lines can be turned off (#1815) Drafting Settings > Snap and Grid gains "Display grid axis lines", kept with the other grid settings; the grid itself stays as it is. Co-Authored-By: Claude Opus 5.5 --- locales/ar-SA/opencadstudio.ftl | 1 + locales/bg-BG/opencadstudio.ftl | 1 + locales/cs-CZ/opencadstudio.ftl | 1 + locales/de-DE/opencadstudio.ftl | 1 + locales/el-GR/opencadstudio.ftl | 1 + locales/en-US/opencadstudio.ftl | 1 + locales/es-ES/opencadstudio.ftl | 1 + locales/fi-FI/opencadstudio.ftl | 1 + locales/fr-FR/opencadstudio.ftl | 1 + locales/hi-IN/opencadstudio.ftl | 1 + locales/hu-HU/opencadstudio.ftl | 1 + locales/it-IT/opencadstudio.ftl | 1 + locales/ja-JP/opencadstudio.ftl | 1 + locales/ko-KR/opencadstudio.ftl | 1 + locales/lo-LA/opencadstudio.ftl | 1 + locales/nl-NL/opencadstudio.ftl | 1 + locales/pl-PL/opencadstudio.ftl | 1 + locales/pt-BR/opencadstudio.ftl | 1 + locales/ru-RU/opencadstudio.ftl | 1 + locales/tr-TR/opencadstudio.ftl | 1 + locales/zh-CN/opencadstudio.ftl | 1 + locales/zh-TW/opencadstudio.ftl | 1 + src/app/drafting_settings.rs | 4 ++++ src/app/mod.rs | 4 ++++ src/app/settings.rs | 4 ++++ src/app/update/file.rs | 2 ++ src/app/update/mod.rs | 6 ++++++ src/app/view/mod.rs | 1 + src/locale_catalog.rs | 1 + src/ui/overlay.rs | 5 ++++- src/ui/window/drafting_settings.rs | 10 ++++++++++ 31 files changed, 58 insertions(+), 1 deletion(-) diff --git a/locales/ar-SA/opencadstudio.ftl b/locales/ar-SA/opencadstudio.ftl index 18bcb7080..54486f961 100644 --- a/locales/ar-SA/opencadstudio.ftl +++ b/locales/ar-SA/opencadstudio.ftl @@ -2136,6 +2136,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/bg-BG/opencadstudio.ftl b/locales/bg-BG/opencadstudio.ftl index 96c785d67..80e2c2fb4 100644 --- a/locales/bg-BG/opencadstudio.ftl +++ b/locales/bg-BG/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/cs-CZ/opencadstudio.ftl b/locales/cs-CZ/opencadstudio.ftl index b5f425195..f33b4c5b7 100644 --- a/locales/cs-CZ/opencadstudio.ftl +++ b/locales/cs-CZ/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/de-DE/opencadstudio.ftl b/locales/de-DE/opencadstudio.ftl index 9db6c9e29..49488dc70 100644 --- a/locales/de-DE/opencadstudio.ftl +++ b/locales/de-DE/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/el-GR/opencadstudio.ftl b/locales/el-GR/opencadstudio.ftl index 29859e146..2271ec48d 100644 --- a/locales/el-GR/opencadstudio.ftl +++ b/locales/el-GR/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/en-US/opencadstudio.ftl b/locales/en-US/opencadstudio.ftl index a4b6f0e25..fc6f231cd 100644 --- a/locales/en-US/opencadstudio.ftl +++ b/locales/en-US/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/es-ES/opencadstudio.ftl b/locales/es-ES/opencadstudio.ftl index b957a7111..70d2c59a0 100644 --- a/locales/es-ES/opencadstudio.ftl +++ b/locales/es-ES/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/fi-FI/opencadstudio.ftl b/locales/fi-FI/opencadstudio.ftl index 27dfa3790..e4a72c32f 100644 --- a/locales/fi-FI/opencadstudio.ftl +++ b/locales/fi-FI/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/fr-FR/opencadstudio.ftl b/locales/fr-FR/opencadstudio.ftl index 4adf49856..02d85d828 100644 --- a/locales/fr-FR/opencadstudio.ftl +++ b/locales/fr-FR/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/hi-IN/opencadstudio.ftl b/locales/hi-IN/opencadstudio.ftl index 213a2b16e..58492873c 100644 --- a/locales/hi-IN/opencadstudio.ftl +++ b/locales/hi-IN/opencadstudio.ftl @@ -2112,6 +2112,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/hu-HU/opencadstudio.ftl b/locales/hu-HU/opencadstudio.ftl index 49e7529bc..0a3492b63 100644 --- a/locales/hu-HU/opencadstudio.ftl +++ b/locales/hu-HU/opencadstudio.ftl @@ -2130,6 +2130,7 @@ common = .display-selection-cycling-list-box = Kijelölésváltó lista megjelenítése .display-coordinate-input-near-crosshairs = Koordinátabevitel megjelenítése a szálkeresztnél .display-grid-beyond-limits = Rács megjelenítése a rajzhatárokon túl + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Kiválasztható objektumok listája kattintáskor .distance-and-angle-tolerances-must-be-non-negative-numbers = A távolság- és szögtűrések nemnegatív számok legyenek. .distance1-distance2 = 1. távolság = __ocs_fmt_0__, 2. távolság = __ocs_fmt_1__ diff --git a/locales/it-IT/opencadstudio.ftl b/locales/it-IT/opencadstudio.ftl index 1ccda283b..228cd874d 100644 --- a/locales/it-IT/opencadstudio.ftl +++ b/locales/it-IT/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Mostra box elenco per la selezione ciclica .display-coordinate-input-near-crosshairs = Mostra le coordinate vicino al mirino .display-grid-beyond-limits = Mostra griglia oltre ai limiti + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distanze e tolleranze degli angoli non possono essere numeri negativi. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/ja-JP/opencadstudio.ftl b/locales/ja-JP/opencadstudio.ftl index cc6e8411e..be823af57 100644 --- a/locales/ja-JP/opencadstudio.ftl +++ b/locales/ja-JP/opencadstudio.ftl @@ -2114,6 +2114,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/ko-KR/opencadstudio.ftl b/locales/ko-KR/opencadstudio.ftl index 6653fb1a0..ec8f98f83 100644 --- a/locales/ko-KR/opencadstudio.ftl +++ b/locales/ko-KR/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/lo-LA/opencadstudio.ftl b/locales/lo-LA/opencadstudio.ftl index 967b3e49c..786bbc3e1 100644 --- a/locales/lo-LA/opencadstudio.ftl +++ b/locales/lo-LA/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = ສະແດງກ່ອງລາຍການເລືອກແບບວຽນຮອບ .display-coordinate-input-near-crosshairs = ສະແດງຊ່ອງປ້ອນພິກັດໃກ້ເສັ້ນກາກະບາດ .display-grid-beyond-limits = ສະແດງເສັ້ນຕາຕະລາງເກີນຂອບເຂດ (Limits) + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = ສະແດງກ່ອງລາຍການຕົວເລືອກທີ່ອາດຈະເລືອກເມື່ອກົດຄລິກ .distance-and-angle-tolerances-must-be-non-negative-numbers = ຄ່າຄວາມຄາດເຄື່ອນຂອງໄລຍະຫ່າງ ແລະ ມຸມ ຕ້ອງບໍ່ເປັນຄ່າລົບ. .distance1-distance2 = ໄລຍະຫ່າງ1 = __ocs_fmt_0__, ໄລຍະຫ່າງ2 = __ocs_fmt_1__ diff --git a/locales/nl-NL/opencadstudio.ftl b/locales/nl-NL/opencadstudio.ftl index bc78b65f6..308cba371 100644 --- a/locales/nl-NL/opencadstudio.ftl +++ b/locales/nl-NL/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/pl-PL/opencadstudio.ftl b/locales/pl-PL/opencadstudio.ftl index 603cc6c1f..d0bc3dc97 100644 --- a/locales/pl-PL/opencadstudio.ftl +++ b/locales/pl-PL/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/pt-BR/opencadstudio.ftl b/locales/pt-BR/opencadstudio.ftl index 5d75c5d20..6ca88dd6a 100644 --- a/locales/pt-BR/opencadstudio.ftl +++ b/locales/pt-BR/opencadstudio.ftl @@ -2124,6 +2124,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/ru-RU/opencadstudio.ftl b/locales/ru-RU/opencadstudio.ftl index 8b54a087b..10a5f642d 100644 --- a/locales/ru-RU/opencadstudio.ftl +++ b/locales/ru-RU/opencadstudio.ftl @@ -2127,6 +2127,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/tr-TR/opencadstudio.ftl b/locales/tr-TR/opencadstudio.ftl index a607626cd..189759229 100644 --- a/locales/tr-TR/opencadstudio.ftl +++ b/locales/tr-TR/opencadstudio.ftl @@ -2108,6 +2108,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/zh-CN/opencadstudio.ftl b/locales/zh-CN/opencadstudio.ftl index 5e0d37e41..9751345d2 100644 --- a/locales/zh-CN/opencadstudio.ftl +++ b/locales/zh-CN/opencadstudio.ftl @@ -2111,6 +2111,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/locales/zh-TW/opencadstudio.ftl b/locales/zh-TW/opencadstudio.ftl index 6fbb91742..8febd85e8 100644 --- a/locales/zh-TW/opencadstudio.ftl +++ b/locales/zh-TW/opencadstudio.ftl @@ -2123,6 +2123,7 @@ common = .display-selection-cycling-list-box = Display Selection Cycling List Box .display-coordinate-input-near-crosshairs = Display coordinate input near crosshairs .display-grid-beyond-limits = Display grid beyond Limits + .display-grid-axis-lines = Display grid axis lines .display-selection-candidate-list-box-on-click = Display selection candidate list box on click .distance-and-angle-tolerances-must-be-non-negative-numbers = Distance and angle tolerances must be non-negative numbers. .distance1-distance2 = Distance1 = __ocs_fmt_0__, Distance2 = __ocs_fmt_1__ diff --git a/src/app/drafting_settings.rs b/src/app/drafting_settings.rs index 5fdd508d4..ac0e6a3b0 100644 --- a/src/app/drafting_settings.rs +++ b/src/app/drafting_settings.rs @@ -25,6 +25,7 @@ impl DraftingSettingsState { grid_major_input: format!("{}", app.grid_major_every), grid_adaptive: app.grid_adaptive, grid_beyond_limits: app.grid_beyond_limits, + grid_axes: app.grid_axes, isometric: app.isometric_drafting, iso_plane: app.iso_plane, snap_angle_deg: app.snap_angle_deg, @@ -99,6 +100,7 @@ impl OpenCADStudio { self.grid_major_every = gm; self.grid_adaptive = state.grid_adaptive; self.grid_beyond_limits = state.grid_beyond_limits; + self.grid_axes = state.grid_axes; self.snapper.grid_snap_on = state.snap_on; self.snapper.snap_spacing_x = sx; self.snapper.snap_spacing_y = sy; @@ -151,6 +153,7 @@ mod tests { grid_major_input: "5".to_string(), grid_adaptive: true, grid_beyond_limits: true, + grid_axes: true, isometric: false, iso_plane: crate::app::settings::IsoPlane::Left, snap_angle_deg: 0.0, @@ -193,6 +196,7 @@ mod tests { grid_major_input: "5".to_string(), grid_adaptive: true, grid_beyond_limits: true, + grid_axes: true, isometric: false, iso_plane: crate::app::settings::IsoPlane::Left, snap_angle_deg: 0.0, diff --git a/src/app/mod.rs b/src/app/mod.rs index bf5592fc8..163dabb90 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -756,6 +756,8 @@ pub(super) struct OpenCADStudio { pub grid_adaptive: bool, /// Display the grid beyond LIMITS (infinite) instead of clipping to them. pub grid_beyond_limits: bool, + /// Draw the coloured X/Y axis lines through the grid origin. + pub grid_axes: bool, /// Dynamic input overlay (F12): show coordinate tooltip near cursor. dyn_input: bool, /// Dynamic input mode (DYNMODE): 0=off, 1=pointer, 2=dimensional, 3=both. @@ -3567,6 +3569,7 @@ pub enum Message { DraftingSettingsGridMajorChanged(String), DraftingSettingsToggleAdaptiveGrid, DraftingSettingsToggleBeyondLimits, + DraftingSettingsToggleGridAxes, DraftingSettingsToggleEqualSnap, DraftingSettingsToggleIsometric, DraftingSettingsSetIsoPlane(crate::app::settings::IsoPlane), @@ -4754,6 +4757,7 @@ impl OpenCADStudio { grid_major_every: 5, grid_adaptive: true, grid_beyond_limits: true, + grid_axes: true, dyn_input: true, dyn_mode: 3, options_tab: crate::ui::window::options::OptionsTab::General, diff --git a/src/app/settings.rs b/src/app/settings.rs index 0348183e5..42f4d2f86 100644 --- a/src/app/settings.rs +++ b/src/app/settings.rs @@ -704,6 +704,9 @@ pub struct UserSettings { /// Display grid beyond LIMITS (default on, matches dialog). #[serde(default = "default_true")] pub grid_beyond_limits: bool, + /// Draw the coloured X/Y axis lines through the grid origin. + #[serde(default = "default_true")] + pub grid_axes: bool, /// Most-recently-inserted block names, most recent first, capped to 20. /// Used to rank INSERT suggestions without touching the drawing file. #[serde(default)] @@ -1052,6 +1055,7 @@ impl Default for UserSettings { grid_major_every: 5, grid_adaptive: true, grid_beyond_limits: true, + grid_axes: true, block_mru: Vec::new(), block_freq: std::collections::HashMap::new(), block_recent: Vec::new(), diff --git a/src/app/update/file.rs b/src/app/update/file.rs index e38e2315b..5a8ba9737 100644 --- a/src/app/update/file.rs +++ b/src/app/update/file.rs @@ -925,6 +925,7 @@ impl OpenCADStudio { grid_major_every: self.grid_major_every, grid_adaptive: self.grid_adaptive, grid_beyond_limits: self.grid_beyond_limits, + grid_axes: self.grid_axes, block_mru: self.block_mru.clone(), block_freq: self.block_freq.clone(), block_recent: self.block_palette.recent.clone(), @@ -1110,6 +1111,7 @@ impl OpenCADStudio { self.grid_major_every = crate::app::settings::sanitize_grid_major(s.grid_major_every); self.grid_adaptive = s.grid_adaptive; self.grid_beyond_limits = s.grid_beyond_limits; + self.grid_axes = s.grid_axes; // Block usage: clone but cap to sane sizes (MRU 20, freq map 200) self.block_mru = s.block_mru.iter().take(20).cloned().collect(); self.block_freq = s diff --git a/src/app/update/mod.rs b/src/app/update/mod.rs index 6a2b542eb..ed713554c 100644 --- a/src/app/update/mod.rs +++ b/src/app/update/mod.rs @@ -6401,6 +6401,12 @@ impl OpenCADStudio { } Task::none() } + Message::DraftingSettingsToggleGridAxes => { + if let Some(state) = &mut self.drafting_settings_state { + state.grid_axes = !state.grid_axes; + } + Task::none() + } Message::DraftingSettingsToggleEqualSnap => { if let Some(state) = &mut self.drafting_settings_state { state.snap_equal = !state.snap_equal; diff --git a/src/app/view/mod.rs b/src/app/view/mod.rs index ef483273f..b4ddd00a2 100644 --- a/src/app/view/mod.rs +++ b/src/app/view/mod.rs @@ -627,6 +627,7 @@ bg={bg_ms:.1}ms n={view_count}" let grid_style = crate::ui::overlay::GridStyle { opacity: self.model_space.grid_opacity, bg_luminance: bg_lum, + axes: self.grid_axes, }; crate::ui::overlay::grid_overlay(grid, grid_style) }; diff --git a/src/locale_catalog.rs b/src/locale_catalog.rs index 0e55bfe4e..e367c7b5c 100644 --- a/src/locale_catalog.rs +++ b/src/locale_catalog.rs @@ -5680,6 +5680,7 @@ pub(super) fn message_attribute(source: &str) -> Option<(&'static str, &'static "Display Selection Cycling List Box" => Some(("common", "display-selection-cycling-list-box")), "Display coordinate input near crosshairs" => Some(("common", "display-coordinate-input-near-crosshairs")), "Display grid beyond Limits" => Some(("common", "display-grid-beyond-limits")), + "Display grid axis lines" => Some(("common", "display-grid-axis-lines")), "Display selection candidate list box on click" => Some(("common", "display-selection-candidate-list-box-on-click")), "Distance and angle tolerances must be non-negative numbers." => Some(("common", "distance-and-angle-tolerances-must-be-non-negative-numbers")), "Distance1 = {:.4}, Distance2 = {:.4}" => Some(("common", "distance1-distance2")), diff --git a/src/ui/overlay.rs b/src/ui/overlay.rs index 41a1c1cbf..3a5103c17 100644 --- a/src/ui/overlay.rs +++ b/src/ui/overlay.rs @@ -316,6 +316,8 @@ pub struct CrosshairOptions { pub struct GridStyle { pub opacity: u8, pub bg_luminance: f32, + /// Draw the coloured X/Y axis lines through the grid origin. + pub axes: bool, } impl Default for GridStyle { @@ -323,6 +325,7 @@ impl Default for GridStyle { Self { opacity: 18, bg_luminance: 0.15, + axes: true, } } } @@ -2722,7 +2725,7 @@ fn draw_grid( }); frame.stroke(&path, major_stroke); } - if geometry.axis_extent > 0.0 { + if style.axes && geometry.axis_extent > 0.0 { let (gx, gy, gz) = grid_axes; let extent = (geometry.axis_extent + step_x.max(step_y)) * 1.5; draw_axes( diff --git a/src/ui/window/drafting_settings.rs b/src/ui/window/drafting_settings.rs index e1a768e1b..860625f7a 100644 --- a/src/ui/window/drafting_settings.rs +++ b/src/ui/window/drafting_settings.rs @@ -35,6 +35,7 @@ pub struct DraftingSettingsState { pub grid_major_input: String, pub grid_adaptive: bool, pub grid_beyond_limits: bool, + pub grid_axes: bool, pub isometric: bool, pub iso_plane: IsoPlane, pub snap_angle_deg: f32, @@ -72,6 +73,7 @@ impl DraftingSettingsState { || self.grid_major_input != saved.grid_major_input || self.grid_adaptive != saved.grid_adaptive || self.grid_beyond_limits != saved.grid_beyond_limits + || self.grid_axes != saved.grid_axes || self.isometric != saved.isometric || self.iso_plane != saved.iso_plane || (self.snap_angle_deg - saved.snap_angle_deg).abs() > 0.001 @@ -387,6 +389,14 @@ pub fn view_window<'a>( ] .spacing(6) .align_y(iced::Center), + row![ + checkbox(state.grid_axes) + .on_toggle(|_| Message::DraftingSettingsToggleGridAxes) + .size(14), + text(crate::t!("Display grid axis lines")).size(11), + ] + .spacing(6) + .align_y(iced::Center), ] .spacing(6), );