diff --git a/viewer/JFJochViewerDatasetInfo.cpp b/viewer/JFJochViewerDatasetInfo.cpp index 955bdc60..d27f8ecc 100644 --- a/viewer/JFJochViewerDatasetInfo.cpp +++ b/viewer/JFJochViewerDatasetInfo.cpp @@ -87,8 +87,10 @@ void JFJochViewerDatasetInfo::datasetLoaded(std::shared_ptr image) { this->image = image; - if (image) + if (image) { chart_view->setImage(image->ImageData().number); + grid_scan_image->setImage(image->ImageData().number); + } } void JFJochViewerDatasetInfo::imageSelectedInChart(int64_t number) { diff --git a/viewer/image_viewer/JFJochGridScanImage.cpp b/viewer/image_viewer/JFJochGridScanImage.cpp index 8ecd8dfa..8cfefdfd 100644 --- a/viewer/image_viewer/JFJochGridScanImage.cpp +++ b/viewer/image_viewer/JFJochGridScanImage.cpp @@ -8,6 +8,7 @@ JFJochGridScanImage::JFJochGridScanImage(QWidget *parent) : JFJochImage(parent) void JFJochGridScanImage::clear() { W = 0; H = 0; + this->settings = std::nullopt; if (scene()) scene()->clear(); CalcROI(); @@ -18,6 +19,7 @@ void JFJochGridScanImage::loadData(const std::vector &data, const GridSca clear(); return; } + this->settings = settings; W = settings.GetGridSizeX_step(); H = settings.GetGridSizeY_step(); @@ -112,3 +114,24 @@ void JFJochGridScanImage::mouseDoubleClickEvent(QMouseEvent *event) { JFJochImage::mouseDoubleClickEvent(event); } +void JFJochGridScanImage::setImage(int64_t val) { + if (settings) { + current_image_W = settings->GetElementPosX_step(val); + current_image_H = settings->GetElementPosY_step(val); + } else { + current_image_W = -1; + current_image_H = -1; + } + Redraw(); +} + +void JFJochGridScanImage::addCustomOverlay() { + if (current_image_W < 0 || current_image_H < 0 || current_image_W >= W || current_image_H >= H) + return; + + QPen pen(feature_color, 3); + pen.setCosmetic(true); + + auto rect = scene()->addRect(current_image_W, current_image_H, 1, 1, pen); +} + diff --git a/viewer/image_viewer/JFJochGridScanImage.h b/viewer/image_viewer/JFJochGridScanImage.h index e7989531..27b8e4f5 100644 --- a/viewer/image_viewer/JFJochGridScanImage.h +++ b/viewer/image_viewer/JFJochGridScanImage.h @@ -12,11 +12,15 @@ Q_DECLARE_METATYPE(GridScanSettings) class JFJochGridScanImage : public JFJochImage { Q_OBJECT + std::optional settings; std::vector image_index; + int64_t current_image_W = -1; + int64_t current_image_H = -1; void mouseHover(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void loadImage(QMouseEvent *event); + void addCustomOverlay() override; signals: void imageSelected(int64_t number); void writeStatusBar(QString string, int timeout_ms = 0); @@ -24,6 +28,7 @@ public: JFJochGridScanImage(QWidget *parent = nullptr); public slots: void loadData(const std::vector &data, const GridScanSettings &settings); + void setImage(int64_t val); void clear(); }; diff --git a/viewer/image_viewer/JFJochImage.cpp b/viewer/image_viewer/JFJochImage.cpp index bc9e514d..f78025a8 100644 --- a/viewer/image_viewer/JFJochImage.cpp +++ b/viewer/image_viewer/JFJochImage.cpp @@ -459,13 +459,6 @@ void JFJochImage::Redraw() { setScene(currentScene); // Reset initial-fit state for a new scene initial_fit_done_ = false; - last_fit_W_ = 0; - last_fit_H_ = 0; - } - - // If image size changed since last fit, allow a new initial fit - if (last_fit_W_ != W || last_fit_H_ != H) { - initial_fit_done_ = false; } // Restore the zoom level @@ -701,8 +694,7 @@ void JFJochImage::CalcROI() { void JFJochImage::fitToView() { initial_fit_done_ = false; - fitToViewShorterSideOnce(); - Redraw(); + updateOverlay(); } void JFJochImage::fitToViewShorterSideOnce() { @@ -733,7 +725,5 @@ void JFJochImage::fitToViewShorterSideOnce() { setTransformationAnchor(oldAnchor); initial_fit_done_ = true; - last_fit_W_ = W; - last_fit_H_ = H; last_fit_viewport_ = vp; } diff --git a/viewer/image_viewer/JFJochImage.h b/viewer/image_viewer/JFJochImage.h index 423ea1cd..02094c1b 100644 --- a/viewer/image_viewer/JFJochImage.h +++ b/viewer/image_viewer/JFJochImage.h @@ -38,7 +38,6 @@ protected: // Track initial fit state and last image size bool initial_fit_done_ = false; - size_t last_fit_W_ = 0, last_fit_H_ = 0; QColor feature_color = Qt::magenta; float foreground = 10.0;