From 2d202f1d44ed1a7afb6ab12b2cd38af1c39de4e5 Mon Sep 17 00:00:00 2001 From: leonarski_f Date: Tue, 9 Jun 2026 13:20:46 +0200 Subject: [PATCH] jfjoch_viewer: fixes to pixel refine window --- viewer/image_viewer/JFJochImage.cpp | 4 ++-- viewer/image_viewer/JFJochImage.h | 6 ++++++ viewer/image_viewer/JFJochSimpleImage.cpp | 3 +++ viewer/windows/JFJochPixelRefineWindow.cpp | 4 ++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/viewer/image_viewer/JFJochImage.cpp b/viewer/image_viewer/JFJochImage.cpp index 0e278524..7f151a92 100644 --- a/viewer/image_viewer/JFJochImage.cpp +++ b/viewer/image_viewer/JFJochImage.cpp @@ -752,9 +752,9 @@ void JFJochImage::writePixelLabels() { if (std::abs(val - nearest) < 1e-6) numBuf = QString::number(static_cast(val)); else if (absVal < 1e4) - numBuf = QString::number(val, 'f', 3); + numBuf = QString::number(val, 'f', label_decimals_); else - numBuf = QString::number(val, 'f', 2); + numBuf = QString::number(val, 'f', std::min(label_decimals_, 2)); pText = &numBuf; } else { numBuf = QString::number(val, 'e', 1); diff --git a/viewer/image_viewer/JFJochImage.h b/viewer/image_viewer/JFJochImage.h index f16ec3ec..5b3816ea 100644 --- a/viewer/image_viewer/JFJochImage.h +++ b/viewer/image_viewer/JFJochImage.h @@ -54,6 +54,12 @@ protected: bool initial_fit_done_ = false; QColor feature_color = Qt::magenta; + + // Decimal places for non-integer per-pixel value labels. Float images (e.g. the + // PixelRefine prediction) are unreadable with many decimals, so subclasses can + // lower this. + int label_decimals_ = 3; + float foreground = 10.0; float background = 0.0; ColorScale color_scale; diff --git a/viewer/image_viewer/JFJochSimpleImage.cpp b/viewer/image_viewer/JFJochSimpleImage.cpp index 700537f8..24bdcad6 100644 --- a/viewer/image_viewer/JFJochSimpleImage.cpp +++ b/viewer/image_viewer/JFJochSimpleImage.cpp @@ -18,6 +18,9 @@ JFJochSimpleImage::JFJochSimpleImage(QWidget *parent) // Keep overlays in pixel units independent of zoom (for labels font sizing) setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + + // The predicted/float image is unreadable with 3-decimal per-pixel labels. + label_decimals_ = 1; } void JFJochSimpleImage::setImage(std::shared_ptr img) { diff --git a/viewer/windows/JFJochPixelRefineWindow.cpp b/viewer/windows/JFJochPixelRefineWindow.cpp index bd4e1927..5ff21ea6 100644 --- a/viewer/windows/JFJochPixelRefineWindow.cpp +++ b/viewer/windows/JFJochPixelRefineWindow.cpp @@ -109,6 +109,10 @@ JFJochPixelRefineWindow::JFJochPixelRefineWindow(QWidget *parent) }); connect(m_refine, &QPushButton::clicked, this, [this] { + // Cancel any pending live-preview: otherwise a debounce armed by a slider + // move just before this click fires after the refine and overwrites the + // refined residual/preview with the stale pre-refine slider values. + m_debounce->stop(); PixelRefineParams p = currentParams(); p.max_iterations = 5; emit refineRequested(p);