Commit Graph

35 Commits

Author SHA1 Message Date
Miikka Heikkinen
fd40bdd606 QmlDesigner: Use double precision to calculate ray-plane intersections
Float precision becomes issue when calculating ray-plane intersections
for gizmo hit detection when camera is very zoomed (in or out).
Do the critical calculations in double precision to mitigate the issue.

Change-Id: I8c33e17bf19d092e24ab19f8f8f2a54cd83304cc
Fixes: QDS-1526
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2020-01-24 08:42:31 +00:00
Miikka Heikkinen
495ebd0d3a QmlDesigner: Restore 3D edit view geometry on restart
Change-Id: I045c34033df2a8e3f39afc46c87803127dc8e978
Fixes: QDS-1352
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2020-01-23 08:55:58 +00:00
Miikka Heikkinen
ef95674378 QmlDesigner: Initialize 3D edit view tool state at initial show
Whenever the tool state of 3D edit view changes, creator is notified
to store the state. The stored state is then restored to 3D edit view
when it is restarted. The state persists only for the lifetime of the
creator.

Change-Id: I888b3ba82693a17a2f163924fbae1cfa27593890
Fixes: QDS-1351
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2020-01-17 14:57:44 +00:00
Alessandro Portale
259ba4ef66 QmlDesigner: Fix CMake build of qml2puppet
qtcreator/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/
mousearea3d.h(60): Error: Undefined interface

Change-Id: I11d8709e8e347407a2499bdf4c72aaa7f41386f4
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
2020-01-14 18:32:55 +00:00
Miikka Heikkinen
5a4b0b565a QmlDesigner: Fix scale gizmo for child objects
As global space scaling is not supported, the scaling algorithm could
be simplified a lot. Now scaling gizmos work off the relative distance
along the scaling rod/plane instead of going through global space,
removing the need for complicated and error prone transformations.

Change-Id: Iaf0d5b2f31f10ae0b26b6a59b36e9ee4498838c9
Fixes: QDS-1269
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2020-01-14 13:57:18 +00:00
Miikka Heikkinen
58e2c3271e 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>
2020-01-14 11:09:38 +00:00
Miikka Heikkinen
7ad96a967f QmlDesigner: Show 3D edit view gizmos at pivot point of node
Change-Id: I6eb6b2674868d9251e568249cfabc105d0c715d7
Fixes: QDS-1354
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2020-01-09 13:17:27 +00:00
Miikka Heikkinen
82f2667ab3 QmlDesigner: Fix minor edit 3D view ui issues in mac
Change-Id: Ia86b5f828d147ca0c3593da7f7dcb77696fdeead
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-13 14:44:23 +00:00
Miikka Heikkinen
49da199b10 Fix rotation resulting in NaN angle sometimes
Change-Id: I88f866c6649f7ec25bc96a7393d0930685e5382b
Fixes: QDS-1341
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-13 09:27:59 +00:00
Miikka Heikkinen
eb09e814db QmlDesigner: Properly update 3D edit view cameras and lights
Now edit view will create and remove cameras and light gizmos properly
when cameras and lights are added or deleted.

Change-Id: I858752c1410f3a40ea2adaf538c281aaee94ec58
Fixes: QDS-1267
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
2019-12-13 09:27:44 +00:00
Miikka Heikkinen
783e5d0a8d Use separate MouseArea3D to calculate drag vector
Using the MouseArea3D linked to gizmo to manage the drag leads to
slight unwanted drift on the drag plane, as it moves with the gizmo.
Fixed by using a helper MouseArea3D to calculate drag vector.
Helper area's transform is set at mouse press time and is not changed
during the drag.

Change-Id: I50d3f738277bd34005c977423d114abc8dbed520
Fixes: QDS-1312
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-11 10:59:21 +00:00
Miikka Heikkinen
128c7a34af QmlDesigner: Update selection box on parent change
Selection box geometry update sets explicit global transform for
selection box root. The transform depends on the target node
parent, so if the parent changes, the box needs to be updated.

Change-Id: Iccf8b7e863bcfe541bbb4f60a4094739a7513e8d
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
2019-12-11 10:59:10 +00:00
Miikka Heikkinen
f021680513 QmlDesigner: Fix selection box size calculations
Selection box for zero size items ended up being infinite, which broke
some functionality like fit to camera. Now boxes should be correctly
zero sized for non-model items. This also fixes issues with parent
box size if it has zero size children.

Change-Id: I3c8fae3ee971fbb0cf9e0de2615c107ce97a76f8
Fixes: QDS-1287
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-04 14:24:53 +00:00
Miikka Heikkinen
0758b58ceb QmlDesigner: Fix planar scaling randomly setting the third axis to zero
All the math before checking if the scaling axis is zero can cause
enough rounding errors to make qFuzzyIsNull to not think the value is
zero anymore, so check increase the check range.

Change-Id: I776d44886f061be6c1fd91c09eb8efcfb29e0936
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-04 09:54:37 +00:00
Miikka Heikkinen
4ce7f39e4e QmlDesigner: Fix 3D edit gizmos orientation and rotation order
When selected node has non-default rotation order or orientation,
gizmos need to account for that.

Change-Id: Ie3817fd057b43f708ac1feea3e98e1e44f56d66a
Fixes: QDS-1290
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-04 09:54:26 +00:00
Miikka Heikkinen
73d3df7908 QmlDesigner: Make imported models selectable
Import creates an opaque Component, which can contain one or more
pickable models. We mark all instanceless models pickable according to
the parent instance pickable status and specify the parent instance
as the pick target using a dynamic property.

Change-Id: I05b96ee48eb8f246c50b2254d620b621e2437aa5
Fixes: QDS-1282
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-12-03 08:44:30 +00:00
Mahmoud Badri
de141661df Do not zoom camera when changing view
When changing the view by clicking the axis helper, maintain the
current view camera zoom

Task-number: QDS-1274
Change-Id: Icb502bd70da1e6348be90a52885366393ea072c6
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
2019-12-03 07:54:09 +00:00
Miikka Heikkinen
8ff52e37a7 QmlDesigner: Implement multiselection for edit 3D view
Multiselection works in 3D edit view with ctrl-click just like it
does on the Design Studio.

Change-Id: I266f2de11758bed064f44dd97cd79189e3e1f831
Fixes: QDS-1265
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-28 14:43:49 +00:00
Miikka Heikkinen
6ee83b4c19 QmlDesigner: Center on selection box when fit tool is used in 3D Edit
Instead of centering edit camera on selected object, center it on
the selection box, which includes child objects.

Change-Id: I7315a4bcfffc74e72a2b21d0a04fc99ee9f4f3c3
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
2019-11-25 08:48:08 +00:00
Miikka Heikkinen
389f96b0ee QmlDesigner: Implement group selection boxes in 3D edit view
Object's selection box now includes the bounds of all of its
descendants. Selection boxes of immediate children of a selected
object are also drawn.
Individual/group selection buttons also now work as expected.

Change-Id: Ice7ef9a536e32c6bb6da70fe23bf0a38e72c14f8
Fixes: QDS-1210
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 14:02:48 +00:00
Miikka Heikkinen
9dac42f153 QmlDesigner: Implement fit selection button in 3D edit view
Shortcuts for scale and move were also updated to correct ones.

Change-Id: Iffcad0c81475553003962e65dc059879a237546e
Fixes: QDS-1235
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 14:02:32 +00:00
Miikka Heikkinen
c7120bde92 QmlDesigner: Implement axis helper on 3D edit view
Axis helper shows up on top right corner of 3D edit view.
Clicking on axis helper arms zooms camera on that side of the selected
object.

Change-Id: Ibd81a933036f7965f825e3dc97ad7156da62e14c
Fixes: QDS-1205
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 13:57:43 +00:00
Miikka Heikkinen
0b510f173e QmlDesigner: Implement selection box to 3D edit view
Change-Id: Ib0b13ecd7946e3b7da8ed06d4f5965e06e51a152
Fixes: QDS-1210
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 10:48:48 +00:00
Miikka Heikkinen
dbfdacecf4 QmlDesigner: Fix issues with MouseArea3D deactivation detection
Existing mouse grab is now released when MouseArea3D is deactivated
or set to no longer grab the mouse. Various gizmos were also set
to follow MouseArea3D's dragging property instead of keeping track
of drag themselves.

Change-Id: I49f968f20b26eb222fc8635b943e9144073fb164
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 10:48:35 +00:00
Miikka Heikkinen
77cb514a79 QmlDesigner: Implement better camera navigation in 3D edit view
Edit camera is now controlled as in Qt 3D Studio:
ALT + left button orbits camera.
ALT + middle button pans camera.
ALT + right button zooms camera.
Wheel zooms camera.

Task-number: QDS-1206
Change-Id: Ia72644073d172b00483ceed8bcc5ffb8dce68741
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-22 10:47:42 +00:00
Miikka Heikkinen
49f7cfb7a1 QmlDesigner: Implement proper helper grid for 3D edit view
Change-Id: I9e33218d4b1528610155c5fb9bf94a9597ee23df
Fixes: QDS-1204
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-18 08:40:00 +00:00
Miikka Heikkinen
20257e1e4f QmlDesigner: Implement RotateGizmo for 3D edit view
Added a gizmo for rotating selected object either freely or locked
around X, Y, Z, or camera axis.

Change-Id: Ib43c7dd3fc0f49f384d5920fce21ea932c4fc90d
Task-number: QDS-1196
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-18 08:39:16 +00:00
hjk
62636b270d Qml2Puppet: Compile fix
Add missing #include. Amends db7087225d.

Change-Id: I8d9147fb788ee47b37dac9f347a6828250eec1e0
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
2019-11-11 09:43:33 +00:00
Miikka Heikkinen
db7087225d QmlDesigner: Implement camera frustum visualization for edit 3D
Task-number: QDS-1208
Change-Id: I3241fcdc68d01666a2536df32f170cd898cbd7af
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-11 08:44:16 +00:00
Miikka Heikkinen
862b7fa35c QmlDesigner: Add planar move and scale handles to gizmos
Change-Id: Icae60ec35fc84d731243a005e97b174fa9a94815
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
2019-11-08 12:54:06 +00:00
Miikka Heikkinen
c67965fb29 QmlDesigner: Add ScaleGizmo to 3D edit view
ScaleGizmo allows scaling in the direction of local or global axes,
as well as uniform scaling. Any scale component cannot be made
negative with ScaleGizmo.

Change-Id: I9b98d9593e07ded340178b07b73fa1b72421ba20
Fixes: QDS-1195
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
2019-11-08 12:53:21 +00:00
Miikka Heikkinen
97788c457e QmlDesigner: MoveGizmo improvements in 3D edit view
Mouse press and release are now properly handled by MouseArea3D.
This fixes various issues:

- No need to move the mouse after release for release to register.
- Drag is no longer limited to the 3D edit window, though it is still
  limited to the screen.
- Drag arrows no longer register start of drag if you click outside
  the arrow and then move the cursor over the arrow while holding the
  mouse button down.

Also added the missing center ball to the MoveGizmo to allow free
dragging along the camera plane.

Change-Id: Iab55ae79f8af024534510e5fd29379532ac74025
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-11-01 08:49:12 +00:00
Miikka Heikkinen
47f54dd101 QmlDesigner: Add camera and light gizmos to 3D edit view
A small icon and a placeholder mesh are displayed at the location of
the lights and cameras in the scene, to provide a way to see and
interact with them.

Change-Id: I1f90fce77a643cab2c3fda3ee2105af53dea57a9
Task-number: QDS-1177
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
2019-10-29 12:57:06 +00:00
Miikka Heikkinen
1fe204565a QmlDesigner: Add support for move gadget to 3D edit view
This proof-of-concept move gadget is based on the move gadget
in studio example of QtQuick3D.

Change-Id: I1b596443a3e99c16ed214bc464c5367a0f7aa503
Fixes: QDS-1125
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Pasi Keränen <pasi.keranen@qt.io>
2019-10-25 07:51:09 +00:00
Pasi Keränen
c2c8b9a5d6 Add edit camera controls for 3D edit view
Add edit camera controls and grid helper to 3D edit view.

Task-number: QDS-1127
Change-Id: Ice5ea0fcca18d59dc8a2907710e16c6688b90628
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
2019-10-21 08:27:16 +00:00