feat: Add limits for camera and pivot point distances
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <QWheelEvent>
|
||||
#include <QPropertyAnimation>
|
||||
#include <QParallelAnimationGroup>
|
||||
#include <QtMath>
|
||||
|
||||
Camera::Camera(QObject *parent) : QObject(parent)
|
||||
{
|
||||
@@ -121,6 +122,14 @@ void Camera::setYRotation(float angle)
|
||||
float Camera::zoom() const { return m_zoom; }
|
||||
void Camera::setZoom(float value)
|
||||
{
|
||||
const float max_dist = 5000.0f;
|
||||
float remaining_dist_sq = max_dist * max_dist - m_panX * m_panX - m_panY * m_panY;
|
||||
if (remaining_dist_sq < 0) {
|
||||
remaining_dist_sq = 0;
|
||||
}
|
||||
float max_val = qSqrt(remaining_dist_sq);
|
||||
value = qBound(-max_val, value, 0.0f); // Zoom is negative or zero
|
||||
|
||||
if (value != m_zoom) {
|
||||
m_zoom = value;
|
||||
emit cameraChanged();
|
||||
@@ -130,6 +139,14 @@ void Camera::setZoom(float value)
|
||||
float Camera::panX() const { return m_panX; }
|
||||
void Camera::setPanX(float value)
|
||||
{
|
||||
const float max_dist = 5000.0f;
|
||||
float remaining_dist_sq = max_dist * max_dist - m_panY * m_panY - m_zoom * m_zoom;
|
||||
if (remaining_dist_sq < 0) {
|
||||
remaining_dist_sq = 0;
|
||||
}
|
||||
float max_val = qSqrt(remaining_dist_sq);
|
||||
value = qBound(-max_val, value, max_val);
|
||||
|
||||
if (value != m_panX) {
|
||||
m_panX = value;
|
||||
emit cameraChanged();
|
||||
@@ -139,6 +156,14 @@ void Camera::setPanX(float value)
|
||||
float Camera::panY() const { return m_panY; }
|
||||
void Camera::setPanY(float value)
|
||||
{
|
||||
const float max_dist = 5000.0f;
|
||||
float remaining_dist_sq = max_dist * max_dist - m_panX * m_panX - m_zoom * m_zoom;
|
||||
if (remaining_dist_sq < 0) {
|
||||
remaining_dist_sq = 0;
|
||||
}
|
||||
float max_val = qSqrt(remaining_dist_sq);
|
||||
value = qBound(-max_val, value, max_val);
|
||||
|
||||
if (value != m_panY) {
|
||||
m_panY = value;
|
||||
emit cameraChanged();
|
||||
@@ -227,6 +252,9 @@ void Camera::animateToPlaneView(int plane)
|
||||
void Camera::startRotation(const QVector3D& pivot)
|
||||
{
|
||||
m_rotationPivot = pivot;
|
||||
if (m_rotationPivot.length() > 1000.0f) {
|
||||
m_rotationPivot = m_rotationPivot.normalized() * 1000.0f;
|
||||
}
|
||||
m_stableZoom = m_zoom;
|
||||
|
||||
QMatrix4x4 rotation;
|
||||
|
||||
Reference in New Issue
Block a user