From 55b65381db80160156813e8c4bb0edca43402fa0 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 1 Jun 2026 13:28:16 +0200 Subject: [PATCH] jfjoch_viewer: Pan with right click + center 000 button --- .../windows/JFJochViewerReciprocalSpaceWindow.cpp | 13 ++++++++++++- viewer/windows/JFJochViewerReciprocalSpaceWindow.h | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/viewer/windows/JFJochViewerReciprocalSpaceWindow.cpp b/viewer/windows/JFJochViewerReciprocalSpaceWindow.cpp index d3b62f45..cc4507d9 100644 --- a/viewer/windows/JFJochViewerReciprocalSpaceWindow.cpp +++ b/viewer/windows/JFJochViewerReciprocalSpaceWindow.cpp @@ -11,6 +11,7 @@ #include #include #include +#include // ============================================================================ // Shaders @@ -194,6 +195,11 @@ void ReciprocalSpaceGLView::setLines(const std::vector &lines) { update(); } +void ReciprocalSpaceGLView::resetTarget() { + target_ = QVector3D(0.0f, 0.0f, 0.0f); + update(); +} + // --------------------------------------------------------------------------- void ReciprocalSpaceGLView::setupVAO(QOpenGLVertexArrayObject &vao, @@ -269,7 +275,7 @@ void ReciprocalSpaceGLView::mouseMoveEvent(QMouseEvent *e) { pitch_ += delta.y() * 0.5f; pitch_ = qBound(-89.0f, pitch_, 89.0f); update(); - } else if (e->buttons() & Qt::MiddleButton) { + } else if (e->buttons() & Qt::RightButton) { const float panScale = zoom_ * 0.0015f; QMatrix4x4 rot; @@ -366,10 +372,13 @@ JFJochViewerReciprocalSpaceWindow::JFJochViewerReciprocalSpaceWindow(QWidget *pa showPredictedCheck = new QCheckBox("Show predicted nodes", central); showPredictedCheck->setChecked(true); + auto *centerOriginButton = new QPushButton("Center 000", central); + controls->addWidget(crystalFrameCheck); controls->addWidget(showCellCheck); controls->addWidget(showPredictedCheck); controls->addStretch(1); + controls->addWidget(centerOriginButton); layout->addLayout(controls); setCentralWidget(central); @@ -380,6 +389,8 @@ JFJochViewerReciprocalSpaceWindow::JFJochViewerReciprocalSpaceWindow(QWidget *pa this, &JFJochViewerReciprocalSpaceWindow::rebuildGL); connect(showPredictedCheck, &QCheckBox::toggled, this, &JFJochViewerReciprocalSpaceWindow::rebuildGL); + connect(centerOriginButton, &QPushButton::clicked, + glView_, &ReciprocalSpaceGLView::resetTarget); // Reuse the existing helper-window zoom signal. The main window should connect // this to JFJochDiffractionImage::centerOnSpot, like the spot/reflection lists. diff --git a/viewer/windows/JFJochViewerReciprocalSpaceWindow.h b/viewer/windows/JFJochViewerReciprocalSpaceWindow.h index b45cfd06..9923715b 100644 --- a/viewer/windows/JFJochViewerReciprocalSpaceWindow.h +++ b/viewer/windows/JFJochViewerReciprocalSpaceWindow.h @@ -42,6 +42,8 @@ public: float pickable = 0.0f; }; + void resetTarget(); + // Called by the outer window whenever data changes. void setSpots(const std::vector &spots); void setLines(const std::vector &lines); // axes + cell vectors