Limit the zoom size of the rendered widget
parent
c4da15eb9e
commit
ee94913c62
|
@ -11,6 +11,8 @@
|
||||||
|
|
||||||
bool ModelWidget::m_transparent = true;
|
bool ModelWidget::m_transparent = true;
|
||||||
const QVector3D ModelWidget::m_cameraPosition = QVector3D(0, 0, -4.0);
|
const QVector3D ModelWidget::m_cameraPosition = QVector3D(0, 0, -4.0);
|
||||||
|
float ModelWidget::m_minZoomRatio = 5.0;
|
||||||
|
float ModelWidget::m_maxZoomRatio = 90.0;
|
||||||
|
|
||||||
ModelWidget::ModelWidget(QWidget *parent) :
|
ModelWidget::ModelWidget(QWidget *parent) :
|
||||||
QOpenGLWidget(parent),
|
QOpenGLWidget(parent),
|
||||||
|
@ -320,6 +322,18 @@ bool ModelWidget::inputWheelEventFromOtherWidget(QWheelEvent *event)
|
||||||
void ModelWidget::zoom(float delta)
|
void ModelWidget::zoom(float delta)
|
||||||
{
|
{
|
||||||
QMargins margins(delta, delta, delta, delta);
|
QMargins margins(delta, delta, delta, delta);
|
||||||
|
if (0 == m_modelInitialHeight) {
|
||||||
|
m_modelInitialHeight = height();
|
||||||
|
} else {
|
||||||
|
float ratio = (float)height() / m_modelInitialHeight;
|
||||||
|
if (ratio <= m_minZoomRatio) {
|
||||||
|
if (delta < 0)
|
||||||
|
return;
|
||||||
|
} else if (ratio >= m_maxZoomRatio) {
|
||||||
|
if (delta > 0)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
setGeometry(geometry().marginsAdded(margins));
|
setGeometry(geometry().marginsAdded(margins));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,11 @@ private:
|
||||||
float m_mousePickRadius = 0.0;
|
float m_mousePickRadius = 0.0;
|
||||||
static bool m_transparent;
|
static bool m_transparent;
|
||||||
static const QVector3D m_cameraPosition;
|
static const QVector3D m_cameraPosition;
|
||||||
|
static float m_minZoomRatio;
|
||||||
|
static float m_maxZoomRatio;
|
||||||
QPoint m_moveStartPos;
|
QPoint m_moveStartPos;
|
||||||
QRect m_moveStartGeometry;
|
QRect m_moveStartGeometry;
|
||||||
|
int m_modelInitialHeight = 0;
|
||||||
std::pair<QVector3D, QVector3D> screenPositionToMouseRay(const QPoint &screenPosition);
|
std::pair<QVector3D, QVector3D> screenPositionToMouseRay(const QPoint &screenPosition);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue