From 6cccb81293a4f26ff39c0ebfc9b5a6aabe1ff858 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sun, 25 May 2025 21:28:11 +0200 Subject: [PATCH] Implemented solution for #2057 (nanometer scalebar) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The scale bar switches to nm below 0.1µm. Correspondingly it will switch to mm above 100µm. --- src/layview/layview/layGridNet.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/layview/layview/layGridNet.cc b/src/layview/layview/layGridNet.cc index b960579b1..92fc3b6ab 100644 --- a/src/layview/layview/layGridNet.cc +++ b/src/layview/layview/layGridNet.cc @@ -538,7 +538,22 @@ GridNet::render_bg (const lay::Viewport &vp, ViewObjectCanvas &canvas) db::Point (xoffset + int (floor (0.5 + 2 * dgrid)), vp.height () - yoffset + rh / 2), ruler_color); - painter.draw_text (tl::sprintf ("%g \265m", grid * 2).c_str (), + double grid_value = grid * 2; + std::string fmt = "%g \265m"; + if (grid_value < 0.1 * (1 + db::epsilon)) { + grid_value *= 1000.0; + fmt = "%g nm"; + } else if (grid_value < 100.0 * (1 + db::epsilon)) { + fmt = "%g \265m"; + } else if (grid_value < 100000.0 * (1 + db::epsilon)) { + grid_value *= 1e-3; + fmt = "%g mm"; + } else { + grid_value *= 1e-6; + fmt = "%g m"; + } + + painter.draw_text (tl::sprintf (fmt, grid_value).c_str (), db::Point (xoffset + int (floor (0.5 + trans.ctrans (2 * grid))), vp.height () - yoffset - rh / 2 - 2), ruler_color, -1, 1);