diff options
Diffstat (limited to 'share')
5 files changed, 57 insertions, 26 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index cd98a23fe0..9cdb74fc12 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -127,6 +127,15 @@ Window { function addLightGizmo(obj) { + // Insert into first available gizmo + for (var i = 0; i < lightGizmos.length; ++i) { + if (!lightGizmos[i].targetNode) { + lightGizmos[i].targetNode = obj; + return; + } + } + + // No free gizmos available, create a new one var component = Qt.createComponent("LightGizmo.qml"); if (component.status === Component.Ready) { var gizmo = component.createObject(overlayScene, @@ -140,6 +149,14 @@ Window { function addCameraGizmo(obj) { + // Insert into first available gizmo + for (var i = 0; i < cameraGizmos.length; ++i) { + if (!cameraGizmos[i].targetNode) { + cameraGizmos[i].targetNode = obj; + return; + } + } + // No free gizmos available, create a new one var component = Qt.createComponent("CameraGizmo.qml"); if (component.status === Component.Ready) { var geometryName = _generalHelper.generateUniqueName("CameraGeometry"); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp index 605a3dd08f..0ffebc7246 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/camerageometry.cpp @@ -148,16 +148,19 @@ void CameraGeometry::fillVertexData(QByteArray &vertexData, QByteArray &indexDat auto dataPtr = reinterpret_cast<float *>(vertexData.data()); auto indexPtr = reinterpret_cast<quint16 *>(indexData.data()); + QMatrix4x4 m; QSSGRenderCamera *camera = m_camera->cameraNode(); - if (qobject_cast<QQuick3DOrthographicCamera *>(m_camera)) { - // For some reason ortho cameras show double what projection suggests, - // so give them doubled viewport to match visualization to actual camera view - camera->calculateProjection(QRectF(0, 0, m_viewPortRect.width() * 2.0, - m_viewPortRect.height() * 2.0)); - } else { - camera->calculateProjection(m_viewPortRect); + if (camera) { + if (qobject_cast<QQuick3DOrthographicCamera *>(m_camera)) { + // For some reason ortho cameras show double what projection suggests, + // so give them doubled viewport to match visualization to actual camera view + camera->calculateProjection(QRectF(0, 0, m_viewPortRect.width() * 2.0, + m_viewPortRect.height() * 2.0)); + } else { + camera->calculateProjection(m_viewPortRect); + } + m = camera->projection.inverted(); } - const QMatrix4x4 m = camera->projection.inverted(); const QVector3D farTopLeft = m * QVector3D(1.f, -1.f, 1.f); const QVector3D farBottomRight = m * QVector3D(-1.f, 1.f, 1.f); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index c369882b41..ba74636733 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -155,7 +155,7 @@ public slots: void emitParentChanged(QObject *child); protected: - QList<ServerNodeInstance> createInstances(const QVector<InstanceContainer> &container); + virtual QList<ServerNodeInstance> createInstances(const QVector<InstanceContainer> &container); void reparentInstances(const QVector<ReparentContainer> &containerVector); Internal::ChildrenChangeEventFilter *childrenChangeEventFilter(); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 6cdd935795..dcaf9a7345 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -409,6 +409,17 @@ void Qt5InformationNodeInstanceServer::modifyProperties( nodeInstanceClient()->valuesModified(createValuesModifiedCommand(properties)); } +QList<ServerNodeInstance> Qt5InformationNodeInstanceServer::createInstances( + const QVector<InstanceContainer> &container) +{ + const auto createdInstances = NodeInstanceServer::createInstances(container); + + if (m_editView3D) + createCameraAndLightGizmos(createdInstances); + + return createdInstances; +} + void Qt5InformationNodeInstanceServer::handleObjectPropertyChangeTimeout() { modifyVariantValue(m_changedNode, m_changedProperty, @@ -448,16 +459,27 @@ QObject *Qt5InformationNodeInstanceServer::findRootNodeOf3DViewport( return nullptr; } -void Qt5InformationNodeInstanceServer::findCamerasAndLights( - const QList<ServerNodeInstance> &instanceList, - QObjectList &cameras, QObjectList &lights) const +void Qt5InformationNodeInstanceServer::createCameraAndLightGizmos( + const QList<ServerNodeInstance> &instanceList) const { + QObjectList cameras; + QObjectList lights; + for (const ServerNodeInstance &instance : instanceList) { if (instance.isSubclassOf("QQuick3DCamera")) cameras << instance.internalObject(); else if (instance.isSubclassOf("QQuick3DAbstractLight")) lights << instance.internalObject(); } + + for (auto &obj : qAsConst(cameras)) { + QMetaObject::invokeMethod(m_editView3D, "addCameraGizmo", + Q_ARG(QVariant, objectToVariant(obj))); + } + for (auto &obj : qAsConst(lights)) { + QMetaObject::invokeMethod(m_editView3D, "addLightGizmo", + Q_ARG(QVariant, objectToVariant(obj))); + } } ServerNodeInstance Qt5InformationNodeInstanceServer::findViewPort( @@ -506,18 +528,7 @@ void Qt5InformationNodeInstanceServer::setup3DEditView(const QList<ServerNodeIns updateViewPortRect(); } - // Create camera and light gizmos - QObjectList cameras; - QObjectList lights; - findCamerasAndLights(instanceList, cameras, lights); - for (auto &obj : qAsConst(cameras)) { - QMetaObject::invokeMethod(m_editView3D, "addCameraGizmo", - Q_ARG(QVariant, objectToVariant(obj))); - } - for (auto &obj : qAsConst(lights)) { - QMetaObject::invokeMethod(m_editView3D, "addLightGizmo", - Q_ARG(QVariant, objectToVariant(obj))); - } + createCameraAndLightGizmos(instanceList); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h index 8a0f9837d5..0ac073655b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.h @@ -67,6 +67,7 @@ protected: bool isDirtyRecursiveForParentInstances(QQuickItem *item) const; void selectInstances(const QList<ServerNodeInstance> &instanceList); void modifyProperties(const QVector<InstancePropertyValueTriple> &properties); + QList<ServerNodeInstance> createInstances(const QVector<InstanceContainer> &container) override; private: void handleObjectPropertyChangeTimeout(); @@ -74,8 +75,7 @@ private: QObject *createEditView3D(QQmlEngine *engine); void setup3DEditView(const QList<ServerNodeInstance> &instanceList); QObject *findRootNodeOf3DViewport(const QList<ServerNodeInstance> &instanceList) const; - void findCamerasAndLights( const QList<ServerNodeInstance> &instanceList, - QObjectList &cameras, QObjectList &lights) const; + void createCameraAndLightGizmos(const QList<ServerNodeInstance> &instanceList) const; ServerNodeInstance findViewPort(const QList<ServerNodeInstance> &instanceList); QVector<InstancePropertyValueTriple> vectorToPropertyValue(const ServerNodeInstance &instance, const PropertyName &propertyName, |