mirror of https://github.com/qt/qt3d.git
70 lines
1.4 KiB
C++
70 lines
1.4 KiB
C++
// Copyright (C) 2016 Klaralvdalens Datakonsult AB (KDAB).
|
|
// Copyright (C) 2016 The Qt Company Ltd and/or its subsidiary(-ies).
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
|
|
|
#include "orbittransformcontroller.h"
|
|
|
|
#include <Qt3DCore/qtransform.h>
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
OrbitTransformController::OrbitTransformController(QObject *parent)
|
|
: QObject(parent)
|
|
, m_target(nullptr)
|
|
, m_matrix()
|
|
, m_radius(1.0f)
|
|
, m_angle(0.0f)
|
|
{
|
|
}
|
|
|
|
void OrbitTransformController::setTarget(Qt3DCore::QTransform *target)
|
|
{
|
|
if (m_target != target) {
|
|
m_target = target;
|
|
emit targetChanged();
|
|
}
|
|
}
|
|
|
|
Qt3DCore::QTransform *OrbitTransformController::target() const
|
|
{
|
|
return m_target;
|
|
}
|
|
|
|
void OrbitTransformController::setRadius(float radius)
|
|
{
|
|
if (!qFuzzyCompare(radius, m_radius)) {
|
|
m_radius = radius;
|
|
updateMatrix();
|
|
emit radiusChanged();
|
|
}
|
|
}
|
|
|
|
float OrbitTransformController::radius() const
|
|
{
|
|
return m_radius;
|
|
}
|
|
|
|
void OrbitTransformController::setAngle(float angle)
|
|
{
|
|
if (!qFuzzyCompare(angle, m_angle)) {
|
|
m_angle = angle;
|
|
updateMatrix();
|
|
emit angleChanged();
|
|
}
|
|
}
|
|
|
|
float OrbitTransformController::angle() const
|
|
{
|
|
return m_angle;
|
|
}
|
|
|
|
void OrbitTransformController::updateMatrix()
|
|
{
|
|
m_matrix.setToIdentity();
|
|
m_matrix.rotate(m_angle, QVector3D(0.0f, 1.0f, 0.0f));
|
|
m_matrix.translate(m_radius, 0.0f, 0.0f);
|
|
m_target->setMatrix(m_matrix);
|
|
}
|
|
|
|
QT_END_NAMESPACE
|