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 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Opus 5.5 committed 2026-10-16 00:42:03 +03:00
1 parent 091331f3bd
commit 977135fbbd
31 files changed
+58 -1

No files matched your search

+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+1
View File
@@ -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__
+4
View File
@@ -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,
+4
View File
@@ -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,
+4
View File
@@ -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(),
+2
View File
@@ -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
+6
View File
@@ -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;
+1
View File
@@ -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)
};
+1
View File
@@ -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")),
+4 -1
View File
@@ -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(
+10
View File
@@ -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),
);