jfjoch_viewer: Display rectangle around current grid element
This commit is contained in:
@@ -87,8 +87,10 @@ void JFJochViewerDatasetInfo::datasetLoaded(std::shared_ptr<const JFJochReaderDa
|
||||
|
||||
void JFJochViewerDatasetInfo::imageLoaded(std::shared_ptr<const JFJochReaderImage> 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) {
|
||||
|
||||
@@ -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<float> &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);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,11 +12,15 @@ Q_DECLARE_METATYPE(GridScanSettings)
|
||||
class JFJochGridScanImage : public JFJochImage {
|
||||
Q_OBJECT
|
||||
|
||||
std::optional<GridScanSettings> settings;
|
||||
std::vector<int64_t> 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<float> &data, const GridScanSettings &settings);
|
||||
void setImage(int64_t val);
|
||||
void clear();
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user