forked from qt-creator/qt-creator
QmlDesigner: Add pivot point visualization line to 3D edit view
A line connecting the pivot point and object center is added to 3D edit view. Change-Id: Ic265e9a3ab2895761cc92b94c778d68509ef36f1 Fixes: QDS-1474 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -2,10 +2,12 @@ HEADERS += $$PWD/generalhelper.h \
|
||||
$$PWD/mousearea3d.h \
|
||||
$$PWD/camerageometry.h \
|
||||
$$PWD/gridgeometry.h \
|
||||
$$PWD/selectionboxgeometry.h
|
||||
$$PWD/selectionboxgeometry.h \
|
||||
$$PWD/linegeometry.h
|
||||
|
||||
SOURCES += $$PWD/generalhelper.cpp \
|
||||
$$PWD/mousearea3d.cpp \
|
||||
$$PWD/camerageometry.cpp \
|
||||
$$PWD/gridgeometry.cpp \
|
||||
$$PWD/selectionboxgeometry.cpp
|
||||
$$PWD/selectionboxgeometry.cpp \
|
||||
$$PWD/linegeometry.cpp
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef QUICK3D_MODULE
|
||||
|
||||
#include "linegeometry.h"
|
||||
|
||||
#include <QtQuick3DRuntimeRender/private/qssgrendergeometry_p.h>
|
||||
|
||||
namespace QmlDesigner {
|
||||
namespace Internal {
|
||||
|
||||
LineGeometry::LineGeometry()
|
||||
: QQuick3DGeometry()
|
||||
{
|
||||
}
|
||||
|
||||
LineGeometry::~LineGeometry()
|
||||
{
|
||||
}
|
||||
|
||||
QVector3D LineGeometry::startPos() const
|
||||
{
|
||||
return m_startPos;
|
||||
}
|
||||
|
||||
QVector3D LineGeometry::endPos() const
|
||||
{
|
||||
return m_endPos;
|
||||
}
|
||||
|
||||
void LineGeometry::setStartPos(const QVector3D &pos)
|
||||
{
|
||||
if (pos != m_startPos) {
|
||||
m_startPos = pos;
|
||||
emit startPosChanged();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void LineGeometry::setEndPos(const QVector3D &pos)
|
||||
{
|
||||
if (pos != m_endPos) {
|
||||
m_endPos = pos;
|
||||
emit endPosChanged();
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
QSSGRenderGraphObject *LineGeometry::updateSpatialNode(QSSGRenderGraphObject *node)
|
||||
{
|
||||
node = QQuick3DGeometry::updateSpatialNode(node);
|
||||
QSSGRenderGeometry *geometry = static_cast<QSSGRenderGeometry *>(node);
|
||||
geometry->clear();
|
||||
|
||||
QByteArray vertexData;
|
||||
vertexData.resize(2 * 3 * 4); // 2 vertices of 3 floats each 4 bytes
|
||||
float *dataPtr = reinterpret_cast<float *>(vertexData.data());
|
||||
|
||||
dataPtr[0] = m_startPos[0];
|
||||
dataPtr[1] = m_startPos[1];
|
||||
dataPtr[2] = -m_startPos[2];
|
||||
dataPtr[3] = m_endPos[0];
|
||||
dataPtr[4] = m_endPos[1];
|
||||
dataPtr[5] = -m_endPos[2];
|
||||
|
||||
geometry->addAttribute(QSSGRenderGeometry::Attribute::PositionSemantic, 0,
|
||||
QSSGRenderGeometry::Attribute::ComponentType::F32Type);
|
||||
geometry->setStride(12);
|
||||
geometry->setVertexData(vertexData);
|
||||
geometry->setPrimitiveType(QSSGRenderGeometry::Lines);
|
||||
geometry->setBounds(m_startPos, m_endPos);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif // QUICK3D_MODULE
|
||||
@@ -0,0 +1,70 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef QUICK3D_MODULE
|
||||
|
||||
#include <QtQuick3D/private/qquick3dgeometry_p.h>
|
||||
#include <QtGui/QVector3D>
|
||||
|
||||
namespace QmlDesigner {
|
||||
namespace Internal {
|
||||
|
||||
class LineGeometry : public QQuick3DGeometry
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QVector3D startPos READ startPos WRITE setStartPos NOTIFY startPosChanged)
|
||||
Q_PROPERTY(QVector3D endPos READ endPos WRITE setEndPos NOTIFY endPosChanged)
|
||||
|
||||
public:
|
||||
LineGeometry();
|
||||
~LineGeometry() override;
|
||||
|
||||
QVector3D startPos() const;
|
||||
QVector3D endPos() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setStartPos(const QVector3D &pos);
|
||||
void setEndPos(const QVector3D &pos);
|
||||
|
||||
Q_SIGNALS:
|
||||
void startPosChanged();
|
||||
void endPosChanged();
|
||||
|
||||
protected:
|
||||
QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
|
||||
|
||||
private:
|
||||
QVector3D m_startPos;
|
||||
QVector3D m_endPos;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QML_DECLARE_TYPE(QmlDesigner::Internal::LineGeometry)
|
||||
|
||||
#endif // QUICK3D_MODULE
|
||||
Reference in New Issue
Block a user