diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2020-02-25 14:37:45 +0200 |
---|---|---|
committer | Norihito Tohge <norihito.tohge@qt.io> | 2020-03-04 06:27:45 +0000 |
commit | a77ef4ca7f53e35980d3b2237140d6d8a0571343 (patch) | |
tree | 0f8a4f18a83608bf9db0928af2fb876e5b0956b5 | |
parent | 59560fb81771b9075bcaa9068f99b5ff4ee85b44 (diff) |
QmlDesigner: Port Edit 3D View to 5.15
Qt 5.15.0 is now the minimum version to enable Edit 3D view.
Change-Id: I15cee59e6a7665477825caa0ae412fc6ac7b570a
Fixes: QDS-1694
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
33 files changed, 231 insertions, 227 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml index 488198911b..b58732dd54 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/Arrow.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 DirectionalDraggable { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/AutoScaleHelper.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/AutoScaleHelper.qml index 16c3dd8680..c16c47ddd7 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/AutoScaleHelper.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/AutoScaleHelper.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Node { @@ -45,12 +45,12 @@ Node { Connections { target: camera - onSceneTransformChanged: updateScale() + function onSceneTransformChanged() { updateScale() } } Connections { target: _generalHelper - onOverlayUpdateNeeded: updateScale() + function onOverlayUpdateNeeded() { updateScale() } } function getScale(baseScale) diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml index 34808aecde..7481d24225 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelper.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 View3D { id: axisHelperView @@ -37,7 +37,7 @@ View3D { Node { OrthographicCamera { id: axisHelperCamera - rotation: editCameraCtrl.camera ? editCameraCtrl.camera.rotation : Qt.vector3d(0, 0, 0) + rotation: editCameraCtrl.camera ? editCameraCtrl.camera.rotation : Qt.quaternion(1, 0, 0, 0) position: editCameraCtrl.camera ? editCameraCtrl.camera.position.minus(editCameraCtrl._lookAtPoint) .normalized().times(600) : Qt.vector3d(0, 0, 0) } @@ -54,7 +54,7 @@ View3D { AxisHelperArm { id: armX - rotation: Qt.vector3d(0, 0, -90) + eulerRotation: Qt.vector3d(0, 0, -90) color: Qt.rgba(1, 0, 0, 1) hoverColor: Qt.lighter(Qt.rgba(1, 0, 0, 1)) view3D: axisHelperView @@ -64,7 +64,7 @@ View3D { AxisHelperArm { id: armY - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) color: Qt.rgba(0, 0.6, 0, 1) hoverColor: Qt.lighter(Qt.rgba(0, 0.6, 0, 1)) view3D: axisHelperView @@ -74,7 +74,7 @@ View3D { AxisHelperArm { id: armZ - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) color: Qt.rgba(0, 0, 1, 1) hoverColor: Qt.lighter(Qt.rgba(0, 0, 1, 1)) view3D: axisHelperView diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelperArm.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelperArm.qml index 23d2f9bbaf..0fd5ad1e98 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelperArm.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/AxisHelperArm.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 Node { id: armRoot diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraFrustum.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraFrustum.qml new file mode 100644 index 0000000000..f038b9b74d --- /dev/null +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraFrustum.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** 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. +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick3D 1.15 +import CameraGeometry 1.0 + +Model { + id: cameraFrustum + + property alias geometryName: cameraGeometry.name // Name must be unique for each geometry + property alias viewPortRect: cameraGeometry.viewPortRect + property Node targetNode: null + property Node scene: null + property bool selected: false + + function updateGeometry() + { + cameraGeometry.update(); + } + + position: targetNode ? targetNode.scenePosition : Qt.vector3d(0, 0, 0) + rotation: targetNode ? targetNode.sceneRotation : Qt.quaternion(1, 0, 0, 0) + + geometry: cameraGeometry + materials: [ + DefaultMaterial { + id: defaultMaterial + emissiveColor: cameraFrustum.selected ? "#FF0000" : "#555555" + lighting: DefaultMaterial.NoLighting + cullingMode: Material.DisableCulling + } + ] + + CameraGeometry { + id: cameraGeometry + camera: cameraFrustum.scene && cameraFrustum.targetNode ? cameraFrustum.targetNode : null + } +} diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml index 1a9dd55429..bd55fd4a00 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/CameraGizmo.qml @@ -24,37 +24,33 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 -import CameraGeometry 1.0 IconGizmo { id: cameraGizmo + property var frustumModel: null + iconSource: "qrc:///qtquickplugin/mockfiles/images/editor_camera.png" - property alias geometryName: cameraGeometry.name // Name must be unique for each geometry - property alias viewPortRect: cameraGeometry.viewPortRect - onActiveSceneChanged: { - if (activeScene == scene) - cameraGeometry.update(); - } + function connectFrustum(frustum) + { + frustumModel = frustum; + + frustum.selected = selected; + frustum.selected = Qt.binding(function() {return selected;}); - Model { - id: gizmoModel - geometry: cameraGeometry - visible: cameraGizmo.visible - materials: [ - DefaultMaterial { - id: defaultMaterial - emissiveColor: cameraGizmo.selected ? "#FF0000" : "#555555" - lighting: DefaultMaterial.NoLighting - cullingMode: Material.DisableCulling - } - ] + frustum.scene = scene; + frustum.scene = Qt.binding(function() {return scene;}); + + frustum.targetNode = targetNode; + frustum.targetNode = Qt.binding(function() {return targetNode;}); + + frustum.visible = visible; + frustum.visible = Qt.binding(function() {return visible;}); } - CameraGeometry { - id: cameraGeometry - camera: cameraGizmo.scene && cameraGizmo.targetNode ? cameraGizmo.targetNode : null + onActiveSceneChanged: { + if (frustumModel && activeScene == scene) + frustumModel.updateGeometry(); } } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml index 62096142a8..af24bac6fb 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/DirectionalDraggable.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Model { @@ -61,8 +61,6 @@ Model { var maskedPosition = Qt.vector3d(planePos.x, 0, 0); _posPressed = planePos.x; _scenePosPressed = mouseArea.dragHelper.mapPositionToScene(maskedPosition); - if (targetNode.orientation === Node.RightHanded) - _scenePosPressed.z = -_scenePosPressed.z; _targetStartPos = mouseArea.pivotScenePosition(targetNode); pressed(mouseArea); } @@ -71,8 +69,6 @@ Model { { var maskedPosition = Qt.vector3d(planePos.x, 0, 0); var scenePointerPos = mouseArea.dragHelper.mapPositionToScene(maskedPosition); - if (targetNode.orientation === Node.RightHanded) - scenePointerPos.z = -scenePointerPos.z; return scenePointerPos.minus(_scenePosPressed); } @@ -99,7 +95,7 @@ Model { y: -1.5 width: 12 height: 3 - rotation: Qt.vector3d(0, 0, 90) + eulerRotation: Qt.vector3d(0, 0, 90) grabsMouse: targetNode active: rootModel.active dragHelper: rootModel.dragHelper @@ -116,7 +112,7 @@ Model { y: -1.5 width: 12 height: 3 - rotation: Qt.vector3d(0, 90, 90) + eulerRotation: Qt.vector3d(0, 90, 90) grabsMouse: targetNode active: rootModel.active dragHelper: rootModel.dragHelper diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml index f6bd540fe5..207dc94199 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditCameraController.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.12 -import QtQuick3D 1.0 +import QtQuick3D 1.15 Item { id: cameraCtrl @@ -43,8 +43,8 @@ Item { property int _button property real _zoomFactor: 1 property Camera _prevCamera: null - readonly property vector3d _defaultCameraPosition: Qt.vector3d(0, 600, -600) - readonly property vector3d _defaultCameraRotation: Qt.vector3d(45, 0, 0) + readonly property vector3d _defaultCameraPosition: Qt.vector3d(0, 600, 600) + readonly property vector3d _defaultCameraRotation: Qt.vector3d(-45, 0, 0) readonly property real _defaultCameraLookAtDistance: _defaultCameraPosition.length() function restoreCameraState(cameraState) @@ -68,7 +68,7 @@ Item { _lookAtPoint = Qt.vector3d(0, 0, 0); _zoomFactor = 1; camera.position = _defaultCameraPosition; - camera.rotation = _defaultCameraRotation; + camera.eulerRotation = _defaultCameraRotation; _generalHelper.zoomCamera(camera, 0, _defaultCameraLookAtDistance, _lookAtPoint, _zoomFactor, false); } @@ -92,7 +92,7 @@ Item { if (!camera) return; - camera.rotation = rotation; + camera.eulerRotation = rotation; var newLookAtAndZoom = _generalHelper.focusObjectToCamera( camera, _defaultCameraLookAtDistance, targetObject, view3d, _zoomFactor, updateZoom); _lookAtPoint = newLookAtAndZoom.toVector3d(); @@ -151,7 +151,7 @@ Item { onPressed: { if (cameraCtrl.camera && mouse.modifiers === Qt.AltModifier) { cameraCtrl._dragging = true; - cameraCtrl._startRotation = cameraCtrl.camera.rotation; + cameraCtrl._startRotation = cameraCtrl.camera.eulerRotation; cameraCtrl._startPosition = cameraCtrl.camera.position; cameraCtrl._startLookAtPoint = _lookAtPoint; cameraCtrl._pressPoint = Qt.vector3d(mouse.x, mouse.y, 0); diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml index d60ee38c4a..3a7f81c90c 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/EditView3D.qml @@ -25,7 +25,7 @@ import QtQuick 2.12 import QtQuick.Window 2.12 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import QtQuick.Controls 2.0 import QtGraphicalEffects 1.0 import MouseArea3D 1.0 @@ -111,7 +111,7 @@ Item { if (editView) { var targetNode = selectedNodes.length > 0 ? selectionBoxes[0].model : null; - cameraControl.focusObject(targetNode, editView.camera.rotation, true); + cameraControl.focusObject(targetNode, editView.camera.eulerRotation, true); } } @@ -252,7 +252,7 @@ Item { // No free gizmos available, create a new one var component = Qt.createComponent("LightGizmo.qml"); if (component.status === Component.Ready) { - var gizmo = component.createObject(overlayScene, + var gizmo = component.createObject(overlayView, {"view3D": overlayView, "targetNode": obj, "selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene}); @@ -274,19 +274,24 @@ Item { } } // No free gizmos available, create a new one - var component = Qt.createComponent("CameraGizmo.qml"); - if (component.status === Component.Ready) { + var gizmoComponent = Qt.createComponent("CameraGizmo.qml"); + var frustumComponent = Qt.createComponent("CameraFrustum.qml"); + if (gizmoComponent.status === Component.Ready && frustumComponent.status === Component.Ready) { var geometryName = _generalHelper.generateUniqueName("CameraGeometry"); - var gizmo = component.createObject( + var frustum = frustumComponent.createObject( overlayScene, - {"view3D": overlayView, "targetNode": obj, "geometryName": geometryName, - "viewPortRect": viewPortRect, "selectedNodes": selectedNodes, - "scene": scene, "activeScene": activeScene}); + {"geometryName": geometryName, "viewPortRect": viewPortRect}); + var gizmo = gizmoComponent.createObject( + overlayView, + {"view3D": overlayView, "targetNode": obj, + "selectedNodes": selectedNodes, "scene": scene, "activeScene": activeScene}); + cameraGizmos[cameraGizmos.length] = gizmo; gizmo.clicked.connect(handleObjectClicked); - gizmo.viewPortRect = Qt.binding(function() {return viewPortRect;}); gizmo.selectedNodes = Qt.binding(function() {return selectedNodes;}); gizmo.activeScene = Qt.binding(function() {return activeScene;}); + frustum.viewPortRect = Qt.binding(function() {return viewPortRect;}); + gizmo.connectFrustum(frustum); } } @@ -350,7 +355,7 @@ Item { clipFar: viewRoot.editView ? viewRoot.editView.perpectiveCamera.clipFar : 1000 clipNear: viewRoot.editView ? viewRoot.editView.perpectiveCamera.clipNear : 1 position: viewRoot.editView ? viewRoot.editView.perpectiveCamera.position : Qt.vector3d(0, 0, 0) - rotation: viewRoot.editView ? viewRoot.editView.perpectiveCamera.rotation : Qt.vector3d(0, 0, 0) + rotation: viewRoot.editView ? viewRoot.editView.perpectiveCamera.rotation : Qt.quaternion(1, 0, 0, 0) } OrthographicCamera { @@ -358,7 +363,7 @@ Item { clipFar: viewRoot.editView ? viewRoot.editView.orthoCamera.clipFar : 1000 clipNear: viewRoot.editView ? viewRoot.editView.orthoCamera.clipNear : 1 position: viewRoot.editView ? viewRoot.editView.orthoCamera.position : Qt.vector3d(0, 0, 0) - rotation: viewRoot.editView ? viewRoot.editView.orthoCamera.rotation : Qt.vector3d(0, 0, 0) + rotation: viewRoot.editView ? viewRoot.editView.orthoCamera.rotation : Qt.quaternion(1, 0, 0, 0) scale: viewRoot.editView ? viewRoot.editView.orthoCamera.scale : Qt.vector3d(0, 0, 0) } @@ -404,15 +409,14 @@ Item { view3D: overlayView dragHelper: gizmoDragHelper - onRotateCommit: viewRoot.commitObjectProperty(viewRoot.selectedNode, "rotation") - onRotateChange: viewRoot.changeObjectProperty(viewRoot.selectedNode, "rotation") + onRotateCommit: viewRoot.commitObjectProperty(viewRoot.selectedNode, "eulerRotation") + onRotateChange: viewRoot.changeObjectProperty(viewRoot.selectedNode, "eulerRotation") } AutoScaleHelper { id: autoScale view3D: overlayView position: moveGizmo.scenePosition - orientation: moveGizmo.orientation } Line3D { @@ -421,27 +425,20 @@ Item { name: "3D Edit View Pivot Line" color: "#ddd600" - function flipIfNeeded(vec) { - if (!viewRoot.selectedNode || viewRoot.selectedNode.orientation === Node.LeftHanded) - return vec; - else - return Qt.vector3d(vec.x, vec.y, -vec.z); - } - - startPos: viewRoot.selectedNode ? flipIfNeeded(viewRoot.selectedNode.scenePosition) - : Qt.vector3d(0, 0, 0) + startPos: viewRoot.selectedNode ? viewRoot.selectedNode.scenePosition + : Qt.vector3d(0, 0, 0) Connections { target: viewRoot - onSelectedNodeChanged: { - pivotLine.endPos = pivotLine.flipIfNeeded(gizmoDragHelper.pivotScenePosition( - viewRoot.selectedNode)); + function onSelectedNodeChanged() + { + pivotLine.endPos = gizmoDragHelper.pivotScenePosition(viewRoot.selectedNode); } } Connections { target: viewRoot.selectedNode - onSceneTransformChanged: { - pivotLine.endPos = pivotLine.flipIfNeeded(gizmoDragHelper.pivotScenePosition( - viewRoot.selectedNode)); + function onSceneTransformChanged() + { + pivotLine.endPos = gizmoDragHelper.pivotScenePosition(viewRoot.selectedNode); } } @@ -538,6 +535,32 @@ Item { } } + Rectangle { + id: rotateGizmoLabel + color: "white" + x: rotateGizmo.currentMousePos.x - (10 + width) + y: rotateGizmo.currentMousePos.y - (10 + height) + width: rotateGizmoLabelText.width + 4 + height: rotateGizmoLabelText.height + 4 + border.width: 1 + visible: rotateGizmo.dragging + parent: rotateGizmo.view3D + + Text { + id: rotateGizmoLabelText + text: { + var l = Qt.locale(); + if (rotateGizmo.targetNode) { + var degrees = rotateGizmo.currentAngle * (180 / Math.PI); + return qsTr(Number(degrees).toLocaleString(l, 'f', 1)); + } else { + return ""; + } + } + anchors.centerIn: parent + } + } + EditCameraController { id: cameraControl camera: viewRoot.editView ? viewRoot.editView.camera : null diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/HelperGrid.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/HelperGrid.qml index 3d247b71e2..38ea65034b 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/HelperGrid.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/HelperGrid.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import GridGeometry 1.0 Node { @@ -34,7 +34,7 @@ Node { property alias step: gridGeometry.step property alias subdivAlpha: subGridMaterial.opacity - rotation.x: 90 + eulerRotation.x: 90 // Note: Only one instance of HelperGrid is supported, as the geometry names are fixed @@ -89,7 +89,7 @@ Node { ] } Model { // X Axis - rotation.z: 90 + eulerRotation.z: 90 geometry: GridGeometry { lines: gridGeometry.lines step: gridGeometry.step diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml index 77f3a54a05..b42bf4cc2c 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/IconGizmo.qml @@ -24,10 +24,10 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import QtGraphicalEffects 1.12 -Node { +Item { id: iconGizmo property Node activeScene: null @@ -50,16 +50,13 @@ Node { signal positionCommit() signal clicked(Node node, bool multi) - position: targetNode ? targetNode.scenePosition : Qt.vector3d(0, 0, 0) - rotation: targetNode ? targetNode.sceneRotation : Qt.vector3d(0, 0, 0) visible: activeScene === scene && (targetNode ? targetNode.visible : false) Overlay2D { id: iconOverlay - targetNode: iconGizmo + targetNode: iconGizmo.targetNode targetView: view3D visible: iconGizmo.visible && !isBehindCamera - parent: view3D Rectangle { id: iconRect diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml index 7c9953e9bb..9f9f0d2326 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/LightGizmo.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 IconGizmo { id: lightGizmo diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/Line3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/Line3D.qml index 3c0afc0828..b4b911a51d 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/Line3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/Line3D.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import LineGeometry 1.0 Node { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml index a6e32441df..adb6f23a48 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/MoveGizmo.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Node { @@ -40,13 +40,13 @@ Node { property MouseArea3D dragHelper: null position: dragHelper.pivotScenePosition(targetNode) - orientation: targetNode ? targetNode.orientation : Node.LeftHanded onTargetNodeChanged: position = dragHelper.pivotScenePosition(targetNode) Connections { target: moveGizmo.targetNode - onSceneTransformChanged: { + function onSceneTransformChanged() + { moveGizmo.position = moveGizmo.dragHelper.pivotScenePosition(moveGizmo.targetNode); } } @@ -55,14 +55,11 @@ Node { signal positionMove() Node { - rotation: globalOrientation || !moveGizmo.targetNode ? Qt.vector3d(0, 0, 0) + rotation: globalOrientation || !moveGizmo.targetNode ? Qt.quaternion(1, 0, 0, 0) : moveGizmo.targetNode.sceneRotation - rotationOrder: moveGizmo.targetNode ? moveGizmo.targetNode.rotationOrder : Node.YXZ - orientation: moveGizmo.orientation - Arrow { id: arrowX - rotation: Qt.vector3d(0, 0, -90) + eulerRotation: Qt.vector3d(0, 0, -90) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(1, 0, 0, 1)) : Qt.rgba(1, 0, 0, 1) @@ -76,7 +73,7 @@ Node { Arrow { id: arrowY - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1)) : Qt.rgba(0, 0.6, 0, 1) @@ -90,7 +87,7 @@ Node { Arrow { id: arrowZ - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0, 1, 1)) : Qt.rgba(0, 0, 1, 1) @@ -108,7 +105,7 @@ Node { y: 10 z: 10 - rotation: Qt.vector3d(0, 90, 0) + eulerRotation: Qt.vector3d(0, 90, 0) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(1, 0, 0, 1)) : Qt.rgba(1, 0, 0, 1) @@ -126,7 +123,7 @@ Node { x: 10 z: 10 - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1)) : Qt.rgba(0, 0.6, 0, 1) @@ -144,7 +141,7 @@ Node { x: 10 y: 10 - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) targetNode: moveGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0, 1, 1)) : Qt.rgba(0, 0, 1, 1) diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/Overlay2D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/Overlay2D.qml index 87528eddd3..d60afc7176 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/Overlay2D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/Overlay2D.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 Item { id: root @@ -39,29 +39,26 @@ Item { Connections { target: targetNode - onSceneTransformChanged: updateOverlay() + function onSceneTransformChanged() { updateOverlay() } } Connections { target: targetView.camera - onSceneTransformChanged: updateOverlay() + function onSceneTransformChanged() { updateOverlay() } } Connections { target: _generalHelper - onOverlayUpdateNeeded: updateOverlay() + function onOverlayUpdateNeeded() { updateOverlay() } } function updateOverlay() { var scenePos = targetNode ? targetNode.scenePosition : Qt.vector3d(0, 0, 0); // Need separate variable as scenePos is reference to read-only property - var scenePosZ = scenePos.z - if (targetNode && targetNode.orientation === Node.RightHanded) - scenePosZ = -scenePosZ; var scenePosWithOffset = Qt.vector3d(scenePos.x + offset.x, scenePos.y + offset.y, - scenePosZ + offset.z); + scenePos.z + offset.z); var viewPos = targetView ? targetView.mapFrom3DScene(scenePosWithOffset) : Qt.vector3d(0, 0, 0); root.x = viewPos.x; diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml index 23e4b79c82..6dce8e5208 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarDraggable.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Model { @@ -48,7 +48,6 @@ Model { signal dragged(var mouseArea, vector3d sceneRelativeDistance, vector2d relativeDistance) signal released(var mouseArea, vector3d sceneRelativeDistance, vector2d relativeDistance) - rotationOrder: Node.XYZr source: "#Rectangle" DefaultMaterial { @@ -66,8 +65,6 @@ Model { _planePosPressed = planePos; _scenePosPressed = mouseArea.dragHelper.mapPositionToScene(planePos.toVector3d()); - if (targetNode.orientation === Node.RightHanded) - _scenePosPressed.z = -_scenePosPressed.z; _targetStartPos = mouseArea.pivotScenePosition(targetNode); pressed(mouseArea); } @@ -75,8 +72,6 @@ Model { function calcRelativeDistance(mouseArea, planePos) { var scenePointerPos = mouseArea.dragHelper.mapPositionToScene(planePos.toVector3d()); - if (targetNode.orientation === Node.RightHanded) - scenePointerPos.z = -scenePointerPos.z; return scenePointerPos.minus(_scenePosPressed); } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarMoveHandle.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarMoveHandle.qml index 591f1196de..5f8b279922 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarMoveHandle.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarMoveHandle.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 PlanarDraggable { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarScaleHandle.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarScaleHandle.qml index 7fd00e66f7..5515fa96ce 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarScaleHandle.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/PlanarScaleHandle.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 PlanarDraggable { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateGizmo.qml index a1f5a4b509..54d2d3a0a3 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateGizmo.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Node { @@ -41,13 +41,13 @@ Node { property point currentMousePos position: dragHelper.pivotScenePosition(targetNode) - orientation: targetNode ? targetNode.orientation : Node.LeftHanded onTargetNodeChanged: position = dragHelper.pivotScenePosition(targetNode) Connections { target: rotateGizmo.targetNode - onSceneTransformChanged: { + function onSceneTransformChanged() + { rotateGizmo.position = rotateGizmo.dragHelper.pivotScenePosition(rotateGizmo.targetNode); } } @@ -70,44 +70,16 @@ Node { copyRingProperties(rotRingZ) } - Rectangle { - id: angleLabel - color: "white" - x: rotateGizmo.currentMousePos.x - (10 + width) - y: rotateGizmo.currentMousePos.y - (10 + height) - width: gizmoLabelText.width + 4 - height: gizmoLabelText.height + 4 - border.width: 1 - visible: rotateGizmo.dragging - parent: rotateGizmo.view3D - - Text { - id: gizmoLabelText - text: { - var l = Qt.locale(); - if (rotateGizmo.targetNode) { - var degrees = currentAngle * (180 / Math.PI); - return qsTr(Number(degrees).toLocaleString(l, 'f', 1)); - } else { - return ""; - } - } - anchors.centerIn: parent - } - } - Node { id: rotNode - rotation: globalOrientation || !rotateGizmo.targetNode ? Qt.vector3d(0, 0, 0) + rotation: globalOrientation || !rotateGizmo.targetNode ? Qt.quaternion(1, 0, 0, 0) : rotateGizmo.targetNode.sceneRotation - rotationOrder: rotateGizmo.targetNode ? rotateGizmo.targetNode.rotationOrder : Node.YXZ - orientation: rotateGizmo.orientation visible: !rotateGizmo.dragging && !freeRotator.dragging RotateRing { id: rotRingX objectName: "Rotate Ring X" - rotation: Qt.vector3d(0, 90, 0) + eulerRotation: Qt.vector3d(0, 90, 0) targetNode: rotateGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(1, 0, 0, 1)) : Qt.rgba(1, 0, 0, 1) @@ -125,7 +97,7 @@ Node { RotateRing { id: rotRingY objectName: "Rotate Ring Y" - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) targetNode: rotateGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1)) : Qt.rgba(0, 0.6, 0, 1) @@ -145,7 +117,7 @@ Node { RotateRing { id: rotRingZ objectName: "Rotate Ring Z" - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) targetNode: rotateGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0, 1, 1)) : Qt.rgba(0, 0, 1, 1) @@ -174,7 +146,6 @@ Node { view3D: rotateGizmo.view3D active: false visible: rotRingX.dragging || rotRingY.dragging || rotRingZ.dragging - orientation: rotateGizmo.orientation } RotateRing { @@ -223,16 +194,14 @@ Node { // Need to recreate vector as we need to adjust it and we can't do that on reference of // scenePosition, which is read-only property var scenePos = rotateGizmo.dragHelper.pivotScenePosition(rotateGizmo.targetNode); - if (rotateGizmo.targetNode && rotateGizmo.targetNode.orientation === Node.RightHanded) - scenePos.z = -scenePos.z _targetPosOnScreen = view3D.mapFrom3DScene(scenePos); _targetPosOnScreen.z = 0; _pointerPosPressed = Qt.vector3d(screenPos.x, screenPos.y, 0); // Recreate vector so we don't follow the changes in targetNode.rotation - _startRotation = Qt.vector3d(rotateGizmo.targetNode.rotation.x, - rotateGizmo.targetNode.rotation.y, - rotateGizmo.targetNode.rotation.z); + _startRotation = Qt.vector3d(rotateGizmo.targetNode.eulerRotation.x, + rotateGizmo.targetNode.eulerRotation.y, + rotateGizmo.targetNode.eulerRotation.z); dragging = true; } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml index d5f9370a33..fc803c679a 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/RotateRing.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Model { @@ -80,18 +80,16 @@ Model { // Need to recreate vector as we need to adjust it and we can't do that on reference of // scenePosition, which is read-only property var scenePos = mouseAreaMain.pivotScenePosition(targetNode); - if (targetNode && targetNode.orientation === Node.RightHanded) - scenePos.z = -scenePos.z _targetPosOnScreen = view3D.mapFrom3DScene(scenePos); _targetPosOnScreen.z = 0; _pointerPosPressed = Qt.vector3d(screenPos.x, screenPos.y, 0); _trackBall = angle < 0.1; - // Recreate vector so we don't follow the changes in targetNode.rotation - _startRotation = Qt.vector3d(targetNode.rotation.x, - targetNode.rotation.y, - targetNode.rotation.z); + // Recreate vector so we don't follow the changes in targetNode.eulerRotation + _startRotation = Qt.vector3d(targetNode.eulerRotation.x, + targetNode.eulerRotation.y, + targetNode.eulerRotation.z); currentAngle = 0; currentMousePos = screenPos; } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleGizmo.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleGizmo.qml index 7a45d370d5..ccfc45b621 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleGizmo.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleGizmo.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 Node { @@ -39,13 +39,13 @@ Node { property MouseArea3D dragHelper: null position: dragHelper.pivotScenePosition(targetNode) - orientation: targetNode ? targetNode.orientation : Node.LeftHanded onTargetNodeChanged: position = dragHelper.pivotScenePosition(targetNode) Connections { target: scaleGizmo.targetNode - onSceneTransformChanged: { + function onSceneTransformChanged() + { scaleGizmo.position = scaleGizmo.dragHelper.pivotScenePosition(scaleGizmo.targetNode); } } @@ -54,13 +54,11 @@ Node { signal scaleChange() Node { - rotation: !targetNode ? Qt.vector3d(0, 0, 0) : targetNode.sceneRotation - rotationOrder: scaleGizmo.targetNode ? scaleGizmo.targetNode.rotationOrder : Node.YXZ - orientation: scaleGizmo.orientation + rotation: !targetNode ? Qt.quaternion(1, 0, 0, 0) : targetNode.sceneRotation ScaleRod { id: scaleRodX - rotation: Qt.vector3d(0, 0, -90) + eulerRotation: Qt.vector3d(0, 0, -90) axis: Qt.vector3d(1, 0, 0) targetNode: scaleGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(1, 0, 0, 1)) @@ -75,7 +73,7 @@ Node { ScaleRod { id: scaleRodY - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) axis: Qt.vector3d(0, 1, 0) targetNode: scaleGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0.6, 0, 1)) @@ -90,7 +88,7 @@ Node { ScaleRod { id: scaleRodZ - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) axis: Qt.vector3d(0, 0, 1) targetNode: scaleGizmo.targetNode color: highlightOnHover && (hovering || dragging) ? Qt.lighter(Qt.rgba(0, 0, 1, 1)) @@ -109,7 +107,7 @@ Node { y: 10 z: 10 - rotation: Qt.vector3d(0, 90, 0) + eulerRotation: Qt.vector3d(0, 90, 0) axisX: Qt.vector3d(0, 0, -1) axisY: Qt.vector3d(0, 1, 0) targetNode: scaleGizmo.targetNode @@ -129,7 +127,7 @@ Node { x: 10 z: 10 - rotation: Qt.vector3d(90, 0, 0) + eulerRotation: Qt.vector3d(90, 0, 0) axisX: Qt.vector3d(1, 0, 0) axisY: Qt.vector3d(0, 0, 1) targetNode: scaleGizmo.targetNode @@ -149,7 +147,7 @@ Node { x: 10 y: 10 - rotation: Qt.vector3d(0, 0, 0) + eulerRotation: Qt.vector3d(0, 0, 0) axisX: Qt.vector3d(1, 0, 0) axisY: Qt.vector3d(0, 1, 0) targetNode: scaleGizmo.targetNode diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleRod.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleRod.qml index b3089b301e..ead4f1458d 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleRod.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/ScaleRod.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import MouseArea3D 1.0 DirectionalDraggable { diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/SceneView3D.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/SceneView3D.qml index 5a57595dfb..e44e9d9512 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/SceneView3D.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/SceneView3D.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.12 -import QtQuick3D 1.14 +import QtQuick3D 1.15 View3D { id: sceneView @@ -74,18 +74,18 @@ View3D { // point. PerspectiveCamera { id: scenePerspectiveCamera - z: -600 + z: 600 y: 600 - rotation.x: 45 + eulerRotation.x: -45 clipFar: 100000 clipNear: 1 } OrthographicCamera { id: sceneOrthoCamera - z: -600 + z: 600 y: 600 - rotation.x: 45 + eulerRotation.x: -45 clipFar: 100000 clipNear: -10000 } diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/SelectionBox.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/SelectionBox.qml index 10c443efce..256cefa97b 100644 --- a/share/qtcreator/qml/qmlpuppet/mockfiles/SelectionBox.qml +++ b/share/qtcreator/qml/qmlpuppet/mockfiles/SelectionBox.qml @@ -24,7 +24,7 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick3D 1.0 +import QtQuick3D 1.15 import SelectionBoxGeometry 1.0 Node { @@ -48,11 +48,9 @@ Node { geometry: selectionBoxGeometry scale: selectionBox.targetNode ? selectionBox.targetNode.scale : Qt.vector3d(1, 1, 1) - rotation: selectionBox.targetNode ? selectionBox.targetNode.rotation : Qt.vector3d(0, 0, 0) + rotation: selectionBox.targetNode ? selectionBox.targetNode.rotation : Qt.quaternion(1, 0, 0, 0) position: selectionBox.targetNode ? selectionBox.targetNode.position : Qt.vector3d(0, 0, 0) pivot: selectionBox.targetNode ? selectionBox.targetNode.pivot : Qt.vector3d(0, 0, 0) - orientation: selectionBox.targetNode ? selectionBox.targetNode.orientation : Node.LeftHanded - rotationOrder: selectionBox.targetNode ? selectionBox.targetNode.rotationOrder : Node.YXZ visible: selectionBox.targetNode && !selectionBoxGeometry.isEmpty diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp index c123a68d47..30c2e3a2ec 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/generalhelper.cpp @@ -28,9 +28,9 @@ #include "selectionboxgeometry.h" +#include <QtQuick3D/qquick3dobject.h> #include <QtQuick3D/private/qquick3dorthographiccamera_p.h> #include <QtQuick3D/private/qquick3dperspectivecamera_p.h> -#include <QtQuick3D/private/qquick3dobject_p_p.h> #include <QtQuick3D/private/qquick3dcamera_p.h> #include <QtQuick3D/private/qquick3dnode_p.h> #include <QtQuick3D/private/qquick3dmodel_p.h> @@ -85,17 +85,17 @@ void GeneralHelper::orbitCamera(QQuick3DCamera *camera, const QVector3D &startRo if (dragVector.length() < 0.001f) return; - camera->setRotation(startRotation); - QVector3D newRotation(dragVector.y(), dragVector.x(), 0.f); + camera->setEulerRotation(startRotation); + QVector3D newRotation(-dragVector.y(), -dragVector.x(), 0.f); newRotation *= 0.5f; // Emprically determined multiplier for nice drag newRotation += startRotation; - camera->setRotation(newRotation); + camera->setEulerRotation(newRotation); const QVector3D oldLookVector = camera->position() - lookAtPoint; QMatrix4x4 m = camera->sceneTransform(); const float *dataPtr(m.data()); - QVector3D newLookVector(-dataPtr[8], -dataPtr[9], -dataPtr[10]); + QVector3D newLookVector(dataPtr[8], dataPtr[9], dataPtr[10]); newLookVector.normalize(); newLookVector *= oldLookVector.length(); @@ -187,7 +187,6 @@ QVector4D GeneralHelper::focusObjectToCamera(QQuick3DCamera *camera, float defau // Adjust lookAt to look directly at the center of the object bounds lookAt = renderModel->globalTransform.map(center); - lookAt.setZ(-lookAt.z()); // Render node transforms have inverted z } } } @@ -196,7 +195,7 @@ QVector4D GeneralHelper::focusObjectToCamera(QQuick3DCamera *camera, float defau // Reset camera position to default zoom QMatrix4x4 m = camera->sceneTransform(); const float *dataPtr(m.data()); - QVector3D newLookVector(-dataPtr[8], -dataPtr[9], -dataPtr[10]); + QVector3D newLookVector(dataPtr[8], dataPtr[9], dataPtr[10]); newLookVector.normalize(); newLookVector *= defaultLookAtDistance; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/linegeometry.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/linegeometry.cpp index 98da27f0a8..cd2e890f86 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/linegeometry.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/linegeometry.cpp @@ -81,10 +81,10 @@ QSSGRenderGraphObject *LineGeometry::updateSpatialNode(QSSGRenderGraphObject *no dataPtr[0] = m_startPos[0]; dataPtr[1] = m_startPos[1]; - dataPtr[2] = -m_startPos[2]; + dataPtr[2] = m_startPos[2]; dataPtr[3] = m_endPos[0]; dataPtr[4] = m_endPos[1]; - dataPtr[5] = -m_endPos[2]; + dataPtr[5] = m_endPos[2]; geometry->addAttribute(QSSGRenderGeometry::Attribute::PositionSemantic, 0, QSSGRenderGeometry::Attribute::ComponentType::F32Type); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp index bfc2891ce7..89c33c2900 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp @@ -396,16 +396,12 @@ qreal QmlDesigner::Internal::MouseArea3D::getNewRotationAngle( if (dragVector.length() < 0.001f) return prevAngle; - // Get camera to node direction in node orientation + // Get camera to node direction QVector3D cameraToNodeDir = getCameraToNodeDir(node); if (trackBall) { // Only the distance in plane direction is relevant in trackball drag QVector3D dragDir = QVector3D::crossProduct(getNormal(), cameraToNodeDir).normalized(); QVector3D scenePos = pivotScenePosition(node); - if (node->orientation() == QQuick3DNode::RightHanded) { - scenePos.setZ(-scenePos.z()); - dragDir = -dragDir; - } QVector3D screenDragDir = m_view3D->mapFrom3DScene(scenePos + dragDir); screenDragDir.setZ(0); dragDir = (screenDragDir - nodePos).normalized(); @@ -420,12 +416,10 @@ qreal QmlDesigner::Internal::MouseArea3D::getNewRotationAngle( // Determine drag direction left/right QVector3D dragNormal = QVector3D::crossProduct(nodeToPress, nodeToCurrent).normalized(); - if (node->orientation() == QQuick3DNode::RightHanded) - dragNormal = -dragNormal; angle *= QVector3D::dotProduct(QVector3D(0.f, 0.f, 1.f), dragNormal) < 0 ? -1.0 : 1.0; // Determine drag ring orientation relative to camera - angle *= QVector3D::dotProduct(getNormal(), cameraToNodeDir) < 0 ? 1.0 : -1.0; + angle *= QVector3D::dotProduct(getNormal(), cameraToNodeDir) < 0 ? -1.0 : 1.0; qreal adjustedPrevAngle = prevAngle; const qreal PI_2 = M_PI * 2.0; @@ -451,10 +445,8 @@ void QmlDesigner::Internal::MouseArea3D::applyRotationAngleToNode( QQuick3DNode *node, const QVector3D &startRotation, qreal angle) { if (!qFuzzyIsNull(angle)) { - node->setRotation(startRotation); + node->setEulerRotation(startRotation); QVector3D normal = getNormal(); - if (orientation() != node->orientation()) - normal.setZ(-normal.z()); node->rotate(qRadiansToDegrees(angle), normal, QQuick3DNode::SceneSpace); } } @@ -468,20 +460,15 @@ void MouseArea3D::applyFreeRotation(QQuick3DNode *node, const QVector3D &startRo return; const float *dataPtr(sceneTransform().data()); - QVector3D xAxis = QVector3D(-dataPtr[0], -dataPtr[1], -dataPtr[2]).normalized(); - QVector3D yAxis = QVector3D(-dataPtr[4], -dataPtr[5], -dataPtr[6]).normalized(); - if (node->orientation() == QQuick3DNode::RightHanded) { - xAxis = QVector3D(-xAxis.x(), -xAxis.y(), xAxis.z()); - yAxis = QVector3D(-yAxis.x(), -yAxis.y(), yAxis.z()); - } - + QVector3D xAxis = QVector3D(dataPtr[0], dataPtr[1], dataPtr[2]).normalized(); + QVector3D yAxis = QVector3D(dataPtr[4], dataPtr[5], dataPtr[6]).normalized(); QVector3D finalAxis = (dragVector.x() * yAxis + dragVector.y() * xAxis); qreal degrees = qRadiansToDegrees(qreal(finalAxis.length()) * mouseDragMultiplier()); finalAxis.normalize(); - node->setRotation(startRotation); + node->setEulerRotation(startRotation); node->rotate(degrees, finalAxis, QQuick3DNode::SceneSpace); } @@ -513,8 +500,6 @@ double MouseArea3D::getRelativeScale(QQuick3DNode *node) const // view and scene, will tell us what the distance independent scale should be. QVector3D nodePos(node->scenePosition()); - if (orientation() == QQuick3DNode::RightHanded) - nodePos.setZ(-nodePos.z()); DoubleVec3D posInView1(m_view3D->mapFrom3DScene(nodePos)); @@ -718,12 +703,9 @@ QVector3D MouseArea3D::getCameraToNodeDir(QQuick3DNode *node) const QVector3D dir; if (qobject_cast<QQuick3DOrthographicCamera *>(m_view3D->camera())) { dir = -m_view3D->camera()->cameraNode()->getDirection(); - dir.setZ(-dir.z()); } else { QVector3D camPos = m_view3D->camera()->scenePosition(); QVector3D nodePos = pivotScenePosition(node); - if (node->orientation() == QQuick3DNode::RightHanded) - nodePos.setZ(-nodePos.z()); dir = (nodePos - camPos).normalized(); } return dir; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/selectionboxgeometry.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/selectionboxgeometry.cpp index 9d8de9dc17..dcb768ce62 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/selectionboxgeometry.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/selectionboxgeometry.cpp @@ -32,7 +32,7 @@ #include <QtQuick3DRuntimeRender/private/qssgrendercontextcore_p.h> #include <QtQuick3DRuntimeRender/private/qssgrenderbuffermanager_p.h> #include <QtQuick3D/private/qquick3dmodel_p.h> -#include <QtQuick3D/private/qquick3dobject_p_p.h> +#include <QtQuick3D/qquick3dobject.h> #include <QtQuick/qquickwindow.h> #include <QtCore/qvector.h> @@ -367,10 +367,6 @@ void SelectionBoxGeometry::trackNodeChanges(QQuick3DNode *node) this, &SelectionBoxGeometry::update, Qt::QueuedConnection); m_connections << QObject::connect(node, &QQuick3DNode::pivotChanged, this, &SelectionBoxGeometry::update, Qt::QueuedConnection); - m_connections << QObject::connect(node, &QQuick3DNode::orientationChanged, - this, &SelectionBoxGeometry::update, Qt::QueuedConnection); - m_connections << QObject::connect(node, &QQuick3DNode::rotationOrderChanged, - this, &SelectionBoxGeometry::update, Qt::QueuedConnection); } } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri index 50c0bd41bb..4fe46e29d8 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri @@ -1,6 +1,6 @@ INCLUDEPATH += $$PWD/ -qtHaveModule(quick3d) { +versionAtLeast(QT_VERSION, 5.15.0):qtHaveModule(quick3d) { QT *= quick3d-private DEFINES *= QUICK3D_MODULE } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index b525da8248..296a95e785 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -174,6 +174,7 @@ void Qt5InformationNodeInstanceServer::createEditView3D() #ifdef QUICK3D_MODULE static bool showEditView = qEnvironmentVariableIsSet("QMLDESIGNER_QUICK3D_SHOW_EDIT_WINDOW"); + qmlRegisterRevision<QQuick3DNode, 1>("MouseArea3D", 1, 0); qmlRegisterType<QmlDesigner::Internal::MouseArea3D>("MouseArea3D", 1, 0, "MouseArea3D"); qmlRegisterType<QmlDesigner::Internal::CameraGeometry>("CameraGeometry", 1, 0, "CameraGeometry"); qmlRegisterType<QmlDesigner::Internal::GridGeometry>("GridGeometry", 1, 0, "GridGeometry"); diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quick3dnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quick3dnodeinstance.cpp index be4cf45658..960509ee4e 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quick3dnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quick3dnodeinstance.cpp @@ -129,7 +129,7 @@ void Quick3DNodeInstance::setPickable(bool enable, bool checkParent, bool applyT checkChildren(node); } } - if (nodeType == QQuick3DObject::Model) + if (nodeType == QQuick3DObject::Type::Model) setPropertyVariant("pickable", enable); // allow 3D objects to receive mouse clicks } } diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc index 749517125f..ce71153ecc 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc +++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc @@ -13,6 +13,7 @@ <file>mockfiles/Arrow.qml</file> <file>mockfiles/AutoScaleHelper.qml</file> <file>mockfiles/MoveGizmo.qml</file> + <file>mockfiles/CameraFrustum.qml</file> <file>mockfiles/CameraGizmo.qml</file> <file>mockfiles/LightGizmo.qml</file> <file>mockfiles/IconGizmo.qml</file> diff --git a/src/tools/qml2puppet/CMakeLists.txt b/src/tools/qml2puppet/CMakeLists.txt index 941951f498..8c7a18cf76 100644 --- a/src/tools/qml2puppet/CMakeLists.txt +++ b/src/tools/qml2puppet/CMakeLists.txt @@ -93,7 +93,7 @@ extend_qtc_executable(qml2puppet nodeinstanceclientproxy.cpp nodeinstanceclientproxy.h ) -find_package(Qt5 COMPONENTS Quick3D QUIET) +find_package(Qt5 5.15.0 COMPONENTS Quick3D QUIET) extend_qtc_executable(qml2puppet CONDITION TARGET Qt5::Quick3D FEATURE_INFO "Qt Quick 3D" |