diff --git a/viewer/CMakeLists.txt b/viewer/CMakeLists.txt index 2a7d4c49..58fc4a8a 100644 --- a/viewer/CMakeLists.txt +++ b/viewer/CMakeLists.txt @@ -64,12 +64,6 @@ ADD_EXECUTABLE(jfjoch_viewer jfjoch_viewer.cpp JFJochViewerWindow.cpp JFJochView image_viewer/JFJochAzIntImage.h windows/JFJochViewerReflectionListWindow.cpp windows/JFJochViewerReflectionListWindow.h - widgets/JFJochViewerImageROIStatistics.cpp - widgets/JFJochViewerImageROIStatistics.h - widgets/JFJochViewerImageROIStatistics_Box.cpp - widgets/JFJochViewerImageROIStatistics_Box.h - widgets/JFJochViewerImageROIStatistics_Circle.cpp - widgets/JFJochViewerImageROIStatistics_Circle.h toolbar/JFJochViewerToolbarImage.cpp toolbar/JFJochViewerToolbarImage.h toolbar/JFJochViewerToolbarDisplay.cpp diff --git a/viewer/JFJochImageReadingWorker.cpp b/viewer/JFJochImageReadingWorker.cpp index a3a3bdd4..75aae6f8 100644 --- a/viewer/JFJochImageReadingWorker.cpp +++ b/viewer/JFJochImageReadingWorker.cpp @@ -432,24 +432,6 @@ void JFJochImageReadingWorker::LoadImage_i(int64_t image_number, int64_t summati } } -void JFJochImageReadingWorker::SetROIBox(QRect box) { - QMutexLocker ul(&m); - - if (box.width() * box.height() == 0) - roi.reset(); - - roi = std::make_unique("roi1", box.left(), box.right(), box.bottom(), box.top()); -} - -void JFJochImageReadingWorker::SetROICircle(double x, double y, double radius) { - QMutexLocker ul(&m); - - if (radius <= 0) - roi.reset(); - else - roi = std::make_unique("roi1", x, y, radius); -} - void JFJochImageReadingWorker::UpdateDataset_i(const std::optional &experiment) { if (!current_image_ptr) return; @@ -690,47 +672,6 @@ void JFJochImageReadingWorker::UpdateUserMask_i(const std::vector &mas } -void JFJochImageReadingWorker::AddROIToUserMask() { - QMutexLocker locker(&m); - - if (!roi || !current_image_ptr) - return; - - auto user_mask = current_image_ptr->Dataset().pixel_mask.GetUserMask(); - - int64_t width = current_image_ptr->Dataset().experiment.GetXPixelsNum(); - int64_t height = current_image_ptr->Dataset().experiment.GetYPixelsNum(); - const auto res = azint_mapping->Resolution(); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - if (roi->CheckROI(x, y, 0, 0)) - user_mask[x + y * width] = 1; - } - } - - UpdateUserMask_i(user_mask); -} - -void JFJochImageReadingWorker::SubtractROIFromUserMask() { - QMutexLocker locker(&m); - if (!roi || !current_image_ptr) - return; - - auto user_mask = current_image_ptr->Dataset().pixel_mask.GetUserMask(); - - int64_t width = current_image_ptr->Dataset().experiment.GetXPixelsNum(); - int64_t height = current_image_ptr->Dataset().experiment.GetYPixelsNum(); - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - if (roi->CheckROI(x, y, 0, 0)) - user_mask[x + y * width] = 0; - } - } - - UpdateUserMask_i(user_mask); -} - void JFJochImageReadingWorker::ClearUserMask() { QMutexLocker locker(&m); if (!current_image_ptr) diff --git a/viewer/JFJochImageReadingWorker.h b/viewer/JFJochImageReadingWorker.h index 87b26843..85d2f8dd 100644 --- a/viewer/JFJochImageReadingWorker.h +++ b/viewer/JFJochImageReadingWorker.h @@ -68,8 +68,6 @@ private: // Azimuthal profile buffer of the most recently analyzed image (filled by Analyze). std::unique_ptr last_profile_; - std::unique_ptr roi; - SpotFindingSettings spot_finding_settings; std::optional current_image; @@ -155,9 +153,6 @@ public slots: void LoadImage(int64_t image_number, int64_t summation); void LoadSpots(int64_t start_image, int64_t end_image, int64_t stride); - void SetROIBox(QRect box); - void SetROICircle(double x, double y, double radius); - void UpdateDataset(const DiffractionExperiment& experiment); void FindCenter(const UnitCell& calibrant, bool guess); @@ -167,8 +162,6 @@ public slots: void UpdateSpotFindingSettings(const SpotFindingSettings &settings, const IndexingSettings &indexing, int64_t max_spots); void ReanalyzeImages(bool input); void UpdateAzintSettings(const AzimuthalIntegrationSettings& settings); - void AddROIToUserMask(); - void SubtractROIFromUserMask(); void SetROIDefinition(const ROIDefinition &rois); void DownloadROIsFromServer(); diff --git a/viewer/JFJochViewerSidePanel.cpp b/viewer/JFJochViewerSidePanel.cpp index e4e34f77..2426a6cb 100644 --- a/viewer/JFJochViewerSidePanel.cpp +++ b/viewer/JFJochViewerSidePanel.cpp @@ -7,7 +7,6 @@ #include "JFJochViewerSidePanel.h" -#include "widgets/JFJochViewerImageROIStatistics.h" #include "widgets/TitleLabel.h" #include "widgets/JFJochViewerImageStatistics.h" #include "widgets/PowderCalibrationWidget.h" diff --git a/viewer/widgets/JFJochViewerImageROIStatistics.cpp b/viewer/widgets/JFJochViewerImageROIStatistics.cpp deleted file mode 100644 index 66ea26a0..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics.cpp +++ /dev/null @@ -1,91 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#include "JFJochViewerImageROIStatistics.h" - -#include -#include -#include - -JFJochViewerImageROIStatistics::JFJochViewerImageROIStatistics(QWidget *parent) - : QWidget(parent) { - QVBoxLayout *layout = new QVBoxLayout(this); - - box_radio = new QRadioButton("Box", this); - box_settings = new JFJochViewerImageROIStatistics_Box(this); - QHBoxLayout *box_row = new QHBoxLayout(); - box_row->addWidget(box_radio); - box_row->addWidget(box_settings); - layout->addLayout(box_row); - - circle_radio = new QRadioButton("Circle", this); - circle_settings = new JFJochViewerImageROIStatistics_Circle(this); - QHBoxLayout *circle_row = new QHBoxLayout(); - circle_row->addWidget(circle_radio); - circle_row->addWidget(circle_settings); - layout->addLayout(circle_row); - - radio_group = new QButtonGroup(this); - radio_group->addButton(box_radio, 1); - radio_group->addButton(circle_radio, 2); - - connect(box_radio, &QRadioButton::clicked, this, &JFJochViewerImageROIStatistics::BoxButtonClicked); - connect(circle_radio, &QRadioButton::clicked, this, &JFJochViewerImageROIStatistics::CircleButtonClicked); - connect(box_settings, &JFJochViewerImageROIStatistics_Box::Updated, this, - &JFJochViewerImageROIStatistics::BoxButtonClicked); - connect(circle_settings, &JFJochViewerImageROIStatistics_Circle::Updated, this, - &JFJochViewerImageROIStatistics::CircleButtonClicked); - - circle_settings->Disable(); - box_radio->setChecked(true); - - roi_result = new JFJochViewerROIResult(this); - layout->addWidget(roi_result); - - QPushButton *add_button = new QPushButton("Add ROI to user mask", this); - connect(add_button, &QPushButton::clicked, [this]() { emit AddROIToUserMask(); }); - - QPushButton *sub_button = new QPushButton("Subtract ROI from user mask", this); - connect(sub_button, &QPushButton::clicked, [this]() { emit SubtractROIFromUserMask(); }); - - QHBoxLayout *buttons_row = new QHBoxLayout(); - buttons_row->setSpacing(12); - buttons_row->addWidget(add_button); - buttons_row->addWidget(sub_button); - - layout->addLayout(buttons_row); - -} - -void JFJochViewerImageROIStatistics::SetROIResult(ROIMessage roi) { - roi_result->SetROIResult(roi); -} - - -void JFJochViewerImageROIStatistics::SetROIBox(QRect box) { - box_radio->setChecked(true); - box_settings->ROIBoxConfigured(box); - circle_settings->Disable(); -} - -void JFJochViewerImageROIStatistics::SetROICircle(double x, double y, double radius) { - circle_radio->setChecked(true); - circle_settings->SetROICircle(CircleSettings{.x = x, .y = y, .r = radius}); - box_settings->Disable(); -} - -void JFJochViewerImageROIStatistics::BoxButtonClicked() { - box_radio->setChecked(true); - box_settings->Enable(); - circle_settings->Disable(); - - emit ROIBoxConfigured(box_settings->GetROIBox()); -} - -void JFJochViewerImageROIStatistics::CircleButtonClicked() { - circle_settings->Enable(); - box_settings->Disable(); - circle_radio->setChecked(true); - auto tmp = circle_settings->GetROICircle(); - emit ROICircleConfigured(tmp.x, tmp.y, tmp.r); -} diff --git a/viewer/widgets/JFJochViewerImageROIStatistics.h b/viewer/widgets/JFJochViewerImageROIStatistics.h deleted file mode 100644 index 2d2a0118..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics.h +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - - -#pragma once - -#include -#include -#include - -#include "../JFJochImageReadingWorker.h" -#include "JFJochViewerImageROIStatistics_Box.h" -#include "JFJochViewerImageROIStatistics_Circle.h" -#include "JFJochViewerROIResult.h" -#include "../../reader/JFJochReaderImage.h" - -class JFJochViewerImageROIStatistics : public QWidget { - Q_OBJECT - - QRadioButton *box_radio; - QRadioButton *circle_radio; - QRadioButton *azim_radio; - QButtonGroup *radio_group; - - JFJochViewerImageROIStatistics_Box *box_settings; - JFJochViewerImageROIStatistics_Circle *circle_settings; - - JFJochViewerROIResult *roi_result; - -public: - JFJochViewerImageROIStatistics(QWidget *parent); -private slots: - void BoxButtonClicked(); - void CircleButtonClicked(); -public slots: - void SetROIBox(QRect box); - void SetROICircle(double x, double y, double radius); - void SetROIResult(ROIMessage msg); -signals: - void ROIBoxConfigured(QRect box); // Signal emitted when Box ROI is set - void ROICircleConfigured(double center_x, double center_y, double radius); // Signal emitted when Circle ROI is set - void AddROIToUserMask(); - void SubtractROIFromUserMask(); -}; - - diff --git a/viewer/widgets/JFJochViewerImageROIStatistics_Box.cpp b/viewer/widgets/JFJochViewerImageROIStatistics_Box.cpp deleted file mode 100644 index dc49a4be..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics_Box.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#include -#include "JFJochViewerImageROIStatistics_Box.h" - -#include - -JFJochViewerImageROIStatistics_Box::JFJochViewerImageROIStatistics_Box(QWidget *parent) - : QWidget(parent) { - auto layout = new QHBoxLayout(this); - - setFixedWidth(300); - layout->addWidget(new QLabel("x:")); - - x0 = new NumberLineEdit(0, 10000, 0, 0, "", this); - x0->setFixedWidth(50); - layout->addWidget(x0); - - layout->addWidget(new QLabel(" - ")); - - x1 = new NumberLineEdit(0, 10000, 0, 0, "", this); - x1->setFixedWidth(50); - layout->addWidget(x1); - - layout->addWidget(new QLabel(" y:")); - y0 = new NumberLineEdit(0, 10000, 0, 0, "", this); - y0->setFixedWidth(50); - layout->addWidget(y0); - layout->addWidget(new QLabel(" - ")); - - y1 = new NumberLineEdit(0, 10000, 0, 0, "", this); - y1->setFixedWidth(50); - layout->addWidget(y1); - - connect(x0, &NumberLineEdit::newValue, [this] (float) { emit Updated(); } ); - connect(y0, &NumberLineEdit::newValue, [this] (float) { emit Updated(); } ); - connect(x1, &NumberLineEdit::newValue, [this] (float) { emit Updated(); } ); - connect(y1, &NumberLineEdit::newValue, [this] (float) { emit Updated(); } ); -} - -void JFJochViewerImageROIStatistics_Box::ROIBoxConfigured(QRect box) { - Enable(); - x0->setValue(box.left()); - x1->setValue(box.right()); - y0->setValue(box.top()); - y1->setValue(box.bottom()); -} - -void JFJochViewerImageROIStatistics_Box::Disable() { - x0->setEnabled(false); - x1->setEnabled(false); - y0->setEnabled(false); - y1->setEnabled(false); -} - -void JFJochViewerImageROIStatistics_Box::Enable() { - x0->setEnabled(true); - x1->setEnabled(true); - y0->setEnabled(true); - y1->setEnabled(true); -} - -QRect JFJochViewerImageROIStatistics_Box::GetROIBox() { - int64_t out_x0 = std::lround(x0->value()); - int64_t out_x1 = std::lround(x1->value()); - int64_t out_y0 = std::lround(y0->value()); - int64_t out_y1 = std::lround(y1->value()); - - return QRect(out_x0, out_y0, out_x1 - out_x0, out_y1 - out_y0).normalized(); -} diff --git a/viewer/widgets/JFJochViewerImageROIStatistics_Box.h b/viewer/widgets/JFJochViewerImageROIStatistics_Box.h deleted file mode 100644 index 80cc72cd..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics_Box.h +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#pragma once - -#include - -#include "NumberLineEdit.h" - -class JFJochViewerImageROIStatistics_Box : public QWidget { - Q_OBJECT - - NumberLineEdit *x0 = nullptr; - NumberLineEdit *x1 = nullptr; - NumberLineEdit *y0 = nullptr; - NumberLineEdit *y1 = nullptr; - -public: - JFJochViewerImageROIStatistics_Box(QWidget *parent = nullptr); - QRect GetROIBox(); -signals: - void Updated(); // Signal emitted when Box ROI is set - -public slots: - void ROIBoxConfigured(QRect box); // Signal emitted when Box ROI is set - void Disable(); - void Enable(); -}; - - diff --git a/viewer/widgets/JFJochViewerImageROIStatistics_Circle.cpp b/viewer/widgets/JFJochViewerImageROIStatistics_Circle.cpp deleted file mode 100644 index d6442f5b..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics_Circle.cpp +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#include -#include - -#include "JFJochViewerImageROIStatistics_Circle.h" - -JFJochViewerImageROIStatistics_Circle::JFJochViewerImageROIStatistics_Circle(QWidget *parent) - :QWidget(parent) { - auto layout = new QHBoxLayout(this); - - setFixedWidth(300); - - layout->addWidget(new QLabel("x: ")); - x = new NumberLineEdit(0, 10000, 0, 1, "", this); - layout->addWidget(x); - - layout->addWidget(new QLabel(" y: ")); - y = new NumberLineEdit(0, 10000, 0, 1, "", this); - layout->addWidget(y); - - - layout->addWidget(new QLabel(" r: ")); - r = new NumberLineEdit(0, 10000, 0, 1, "", this); - layout->addWidget(r); - - connect(x, &NumberLineEdit::newValue, [this] (float) {emit Updated();}); - connect(y, &NumberLineEdit::newValue, [this] (float) {emit Updated();}); - connect(r, &NumberLineEdit::newValue, [this] (float) {emit Updated();}); -} - -void JFJochViewerImageROIStatistics_Circle::SetROICircle(const CircleSettings& input) { - Enable(); - x->setValue(input.x); - y->setValue(input.y); - r->setValue(input.r); -} - -void JFJochViewerImageROIStatistics_Circle::Disable() { - x->setEnabled(false); - y->setEnabled(false); - r->setEnabled(false); -} - -void JFJochViewerImageROIStatistics_Circle::Enable() { - x->setEnabled(true); - y->setEnabled(true); - r->setEnabled(true); -} - -CircleSettings JFJochViewerImageROIStatistics_Circle::GetROICircle() { - return CircleSettings{.x = x->value(), .y = y->value(), .r = r->value()}; -} - diff --git a/viewer/widgets/JFJochViewerImageROIStatistics_Circle.h b/viewer/widgets/JFJochViewerImageROIStatistics_Circle.h deleted file mode 100644 index dc7808b2..00000000 --- a/viewer/widgets/JFJochViewerImageROIStatistics_Circle.h +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#pragma once - -#include - -#include "NumberLineEdit.h" - -struct CircleSettings { - double x, y, r; -}; - -class JFJochViewerImageROIStatistics_Circle : public QWidget { - Q_OBJECT - - NumberLineEdit *x = nullptr; - NumberLineEdit *y = nullptr; - NumberLineEdit *r = nullptr; -public: - JFJochViewerImageROIStatistics_Circle(QWidget *parent = nullptr); - void SetROICircle(const CircleSettings &input); - CircleSettings GetROICircle(); - - void Disable(); - void Enable(); -signals: - void Updated(); -}; - -