From ac55948c761a3b07fe2944dc3c5ef17ddc38d0eb Mon Sep 17 00:00:00 2001 From: Johanna Vanhatapio Date: Wed, 2 Sep 2020 15:25:09 +0300 Subject: [PATCH 01/17] Doc: Update topic on working in 3D Editor Fixes: QDS-2655 Change-Id: If8e5e1051ceca8b405facdf36747c4d887d830bf Reviewed-by: Leena Miettinen Reviewed-by: Mahmoud Badri --- .../qtdesignstudio-3d-editor.qdoc | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc index cc42cbc1005..e89783168b4 100644 --- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc +++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-editor.qdoc @@ -30,8 +30,8 @@ \title Working in 3D Editor - When editing a 3D scene, you view the scene in \uicontrol {3D Editor} by - using the \uicontrol {3D Editor} camera. You can switch between + When editing a 3D scene, you view the scene in the \uicontrol {3D Editor} + view. You can change the projection of the view by switching between \e {perspective camera} and \e {orthographic camera} modes. When using the perspective camera mode, objects that are far from the camera appear smaller than those nearby. In the orthographic camera mode, all objects appear at @@ -61,7 +61,8 @@ Additional helpful features when editing 3D scenes are the \e {edit light}, which is a quick way to light the scene, and the grid that helps you to navigate in 3D space. Select the \inlineimage grid_on.png - (\uicontrol {Toggle Grid Visibility}) to show or hide the grid. + (\uicontrol {Toggle Grid Visibility}) or press \key G to show or hide the + grid. \image studio-3d-editor.png "3D Editor" @@ -78,10 +79,10 @@ camera: \list - \li To pan, press \key Alt and use the middle mouse button to click - anywhere in the rendered view to slide the view around. - \li To orbit, press \key Alt and click anywhere in the rendered view to - rotate the view. + \li To pan, press \key Alt and use the middle mouse button to click and + drag anywhere in the rendered view to slide the view around. + \li To orbit, press \key Alt and click and drag anywhere in the rendered + view to rotate the view. \li To zoom, use the mouse wheel or press \key Alt and right-click anywhere in the rendered view to zoom the view in or out as you drag up or down. @@ -91,11 +92,12 @@ select \inlineimage fit_selected.png (\uicontrol {Fit Selected}) or press \key F. - The world axis helper (1) shows the direction of the world axes in respect - to the 3D Editor camera. To point the camera at the currently selected - component in the direction of an axis, click the axis. If no component - is selected, the camera is pointed at the world origin. This does not - affect the camera zoom level. + The world axis helper (1) shows the direction of the world axes in view. + To point the camera at the currently selected component in the direction of + an axis, click the axis. Clicking the dot at the end of the axis will point + the camera at the opposite direction of the axis. If no component is + selected, the camera is pointed at the world origin. This does not affect + the camera zoom level. \image studio-3d-editor-axis-helper.png "Axis helper in 3D Editor" @@ -128,8 +130,8 @@ \section1 Using Edit Light - The edit light is an extra point light that follows the edit camera. - To switch the edit light on and off, select \inlineimage edit_light_on.png + The edit light is an extra point light that can be used to illuminate the + scene. To toggle the edit light on and off, select \inlineimage edit_light_on.png or \inlineimage edit_light_off.png (\uicontrol {Toggle Edit Light}) or press \key U. @@ -160,7 +162,7 @@ You can move items in relation to their coordinate system, along the x, y, or z axis or on the top, bottom, left, and right clip planes of the - \uicontrol {3D Editor} camera. + \uicontrol {3D Editor} view. To move items, select \inlineimage move_on.png or press \key W: @@ -170,8 +172,8 @@ drag the item along the axis. \li To move items on a plane, click the plane handle and drag the item on the plane. - \li To move an item freely in the editor, click the gray handle at the - center of the item. + \li To move an item freely in 3D editor, click and drag the gray handle + at the center of the move gizmo. \endlist \section1 Rotating Items @@ -182,9 +184,10 @@ or press \key E: \list - \li To rotate an item around its rotation gizmo, click the axis and + \li To rotate an item around its rotation gizmo, click the axis ring and drag in the direction you want to rotate the item in. - \li To freely rotate the item, select the gray circle. + \li To freely rotate the item, click and drag the inner center circle of + the gizmo. \endlist \section1 Scaling Items @@ -203,7 +206,7 @@ attached to the axis. \li To adjust the scale across a plane, click the plane handle and drag the item on the plane. - \li To uniformly scale an item across all axes, click and drag the + \li To uniformly scale an item across all axes, click and drag the gray handle at the center of the item. \endlist */ From 6272039221953b83aa3d9c06ba65753f65613fe6 Mon Sep 17 00:00:00 2001 From: Johanna Vanhatapio Date: Tue, 1 Sep 2020 17:16:30 +0300 Subject: [PATCH 02/17] Doc: Describe 3D Materials Fixes: QDS-2677 Change-Id: Ia0e617084e4614c194fce0f53c58a6013831cad2 Reviewed-by: Miikka Heikkinen Reviewed-by: Leena Miettinen --- .../material-aluminum-anodized-emissive.png | Bin 0 -> 4047 bytes .../images/material-aluminum-anodized.png | Bin 0 -> 4225 bytes .../images/material-aluminum-brushed.png | Bin 0 -> 5825 bytes .../images/material-aluminum-emissive.png | Bin 0 -> 5560 bytes .../images/material-aluminum.png | Bin 0 -> 5560 bytes .../images/material-artistic-paper.png | Bin 0 -> 7675 bytes doc/qtdesignstudio/images/material-copper.png | Bin 0 -> 8405 bytes .../material-frosted-glass-single-pass.png | Bin 0 -> 8101 bytes .../images/material-frosted-glass.png | Bin 0 -> 8077 bytes doc/qtdesignstudio/images/material-glass.png | Bin 0 -> 3472 bytes .../images/material-office-paper.png | Bin 0 -> 4310 bytes ...terial-red-plastic-structured-emissive.png | Bin 0 -> 14927 bytes .../material-red-plastic-structured.png | Bin 0 -> 14515 bytes .../images/material-refractive-glass.png | Bin 0 -> 4881 bytes .../material-steel-milled-concentric.png | Bin 0 -> 10023 bytes .../src/qtdesignstudio-toc.qdoc | 1 + .../qtdesignstudio-3d-effects.qdoc | 2 +- .../qtdesignstudio-3d-materials.qdoc | 399 ++++++++++++++++++ .../qtdesignstudio-3d-texture.qdoc | 11 +- 19 files changed, 408 insertions(+), 5 deletions(-) create mode 100644 doc/qtdesignstudio/images/material-aluminum-anodized-emissive.png create mode 100644 doc/qtdesignstudio/images/material-aluminum-anodized.png create mode 100644 doc/qtdesignstudio/images/material-aluminum-brushed.png create mode 100644 doc/qtdesignstudio/images/material-aluminum-emissive.png create mode 100644 doc/qtdesignstudio/images/material-aluminum.png create mode 100644 doc/qtdesignstudio/images/material-artistic-paper.png create mode 100644 doc/qtdesignstudio/images/material-copper.png create mode 100644 doc/qtdesignstudio/images/material-frosted-glass-single-pass.png create mode 100644 doc/qtdesignstudio/images/material-frosted-glass.png create mode 100644 doc/qtdesignstudio/images/material-glass.png create mode 100644 doc/qtdesignstudio/images/material-office-paper.png create mode 100644 doc/qtdesignstudio/images/material-red-plastic-structured-emissive.png create mode 100644 doc/qtdesignstudio/images/material-red-plastic-structured.png create mode 100644 doc/qtdesignstudio/images/material-refractive-glass.png create mode 100644 doc/qtdesignstudio/images/material-steel-milled-concentric.png create mode 100644 doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-materials.qdoc diff --git a/doc/qtdesignstudio/images/material-aluminum-anodized-emissive.png b/doc/qtdesignstudio/images/material-aluminum-anodized-emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9818aed4e9ad4fd4525338c4f793970a21ebf4 GIT binary patch literal 4047 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 PU|{fc^>bP0l+XkKLkDpOuxBgM)*K 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-aluminum-brushed.png b/doc/qtdesignstudio/images/material-aluminum-brushed.png new file mode 100644 index 0000000000000000000000000000000000000000..9be6229b05d4bd9f776f3612519cbb9d797a752d GIT binary patch literal 5825 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-aluminum-emissive.png b/doc/qtdesignstudio/images/material-aluminum-emissive.png new file mode 100644 index 0000000000000000000000000000000000000000..18917da429706a78e8f6ab5a28635ad2dbb3dc8a GIT binary patch literal 5560 zcmeAS@N?(olHy`uVBq!ia0y~yU|0dd9Lx+149-(S+ZY%aJ_PuLxc>kDpP8ANot>SJ zkB^(1TS!PqOiWBlN=i;nPDx2gQ&Uq-P0hf-Kv!4S*x1<2%*@)_+QGrW+1c6K+dDBa z(ap`x!ongdD$38#FC-)+E-o%GFwoZ4Hat8$H8s`4!=s|2A~Q2HCnu-5xw)vQC_g`c z-n@CGrKPpCwfFAbTeWIcXJ_a2>(_gFdKwxU7A{=a-`_uJ(xj@Ys_*R5MOd-m)-d-iPEvSrDVC66CJK79D_t5>hipFe-*%$buXPwv~d zZ`ZC}%aar z+pkz=t()Ke=uiL7p9PX%YX5U`AN~CI-|5r*+0XxFE>(7?f$wG-rJ0~Z6%q)HT z=W@;enDWb9%O_u)827!T==1tjcjsKq7F#U1?rh~_>E{=VubqybT9&iQqVAzh(zVaG z;!c?Oi_CsE?{A@;dU)@egJFcn=wB;Pw8s-`Za6Sbw9TH_0T56jC+^n z+EcNGzWRZY|4&u!h?#mbcJ72(3585-{H5`KUraW7nIm;9cH*^?uGHt+&wu>1H9eQM z>GD>$sok5a%5t84J+Ub?mHsTtU1Zz{Tjj4&?^tW zew_0@sO>V_R&LFmF?xQ!8&7>#Hmu)TZsZ)W`Ao-IpChL(bwBR0&0arQC{&H%b7k`? zFW$a_;JL>0ZoeuKp7S$z-h-3JmvWr`Z#7{jmyg;6vosMcpXenW70N49L@(Vr-aO}Z zQ^_Wl<#y96URt&K8K=&B#F;#GN-uwb-DxiM?X#}$$-TH;cNL%LL^;vSyVGVRPQAK! z?wL2j8!eQL`8}5wNeg`zcT~P~$ad-aHQ6cejh7$yE53eYa={L9!64gzkFNjzKGSH? z94*1+3D2BLy&h*;EQngNTG`V0qg(9ZP7M{4S&ZFm-K{RD507zUJamtvTP^rW&uFGfOjE)GbcC`b=+2-_=D*$L=VLPr6f-b$NA&*40(-zyIDBzxILbqtXP{P>;-Czve8vaW>XY ze<_c)XqLm>iuwMn!T|@Lp3``;!z!*A}hR3DplN? zv@;rS<^8r`(Ga~9ta|oU>#jX#Ekpf|30p6kc5!v+BcF#y9xhq=d7<-7?y9|s{wfLv z8$wpM2fbV%WNPy#0Y zl3z|&FNOSSz5BDZKy1a|`F^FXr&`6IPwwA)*Jb`*!8xCcQ+(Ec{8_Y9r{zY=waM;ZV)fPHwJyH(^oxAK;W}@B<%?tlK}|97fCHkl{Q&hzzs`{qslzvs1m{vQ-pobZ;JY;pVU#S?NnD&{?piV~mk zW^0AZ#E;wyHd*K1i4R>;b!N_gCCzzX0v;}~d@il1{_^G@H@qEYqA;piT8eWy*3OLxg=g5~Q7yCG*D*c}Pm?z(M?wX13@vCjJ z8dh(%)Hz({&ky*n`N_4M>yph(vq$!YYUSCip~^26)t}07U3vZ>rL(hQyo_(?_}ollQ;YbQC@P+;?w>%BclY zX3SXNd{*kmu6HicN^{OHd|qNT-#KK5mUqyKr3!z~JX`TOV-kOLZ~p&R3oE>&rg~2C z?mEfz)}~)&+Vq4U7Y}@u-E+cZ`N6b#XZ=4PO=`A35jT`0P+|M^;uAYs*I>(UN7DknG{%bBZ^S#xTW1>4Ir7r!3daCcdZ z*U2wes~Nc-7YE7x_^!X~`PIes413o{&6Al@b>aMxpPe=$O+g2g`<7iWIQ{Hq)qd|w zU#n^@WF8&pDY-9Odg7bN51*j4U&X?@Ire)p-mkK3jAZBXlk;3L*C#;iqrjDK0`D(d z+*NHqZ1whQ+1`(N`}_EppG|uGL&Sf@;x)ZVl3fn^+W$5SJzrnWl`i=?DJsa?Ca=Qo zWNba7x{{~#&AbkaS?e#ST)*9Wd~YHD{@{wN4KrqG1V!!tI<#TK#69a0(y$VIwy0yV$=&zgZ6EKDalU%*--em9CceL=5on)bCs=si zQ_$~d?Gg5+vMbp_&G{>qp3~f3%Xg|M__|cZu4K05f9-s$TrzxkepQ!qO!z8$|JC7d z_b(o{+HT1i7Q!V0*Qh4){D>FqL=QC{CVsTNwEa~gdeVa1b)a8C^Y!YU*Z7lmGrt^Nr z<)b#T{(WpVB{eZpt3CBw)z|npuB@JREq`16p1r?5bzDETV ztXlH)ncTAHrE;>I4$(R<9xj|+vUj$FN0(~yPMf~#pItZHOlf>6kkLN1n(bGUzVgva zAsSrKYR^@E?FjUaTI0>7p})XpT0+%AjZG__w?5-^+%iX}H#vX4PWbARg>!Y&jEi5t z(C`yuK04$4GMh`Eg+wNO)BZhi_nYv}PwTj%vOGU9S1fhc_gWw^MPu3o_vX^~6)jim z|Hb&`<<<2~R*5_xIMe2Odg1+JA6PEfOg!~;oyX4|ub(U^o4cTX?bqjf*XDR~h%DP4 z6J+9@@ab{N)?byzhGia$PtOj`7jyk}pzQ6$Yq_=Rp8Kadc7D$J-R{m<70Mhn^TWp- zZ&N3;U;gZMKhNm$>&rTKB@fJzICjZF%=g>llPZxe3)7>gE#;l98x&%8erfH>2_|BP zpEpNqpE5jc`el)H>H_(dO?;-ex9!d7QnGg|Gg3=l@~gz$ZRh$1}IlV3$o;AAi zYwf!BeYQ^T@6?^XHevnw)v}CU_Kpqro>#B%7hMp#(dB;K#05u=9C6UJ=X^YQ_A51( zGkgiY<-2W9WlTzyY*W808}U~$_pDveKJlrY=lF|OcC!bZ5HYymZo1%AozC?w4;C{` zG19ymV0Vi*(77~rIa|HhkwTu#IvxBw)w2)GAa32`*Qn#-4)|GKWn)@)0CeY z&vkyR(D?przTxQ=6?$<9yzgxu;4@;=2R-+gSN>zbTh>LrRTJg zS-kaOq(4&t$Etg>6(+e1zkXfoT6Ijn>ZPUQM@Ig*Q_lq7lr&^9UgK_jk?7l2vE5C~ z=Y9_7;rPW@PVX%a3{ZT@v*3EDU6joGEC*Mc&Vp0rswS3Ot!1~#ElsafRIn{?XxQ#H z<;_J)L)(e(Sy!z2GD&zrz!x^h`0PJgmkxdMl!~v=eAM|zL~^gC%%R|eX}oND5~kZK z+7>Xhb}!P|Xx&#OIkl^7>Q2AFEw2_^1_haZi2Q%%yjgC8(vr3f``fNx*I84v@#68v z+_JMA;`a-O&sokSvYw~Q@BE4fI^0n|9rqY%X#eIXiA*h|l*6Ch=DF&u_acJW^vS-u{5|%X;}7 z<8v}1=@&OIP`bN%!Q^NyEz`4^p|_tOQ@2me{Qrte(Dl3imy1g@w|&oPyq);iX0!F( z_XU}58Y|}reG#5!`L)UG_VnnCH zvfaMLcf$frU#~Xb__=qY{=yr%GtVuwVGM|16#f7p5Dmw%dK)fKK(J1zdr&EI#=%+xUFWlpSk zdO>7Xi}f7=wzi^e2Lk#YYCWA5u;BfFi$B?(Yo2aZ;Z{E&{wU=T%f5fwC(AbJ`D?xT zwO9FY`rJRk4wp@H6wZ4rki6LCyW4M0!p)zpljoQ->)C~zcWB`csGRa>bzshh?6r>3 zos;(jluz^A-1nKq)wODY! z_ob=p8C>409$O)5y78O1+x$nT3$L*DakJM7G=18-xxl$2U6C(ma^Gvs>@E8uAKVnH zon@(JxY1$jD%oY9j@p_myUe{U{|(a?Kj*&X5_2MNR{rA8KPtRM$W;1wiT%==s_lzlaI_!yzJ@byEQLaRKrEw<#%XG&!=T>oo>pap)(dO zSm%9y-71D-470Xfj4ZV}9QbL=0pS_1T};d~FKvDQrzU@MV4X)~`0EpAvTB}JOjsUq zDvSTs<_oSq7w#i5|M!c-=L)%p>q(xqxl*q9v>3UtjpLSGsqi zRU!Y4Dm7C>|BGK1@hj|_d`;y1mCS!_d1|G}Q)?quUORMGDRY%<&GhHb>|Ek!mMqyD z9xS<(uP;Pp_VoT6?YB0*)fC>RXr;Kp{M;GU%l{O-&T5o;PVTVEDc;A_<`;Z@uV&S} z8M>2|3RT-WUcH~cfpZ-BaTp}};A2}n`^sg-smg}`=k(Pb#r6K zD;w7@mWJQEgj>@?O7DcE%B$Zr_&$j@BFN>Zd~TK8ZS|ij=94q8l{o7M$-P#4wNQQk z;?1v=x;9rmTVQ1AwQS!Et4K!C@9UD)qplxNob~AB54lfIZ`Ldlw0buA#;349Of@rn z-3l*$zoa=&ZCT_?Rj=4xcNTW^_8V5Te?P)jf8=tF^6Be6YWF|S-zTOuU89Pf7i1G+}zmoW%+2f=(PY z^8eZ;Bzk#CTy)6OkBv@o?Qw5bJCp_t>$U$Y#6#wYtvD&vwj!V zuRJR}snI*fL)E1DdDn{PADx3H`c0WB#v59#`#+C+)1pwVfW+wTV?I+WOE_AhDt%>F zJj?Lz)cks2-|bDQtM(N2SzS03xN7?UE5G6!V($w#X6b1wu3e$zyG+aI)2u4XHpBRp zv-@j>ugDibzPrH{nkD#e0Ao}z!g`6TI;<%mnEjTE?+L0zq0P$jTz=s zo;^+zi11u?v&GfmedWInqa5+6`yNVFO;2uGTIU)0PHXCtRULfBU-Q?Vw)o{&$(O!t z0++`gX4`DJAo;kwuYMtIpDsLNZ-4rIh5Y(cpG@KmJ9bEXoU^Laq{bA`Qs zRrT(G2jt?^o? z(5V?S)_B!9%(J?@$;I`&%b7dzjgIq@qAcbf@_5Yo>tsm4cgCyYrk)`tCAoi1ve@KK z7T=wj6?nPz2mg1G%j&7xwf$4g>Xumlb!5IFH&bZVRxwZ2yI`wLt*)_!t3d}RB+%U(Z9PA!pK7I`=F(yARv*Nz{vj#6CTCw?T% zL{IPSWiQK$6(QVHv@$>NMb<2w`uX!NP38UWRv%lg9eUoa{nh5*hY8n?zP|ZN?axu> zDCN^{UwVa@ud82XT5OWQ;Bk@vMgE7s4>^q+erjKgF>jAQpZh0qhWYmw?>`m)eq$JX z;>oey%D>p()b1?Y_Mh?6&-VG#zr4S3yV7j-43ottpU!1x|04h4+t;5zYf`Lc=svSv w|NX`OM-2PBo*aCad;Z=TG8A|0E8T@p;5CFfcH9y85}Sb4q9e0MF0hTmS$7 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-aluminum.png b/doc/qtdesignstudio/images/material-aluminum.png new file mode 100644 index 0000000000000000000000000000000000000000..18917da429706a78e8f6ab5a28635ad2dbb3dc8a GIT binary patch literal 5560 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-artistic-paper.png b/doc/qtdesignstudio/images/material-artistic-paper.png new file mode 100644 index 0000000000000000000000000000000000000000..0c381dd9f1e8eec3bafd31e963df10f446aa87fc GIT binary patch literal 7675 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 Au>b%7 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-frosted-glass-single-pass.png b/doc/qtdesignstudio/images/material-frosted-glass-single-pass.png new file mode 100644 index 0000000000000000000000000000000000000000..2aab9bf04487a755d921855bb8845b40dede05f3 GIT binary patch literal 8101 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
*%moJA|&k_E__x!G* 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-office-paper.png b/doc/qtdesignstudio/images/material-office-paper.png new file mode 100644 index 0000000000000000000000000000000000000000..506c5c1b51f49e424a37d9e0d17ddae1cf5f0c16 GIT binary patch literal 4310 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 Z#m;7t<7&&a@F&&sO7 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 lFBf+n%>T1*zT{WNn~O7Z|rurEmZM literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-red-plastic-structured.png b/doc/qtdesignstudio/images/material-red-plastic-structured.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d58332d81984d49620f40bded872ab85b9aef4 GIT binary patch literal 14515 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 IbxsLQ08xs(#Q*>R literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-refractive-glass.png b/doc/qtdesignstudio/images/material-refractive-glass.png new file mode 100644 index 0000000000000000000000000000000000000000..b0c1f6330ab99566e6f09f0c4a763fdbe4b7d854 GIT binary patch literal 4881 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 RgMop8!PC{xWt~$(69DD6o5TPB literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/material-steel-milled-concentric.png b/doc/qtdesignstudio/images/material-steel-milled-concentric.png new file mode 100644 index 0000000000000000000000000000000000000000..25b67dc6bf8392ac2b815b02fd1955ff1afb9f12 GIT binary patch literal 10023 zcmeAS@N?(olHy`uVBq!ia0y~yU|0dd9Lx+149-(S+ZY%a#RGgoT>t<7&%?vZ$jHdY zFTl#i#>vSgCN3!=DlQ->EF>%{At@~>Eh{Y}FDs{@sH`TZproLvqN1vyuA!x>rm3Z^ ztD~#0tfH!?Z>XWAV`^q$U}$V?VrFh(Wn*JEWy)krE1S;Fj^^fOJ39v>V-p8QCl61r zzP{eJwl-fsze$rOCL|;_G&C$;w8+ifqp+~h#nr8{veL`jXTpU3l9G~ufWV&aZYO7# z
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 \uicontrol Assets - on a material to create and set the texture automatically, or you can use - a Texture component. + Drag and drop an image from \uicontrol Library > \uicontrol Assets + on a material to create and set the texture automatically, or use + a Texture component. For a default material the created \uicontrol Texture + is assigned to the \uicontrol {Diffuse Map} property and for a principled + material to the \uicontrol {Base Color Map}. For a custom material, you + must assign the texture to a map. To use Texture components to apply textures to materials: From 05b92b4df94d4fd7b535888f282f358844a5c721 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 2 Sep 2020 15:04:48 +0200 Subject: [PATCH 03/17] Fix build of Clang refactoring plugin Change-Id: Idfdde4b517aa24ea7becbbd67c34bb818a2a0f52 Reviewed-by: Cristian Adam --- src/plugins/clangrefactoring/baseclangquerytexteditorwidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangrefactoring/baseclangquerytexteditorwidget.cpp b/src/plugins/clangrefactoring/baseclangquerytexteditorwidget.cpp index 05cb74f599c..29f53c71d1e 100644 --- a/src/plugins/clangrefactoring/baseclangquerytexteditorwidget.cpp +++ b/src/plugins/clangrefactoring/baseclangquerytexteditorwidget.cpp @@ -32,7 +32,7 @@ namespace ClangRefactoring { BaseClangQueryTextEditorWidget::BaseClangQueryTextEditorWidget(QWidget *parent) : TextEditor::TextEditorWidget(parent) { - setupFallBackEditor(Core::Id()); + setupFallBackEditor(Utils::Id()); setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); setHighlightCurrentLine(false); setLineNumbersVisible(false); From 6d7abca41f6f64064123369f34f719dc361e01bc Mon Sep 17 00:00:00 2001 From: Venugopal Shivashankar Date: Tue, 1 Sep 2020 23:47:10 +0200 Subject: [PATCH 04/17] Doc: Mention FreeRTOS sources for STM boards 'FreeRTOS Sources' is one of the required fields if the chosen STM target supports FreeRTOS. Change-Id: Ib5074eda31cd73d64aa728751ef24a29957c3624 Reviewed-by: Leena Miettinen --- doc/qtcreator/src/mcu/creator-mcu-dev.qdoc | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc index 3673f97b195..f86ce3c3194 100644 --- a/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc +++ b/doc/qtcreator/src/mcu/creator-mcu-dev.qdoc @@ -101,6 +101,7 @@ \li The \uicontrol {GNU ARM Embedded Toolchain} path. \li The \uicontrol {STM32CubeProgrammer} install path. \li The \uicontrol {MCU SDK} for the chosen target. + \li The \uicontrol {FreeRTOS Sources} for the chosen target. \endlist \li For NXP targets: \list From 356acf16b894df9e1c1967b10f6f107facb62ab5 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 3 Sep 2020 12:52:06 +0200 Subject: [PATCH 05/17] QmlJSCheck: Workaround for ListElement When editing QML there are false positives reported for ListElement. Task-number: QDS-2602 Task-number: QDS-2716 Change-Id: If3fc297d6609213448f8353e9406b3f0aaf65870 Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljscheck.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 175ea0341df..92e1c1e59cf 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -1835,7 +1835,10 @@ const Value *Check::checkScopeObjectMember(const UiQualifiedId *id) if (value) break; } - if (!value) { + + const bool isListElementScope = (!m_typeStack.isEmpty() && m_typeStack.last() == "ListElement"); + + if (!value && !isListElementScope) { addMessage(ErrInvalidPropertyName, id->identifierToken, propertyName); return nullptr; } From c086c298727f159691b37204876823c36f2ba42e Mon Sep 17 00:00:00 2001 From: Johanna Vanhatapio Date: Thu, 3 Sep 2020 16:31:50 +0300 Subject: [PATCH 06/17] Doc: Update the topic on editing 3D scenes Task-number: QDS-2724 Change-Id: I4b9f4523e647edfafb7f052efcdf5c8c95f00687 Reviewed-by: Leena Miettinen --- .../qtquick3d-editor/qtdesignstudio-3d.qdoc | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d.qdoc index ab65cea8f48..a295ca3e813 100644 --- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d.qdoc +++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d.qdoc @@ -35,11 +35,11 @@ \title Editing 3D Scenes - You can use the 3D editor in the Design mode to edit files you created - using 3D graphics applications and stored in one of the supported formats. - You cannot create 3D models or other assets in the editor, but you can - \l{Importing 3D Assets}{import} the assets you need and work with them to - create scenes and states, as well as the transitions between them. + You can use \uicontrol {3D Editor} in the Design mode to edit files you + created using 3D graphics applications and stored in one of the supported + formats. You cannot create 3D models or other assets in the editor, but you + can \l{Importing 3D Assets}{import} the assets you need and work with them + to create scenes and states, as well as the transitions between them. When you import 3D scenes from files that you exported from 3D graphics tools, you also import the camera, light, model, and materials as 3D @@ -66,17 +66,17 @@ \li \l {Editing 3D Assets in Design Mode} \QDS opens QML files that contain 3D scenes in the Design mode and - the scenes in the 3D editor. You can add imported 3D assets + the scenes in \uicontrol {3D Editor}. You can add imported 3D assets to projects as 3D components. \li \l {Working in 3D Editor} - You can select 3D components in the 3D editor to move, rotate, and - scale them in the scene projected by the camera. + You can select 3D components in \uicontrol {3D Editor} to move, + rotate, and scale them in the scene projected by the camera. \li \l{Adding 3D Views} - You can drag and drop 3D components from the \uicontrol Library - to the scene or to the \uicontrol Navigator. You must add all - 3D components into a 3D view. + You can drag and drop 3D components from \uicontrol Library + to the scene or to \uicontrol Navigator. You must add all 3D + components into a 3D view. \li \l {Using 3D Components} You can speficy properties for 3D components, such as cameras, From f849319d118d9d7cfd206e30d9a198a427bc24bb Mon Sep 17 00:00:00 2001 From: Aleksei German Date: Thu, 3 Sep 2020 17:52:49 +0200 Subject: [PATCH 07/17] QmlDesigner: Disable more properties for QUL Turned off Controls properties and Animations. Task-number: QDS-943 Change-Id: I4b9868734c74f5319fd7d3e66b57d59007300340 Reviewed-by: Thomas Hartmann --- .../QtQuick/AnimationSection.qml | 2 ++ .../propertyeditor/propertyeditorvalue.cpp | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationSection.qml index abf69756fab..b117eeb7f93 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationSection.qml @@ -51,11 +51,13 @@ Section { Label { text: qsTr("Paused") tooltip: qsTr("Sets whether the animation is currently paused.") + disabledState: !backendValues.paused.isAvailable } CheckBox { text: backendValues.paused.valueToString backendValue: backendValues.paused + enabled: backendValue.isAvailable } Label { text: qsTr("Loops") diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp index d2c0c71f7de..2ecb0fa3b21 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp @@ -275,6 +275,7 @@ static QList prepareNonMcuProperties() { QList result; + //Builtins: const QList itemProperties = {"layer", "opacity", "gradient", "smooth", "antialiasing", "border", "baselineOffset", "focus", "activeFocusOnTab"}; const QList mouseAreaProperties = {"propagateComposedEvents", "preventStealing", "cursorShape", @@ -295,6 +296,19 @@ static QList prepareNonMcuProperties() "highlightResizeDuration", "preferredHighlightBegin", "layoutDirection", "preferredHighlightEnd", "highlightFollowsCurrentItem", "keyNavigationWraps", "snapMode", "highlightMoveVelocity", "highlightResizeVelocity"}; + //Animations: + const QList animationProperties = {"paused"}; + + //QtQuick.Controls: + const QList controlProperties = {"focusPolicy", "hoverEnabled", "wheelEnabled"}; + const QList abstractButtonProperties = {"display", "autoExclusive"}; + const QList buttonProperties = {"flat", "highlighted"}; + const QList dialProperties = {}; //nothing in propeditor + const QList progressBarProperties = {"indeterminate"}; + const QList radioButton = {}; //nothing in propeditor + const QList sliderProperties = {"live", "snapMode", "touchDragThreshold"}; + const QList swipeViewProperties = {}; //nothing in propeditor + const QList switchProperties = {}; //nothing in propeditor result.append(itemProperties); result.append(mouseAreaProperties); @@ -304,7 +318,16 @@ static QList prepareNonMcuProperties() result.append(paddingProperties); result.append(columnRowProperties); result.append(listViewProperties); - + result.append(animationProperties); + result.append(controlProperties); + result.append(abstractButtonProperties); + result.append(buttonProperties); + result.append(dialProperties); + result.append(progressBarProperties); + result.append(radioButton); + result.append(sliderProperties); + result.append(swipeViewProperties); + result.append(switchProperties); return result; } From f9600b733557b4b29d0ab9f230cc9d87887d3039 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 3 Sep 2020 11:23:59 +0200 Subject: [PATCH 08/17] CMakePM: Fix removing cmake tools The id might be destroyed with its parent before trying to reference it again and put it into the list. Change-Id: Ic7bb053293b24f0f0109a1c6479f73b7cbec2dc0 Reviewed-by: hjk --- src/plugins/cmakeprojectmanager/cmakesettingspage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp index 61e3dba76fd..e26a0cb9706 100644 --- a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp +++ b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp @@ -343,8 +343,8 @@ void CMakeToolItemModel::removeCMakeTool(const Utils::Id &id) CMakeToolTreeItem *treeItem = cmakeToolItem(id); QTC_ASSERT(treeItem, return); - destroyItem(treeItem); m_removedItems.append(id); + destroyItem(treeItem); } void CMakeToolItemModel::apply() From 2f77a9bcfca84458dce93c63b0eaae7c3140b075 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 4 Sep 2020 10:35:25 +0200 Subject: [PATCH 09/17] QmlDesigner: Fix crash Change-Id: Ibb6a14b4b684482b8c6098933a79929c2bd09add Reviewed-by: Thomas Hartmann --- .../components/propertyeditor/propertyeditorvalue.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp index 2ecb0fa3b21..06b3f482589 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorvalue.cpp @@ -334,6 +334,9 @@ static QList prepareNonMcuProperties() bool PropertyEditorValue::isAvailable() const { + if (!m_modelNode.isValid()) + return true; + const QList nonMcuProperties = prepareNonMcuProperties(); const QByteArray fontPrefix = {"font"}; From f6e013c80e97626ed12bed9124da16f92f853d84 Mon Sep 17 00:00:00 2001 From: Vikas Pachdha Date: Thu, 3 Sep 2020 17:34:43 +0200 Subject: [PATCH 10/17] Doc: Add asset export documentation Task-number: QDS-2729 Change-Id: I0af45f22a49cf0a8a74bc6bd9a0b0c3fd4091e1f Reviewed-by: Leena Miettinen --- .../images/qtquick-qml-export-dialog.png | Bin 0 -> 28280 bytes doc/qtcreator/src/qtcreator-toc.qdoc | 1 + .../creator-only/qtquick-app-development.qdoc | 5 ++ .../qtquick/creator-only/qtquick-export.qdoc | 71 ++++++++++++++++++ .../qtquick-from-qmlproject-to-pro.qdoc | 4 +- .../src/widgets/qtdesigner-overview.qdoc | 2 +- 6 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 doc/qtcreator/images/qtquick-qml-export-dialog.png create mode 100644 doc/qtcreator/src/qtquick/creator-only/qtquick-export.qdoc diff --git a/doc/qtcreator/images/qtquick-qml-export-dialog.png b/doc/qtcreator/images/qtquick-qml-export-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..d06a01e5b97140e15174727af48d27ba5b56c513 GIT binary patch literal 28280 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 du=}I \uicontrol {Export QML}. + + The primary use of exported metadata and assets is to generate native file + formats in content creation tools, such as Adobe Photoshop, using \QB. \QBPS + can generate PSD files by importing the metadata and assets. + + QML is exported as follows: + + \list + \li QML types inherited from \l [QML]{Item}{Item} are exported, other + types are ignored. + \li \l [QML]{Text}{Text} components are exported as metadata only + and no assets are generated. + \li \l [QML]{Rectangle}{Rectangle} and \l [QML]{Image}{Image} types + generate assets as PNG files. + \endlist + + \section1 Configuring QML Export + + You can configure the export in the \uicontrol {Export QML} dialog, which + lists the \l{Qt Quick UI Forms}{UI forms} (ui.qml files) of the current + project. + + \image qtquick-qml-export-dialog.png "QML Export Dialog" + + \list 1 + \li In the \uicontrol {Export path} field, specify the path where + the metadata file and assets are exported. + \li Deselect the \uicontrol {Export assets} check box to disable + exporting assets and only generate the metadata file. + \li In the file list, select the \l{Qt Quick UI Forms}{UI forms} + to be exported. + \li Select \uicontrol {Export} export to start the export process. + \endlist +*/ diff --git a/doc/qtcreator/src/qtquick/qtquick-from-qmlproject-to-pro.qdoc b/doc/qtcreator/src/qtquick/qtquick-from-qmlproject-to-pro.qdoc index 00e4bb74e8e..31849550331 100644 --- a/doc/qtcreator/src/qtquick/qtquick-from-qmlproject-to-pro.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-from-qmlproject-to-pro.qdoc @@ -26,11 +26,11 @@ /*! \page quick-converting-ui-projects.html \if defined(qtdesignstudio) - \previouspage studio-importing-designs.html + \previouspage studio-importing-3d.html \nextpage quick-uis.html \else \previouspage creator-qml-modules-with-plugins.html - \nextpage creator-using-qt-designer.html + \nextpage creator-exporting-qml.html \endif \title Converting UI Projects to Applications diff --git a/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc b/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc index 915765c2b0d..e2342dbe416 100644 --- a/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc +++ b/doc/qtcreator/src/widgets/qtdesigner-overview.qdoc @@ -30,7 +30,7 @@ // ********************************************************************** /*! - \previouspage quick-converting-ui-projects.html + \previouspage creator-exporting-qml.html \page creator-using-qt-designer.html \nextpage adding-plugins.html From 215b28466682ae3d0f1a2ef26d7972ac8b63d7ab Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 3 Sep 2020 14:23:31 +0200 Subject: [PATCH 11/17] ProjectExplorer: Properly set up the output formatter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... for the app output window. Fixes: QTCREATORBUG-24560 Change-Id: I199d7b16f445db498027094792c6cf344d920a88 Reviewed-by: André Hartmann --- src/plugins/projectexplorer/appoutputpane.cpp | 9 ++++++--- src/plugins/projectexplorer/runcontrol.cpp | 9 +++++++-- src/plugins/projectexplorer/runcontrol.h | 3 ++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 320cd5ac6e0..63a9377df74 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -154,8 +154,10 @@ void TabWidget::slotContextMenuRequested(const QPoint &pos) AppOutputPane::RunControlTab::RunControlTab(RunControl *runControl, Core::OutputWindow *w) : runControl(runControl), window(w) { - if (runControl && w) - w->setLineParsers(runControl->createOutputParsers()); + if (runControl && w) { + w->reset(); + runControl->setupFormatter(w->outputFormatter()); + } } AppOutputPane::AppOutputPane() : @@ -405,7 +407,8 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc) if (tab.runControl) tab.runControl->initiateFinish(); tab.runControl = rc; - tab.window->setLineParsers(rc->createOutputParsers()); + tab.window->reset(); + rc->setupFormatter(tab.window->outputFormatter()); handleOldOutput(tab.window); diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index a7d3a075fa9..a5b45af2ef8 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -824,7 +825,7 @@ void RunControlPrivate::showError(const QString &msg) q->appendMessage(msg + '\n', ErrorMessageFormat); } -QList RunControl::createOutputParsers() const +void RunControl::setupFormatter(OutputFormatter *formatter) const { QList parsers = OutputFormatterFactory::createFormatters(target()); if (const auto customParsersAspect @@ -834,7 +835,11 @@ QList RunControl::createOutputParsers() const parsers << parser; } } - return parsers; + formatter->setLineParsers(parsers); + Utils::FileInProjectFinder fileFinder; + fileFinder.setProjectDirectory(project()->projectDirectory()); + fileFinder.setProjectFiles(project()->files(Project::AllFiles)); + formatter->setFileFinder(fileFinder); } Utils::Id RunControl::runMode() const diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 6926ec4c582..b609815363c 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -46,6 +46,7 @@ namespace Utils { class MacroExpander; class OutputLineParser; +class OutputFormatter; } // Utils namespace ProjectExplorer { @@ -238,7 +239,7 @@ public: Utils::FilePath targetFilePath() const; Utils::FilePath projectFilePath() const; - QList createOutputParsers() const; + void setupFormatter(Utils::OutputFormatter *formatter) const; Utils::Id runMode() const; const Runnable &runnable() const; From c11c09386c319cb3dcd9e89616d3f1d2789afdd9 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 4 Sep 2020 10:51:53 +0200 Subject: [PATCH 12/17] Doc: Fix link to Adding Dynamics from online doc sidebar TOC MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7e4de42079cde8c6b7b0315968e5f17c529648e6 Reviewed-by: Topi Reiniö --- doc/qtdesignstudio/config/style/qt5-sidebar.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/qtdesignstudio/config/style/qt5-sidebar.html b/doc/qtdesignstudio/config/style/qt5-sidebar.html index cc4f709bc3a..8a33d73402c 100644 --- a/doc/qtdesignstudio/config/style/qt5-sidebar.html +++ b/doc/qtdesignstudio/config/style/qt5-sidebar.html @@ -8,7 +8,7 @@
  • Getting Started
  • Managing Projects
  • Creating UIs
  • -
  • Adding Dynamics
  • +
  • Adding Dynamics
  • Editing 3D Scenes
  • Previewing
  • Advanced Topics
  • From 3f99be2ee8824398f9115e610014ee1b58082e63 Mon Sep 17 00:00:00 2001 From: Aleksei German Date: Fri, 4 Sep 2020 10:59:45 +0200 Subject: [PATCH 13/17] QmlDesigner: Fix for Animation Properties LineEdit Deactivated an option to translate properties names. Task: QDS-2737 Change-Id: Ieadd4cd56094f09c961234a5b2790c2380e1106a Reviewed-by: Thomas Hartmann --- .../propertyEditorQmlSources/QtQuick/AnimationTargetSection.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationTargetSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationTargetSection.qml index e614a6563b7..e1b347679af 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationTargetSection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/AnimationTargetSection.qml @@ -56,6 +56,7 @@ Section { LineEdit { backendValue: backendValues.property Layout.fillWidth: true + showTranslateCheckBox: false } Label { text: qsTr("Properties") @@ -64,6 +65,7 @@ Section { LineEdit { backendValue: backendValues.properties Layout.fillWidth: true + showTranslateCheckBox: false } } From f1bb1bf572371c470b91ed48d4fd716a90c1d540 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 3 Sep 2020 16:18:52 +0200 Subject: [PATCH 14/17] Doc: Describe using uniforms in custom effects and materials Fixes: QDS-2723 Change-Id: Iea02261220026ab210fc82fb27ceee0277abb62d Reviewed-by: Miikka Heikkinen --- ...dio-custom-material-uniform-properties.png | Bin 0 -> 5647 bytes ...ignstudio-3d-custom-effects-materials.qdoc | 64 ++++++++++++++++-- 2 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 doc/qtdesignstudio/images/studio-custom-material-uniform-properties.png diff --git a/doc/qtdesignstudio/images/studio-custom-material-uniform-properties.png b/doc/qtdesignstudio/images/studio-custom-material-uniform-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..b69d4561829e98d0c28e20fc009aca5ec57bb9dd GIT binary patch literal 5647 zcmeAS@N?(olHy`uVBq!ia0y~yVA5e=U}WN8Vqjnhik41gU=Y3L>EaktaqI2f|NTqK z9oav4IdrPcI3~|hr+9Ok_4>Un>zo&CSyVG~ve>HSo3z8cw2QCgRqx#$TD*Lsg0q6S zfrpE)8CPDt6jkZmz%g`9AsmOAS6Ad3|r+#>$s>qQjdzm*4wvx<5az;(_n>`Bi_d z9{YVhzH3>`tvw$e%=TYD=U3;~-h@L(x%=Ze{_Xnm;r!lj zM^3HXJHN8RIPOi5N%0|Pzch%=xxu2i6FZ=hg``{z#?DDxWJKyq7&E4_#>-!3m8@oRD z+f~`kczMVs`A)N#Bnf#QbLrugTrJC*?!k z-&-cEep@!qOo*+{iOrLjHhKE(`RcpLzmHvgVe?vGnobMfhl@5WiJuqAR}`wYOR4+m zaV#iQ{Br2}I#&Do57+(Ue=pbndtrUe8+Q3$H{RF&+PVM#r|orbuG@c{sb8bav0Qxr z>&5rW|GVeeeg7!F_w(YjiXvZER>prl`tU=P`PI{7gXVvaZ-WtEI&*cP|(0ttnnvm{j<2&7Vh04%M#u@Y(6O`OB)=-xSX; zIL0*DbZXbxXERk~XBn;AQh0Tv-%@A&oUE;NTJNQ|*++RReu&amS#$f)k#DQ!rRc6@ zXSG%gP~fcje@||bT#&B6gjDt6lh<$CNUUV_$@ShevuXQwb?$9phgl}h)w4e6 zp`pK^c6HvCFb@$H;ZP4TDc-`};ajI)H+r_PtNk!{(pVV-0okvBgfund+Yc0r#l&QEG$}C%)4-h z@ZM`zCU3Jl+R3hPF?R>&aYysC?>-qmYr~V0X9=9TuH5oqN6Upn`(_B#+y6d&|KEN8 z`fuF!KUcrs{nPjTt$$yP|9`rg&n7(o_TOudFZ7a(J3cY~Dk+JHLMY+Bff3xO~mq=eG-6e47$_ay zyFc*SmV4QUzvPBJKU#UJ{{ml;wIAC-Mc#$2wXW5N=HLJM*nexh!S%YCs`Ga|f80{Y zzl;0(mR0-rPTG_IH|fxiuh+^KTGYOoCX#;dzjNQGy<0AEEPC0^sk>h-t?`XV;^R$2BBZu9a;Q zkc#Eoy?1S(osd*~;6=VZuHa+m=3Gg%h?#YN-+8;1wwKRX7ca7yRsHersf;O8o|G9C zbiGp0SvdX9Wu17guX1%3`#0S5IwfzaBh-JqYGX=vi-62t0j<*fquhT2m)<`UcXe6I z=e|R~)hT65q9 zA35)rjt>HQT0ZUDXj>GuNNI1He6A{Eu+9$67PYAGEALazui!ubc1N2<=DBAXhgcM+ zsK&_U7vKIaX(#NJw^dAO$-`9LmQM=vvn%m7IQM&L=MJ6nWj+kz=W~MI^`3cBOhN z^X0YkpT6C3_pa9`mBUNEh$Yzxak(45OuuRKlJ{f~$I;NzRFhRbEn3}6!fj8gJ8|^I zak$1`KlOXsi^Pgwf6~l%#?4h|IdybNckiq&T|41f39&zAcDFx>PHkO#a(lYZx+$wt z*9&NUedSnp-)4X9{A`X?=A{)n;j+h4Cs%!4fBcGojz^wygnoHCo=$p5{^zp#sp?vV%0A9e9xdA8yG+&|x*uMi9T>TbSxWtZ>% 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 fyza30Kl}31ohu(yuwPbP0l+XkKHdT_E literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-custom-effects-materials.qdoc b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-custom-effects-materials.qdoc index b5d03d9fb90..7d98babad7f 100644 --- a/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-custom-effects-materials.qdoc +++ b/doc/qtdesignstudio/src/qtquick3d-editor/qtdesignstudio-3d-custom-effects-materials.qdoc @@ -32,16 +32,27 @@ \title Creating Custom Effects and Materials + The \l{Applying 3D Effects}{Qt Quick 3D Effects} and \l{Using 3D Materials} + {Qt Quick 3D Materials} modules contain a set of ready-made effects and + materials that you can apply to 3D models. If the ready-made effects and + materials don't meet your needs, you can create custom effects and + materials. Each effect or material must have a fragment shader that + implements all the functions needed to calculate the shaded color. The + material system also offers ready-made functions to help you implement + the material. + + The material system supports dielectric, metallic, and transparent + materials, point lights, area lights, ambient occlusion, shadowing, + two-sided polygons, index-of-refraction, and fragment cutoff (masking). + For more information, see \l {Qt Quick 3D Custom Material Reference}. + You can use the QML types in the \uicontrol {Qt Quick 3D Custom Shader Utils} tab of \uicontrol Library to create custom effects and materials. To make the \uicontrol Effect and \uicontrol {Custom Material} types appear in the tab, you must select \uicontrol {Add Import} in the \uicontrol {QML Imports} tab, and then select \uicontrol QtQuick3D.Effects and - \uicontrol QtQuick3D.Materials to import the QML types in the - \l{Qt Quick 3D Effects QML Types}{Qt Quick 3D Effects} and - \l{Qt Quick 3D Materials QML Types}{Qt Quick 3D Materials} modules to your - project. These modules contain a set of ready-made effects and materials - that you can apply to 3D models. + \uicontrol QtQuick3D.Materials to import the QML types in those modules to + your project. For more information about the shader utilities and commands and their properties, see \l {Using Custom Shaders}. @@ -50,7 +61,10 @@ \note You must create the actual shader source files with some other tool and copy them to your project folder. You can then specify the source file - names in the custom effect or material properties. + names in the custom effect or material properties. To use custom \e uniforms + in the shader files, you must specify them as QML properties for the custom + effect or material component. \QDS automatically generates the uniforms for + the shaders based on the property values. \section1 Creating Custom Effects @@ -160,4 +174,42 @@ \uicontrol Properties. \image studio-qtquick-3d-shader-properties.png "Shader properties" \endlist + + \section1 Creating Shader Files + + The requirements set for shaders that you can use in custom effects and + materials are described in \l {Qt Quick 3D Custom Material Reference}. + + If you use custom uniforms in the shader files, you must specify them + as QML properties for the custom effect or material component. \QDS + automatically generates the uniforms based on the property values. + + For example, the following code snippet shows fragment shader code that + uses two uniforms: \c uTextureInUse and \c uInputTexture. + + \code + out vec4 fragColor; + + in vec3 pos; + in vec3 texCoord0; + + void main() { + + vec4 textCol; + if (uTextureInUse) + textCol = texture( uInputTexture, texCoord0.xy ); + + fragColor = vec4(pos.x * 0.02 * textCol.x, pos.y * 0.02 * textCol.y, pos.z * 0.02, 1.0); + } + \endcode + + To use the above fragment shader in a custom effect or material component, + you must remove the uniforms from the shader code and define them as + properties for the component in \uicontrol {Connection View} > + \uicontrol Properties. + + \image studio-custom-material-uniform-properties.png "Uniforms as properties in Connection View Properties tab" + + For more information about adding properties, see + \l{Specifying Dynamic Properties}. */ From e6343c296a1705fc0e5c2c2efe093a3bf5f751f1 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 28 Aug 2020 15:31:05 +0300 Subject: [PATCH 15/17] QmlDesigner: Generate qml id from image file name When dragging an image file to create a Image or Texture item, base the id on the file name rather than setting it to generic name based on type. This includes cleanup of AbstractView::generateNewId to remove redundant and unused code as well as an option to provide a fallback id prefix. Change-Id: I563f1760ffbace9c5c2145477ec8736836f36c45 Fixes: QDS-2328 Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri --- .../navigator/navigatortreemodel.cpp | 5 +++ .../designercore/include/abstractview.h | 1 + .../designercore/model/abstractview.cpp | 40 +++++++++---------- .../designercore/model/qmlitemnode.cpp | 3 +- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index f86b3779335..e2cc2970b84 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include @@ -649,6 +650,10 @@ void NavigatorTreeModel::handleItemLibraryImageDrop(const QMimeData *mimeData, i // create a texture newModelNode = QmlItemNode::createQmlObjectNode(m_view, itemLibraryEntry, {}, targetProp, false); + + // Rename the node based on source image + QFileInfo fi(imagePath); + newModelNode.setIdWithoutRefactoring(m_view->generateNewId(fi.baseName(), "textureImage")); return newModelNode.isValid(); } return false; diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h index d0dcddb2eef..2412ed9700b 100644 --- a/src/plugins/qmldesigner/designercore/include/abstractview.h +++ b/src/plugins/qmldesigner/designercore/include/abstractview.h @@ -160,6 +160,7 @@ public: ModelNode modelNodeForId(const QString &id); bool hasId(const QString &id) const; QString generateNewId(const QString &prefixName) const; + QString generateNewId(const QString &prefixName, const QString &fallbackPrefix) const; ModelNode modelNodeForInternalId(qint32 internalId) const; bool hasModelNodeForInternalId(qint32 internalId) const; diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp index f5ef94f6216..d1a72228779 100644 --- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp +++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp @@ -504,40 +504,36 @@ QString firstCharToLower(const QString &string) return resultString; } -QString AbstractView::generateNewId(const QString &prefixName) const +QString AbstractView::generateNewId(const QString &prefixName, const QString &fallbackPrefix) const { - QString fixedPrefix = firstCharToLower(prefixName); - fixedPrefix.remove(' '); - - bool forceSuffix = false; - - if (!ModelNode::isValidId(fixedPrefix)) - forceSuffix = true; + // First try just the prefixName without number as postfix, then continue with 2 and further + // as postfix until id does not already exist. + // Properties of the root node are not allowed for ids, because they are available in the + // complete context without qualification. int counter = 0; - /* First try just the prefixName without number as postfix, then continue with 2 and further as postfix - * until id does not already exist. - * Properties of the root node are not allowed for ids, because they are available in the complete context - * without qualification. - * The id "item" is explicitly not allowed, because it is too likely to clash. - */ + QString newBaseId = QString(QStringLiteral("%1")).arg(firstCharToLower(prefixName)); + newBaseId.remove(QRegExp(QStringLiteral("[^a-zA-Z0-9_]"))); - QString newId = QString(QStringLiteral("%1")).arg(firstCharToLower(prefixName)); - if (forceSuffix) - QString(QStringLiteral("%1%2")).arg(firstCharToLower(prefixName)).arg(1); + if (newBaseId.isEmpty()) + newBaseId = fallbackPrefix; - newId.remove(QRegExp(QStringLiteral("[^a-zA-Z0-9_]"))); + QString newId = newBaseId; - while (!ModelNode::isValidId(newId) || hasId(newId) || rootModelNode().hasProperty(newId.toUtf8()) || newId == "item") { - counter += 1; - newId = QString(QStringLiteral("%1%2")).arg(firstCharToLower(prefixName)).arg(counter); - newId.remove(QRegExp(QStringLiteral("[^a-zA-Z0-9_]"))); + while (!ModelNode::isValidId(newId) || hasId(newId) || rootModelNode().hasProperty(newId.toUtf8())) { + ++counter; + newId = QString(QStringLiteral("%1%2")).arg(firstCharToLower(newBaseId)).arg(counter); } return newId; } +QString AbstractView::generateNewId(const QString &prefixName) const +{ + return generateNewId(prefixName, QStringLiteral("element")); +} + ModelNode AbstractView::modelNodeForInternalId(qint32 internalId) const { return ModelNode(model()->d->nodeForInternalId(internalId), model(), this); diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index fe42f2b7e0b..886e524b291 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -106,7 +106,8 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QS newQmlItemNode = QmlItemNode(view->createModelNode("QtQuick.Image", metaInfo.majorVersion(), metaInfo.minorVersion(), propertyPairList)); parentproperty.reparentHere(newQmlItemNode); - newQmlItemNode.setId(view->generateNewId(QLatin1String("image"))); + QFileInfo fi(relativeImageName); + newQmlItemNode.setId(view->generateNewId(fi.baseName(), "image")); newQmlItemNode.modelNode().variantProperty("fillMode").setEnumeration("Image.PreserveAspectFit"); From 5cc7dae9659afaf546a609c0d6577a7118d7400b Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 1 Sep 2020 11:36:48 +0300 Subject: [PATCH 16/17] QmlPuppet: Improve gizmo precision At high zoom levels, picking precision of the gizmos was not good, because compounding inaccuracies from multiple floating point operations required. Fixed by reimplementing many operations using double precision math. Change-Id: I013876b816379a20b552eb06d2f9cbb3f2aa2d21 Fixes: QDS-2676 Reviewed-by: Mahmoud Badri --- .../qml2puppet/editor3d/mousearea3d.cpp | 354 ++++++++++++++++-- 1 file changed, 317 insertions(+), 37 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp index 03ec0f56d99..1495bc4ea5d 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp @@ -58,10 +58,7 @@ public: return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z; } - QVector3D toVec3() const - { - return QVector3D(float(x), float(y), float(z)); - } + QVector3D toVec3() const { return {float(x), float(y), float(z)}; } DoubleVec3D normalized() const { @@ -82,6 +79,8 @@ public: return std::sqrt(len); } + DoubleVec3D operator-() { return {-x, -y, -z}; } + double x = 0.; double y = 0.; double z = 0.; @@ -119,6 +118,268 @@ DoubleVec3D operator/(const DoubleVec3D &v1, const DoubleVec3D &v2) return DoubleVec3D(v1.x / v2.x, v1.y / v2.y, v1.z / v2.z); } +// Limited functionality double precision matrix4x4 for cases where float calculations +// can suffer from rounding errors +class DoubleMat44 { +public: + DoubleMat44() + { + // Default is identity matrix + m[0][0] = 1.; + m[0][1] = 0.; + m[0][2] = 0.; + m[0][3] = 0.; + m[1][0] = 0.; + m[1][1] = 1.; + m[1][2] = 0.; + m[1][3] = 0.; + m[2][0] = 0.; + m[2][1] = 0.; + m[2][2] = 1.; + m[2][3] = 0.; + m[3][0] = 0.; + m[3][1] = 0.; + m[3][2] = 0.; + m[3][3] = 1.; + } + + DoubleMat44(const QMatrix4x4 &mat) + { + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < 4; ++j) + m[i][j] = double(mat(j, i)); + } + } + + QMatrix4x4 toQMatrix4x4() + { + return QMatrix4x4(float(m[0][0]), float(m[1][0]), float(m[2][0]), float(m[3][0]), + float(m[0][1]), float(m[1][1]), float(m[2][1]), float(m[3][1]), + float(m[0][2]), float(m[1][2]), float(m[2][2]), float(m[3][2]), + float(m[0][3]), float(m[1][3]), float(m[2][3]), float(m[3][3])); + } + + static inline double matrixDet2(const double m[4][4], int col0, int col1, int row0, int row1) + { + return m[col0][row0] * m[col1][row1] - m[col0][row1] * m[col1][row0]; + } + + static inline double matrixDet3(const double m[4][4], int col0, int col1, int col2, + int row0, int row1, int row2) + { + return m[col0][row0] * matrixDet2(m, col1, col2, row1, row2) + - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) + + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2); + } + + DoubleMat44 inverted() + { + DoubleMat44 inv; + + double det = matrixDet3(m, 0, 1, 2, 0, 1, 2); + if (det != 0.) { + det = 1. / det; + + inv.m[0][0] = matrixDet2(m, 1, 2, 1, 2) * det; + inv.m[0][1] = -matrixDet2(m, 0, 2, 1, 2) * det; + inv.m[0][2] = matrixDet2(m, 0, 1, 1, 2) * det; + inv.m[0][3] = 0; + inv.m[1][0] = -matrixDet2(m, 1, 2, 0, 2) * det; + inv.m[1][1] = matrixDet2(m, 0, 2, 0, 2) * det; + inv.m[1][2] = -matrixDet2(m, 0, 1, 0, 2) * det; + inv.m[1][3] = 0; + inv.m[2][0] = matrixDet2(m, 1, 2, 0, 1) * det; + inv.m[2][1] = -matrixDet2(m, 0, 2, 0, 1) * det; + inv.m[2][2] = matrixDet2(m, 0, 1, 0, 1) * det; + inv.m[2][3] = 0; + inv.m[3][0] = -inv.m[0][0] * m[3][0] - inv.m[1][0] * m[3][1] - inv.m[2][0] * m[3][2]; + inv.m[3][1] = -inv.m[0][1] * m[3][0] - inv.m[1][1] * m[3][1] - inv.m[2][1] * m[3][2]; + inv.m[3][2] = -inv.m[0][2] * m[3][0] - inv.m[1][2] * m[3][1] - inv.m[2][2] * m[3][2]; + inv.m[3][3] = 1; + } + return inv; + } + + DoubleVec3D transform(const DoubleVec3D &v) + { + DoubleVec3D ret; + + auto multCol = [&](int c, double d) { + ret.x += m[c][0] * d; + ret.y += m[c][1] * d; + ret.z += m[c][2] * d; + }; + + multCol(0, v.x); + multCol(1, v.y); + multCol(2, v.z); + multCol(3, 1.); + + return ret; + } + + static DoubleMat44 matrixMultiD(const QMatrix4x4& m1, const QMatrix4x4& m2) + { + DoubleMat44 m1d(m1); + DoubleMat44 m2d(m2); + + return matrixMultiD(m1d, m2d); + } + + static DoubleMat44 matrixMultiD(const DoubleMat44& m1, const DoubleMat44& m2) + { + DoubleMat44 m; + + m.m[0][0] = m1.m[0][0] * m2.m[0][0] + + m1.m[1][0] * m2.m[0][1] + + m1.m[2][0] * m2.m[0][2] + + m1.m[3][0] * m2.m[0][3]; + m.m[0][1] = m1.m[0][1] * m2.m[0][0] + + m1.m[1][1] * m2.m[0][1] + + m1.m[2][1] * m2.m[0][2] + + m1.m[3][1] * m2.m[0][3]; + m.m[0][2] = m1.m[0][2] * m2.m[0][0] + + m1.m[1][2] * m2.m[0][1] + + m1.m[2][2] * m2.m[0][2] + + m1.m[3][2] * m2.m[0][3]; + m.m[0][3] = m1.m[0][3] * m2.m[0][0] + + m1.m[1][3] * m2.m[0][1] + + m1.m[2][3] * m2.m[0][2] + + m1.m[3][3] * m2.m[0][3]; + + m.m[1][0] = m1.m[0][0] * m2.m[1][0] + + m1.m[1][0] * m2.m[1][1] + + m1.m[2][0] * m2.m[1][2] + + m1.m[3][0] * m2.m[1][3]; + m.m[1][1] = m1.m[0][1] * m2.m[1][0] + + m1.m[1][1] * m2.m[1][1] + + m1.m[2][1] * m2.m[1][2] + + m1.m[3][1] * m2.m[1][3]; + m.m[1][2] = m1.m[0][2] * m2.m[1][0] + + m1.m[1][2] * m2.m[1][1] + + m1.m[2][2] * m2.m[1][2] + + m1.m[3][2] * m2.m[1][3]; + m.m[1][3] = m1.m[0][3] * m2.m[1][0] + + m1.m[1][3] * m2.m[1][1] + + m1.m[2][3] * m2.m[1][2] + + m1.m[3][3] * m2.m[1][3]; + + m.m[2][0] = m1.m[0][0] * m2.m[2][0] + + m1.m[1][0] * m2.m[2][1] + + m1.m[2][0] * m2.m[2][2] + + m1.m[3][0] * m2.m[2][3]; + m.m[2][1] = m1.m[0][1] * m2.m[2][0] + + m1.m[1][1] * m2.m[2][1] + + m1.m[2][1] * m2.m[2][2] + + m1.m[3][1] * m2.m[2][3]; + m.m[2][2] = m1.m[0][2] * m2.m[2][0] + + m1.m[1][2] * m2.m[2][1] + + m1.m[2][2] * m2.m[2][2] + + m1.m[3][2] * m2.m[2][3]; + m.m[2][3] = m1.m[0][3] * m2.m[2][0] + + m1.m[1][3] * m2.m[2][1] + + m1.m[2][3] * m2.m[2][2] + + m1.m[3][3] * m2.m[2][3]; + + m.m[3][0] = m1.m[0][0] * m2.m[3][0] + + m1.m[1][0] * m2.m[3][1] + + m1.m[2][0] * m2.m[3][2] + + m1.m[3][0] * m2.m[3][3]; + m.m[3][1] = m1.m[0][1] * m2.m[3][0] + + m1.m[1][1] * m2.m[3][1] + + m1.m[2][1] * m2.m[3][2] + + m1.m[3][1] * m2.m[3][3]; + m.m[3][2] = m1.m[0][2] * m2.m[3][0] + + m1.m[1][2] * m2.m[3][1] + + m1.m[2][2] * m2.m[3][2] + + m1.m[3][2] * m2.m[3][3]; + m.m[3][3] = m1.m[0][3] * m2.m[3][0] + + m1.m[1][3] * m2.m[3][1] + + m1.m[2][3] * m2.m[3][2] + + m1.m[3][3] * m2.m[3][3]; + + return m; + } + + static DoubleMat44 rotationMatrix(const QQuaternion &rot) + { + DoubleMat44 rotMat; + double xp = double(rot.x()); + double yp = double(rot.y()); + double zp = double(rot.z()); + double wp = double(rot.scalar()); + + const double f2x = xp + xp; + const double f2y = yp + yp; + const double f2z = zp + zp; + const double f2xw = f2x * wp; + const double f2yw = f2y * wp; + const double f2zw = f2z * wp; + const double f2xx = f2x * xp; + const double f2xy = f2x * yp; + const double f2xz = f2x * zp; + const double f2yy = f2y * yp; + const double f2yz = f2y * zp; + const double f2zz = f2z * zp; + + rotMat.m[0][0] = 1. - (f2yy + f2zz); + rotMat.m[1][0] = f2xy - f2zw; + rotMat.m[2][0] = f2xz + f2yw; + rotMat.m[0][1] = f2xy + f2zw; + rotMat.m[1][1] = 1. - (f2xx + f2zz); + rotMat.m[2][1] = f2yz - f2xw; + rotMat.m[0][2] = f2xz - f2yw; + rotMat.m[1][2] = f2yz + f2xw; + rotMat.m[2][2] = 1. - (f2xx + f2yy); + + return rotMat; + } + + double m[4][4]; +}; + +static DoubleMat44 calcLocalTransform(const QQuick3DNode *node) +{ + DoubleVec3D pivotD(-node->pivot()); + const DoubleVec3D scaleD(node->scale()); + const DoubleVec3D posD(node->position()); + pivotD = pivotD * scaleD; + DoubleMat44 localTransform; + + localTransform.m[0][0] = scaleD.x; + localTransform.m[1][1] = scaleD.y; + localTransform.m[2][2] = scaleD.z; + + localTransform.m[3][0] = pivotD.x; + localTransform.m[3][1] = pivotD.y; + localTransform.m[3][2] = pivotD.z; + + DoubleMat44 rotMat = DoubleMat44::rotationMatrix(node->rotation()); + localTransform = DoubleMat44::matrixMultiD(rotMat, localTransform); + + localTransform.m[3][0] += posD.x; + localTransform.m[3][1] += posD.y; + localTransform.m[3][2] += posD.z; + + return localTransform; +} + +static DoubleMat44 calcGlobalTransform(const QQuick3DNode *node) +{ + DoubleMat44 localTrans = calcLocalTransform(node); + QQuick3DNode *parent = node->parentNode(); + if (parent) { + DoubleMat44 globalTrans = calcGlobalTransform(parent); + return DoubleMat44::matrixMultiD(globalTrans, localTrans); + } + return localTrans; +} + +static DoubleVec3D getNormalD(const DoubleMat44 &m) +{ + return DoubleVec3D(m.m[2][0], m.m[2][1], m.m[2][2]).normalized(); +} + MouseArea3D *MouseArea3D::s_mouseGrab = nullptr; MouseArea3D::MouseArea3D(QQuick3DNode *parent) @@ -333,6 +594,36 @@ void MouseArea3D::componentComplete() m_view3D->installEventFilter(this); } +static DoubleVec3D rayIntersectsPlaneD(const DoubleVec3D &rayPos0, + const DoubleVec3D &rayPos1, + const DoubleVec3D &planePos, + const DoubleVec3D &planeNormal) +{ + const DoubleVec3D rayDirection = rayPos1 - rayPos0; + const DoubleVec3D rayPos0RelativeToPlane = rayPos0 - planePos; + + const double dotPlaneRayDirection = DoubleVec3D::dotProduct(planeNormal, rayDirection); + const double dotPlaneRayPos0 = -DoubleVec3D::dotProduct(planeNormal, rayPos0RelativeToPlane); + + if (qFuzzyIsNull(dotPlaneRayDirection)) { + // The ray is is parallel to the plane. Note that if dotPlaneRayPos0 == 0, it + // additionally means that the line lies in plane as well. In any case, we + // signal that we cannot find a single intersection point. + return DoubleVec3D(0., 0., -1.); + } + + // Since we work with a ray (that has a start), distanceFromRayPos0ToPlane + // must be above 0. If it was a line segment (with an end), it also need to be less than 1. + // (Note: a third option would be a "line", which is different from a ray or segment in that + // it has neither a start, nor an end). Then we wouldn't need to check the distance at all. + // But that would also mean that the line could intersect the plane behind the camera, if + // the line were directed away from the plane when looking forward. + const double distanceFromRayPos0ToPlane = dotPlaneRayPos0 / dotPlaneRayDirection; + if (distanceFromRayPos0ToPlane <= 0.) + return DoubleVec3D(0., 0., -1.); + return (rayPos0 + distanceFromRayPos0ToPlane * rayDirection); +} + QVector3D MouseArea3D::rayIntersectsPlane(const QVector3D &rayPos0, const QVector3D &rayPos1, const QVector3D &planePos, @@ -342,29 +633,8 @@ QVector3D MouseArea3D::rayIntersectsPlane(const QVector3D &rayPos0, const DoubleVec3D rayPos1D(rayPos1); const DoubleVec3D planePosD(planePos); const DoubleVec3D planeNormalD(planeNormal); - const DoubleVec3D rayDirectionD = rayPos1D - rayPos0D; - const DoubleVec3D rayPos0RelativeToPlaneD = rayPos0D - planePosD; - const double dotPlaneRayDirection = DoubleVec3D::dotProduct(planeNormalD, rayDirectionD); - const double dotPlaneRayPos0 = -DoubleVec3D::dotProduct(planeNormalD, rayPos0RelativeToPlaneD); - - if (qFuzzyIsNull(dotPlaneRayDirection)) { - // The ray is is parallel to the plane. Note that if dotLinePos0 == 0, it - // additionally means that the line lies in plane as well. In any case, we - // signal that we cannot find a single intersection point. - return QVector3D(0.f, 0.f, -1.f); - } - - // Since we work with a ray (that has a start), distanceFromLinePos0ToPlane - // must be above 0. If it was a line segment (with an end), it also need to be less than 1. - // (Note: a third option would be a "line", which is different from a ray or segment in that - // it has neither a start, nor an end). Then we wouldn't need to check the distance at all. - // But that would also mean that the line could intersect the plane behind the camera, if - // the line were directed away from the plane when looking forward. - const double distanceFromRayPos0ToPlane = dotPlaneRayPos0 / dotPlaneRayDirection; - if (distanceFromRayPos0ToPlane <= 0.) - return QVector3D(0.f, 0.f, -1.f); - return (rayPos0D + distanceFromRayPos0ToPlane * rayDirectionD).toVec3(); + return rayIntersectsPlaneD(rayPos0D, rayPos1D, planePosD, planeNormalD).toVec3(); } // Get a new scale based on a relative scene distance along a drag axes. @@ -544,18 +814,28 @@ QVector3D MouseArea3D::getMousePosInPlane(const MouseArea3D *helper, if (!helper) helper = this; - const QVector3D mousePos1(float(mousePosInView.x()), float(mousePosInView.y()), 0); - const QVector3D rayPos0 = m_view3D->mapTo3DScene(mousePos1); - const QVector3D mousePos2(float(mousePosInView.x()), float(mousePosInView.y()), - rayPos0.length()); - const QVector3D rayPos1 = m_view3D->mapTo3DScene(mousePos2); - const QVector3D globalPlanePosition = helper->mapPositionToScene(QVector3D(0, 0, 0)); - const QVector3D intersectGlobalPos = rayIntersectsPlane(rayPos0, rayPos1, - globalPlanePosition, helper->forward()); - if (qFuzzyCompare(intersectGlobalPos.z(), -1)) - return intersectGlobalPos; + const DoubleVec3D mousePos1(float(mousePosInView.x()), float(mousePosInView.y()), 0); + const DoubleVec3D rayPos0 = m_view3D->mapTo3DScene(mousePos1.toVec3()); + DoubleVec3D rayPos1; + if (qobject_cast(m_view3D->camera())) { + rayPos1 = rayPos0 - rayPos0.length() * DoubleVec3D(m_view3D->camera()->cameraNode()->getDirection()); + } else { + DoubleVec3D dir; + DoubleVec3D camPos = m_view3D->camera()->scenePosition(); + dir = (rayPos0 - camPos).normalized(); + rayPos1 = rayPos0 + rayPos0.length() * dir; + } - return helper->mapPositionFromScene(intersectGlobalPos); + const DoubleVec3D globalPlanePosition = helper->mapPositionToScene(QVector3D(0, 0, 0)); + DoubleMat44 sceneTrans = calcGlobalTransform(helper); + const DoubleVec3D intersectGlobalPos = rayIntersectsPlaneD(rayPos0, rayPos1, + globalPlanePosition, + -getNormalD(sceneTrans)); + + if (qFuzzyCompare(intersectGlobalPos.z, -1.)) + return intersectGlobalPos.toVec3(); + + return sceneTrans.inverted().transform(intersectGlobalPos).toVec3(); } bool MouseArea3D::eventFilter(QObject *, QEvent *event) From 913dc6473ddd93dbc6d3d260a4a4445696ba3b09 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 28 Aug 2020 14:00:43 +0300 Subject: [PATCH 17/17] QmlDesigner: Choose target property when dragging image to material When dragging an image to a Quick3D default or principled material, pop up a dialog to choose the target texture property. Change-Id: I8d97ef5bf7c5192c2651fcd8cf64a7f4a87c9847 Fixes: QDS-2326 Reviewed-by: Mahmoud Badri Reviewed-by: Thomas Hartmann --- .../navigator/choosetexturepropertydialog.cpp | 91 +++++++++++++++ .../navigator/choosetexturepropertydialog.h | 54 +++++++++ .../navigator/choosetexturepropertydialog.ui | 110 ++++++++++++++++++ .../components/navigator/navigator.pri | 8 +- .../navigator/navigatortreemodel.cpp | 26 +++-- 5 files changed, 277 insertions(+), 12 deletions(-) create mode 100644 src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.cpp create mode 100644 src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.h create mode 100644 src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.ui diff --git a/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.cpp b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.cpp new file mode 100644 index 00000000000..826ed580cae --- /dev/null +++ b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** 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. +** +****************************************************************************/ + +#include "choosetexturepropertydialog.h" +#include "nodemetainfo.h" +#include "ui_choosetexturepropertydialog.h" + +namespace QmlDesigner { + +// This dialog displays all texture properties of an object and allows the user to choose one +ChooseTexturePropertyDialog::ChooseTexturePropertyDialog(const ModelNode &node, QWidget *parent) + : QDialog(parent) + , m_ui(new Ui::ChooseTexturePropertyDialog) +{ + m_ui->setupUi(this); + setWindowTitle(tr("Select Texture Property")); + m_ui->label->setText(tr("Set texture to property:")); + setFixedSize(size()); + + connect(m_ui->listProps, &QListWidget::itemClicked, this, [this](QListWidgetItem *item) { + m_selectedProperty = item->isSelected() ? item->data(Qt::DisplayRole).toByteArray() : QByteArray(); + }); + + connect(m_ui->listProps, &QListWidget::itemDoubleClicked, this, [this](QListWidgetItem *item) { + Q_UNUSED(item) + QDialog::accept(); + }); + + fillList(node); +} + +ChooseTexturePropertyDialog::~ChooseTexturePropertyDialog() +{ + delete m_ui; +} + +TypeName ChooseTexturePropertyDialog::selectedProperty() const +{ + return m_selectedProperty; +} + +void ChooseTexturePropertyDialog::fillList(const ModelNode &node) +{ + // Fill the list with all properties of type Texture + const auto metaInfo = node.metaInfo(); + const auto propNames = metaInfo.propertyNames(); + const TypeName textureProp("QtQuick3D.Texture"); + QStringList nameList; + for (const auto &propName : propNames) { + if (metaInfo.propertyTypeName(propName) == textureProp) + nameList.append(QString::fromLatin1(propName)); + } + + if (!nameList.isEmpty()) { + QString defaultProp = nameList.first(); + + nameList.sort(); + for (const auto &propName : qAsConst(nameList)) { + QListWidgetItem *newItem = new QListWidgetItem(propName); + m_ui->listProps->addItem(newItem); + } + + // Select the default prop + m_ui->listProps->setCurrentRow(nameList.indexOf(defaultProp)); + m_selectedProperty = defaultProp.toLatin1(); + } +} + +} diff --git a/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.h b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.h new file mode 100644 index 00000000000..7604e6f9427 --- /dev/null +++ b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** 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 + +#include +#include + +#include + +namespace QmlDesigner { +namespace Ui { +class ChooseTexturePropertyDialog; +} + +class ChooseTexturePropertyDialog : public QDialog +{ + Q_OBJECT + +public: + explicit ChooseTexturePropertyDialog(const ModelNode &node, QWidget *parent = 0); + ~ChooseTexturePropertyDialog(); + + TypeName selectedProperty() const; + +private: + void fillList(const ModelNode &node); + + Ui::ChooseTexturePropertyDialog *m_ui; + TypeName m_selectedProperty; +}; +} diff --git a/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.ui b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.ui new file mode 100644 index 00000000000..8643e866d5c --- /dev/null +++ b/src/plugins/qmldesigner/components/navigator/choosetexturepropertydialog.ui @@ -0,0 +1,110 @@ + + + QmlDesigner::ChooseTexturePropertyDialog + + + + 0 + 0 + 250 + 250 + + + + + 200 + 150 + + + + + 1000 + 1000 + + + + + + + false + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + + + + buttonBox + accepted() + QmlDesigner::ChooseTexturePropertyDialog + accept() + + + 240 + 240 + + + 157 + 274 + + + + + buttonBox + rejected() + QmlDesigner::ChooseTexturePropertyDialog + reject() + + + 240 + 240 + + + 286 + 274 + + + + + diff --git a/src/plugins/qmldesigner/components/navigator/navigator.pri b/src/plugins/qmldesigner/components/navigator/navigator.pri index 08432e7f861..7344f1bc5a0 100644 --- a/src/plugins/qmldesigner/components/navigator/navigator.pri +++ b/src/plugins/qmldesigner/components/navigator/navigator.pri @@ -5,7 +5,8 @@ SOURCES += navigatorview.cpp \ navigatorwidget.cpp \ nameitemdelegate.cpp \ iconcheckboxitemdelegate.cpp \ - navigatortreeview.cpp + navigatortreeview.cpp \ + choosetexturepropertydialog.cpp HEADERS += navigatorview.h \ navigatortreemodel.h \ @@ -13,6 +14,9 @@ HEADERS += navigatorview.h \ nameitemdelegate.h \ iconcheckboxitemdelegate.h \ navigatortreeview.h \ - navigatormodelinterface.h + navigatormodelinterface.h \ + choosetexturepropertydialog.h RESOURCES += navigator.qrc + +FORMS += choosetexturepropertydialog.ui diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index e2cc2970b84..c93b3145e90 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -25,6 +25,7 @@ #include "navigatortreemodel.h" #include "navigatorview.h" +#include "choosetexturepropertydialog.h" #include "qmldesignerplugin.h" #include @@ -661,16 +662,21 @@ void NavigatorTreeModel::handleItemLibraryImageDrop(const QMimeData *mimeData, i if (targetNode.isSubclassOf("QtQuick3D.Material")) { // if dropping an image on a default material, create a texture instead of image - m_view->executeInTransaction("NavigatorTreeModel::handleItemLibraryImageDrop", [&] { - if (createTextureNode(targetProperty)) { - // Automatically set the texture to default property - // TODO: allow the user to choose which map property to set the texture for (QDS-2326) - if (targetNode.isSubclassOf("QtQuick3D.DefaultMaterial")) - targetNode.bindingProperty("diffuseMap").setExpression(newModelNode.validId()); - else if (targetNode.isSubclassOf("QtQuick3D.PrincipledMaterial")) - targetNode.bindingProperty("baseColorMap").setExpression(newModelNode.validId()); - } - }); + ChooseTexturePropertyDialog *dialog = nullptr; + if (targetNode.isSubclassOf("QtQuick3D.DefaultMaterial") || targetNode.isSubclassOf("QtQuick3D.PrincipledMaterial")) { + // Show texture property selection dialog + dialog = new ChooseTexturePropertyDialog(targetNode, Core::ICore::dialogParent()); + dialog->exec(); + } + if (!dialog || dialog->result() == QDialog::Accepted) { + m_view->executeInTransaction("NavigatorTreeModel::handleItemLibraryImageDrop", [&] { + if (createTextureNode(targetProperty) && dialog) { + // Automatically set the texture to selected property + targetNode.bindingProperty(dialog->selectedProperty()).setExpression(newModelNode.validId()); + } + }); + } + delete dialog; } else if (targetNode.isSubclassOf("QtQuick3D.TextureInput")) { // If dropping an image on a TextureInput, create a texture on the same level as // TextureInput, as the TextureInput doesn't support Texture children (QTBUG-86219)