diff --git a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/InstrumentView/RotationSurface.h b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/InstrumentView/RotationSurface.h index 5e21f753185e..0896d16f8005 100644 --- a/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/InstrumentView/RotationSurface.h +++ b/MantidQt/MantidWidgets/inc/MantidQtMantidWidgets/InstrumentView/RotationSurface.h @@ -46,6 +46,11 @@ class RotationSurface : public UnwrappedSurface { /// UnwrappedSurface::project(). double applyUCorrection(double u) const; + /// Update the view rect to offset for the U correction + void updateViewRectForUCorrection(); + /// Calculate UV offsets from the view rect + std::pair calculateViewRectOffsets(); + const Mantid::Kernel::V3D m_pos; ///< Origin (sample position) const Mantid::Kernel::V3D m_zaxis; ///< The z axis of the surface specific coord system diff --git a/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp b/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp index 65b053cb448e..a1cd14e0cc1c 100644 --- a/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp +++ b/MantidQt/MantidWidgets/src/InstrumentView/RotationSurface.cpp @@ -162,26 +162,42 @@ void RotationSurface::init() { udet.u = applyUCorrection(udet.u); } } +} - double dU = fabs(m_u_max - m_u_min); - double dV = fabs(m_v_max - m_v_min); - double du = dU * 0.05; - double dv = dV * 0.05; - if (m_width_max > du && std::isfinite(m_width_max)) { - if (du > 0 && !(dU >= m_width_max)) { - m_width_max = dU; - } - du = m_width_max; - } - if (m_height_max > dv && std::isfinite(m_height_max)) { - if (dv > 0 && !(dV >= m_height_max)) { - m_height_max = dV; - } - dv = m_height_max; - } +/** Update the view rect to account for the U correction + */ +void RotationSurface::updateViewRectForUCorrection() { + const auto offsets = calculateViewRectOffsets(); + const auto min = QPointF(m_u_min - offsets.first, m_v_min - offsets.second); + const auto max = QPointF(m_u_max + offsets.first, m_v_max + offsets.second); + m_viewRect = RectF(min, max); +} + +/** Calculate UV offsets to the view rect + * + * @return a std::pair containing the u & v offsets for the view rect + */ +std::pair RotationSurface::calculateViewRectOffsets() { + const auto dU = fabs(m_u_max - m_u_min); + const auto dV = fabs(m_v_max - m_v_min); + auto du = dU * 0.05; + auto dv = dV * 0.05; + + if (m_width_max > du && std::isfinite(m_width_max)) { + if (du > 0 && !(dU >= m_width_max)) { + m_width_max = dU; + } + du = m_width_max; + } + + if (m_height_max > dv && std::isfinite(m_height_max)) { + if (dv > 0 && !(dV >= m_height_max)) { + m_height_max = dV; + } + dv = m_height_max; + } - m_viewRect = RectF(QPointF(m_u_min - du, m_v_min - dv), - QPointF(m_u_max + du, m_v_max + dv)); + return std::make_pair(du, dv); } void RotationSurface::findUVBounds() { @@ -308,6 +324,7 @@ void RotationSurface::setUCorrection(double umin, double umax) { } m_manual_u_correction = true; updateDetectors(); + updateViewRectForUCorrection(); } /** @@ -316,6 +333,7 @@ void RotationSurface::setUCorrection(double umin, double umax) { void RotationSurface::setAutomaticUCorrection() { m_manual_u_correction = false; updateDetectors(); + updateViewRectForUCorrection(); } } // MantidWidgets diff --git a/docs/source/release/v3.10.0/ui.rst b/docs/source/release/v3.10.0/ui.rst index 16708099c14d..3760a83001a1 100644 --- a/docs/source/release/v3.10.0/ui.rst +++ b/docs/source/release/v3.10.0/ui.rst @@ -19,6 +19,7 @@ User Interface Instrument View ############### + - Fixed a bug preventing the some of the banks from being visible when using a U correction. Plotting Improvements #####################