From 824f011cef0dc8fee10a7eaca511e9f61690766b Mon Sep 17 00:00:00 2001 From: rnv Date: Wed, 16 Oct 2013 12:56:06 +0000 Subject: [PATCH] First step for the "21793: [CEA 625] Clipping : from coordinates or from bounding box" issue. --- .../gui/SMESH/images/Clipping_Absolute.png | Bin 0 -> 29886 bytes .../gui/SMESH/images/Clipping_Relative.png | Bin 0 -> 31112 bytes .../gui/SMESH/images/before_clipping.png | Bin 0 -> 101248 bytes .../SMESH/images/before_clipping_preview.png | Bin 0 -> 119384 bytes .../gui/SMESH/images/dataset_clipping.png | Bin 0 -> 21157 bytes .../gui/SMESH/images/opengl_clipping.png | Bin 0 -> 21714 bytes src/OBJECT/SMESH_Actor.cxx | 61 + src/OBJECT/SMESH_Actor.h | 2 + src/OBJECT/SMESH_ActorDef.h | 4 + src/OBJECT/SMESH_DeviceActor.cxx | 12 + src/OBJECT/SMESH_DeviceActor.h | 4 + src/SMESHGUI/SMESHGUI.cxx | 215 +- src/SMESHGUI/SMESHGUI_ClippingDlg.cxx | 2345 +++++++++++------ src/SMESHGUI/SMESHGUI_ClippingDlg.h | 209 +- src/SMESHGUI/SMESHGUI_VTKUtils.cxx | 21 +- src/SMESHGUI/SMESHGUI_VTKUtils.h | 8 + src/SMESHGUI/SMESH_msg_en.ts | 28 + src/SMESHGUI/SMESH_msg_fr.ts | 28 + 18 files changed, 2054 insertions(+), 883 deletions(-) create mode 100644 doc/salome/gui/SMESH/images/Clipping_Absolute.png create mode 100644 doc/salome/gui/SMESH/images/Clipping_Relative.png create mode 100644 doc/salome/gui/SMESH/images/before_clipping.png create mode 100644 doc/salome/gui/SMESH/images/before_clipping_preview.png create mode 100644 doc/salome/gui/SMESH/images/dataset_clipping.png create mode 100644 doc/salome/gui/SMESH/images/opengl_clipping.png diff --git a/doc/salome/gui/SMESH/images/Clipping_Absolute.png b/doc/salome/gui/SMESH/images/Clipping_Absolute.png new file mode 100644 index 0000000000000000000000000000000000000000..9657d812ea9a9587be7526a28d8ec26a3edd1888 GIT binary patch literal 29886 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 r7RUU@eZ}lw5BrA|l-&E#1<6 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/before_clipping.png b/doc/salome/gui/SMESH/images/before_clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..41e14d2334aee47cae1548bff579a13398ae9abe GIT binary patch literal 101248 zcmZ^Kc{r4B{O$~9FpRP9%h;FfYj$HDOUM!_*@noHvSnWeBg9w|Nk)W}B}<9y(I{mo zF(Q=8GS(QAZO-)lo%6@Ju5;eG=5o#Zc;A=LJfF|!e(w8zZadmrK_P+=0002BMw&YT z0Kh%kyNijAcIL(}$pP9AV1$#EDWK`2@G9*C*w@y|96=r04L zV;E!~0p;oiyyWGxx;Z?LTZP{ z+*}hEW#aua7L_wF86n10G(LRbZ9_lf_5Evh7VQt+sl|U$sx?1QiZnEhV^~c;>{Hek z)5;~%8)TG8IRiA!JW+rDd-`?n0G*BEt-9aZ$HI`eW;};$RB=OIR>N_0)j<0}hY{)4f^q(4!kt=(RZNXzGxi84r<_L9ycHkL24G{cn=3;yHvC z{QnE7j>!vUd5@|;mWRAf6xfRC)9U3#i6v8G80Q%8Eq~&xdcWf;icz+{xYFW;V(p** z0)KkXr{#xx1n^r?hhKK*ndfgMcpTde3{-?_=wsy7Su|M69H~bi--=fqpINCsoAU)d zuoN#bZ1pePlm+V<=#-m#l+0=!E}g^C-Dq+mGeO`wEhdDOQ16bI zme+BDOh59iY-X5CpW~jNQTUflZ?eY1Jf8F-w>doGEWlhNuairP}2n4CS+eT}<^V{w|ZxQEzQrc?l!jrvXh8^5-IYThp zx_Z9!*sLDsnw9DQU#uE!(=M4VBz&2-UwZaHjPc!iHa9NCZs-A!nW*dCvW4Lc10FJs zUJP{WtPw{XOdHt%Z34wwHGWleRu-MGNATySa<=R6CSQA+)nxAW;E#l3ZDPHPfToR=~V?K7X$&o5*8wgkuyYzC4c{ zXF|MjH00}6iT1*dbS3mr{H|j9M&B*2oaoN$r23&*Ca$y#C;$By)o+j5^B(b(ROVpz z*4?F#cvE7<)PYVlph)aV+{XA?l})rjd*OpDa*9>9BLmVNBS9qMO3e!7vGB&K`yi`m zqg5T8P}JhO#~q~ocaR)F$}2;H7?WngP*aCyoKAn(1end~10~*BUZ~<@ZB7!*u&$Go zuhrVR`@iSTOF*M-w)|wQR!?(b0_!DHePE#md|=^DG8?BHaE2a^hBP2qPDR@x!PfR^ z+@1@kkJHEn57>B<#gfEp@ciw$Qh~Cgd}e1p;S(CNQCM%X`E)9v^OBiTZKQWJBZjOs z`ICk6mSFFmqsvs5-UNN&pP>Qw-#>>v&u=xG*FF)aiaP)Nzu?z?@zGm375T}y$UkW~ zfRL8$FlwjOX@-rA4jk$?TJo=Y;o@mZ+3jMiHCpAem(Y_@#cmU3s^X?)VLsLq&AsGZ z!$3q@(lsENslul+B#fHSud-X93u(CE(O#I%O_{x^jUPjhJ%0YN3;4{%HB;x#=jx-W z@J{?x{a9 zj$>i8;m@d^d=iUZ)yr4TpSY=jE^wO&IqF19@LmXv>Cz&OpwcDJC#Ah3*N8ZK3rim^HSLgX+d zl=6!5_BjUrRYKb>(Nz^+)t{>Q@dl{6tacGJGuAf<`;i?*{`PsxI7H_&@BG| zjO&=>W|3~)s`e*c!8hT2-g)*hRMCoS4CCrO%;UCMI+Fs@+d#emzA+<$8JVTfuR#8s zZcqAAB*83NV00994XyCGmAkW*% z1IDRkc|<H3FRv84ha%IGlad<4}IJ>o8csJq^1syU?@z#Hhf>D z)DU3OO&Erw?wMLTMKsD6dS-KDH(Ivnzt#&E0js`UR5=}OvK*;?YVClri4elwH`v!e zv64+{csBg!O9)q>7&KA50gjDH!~@H z>`Cde1{~El_+fagzn51 zjn@a3sd;bDZy8rE5CvUHCCJ+(14r({ag+O0D#vi;>DABDo#jX)82HH(Cs$HZDbY-* zBNJ(PDln&1Q}^YrvON4NfU*j3TI}%f`&>4|e7@;+tDSkV|7k3-%U$a6LG!Z{u3CC) zY(-UCnLvU^=0?BbVkJiO_+;jXsaHMs08V9bGmW85XV2#a2%N64Scz6{DfJZm{Son8 zZRJeor2z@Q0+Ifut+yl$v34f|ihY#R|Kpd0yoaSn!9~a65XLY{!&~k|&<28q-~U4lO?Sw>*1`yP#$1zZa2)o`C$f2{>3{jXJmGZ`3OufM zG^w-{Ay?pkttiZ$E8W0B+cxB~BMe=b6Gf@)tvrXq9^!x5xiO71PrR;3bPH>U%&K+& z(oeavCxF~`Kx7(%gPyvP(xWU!oBBgQp`{fVa%(2N5BdV(FZO#S9mbF|Xm~!)ZiGbF z8|0Z}u&G|k#KmFN#pLC4T(&rI6P;a=^)I_wZSU9KeeCsSGg~;jW4|H1jVmQAL#nf! zkb$qA$v5GNLY{kd3L2HKs`W?e#dU8$KW z@Zk5VL_13|BiR}I?4?nMiD|TCS5~B?9-FDgq=2N2^}qS@s!wEe-g|@)EB%wZER9%$ zu%G3ZPck}GS7+vo)ZK&Y`v#-&lz2E0anB@EmwPoOsp^#o z^(xXwIG`KRI_?7!kjeYgGEA(sCbkoPbh5!B-^0OLg(!MWO5J zX;#NvEf5dYc$4cVO#oWKWO^zoKt_8Hg0mo}4tN&sa7wCz#{h}rrpP=mr1Pl{w3UnOy;6M`O7baH8p;>?;`^-j4pS?m)QaG- z;mWl=T@*Mv&bzMA3qmM-m@4X-8 zO?GR*^P_YC70lADEEBBpOaZd3v}IkI1*)cKX|WrJ)F;DRx17S>KJ3rF{>XoJ!C}3( zKA&4m7e?Pz!nv&T&a)l+8ckomn-SyA;Rg>RdG3`pZed=BDFE7CJh4_qj%_sqV^P z0OoQ)(9k>sGe0R6C;2NAgbaTvG3*V- ziQ?Q@I&p7}eQg z_)>CZb#;r4^R94y%1-7_gxZvr;WJnCj?q{X7^)PF{bG4xq>;i%;K9q3Rxm!%S?ami z&KIL1)m{^Lmn^CFV?vSKYk4!do0;2D?$3Jjjk#CXZxH7rTgaRW3pqpn8C`4! zhqP6%T;YS;-K-Jt8CB4eCmA&$V^|E!Xr0L*t7Ms|2R8H5PxQgzP-nNbz2)rg8|O5F zU0NSkB8Vu}JhNK2Mf)d9Klre!2T*cd(=hsAV?Iv?6VTE57NnJPb#dC)fu|_90%4eZ zP3Kb_Uz<+AI7if9x~VN6n7Ova2y`avv$l0`RZ2Homuj~!d7Q<;dE2EgKM~f-p&tF_ z=vjsbJ!p^D-RuUhh*;jk;)1z_0OVokA*<10#Y_0BY07L&6;DYrW-oAz_gv+DnLw4| zQDrkH(hVGemp8Kj;>YSSa>7dFiHFb9!{zz+hA$J&a=gQz#l~rF&|{8t1Fnzh3k9z) znNQ$yZcL{PBtZ`0!=7nn=(4H3T|YqU861Reex?Wq8_7%-RL%=<96o^%*=Z9M#u<7{ zPhqU$ITBwn8~I(u&}f?3OpU}Xh3(6osu0pn7&al{QeLS|wZ$bKN6LnjO9b@* zueozr^;N}ozJ7bUJ2H&_l{Ve7`F5<5&wk7en>g0iD8nfcU0La&c_;*YbOjLOj8##^ z-x_N&`#qU~dXd)0s4#PY@bB?+WeE~hf<9IZxP(%eMfWkPlg?Kk)nS&~d9q!o*HLDB zTBIcW2)=eG-~+k@b02)yXQ7Bs%YE(+)&$6)KK2cH$unTp%WY1{aafd1voQ18Rha+r z2G)dwyG`eiX${8}kNRYxZxQ(RL^P3=C?Nl6zSQ&2`9(>WXEKg7ZsSljA}vQ<{#I+b z>7Veg+zDbER+8XGOX?DGllCnsGRLP0yx;wVRr1!^UhzFX@kZK>yyE6OGUuO9sZ_5|}%r4BVCvBElIQd2(Kyqn5< z@}wJ%>0#THzbkD7``y*W`fqR-p-q`R5XlP1ov8!uddjmXJ}^&LfoGec-|c%P>X~jR z8WbdvShAgaXmENxFq5_};#H_FiYIiO=211sevT%3gvZ#$EyO+X@}G2Wu{~3dd8ls3 zmq~96Zmi$!|4k*Tm}Q4cdQ_bR+H|MpKcc~ETCoTh2@vUlwQcf3u4d*P_kZk&d$R?U zl10BsGV2c}7 zrbikv@&pPv)@!I9+zYSlVp1QoM_($tCJI=`D}#|nEUt1t)pKz3DC4)iur^n&3ykti zNk*Grw(pTu$6okc{=8Chg)>r#%1&n5rd+*|Y@$eRbF}neG@kBf5h23Vy8V7@HrR0P ziJ_(?(@qi$i!UJXNxAckZPP1VMZCh&6o@7JAv7*9}aA|%_uGKx9ilm0xC9S7x@6PVUMhYCNa~F6F8fis(v%P(I z!u51tobCnS~ugR@=xE`CWc(9WS0(DeP?soAyq15GCwOSFP z4JjoPeO2$#sD<#`(D&{@h8U<6UIx2VX(Hom3|znON0wTExKs(|27mta+;GL1hp< zn~S!6Z<^QfNrlN@Wv~fGnw@!0TcsvKM2i_SAJe99{CoZ_6sw8Hc*~h;@u$Xqq00}u zIUBtfKt7lZL(|Lauhve?kP+2PdXxC;#nu$aOm0VP=6NRrVM>xup*a8g5X z+b=QbvR$;2$)R++%64ZTW1EmVIVyyWeb2Qu7%w$ht7^?fEaOlw#OiYOI-ahzo znoVPwIK!R|WT>S2z7Pu9RZ2_dKH#gtgBMKW!D8pln`k7!=t;7|C6)81XPR=Fte%Si z+9kNenTM7IStRK!j;jgiyl z+TxRLOW`lT@wIp`po_sX(+C}sA5;_ENR?6Rd`hq=O}vpju$dA28{qb!psXiL+1#z# z_PG@u>Yg|+k&Y8((`$9n>v+||%fu_?_KX?$gAvJXvV$*1q!6wFH+x|*OVC;|Cj7?U zQ9aT=uXmSWymAe;?LU&p-oPFGCRglm~sw^K{t{7{~On7f{u;8lTuAfnD4q z2)AwapV3M0nAZ(M?G6;EPMz2FW zH5B97xDz=pn1!x=8o{@FpC^8%e^GG4-KJ!h$>5oFN*^?olu)mr+f=|(}L<$^A>ur4V* zB%3I>L644QTa_X{P!ltIO4&s2{Og$1wn+Z>lN#1+{UlYV@0U;5Om=~#_mk(+NeYDy ztUve8Ck5VKiwQoll=5Qw8Ckss?ig#2yTae*ws6Wa#Ud_tLr2wRW4wc5s6V*bz8G=+)s`Zh>`3s-ue;0Hr!039{)}2eU13k-o6Qq$~E7~@qw-hFsvgz zF4R*{!6_0tdVAOuGqo9wG|_9TyQYk{>MB_$1jdLr}(`fw6RL6stOvs(E^a6psz6 zUiCN$w4$a)|Jcfq2yj?I&`@3OZtgx21M@WoY{Zs9QTI}YNxa3%0y<}1fK-W7(XqTz zLrg&(D|f%+3G+4nqcACHB18AUN@WvGv@4ifHwYeSJv42&=y|n_oP-_5|d-p3TXI2DPpskiScT*hw!lxxZ72Lpo=3tTd z6t4K>DK6Uxb3rX$oU35x98v1C3kMZ`C>-E`I&+**|L6>18Y@BW9GOLa(3)O=h7z*N z&Tp-)ZJF*H} z@$WtZ<4VDLJ;pac^AgL7 z7={h?Y4N+zXIQ>_gE7-AGSqSf{^zSYaU5yHAOw$|F^p%r>vUpda+A}9MkeM<6y2Y# zVw4}ko!R;Gobi|81u>+NFtmvwam!3*2>rnktjG~5duR6LV@@p2PO-Ew z`o0jezO|Zcd0Fn%+Cj3rWO?YXI7WMY^O7N7TNJjgRSYQQB|Q2jfRORkXF)`9WX;rO zL%>V2TNHlcQSSrwofvkM{yUap-6APxZ1l{KIK`x@ta#jP<{cz{WYk`eK-Xx(w+R7! z`dHI8@$Kbr$Nqn~5rf$pY4qN2E?AYqn1Y!%qxV24)_|Dy`v=0W5JA1sgC27mrJ-s^ z=^V9ChC32OX-CT!=GtZuRZ*%{yUnirO2};b)2!a?ZmvVsuMA?I#DtmxLPv+ynHKIC zmC4K#_Sqsg(&daMgtlcsiq)*ydj~=@S9@9?ed68ac8;GOInE zy8TtchxsJ=B+)|!_c7Me^kVEC43FhtMs~MYg~QERKx{*_n=ugPI`)9@k_W|$siE)@ zhF6@W>Y!ggxJa^Rd(-a69FW|y5>a}BRjYPAV!bS*lq7n}QOGsglmZD5lN0xg;278P zpgJAfw(ur)+c&U}1J zqAMME!}7OTS}y}z1h*69+LLa&5lNBK9--JYok{4PYb10tpawdEeZbm-*4~x$yz<8L zPDnOMI5#|sAcBam3z+R10}KX?8ALsyo`k#;z~%vxQ5{5l78H9;I7xIfW`=%3t3@z- z24)f^3CQSxA+bEa}B)A%MyU1rEWZ~2lr8Ykp3 zKvNT#4D~yjW@WyfJ<;eiE=&M()~7LtJ{{%5n*PYV;u?-J9udv3`)IWZJ+IMF^+=8B za^vFQwPH`Z-73QTtX<#T0C-CY$tGn_v0iiLCN!qi=|nmDI!d-CMGud=M}nm6+2J!Y z*TlS?3}O0=WvSfL>lY+puF~Dy`~)@`m+`lv>BO+e*oM<)P{VI=hQ{mf^0y6}tHaL} z#=j{qoC}tZB@6cExbiul;Wnff3GHG}#AELB-M~Ge$&UD>l4HHk<$5rC9wffmf-Rv zecp{Xp6C#CqA~FR{yvdua<2UG62v7_bPkGVC5i9vmUk)ao2?9yvO<8`iUFTxN{VkJ z!~cGl+jU9aaUg5R`9;4mX2K?LeaTZsFvK>{5X(!G+sh0oBm?#_Ad<0N!jFE6?fEqV zi-nd2#i=#TWON8&%KT$=ChzIUZ@zR$|ubCPWJ9Q~aY6 zek9i=d~mgpYyG3e-L0y@H_rXOvfi^8BR`rTqGR~#sqbvP!SGt;Bk!v|WK%uMph#BV z1HI!7RbbEnsbDuZp&49iCw?-ZrhMRhs z>B}{GvT<&+YV7%)$CX2*?6Ib(iN&xKSA6u0S-;lVvS+s+5-l7DMWGpS=ik5)ej?mA z_|QX10HTCcB=Nvon2fCXTpS2k%BeVEYV?JT%0AQngz_5n#3+v>L0AiMo{n!kdGixnW?y^NJ{lV9ojf00gr!L$VGlkI{HC$3EX_rl-l}6tdjD8T9DZyos z9$^2{eqGV327o>9G^PG5O}theHL8rci!UjiM?`4(A?46b(%r1_ssX=!oTeqX zM?Zpwg;VTOC74`BmEVf;US_y&%HmRgC8bz(%TybXlNtV)0@?l+Ez3X9ca3 zJ;X;k214KNo^W}z(1nuO#$zl0P1tl6@~V9 z6bGNT;z|R)y=9UmG!#c&8=H5EO<2ZQs3=QOTG_lVBi*^xWn4$0q~384AAuHKiDZs^-N?I)wJ% z*yZa|1Z>CKMLwL0gi<|PVKOgP=UG@Bs(y$H@+ja%wR!tGcdNzo2cqvPu6TG-j`}4+ zOA`lG9wjGESx{t$+(R2?4%m=A(+simqHI0Y(tXmZ6bvD3&qwZ&|KxSV)fPj3|J8<3 z=a-oiiDd8Np_R#F0TFUIJ`-|z$rRHqqIq12aJBBxF&6WDfT0T-7z2hU1Iov_pJ`7_ zUQXjoQr>Jj_A{a}EZf;1*rBS!CqTS0Qhrmp9aCdc1>)2*qWp5A^{KuO_?}-qS56p% zH-|#FGL1D|L*R}zha#lz@R*D_r9jEM=kJpy9KXVaeqMZmdta5_&GxP|#y47oyTQnA z-*W79=q2|Q`STfE%8}BZcl4033E2=8JZ6u7Ga=S;x*sNeq=FI}OX@rWA4*~^n|p&N za1!%dtjyxi_OevJbTef>cnW{_US{7>%ejpt5jZ58mKy|L{JfBmTz^Kq@|Adz>XGEe zIXCHx{AT2Nf=BPJ!%5mMr1ZyK^f9`# zw@={htdkvr29klW;wqsSmOUSbOa|-nhb`B3l823RH*{3ihCN{qmlebB#AGimE=BL% zAjuYd0YZH{t}2@8pjM!PBj5#?*k_&NiD0RNmyEA4AIDjXe^T>u--_ycznKpl%+lNL zv_-HPr>G5-2M4z4gbGs5|(lwbVIuGQ;e1u?)y$=7sRS4EsWr zJDWRBFlicVVpRnqg4?VD5o=p1BIFN|Kd6~h{nhC|ik$#Z>ltr(brB85%bqVAgFEIa zecyi=E1as=|ui zp7dPBz};uPx^e}c0DoFmkxi7Pp|7{CQGX_03qxXe9CXxaQq3OL)8Zzb`i;G?lq9{$ zuoa0T=;&{=+gH!2$s%lqsG^_^OSk^reVOCOjuJ<_5OO%m#*iDAxHzgj(978NBk=GN zM7m+Y^6qo7+7_N#Ng4>~E1nA;R-I4ozq{(07DS(+t}e>(p(WnTr(T=$W)J77vLsr6IvF1X75m?w@r>T{bFXs%N|6&ETiq zpRnicvJ5-1$Il*%HgLsQ6N*1*k{J8*HgS{9!K=1-)Y!MbyW4Vy5ce8Mm+AE5$d;zZ z<5j`fC#8m&(RaS^l*=~;( zr!#pqg_X+m3|%rO*&FTh=juv2-6SN9DAu~2+wro&lk#?#?V0WnQ?4{}I~m~yx~k)Z zvO1*X*aWq1e z%-}}lJj|dN`{py7X=I+n39(0VaEHgFz%ug5as+S6^k?2G9x8jgc&KCl0&T4k;0*)o zkalqp|2Y*^jASU@l0E=64S8_Sgd@feo9X}OGF86n{S7zoJl2vusKeM=)wQByNat6Y zK|_GZN<3=}4s3d;(hX=cR+sjoCc${dPOFr>PcpwHd7e2k3P>J%b~t*4`lR!M&&4Z0 zmY-Le>%r++c;-IP6sS9vdYsQN?-sTA(cOX@!@YcMT&Qyn-O2@td_-WkO2f7w_YIwt z4E0gBw50(;++Xf&6rbM$v}lmZZgVEeaC#LNXH?W@qJG!S!GBk%bk38Owc4+OK_A@7l{HpA+9IdUmxLy^ z-HsCpHaFF08C{RPTCB9@-ne97(lopqr(()CDsWE8 znEt(cTaL9oz4#I6naPXc*DMJqO<#=p2@0o1#|AXh(o6f+B>|f8rVU8)!Pmm8blf$L zJt=k8|b)%7`W4n7o#+V(jyIduAs>^>n+i`|{qC?&~m-skwpaJ)9Y6H#^T$e#+B1)X^=hS`n#MbcsncZlXG zT)w;O9X)KE*_7@&^JAjv*UjG-klQg;IXDoJj;6N#)&g#7*2A zoXE0Eg#4u)c>+KvKfG#us?axkTzWFN;@=}n?Ci*bH(tMd(@n1b3r&IYUB2Q6(a7Yv zT5xgF!DO;s*Gp(quswGkR*TEw*iN>ZmMHgIpl_Pcar9>0RR8P)Gt&dB&}&C}XAh5? zxrx)}*Vy}CBiIwxZk1fb$er58Y15vR_N6d-Ow*ufN-U$x{cDjmA_rD`VlzWSV@_0I zr#JH~iKT|BZ38-wCfMeZB{d2zpoaDv8iT7JR9Zngk8rtV8AL8_8gphp)=e9;;Tlem zaglztuv7`e-ky;xfM!-&>zhv>o+-wXaYjo!DiRiRl>5{zo0(D-o4uFGd!iT3iG=7pwJ18f))E zPGK%xeN|vD;F&Acso(G8VD7Q5b?;<;km#Tm?;9QDJ?bcyc?IExaGKljiGF%=cC@0s z2mPH5T|(7Se^u9_HA54=pf|;4REhCo>tQm6A~cy;-xt}NTf(T@ptI8Ma@74`ZRH~r}muTGl}l(WvQAT=3%Zqo>n11VSa(9_3kQSzOmXES4dOn7&Pb= zH`$I2PzIy71HDcJrrj*I|E;1^%Zyfxj{0W8luvzXDwaR(PrC-+8&9&lsTndS9Kn3b zF?SizmZ+-4Z-4h%r?%VpTT=Es%zzu81Zo!7(uuxT-qNgcRO6!3zj?RZV)xV+Sg$K1ZRTDOUoJ8Pz+{Os*Mp}6Oj!e6Qt0wtMe?;Jth$3z`1ywViNl<@o0 zxq`IYsAw}K_fl>!L`m{y7$4>CYD5Wm7=sL@&C}#KL z1ol1YNUc^NnaQ!WlE(j9mx`2&23;_%l$m!#Dm2L#CEThT(CveN8ZBc0gRCU9=a!`s#bN~7ec4Pr?mv8bF^#QZ z;f*K{uQ-ug<0`-FHJrgzYPX;Qo(;d}9h5U{45Z_wGMy!*;sX{L?MnF3N3LNo)g=BL zHF{odsucHjGX1b}N?BvtfJpN4!g$Bd_U$th7TFbEeH)2_Wnv2L?UucvF4#)BR#k!_;K% zwyVes$LPi97|9}Fz2-;pmFnGK8R1kBv!JW&B@f<>7~j$;=tj@uAf}we{SVMjBiYv% zGnR|H_6+vkmsPoreF1by%PBrS3{Ba~ox`^*Wk8J$sdv0g4yROm9=f{p-NgugJ7Wpy zT;E~&Q@LVhZTDfu{3V?Q>#2CdZwcu_=PDSG*0Z%Io&Qu&!rwb&Dg;~t%+qlk8#GXF zyBB`4dLZ2{+DCcSd1T$k$~MnnQu#PeTSDq;rq4}iv{W!&S?VuCuD~|>+V!OJW9g8* zf3CVaXpMXN2rek_C}+|EaH zs_w)t5L9Iu_Z`6jaOnmezi2DI!ugaZu`~YFU&pKq)?Ss)TN`P@DVjAV(OR#w(+oM= z{yP4&f~+*p>|IU}lb~F&dtYA2m9Y7PUE@H<>(`a{X=faMl(do$xO>x!@1K#Rhfsdw zxJJBR$aXU+{u04TaHYA~p`C*1;&=NvFMM~H2daOfe zZaUe3X~YMkC|8@&Bs$(Uu@pOmURr)ybXD?OQCP*flg*YDNULqZZNhCsa2adBjK>jT z?HsI&)tIj=H&G0=Vlx-ztrmgH4oQ_ln`W>~SDo2DC`^d1H*j@(tarl=0i^ku2z(Il zoy5IVN%XASd@t$nCiB(rIiAe+)3p;;-V9?~QHW`pS;N!;||! zF|H&gy-i#rvqWI(W5*oB1bB!PR)Y7(W`77nR4H^qib0UdP!q_diEvf1ZOa{~y}r2l zW^5#cW&Um`deG4Up)*Toivt^|3pA*eyBa+ojN+vkQc^+ybZUo!G<%zB_d(8`bmr*q zO>dv&6CYc(*$H=sRb78dKjL%1YzB0)iqldD3KW=aoHR<@$n#6lM#$2NMHR43Y1RN$ zmY%gIIOa0;ks?cX*)nZxAjG5WdC|UQmlq^v-hb_kev8ZUWC88OD_>xogBCafI=(+TpfoyLn^Yys&tr5^y1X6(lag_jES9%qeM*~dKmvK zp;^`BgZ9XLY8gHBRYujgN(iqxrF_DI1}6%BR=N0CotSD`&F`&XS%m zcG=VOCW?5b$LCUxA80LEs{m;}os^N5P!%B!|Ea<08#K(GuDNI9DQ(KrcAkmgQ%^t8 zFIU4xlWes~^2l@kgYn~4>X&B{L=(%G>1x3742Lqg>2c}6OJxkVCoEQ+P`o=nfwIwF zX91xyJ*=!`)pmw;@$)N`@y$kMwDR1C8Q8DHK11Xk&g$%WXgA-ieO!=Hai-8p*hmup zqa=FA*u1iU<&StvLTWdU0LXTr+V7A3?CD+g4yc~>^}!IXE=$+jdC+;gRUUR97^1si z6#g^X*R!m$(>c&_Ek1)NoX_esvdZJ#f~lToU)qv9oy7LQBIY%xOA1cIrx7C2F>(X# za|O>QpVm|aYV5`|1USVTc)a^ihk{30-5 zBY)|>;r*|!D)bgI;^i)jDF^YNm%=b%V={rVie}yP_e1j2YQ*Yd2l}#&(79GJaE*9B z7Espq0U+>9q-3>fJmNmr^cC|F@gg+j9lY~gdLIp4KvvAXWDX(itW(8#(Z>~d2L22p zXR=sLV0>U)J0nKw`ES~;j^83QBRvEEZ6Zo5SE8DJ{`Q+dt{QyqYqe_}r_wc$woA>M z$3PoN_v4;U#=+znvzwOA(~Do^X7BWYMkFo9?BSH|v^J|3&o%Uy$uAyXSzDV;?Gw88 zJbo`!-orHxapM3Eij==Krj2Kv6T=D0`;t>O#a*lzuEAyg3I@m|i3dc`Jhab54ITl* zmC)VHmOe4eQ)VXm+xZe|T?|fRsmM^`qUs+u+az0q!nK{xV%Y(o^4)hAa;eug)%q7( zas?3UUV*)-JL^*8^ZlCjLLcX*_aF2i54a+Wv7uS5Hr@v*uP!l9c{5jD&NJi}a5&WH zETR}kq)HhR9(w3o_uV$66S(sk4*7JRaUQPg8*!mI=|mlN@{{n>J@vesX}4Mgu$_Bu zqL2lvuwA;L7XM3@jh~`k4ZBfVfm9yZ%pS}5VBK3fr1&^Vh|tF1thjo;#p;)heB)nx z<5Y%O>t2Cn)#^5!zQg(&QpL2^mkb-d4%&N_t`Lox1KLmAL#lu}LqFtmF-CMLd*WF1tFp_McW7ENO%pZb(an~Q>&0~I*oBEoE5-qYrwHtjgA@p#FM3uZZqjq z-D9 zsYWZ#0=4Kbe#&6hUJ|wRl0NlqD$^*ST$aOLVM^0wdV*QIJZczI;tkqN+EaQIK`5~a zv}DzK^EODs8xzyzf`k;u$>tS z*Ws$j`)qPR=*no54HYC_C ze$Ap!V_|Tq4Eqqg7N`jES&i-rXK9NJF>|=1!ZT zw^q=uukyK$vtsWu4*7XwSjk9&u#5+CF-00iL@C*tWjd38d@jG-gD8-UM;H zq2+G`9UElkM0{0A?0OYA<_!PXFFd7p`XX;?7iGF#e;SK&l>Po*en|b- zKb%=sBNAz)dp!Tg3vh?x#*t%(kb%A;*0E8A6)m}HvH~dk&&0hY8!3MsGiW$UOw~la zeOU#_ZdI^a^;@@QRG?{J&PBXh?b4ptv0~criFDSybGjyX63sbgAf@l@%0Bt^$)!rN ze(5pSWs6Vd`b>%%t2U~dC;aj$bxVGfyeJo*$yBrwJR|aKgx56NSCdaV+efL=4a|2; z%WkyE5WppS<#Og%!4^_cS;NNJ-Ix{Qeu=5XAEpA&%RoYpYeop+ z&gaESSv_!rc&2@zY!7?!%5lr5<~dSZ`kvmSd<0McXk-=gg5|HeCqd*FeiQAmFo zdkXKP=gJ}rB;*O?%5aQ=W<2S9xt#pA9SXidqRi{|MXueAZ#>e_{wi9a!w}f{H`;-{ zU4T0=b+1{sAGDhBzW^~o&c4WW%&y1?&;e;J*-(3c1yAx_%uGn}i_sO>421IO*}7;2s#jGK*kxU3Xgy}0RK`r-x# zf%Ix95q|;NLV_%{sA3v0TY`{$9SGtoR3Qb_L5cL2AjDtDajibAr0joc0Hgu4DMX=+ z0Z28`r$RD56!#Al{}1#f;xB{}w>Fb}0|9$7T7o*n_L^h(p#yhUZ(J*TDn_7+-5vHq z+rx!LC!q<{A~vvn^lhSZ(bfv^RG6b8^{8TY!0du{=eO%qkc97d@Lh#LThJG94-%gT zB@i(91*8{2g#8b+D|pXla|{s(~d z(99id`RT8RF47+(6QCNYM?10m<&xGq z5U8Rp`1`?Oj|k~)_S)zRV4x=8>}HR$3r}`pFj~r7mOAs)87IE2L0^RE0f<-5+E~uun$n_xFHBJ3@rYWFV!G16<2>W4a;QwG~Y?Y54%MRgqkjA0$`h6&34@X7?xI>Dh-vy8T7&4|z0_%I?Wk@~d zu;4#gMr@`8g0LPEZr&3;6B6`GTm<9XnE`Ka|f z#Syq)qfOY4hTLDfVFeh{Z-XcLbij7|G}Oq*+_0^HjOan$$Pk+?0&`BAp$lC}`dv_> z^YHiK@5g=wiby;VJXMBS_Jms8Ex3OYeHeEu>5D}3!Yv(y&{>PS6|*r^VRG+7ZG(2S zi}X9-iO$XaLbbf8=xey^u}491H4_ibFYLga2%Dm>kzNk<*nM#~VGlzl3}jo_7ytPn z{z*uYF~|tq)nJJJGoWV!B@msY7h(^_Ohm?^&Di|`bVaVH^IeFL3D}Q>`bxHS(^k^U zv4>)}0pH90Bk0d$pv}P`=wcB3W9U1mqjpqfx@_ zifn?C=gw`UmlK@;brm+zt3ZPQJ=G&)F`IxR`EP*e_>j@}nMi+GlR|nKc5mYSAqm>K z0nIoH8o>6oZG$kQ75BnfP_gNVLSd$#%?gh6ykSZVMr#;*}1=GXHk8y}*jEGUuj1FKd2)Wq$(0 zvTno?@1FZ6d!!2g5;W!TOWQzsQ^scTkAOv{hYFsI!|VYohWr>cqYKd$$RzOSD^Ns6 zgU9RwX$7`*$lBgPUqcsTk1C_jWj4!0=prZ}V<8O?1PK(-xA6aj2zz*rchf&GlJSTZ zL4=IM{R1&XUxVhs)6!MNPkkDFEASoNEzkjV$Oy2Q?IG=(xP=p2@%KR|_LyE0>cLDd z!u^awcNf}(e-Xg$3-y?pz50&^!nHi^PH4g&6EGil z9Vj#+RZx%Fd^Krx3kCdrp?}SOtdgc?Rj~fRLjzI`HKAbR??qcMyCbzjbKlLnnTjM| z!EBJ*tBysc3|4d%sKVWkNr_j|coy%R$Ak-WvC^J@I2bIm^a2`=p|p^+iBTuuoAV4{ z9n+S{IBx4f6$rcxg@G2J;mmy<3Gsq!N0quc)Nh4)Mn6te&(r53p7?OgG}0en=D;}Y z^nolxSHUbY0ed7U$+xh(pi9uj`1wSqK{NzQvlM?XvL$xgJXPNe?LrqLmh}7JiB5)M z7z&UGsU^J>nSpGGo!d)GtBj4zfi2Mz`Zf}gejhB+CrN*XOvmhxShQu3R;Do2cBIcD z7TJX8$ef(+iO$ZQ{Iq{u>jy|RW_!#wf%b0q4onYS2}wT3vvNw0Lo8BH`h8>s=0K!6 zTxYL2cI9PBL0i!#@T5P02nyK!kXob|?#v)_?1Fl91=>V(OlU6E<)n9jgdVHP-NGOv zalb}ev4@r6Deb}@8k8*QK$}T_07~>3C_xuu@lWF)!XAXwBBRi@O4r$icILpyaGJ~U!jKRKcH0EcvhE@T*ugxF?AHCLAu6? zwkoEG6e+z!*YgynQ@c+uRmgSf$mX{vEQD5Q8oV++9NgEj5TB`-0`+rHW&4{kMP8c6 z%HLwwN49|k(!tZxEQF=MgeAnEgO1Q08tmRv>>kLbD1G}1#-?FbhZe>z}9VJHVm`~VZK2syPTxtQgU z!@39((R3AEPg0!5h(qz6kgSQq%>QD-?qPeVhQH_8`VhoKhGCh1JLGP7;aT=SmbCw- z`Qii~n#-Ku^2#?b1y+ne671H9?dwaoica7k!9R;V1Q}C7BPC!XFGCTT2}ub3{yFHt zKZE^XU-hnju@Q@Z7WYR0GZoo9_v%ZBF!?I{)A+|Rb1|EQenS65?)*@~Y!jM1`%0j^ ziZr@4BthxBX*0R<&r^x{#pEenB6h62ILFc5H$5)5aa&| zU6>t_I%NHvhdyXrs6v}@zs2kXS)tY7?*kvyX)4HeuR3uV?)R7-F5nm6W9Fi5 z=o?`04}c^3B*YZ}E>&a%>6OSNWNKg{mUVb+5TDW4z(5E7Dey$6LkVKiE0C$kWX#4x zlO`9m3A#wH3xG^?R?cP_RAaf0^co~aHp8qB5xNXr4oNTtj7|gBYpAmK;Z;ZtvN2|Z z%C4{&^cA!lmf;sdM065B`XkH^$ath~5QXIOP&Fi1qAMs)X7m|I&1$R80KvV6H%?{h z)uhWXb#%YL%3m_#1DFvM)(6&DILv!$#}F@LS%P`bFq{%hg6Xgjx}bfHVW(kOW?e|$ z-H^VwOvFy1VP}ACeg>8|e#GL7kr6~E10)w=wj}yQfQbjje*m$_EQs;95q*~Q`)D&} z4tCGM+xeu5^m3>TI_Bl+OoN#88gwaUHuk{PwAZUiFM%;cCzl!Ps~W7bKh8`6&9sod zB^L#l#a*9!-O>BRigR=UH}HSOzeRK|K>97*joAHyiv2(nERbFUO*!)~MXHbu0L=PO zB)t?(vAgHa*Q-t}l3q%5YQBBxLEb3e`2sR4zhj$2O!D;{&^RaG6C{Io3**4xAICpQ z{8=bLf#hod(Xq(r0Z)%`*I^II1!{maz$|2bemP?&Ix;8rfC&CyK_fm$jcTQC;S3I% zi~ut++oP*kNoVGNKLl&7Y$$gRV~!@CLDP?r+BL*aI#}^-a|S~3J1YLn4eSE*ZiY~gZumW(3GjCGwp1WWh^+C_Jxetp4Rn9 zpCj5l-_#9|xm*16=o{$kMCYK*L??m4KS%m2h%ws*;ol7QTP017!M}hmAUYM|O1(BE zqT|7!FOyya5oQNa5NN?aN|ezthoS^vz!QB4U5UFJnTops*%VUDCjH_+Woy9a&?T5X zk%=Myip~w#NO~Poi)`L&s0?lJuRsU>0ql{;=zhGPx`@sOi+_OhTBI7YE!qVh{~-2+ zA=_001^i3cgTaP7ChH+n!C*G*r_G15!=JwwvkUP7dDXO=cpk*K>(Q0SSY-Xs=@V{O zjJ}Ds;qS%l-6OJ7VUF=Uh;TQfcO&DF^}*pEBK``r40Vp$jxNPNh}{LV59yWQF|(i% zsYbHyiq&^NG1`P*M*Ji-TT$4g53Jgcc_wgZu?}lzn6`TEL@AXuwvknr4ihDMZHy zNY~#Lde%eNz8}&A^=;hUn9Y%qM8|vM4t-aM!!|ljIom=HtCPCyW{T0Y=HYc(I@)? z8kKRa6}W3Ln?Vg`1K0p0=qBRxIes$ViuoQVF2O&Kj3PP-k}^9bFm_h4S(?yA0O_y6 z5q$!8EiwhFiB1{B`>;&@IRu3CQUIBN*_ialAVenwn$1ACR*Js|nUa5f%ZWagBR0+G zO56jWffy5X6cni^xr*Wp>Zen4KAMz$X4WjiHPUny>0;C~`jfcUp&G&WnTV;Q`x#c= zz(7i6S|0<=HM}@{?yD^e8cA_JKWvEne^k1?|nvK+uUW|g>0yAq!uC@V2 zy9SmJomIXW^)=+s4z#VCjA+-5S|HU9By8_yQ*%kLU zqC;@k!voj@(QeGtoV@7!Q9*eV_bA#z{3U2b9hylN8+0k@6%a!$c4vHonUO!&9^S^y zM>~m5uB=g&LB^U8oe2j25b4!Wjopjnd&FOc&T@bJpv^wI2>&lI#9zceO!`wOV)w## zV`k(V=GA9s(AV%Up|24AXU@%!0%8`hk>8<9k@1+#QAMVM1HnIzzn|y~uzj`Hdo8pP zn&jBXpYS*4FYeLEjL@e#xaU!Xe+8D{9wwRx7WY@u`;i9Bw)ix^^U{0wW5D7U;BUiz z6d6}$PlXFp;(1Uc{SkB{8)BxS7MY5^iMHZz$9^1Xtg!s_ontmsEy-6vF);Ch&{)74 z_L>GC*JZe7T5e$4FK|uxwZd~u1di5QY5O~qe}Z-gcfEI!2=AZ{Vwegy=MqZq((uE< zeH}OwOPtabzsuzr5qu}A)NaD2zXEvWYlva#D10X@z-};*YIAS4oUTNDb~_;GYk@xMpLb&xR)Z!Ka-I_sYMWH}Uf! z4aTbdnO2LSZ{Z(Crow2VvjS{w_kg|7R`eOLxF>_Fkv$et=nA-&K7q_2I=eDFwQ7#h z$3f87(6=GRKaGDL`vIc!p}AjNtMBvHO!7-c9v1APq-G$)-u|{w5@U-jy_je`wvMr1 zBwe;vu~>*kvEmmX6lYO?5N;(66Nw7%+UuEu!dz&96dr#UaG2rXzK$JffxUmhpATU7 zN8gjShzx?rqWs9+a4k$c1rzbw6)e9P8BKh0h5qtTS9}ilSE5rvkho0Y$XY`YbYqa* z9c?7hr^1`;AIJTJ=(OBcyJBq3{p=+|wgu2F@bmGH0GO>Y^@G3OtIBTaWkkn99a0sb zq^zRIGGsRP;JzU~oVb|uGNR*H`G5Ufuw#U6sY6@3k*-r%`FY|-a8%DgiaC5N?`o6> zRiZjnnfZA(_%FH^@xrID1xg2?2{JD5rfDJlHL@x3=PD@lmUZEaxj)0cXlp>30W*{6 zgb+{$r&?RI6-v14Fgp^T2Oj@4>Gz<3Jsj=Id3e6J%9w>N(qAHV#9s^+-m6qWREa(g z2LBT2_aMT42<<{91lyDJCZw^l_Ij^munNt3f+GBjBo`w!xk^tY4QNyF zJ~Zco#obPNH#A`PMw8qb-1j(9pb2+(j%&5_x|x~%UUX)ta;HClI&A(uvXb<6C=s24 zwhaPLWkZP}J{Ny4?rLZZ!syzHj34M}3}3`z+%xD4#9s(vJDKsJ`z5*znTFXK^`ZO_ zzDJYGIzA1rFyVXugVz6u^evJm%!pijeeLj^2<>3mw~!*!uFk8bij7wDEL_{L?qMWs z1CPTK!8YwZVpI+X_jTZCpFw96rL$;%4uoa5p^o}Fj5`cXN!#9o1tq81#EoqEM+ z&a*L_fy3Pi1$Y`fW;v?@h}u+D?#dTe}NKa6QW%~(Kqlf z0q{hw;IBREeLYXS6$+S5%kWfL75PXI^lf}*74Re^*bgEG_Xz$iMogvZVB%?O6WLWU zHKa>v`2*2d;<4225%@4`{6@ss0?V(!R5RvWOcm*JOf@JrX2h6xA!kpZ0j59~+z#=3 zlC2L1_jN6I_vkXlAC4CglI3X1$_IF4PfQit-uYgBwg$nn^-ci8sC`LR@bsA&a8FV= z7wH90AeyGv`P0ZJYRL82YUL7mnfJzRn!# zL#T>Jq00CVG2x?V%7b%>>QLx@6H^S?g!*?Iu~BfuqW~uC$ILI0w(`UwL`Bl0P><9H z5t6c{naO#|HxZqR)S|r|DuQj>N5J40l3olE_7frYX%p_2pyEA%HDFL+uR{d;A+!be zv)ppVLnkzpjn*owj2W~I64J|wj=&y_c4H3)gDxSx5Cr=l;o_yStoe=!{)PHd4|qy@ zTv$HG=oGN{`$@kGwb-LTNv}kcV~$_j8D$3ik`_N1;1cX4if;7P+ZGW_khAlH*Q<;pb7uBZzIh5!dR(jP)Y5AF5d=8ok#o}D*F{SldfIf&#E%=&}j zTC4ED%=@q!5^RCdCzHO79hLX%%9=f{Ds()|ir+Bla>U@fQPv#Y5L_#yl-{OpUnX8z z$sbiQrk~PJgh@~t=wq{QY&y(@+rWbT-&2Vn4({t_E-z>rbac17o2Z@#x8|MS0$?dl zV7+6|gtYBFktfvz*AB`ycVddX`VAzaX#w3Gs3Y16GXV_#dGuAJF1J=l`oRrSR58;q z{}}?7Uz9(6Cm~fslO`{s%kWQtBbo;Z7~IYI=2kHqAk+H}6;51?e;f?)=b3n!?UyULi50fmy zHZtWZd@IUY;W^c$i)p(ZEXB#x?u_gGHhE7?HKTUNS8RcH6xOHid0K71VZ8)1p$IGC zHYogWN0H&+zAohK7FXTxZ(SP*3e)G&u>jXj*X#UqA5gZt57!<7@q2N&HqurmorW03 zyo2vRVqUw7=IgMvn60n}LRXOd9%QX@!Hr(V5uFf%roSJ31saJy0i_Belp!wElYR@C zgxLvc3}HwWyFVCo8GwHp{Ug-pU6);mMe0Z|Mly|fQ^^`obNG9|kjm*2sKL8T&kO(n zAOJ~3K~&uUE0KxV4}%Oznp_Oj22Jzm1f(8ahGaggE07Jb2UfO44e->JV6jIbaj%6W z%yCJMN-aUAVGoBCak#tCXRyaW5vl5@^qu?CNh5Y20PVp2k@Sk(^(7iAHAU)izsBr@ z6oR3WX6BARgKo@jm@O-CheYrTNdClx^N|9!aV=E@Oc7!_o}+3Ds<$PcglkzVGK?h} z#am|(Ph`}Im?{>3wSxFT^$2Q567QF*AFs)g=8n}*z;bB+H$?W~;J$7gwa>BHP3Rc| zy<-BJQWyhcsGiQ~eKAEImR!OKe*$+G@n>^bS$kxr3NG*D+ynMT zTk}T8PvIZN%_lw&O5pm3eO7hSX1}e)KY~2~8H0a{^jlEGo``lMHLFc()z5;yMS4Ba zNl1MzY&!;3qK^bAp5#I#!k*G&C_y{WWw<{OeF~`#4t#x=ABT)a6?;VJ+D|V)Gl}^s z%zuRLP;{s=FX>OPAHd84i~9@d-=PtEBw9jhDTqoP#gQ;TSS8=Tr z#-rUVxq%5E#g}mH?+Id)wa9y=W-?p-0iW>lxkS}0ZN+=cH0<VeVt2#e10LA|8IhL(E8+%K z=&R_P=n`ZjWE5J$Y=+q~VA+|I9}d|h;PN4YSK$}JJ7{MPTc^FNrVdRpvoPlZxa%Q8 z#s+LeS0MEjPV5h0PFmY6JHl4e zd?UV%QO6ODW!a^b3r>=$Xhisa7C9-<^*Ei6Q<%Y&pWs{i#rjpLX`p6Qg=H?QaHPw? zVMmd!C`WDw9%exi=0p1KHzf@R_y0?{ylW+GVcMA>q%AD{6UE6qb`a{Adj~#)&i#Ay z@s6|=*TIZ0gQf8~a4h`?i@%4|Qal~HAR+xWW=~{tFcGc1tI%AX>abjzyq)yg@XPos zLn8Bq_|=Yo2(u|>4hZ@VBw+D(piRhh?7@((=3Y`qdI_>QW(H=59`VtIG}C?%4Ej1) z{JrQBWFqzm@T8YuwnnC4rt}M2ufj&cP(}1@-0zUlXj|}#qG}K+o1hVYIWi8jO%IV_ zL0?CTq`!eK%=VbM;Cgop*O7h)nS_~x*}k_mU>c;1!_9vkDd4V$4$K_PUZg+7?u9fW zg@I_Jp^T9t5%w68U!u=Zvjq*uBhlJKcEHxrejm-hr}0!w4YmQ_|C698Bafu*Z`ABi z0bVzTj>jp^V$>%9tQt?@6H^lwmT9E#T=)}-Z)N{?w|35nvO-P#9{vJ$`SHH!Q8;KjK-57OLPkr~LN>@kcZ7n-J%99_a zdIsD}OMz672JD8F{p>^4G{!%SF2f#;)aSm;hIk$naMyq$6VV!|$83}nV~Y4Ep%b?N z`w67FLjJqT(bUYq%mYY&g;XI^(Us`4L}w34A2Bpl7V!Us4x*!x>7>6vEV4dokV&}! zWKzMF$S;Ie{0rDUu}9{`Plt>Nx?t(gkqDWNM&OXmkZQ!>pNBU53)q80xuP;F$)gUl zGiG=h7sd}I#_wM z1mA{l!_-pTwAaK7FcHSVEl~U)X|E3l_u*p=5u3>;g|4Xf=fSe@YhW0201|`XTHdP# zCT+&GGxN)+qwQ&2E3FGybR{ODcouY*6~I-ITKs(cW0<`#(~)9tsi{nU>qDVvsU6Tv z`V)ZY)A)bDSY!mz_K*yuQ5CR}u0XSKHzJz^%c1n=$Vlwbko1d(Cw}~zpQ$8BO$n8;O ztD9N)H6GbJQvhV^Yq518LlS3Si^G@Dgqm5XQol75j|So41Bt+XD&#p5lU#`1ndpQZ z>DEedIfGfo1x|>W1D52gxi8&k(XJs)B>PqR$6yVpikS+aD{^e)oPcKZg?)-77h`4+ zostJxU&iIll)&W&v@I}p;?lk~fo{cwLqEYaC{ zA5cG!NJ49HbDUAWUH-K)Dg`7L zGWiF=emZj^T>}rid?LvkEIONsUq!oVzZWrUi6TmoMJF?2KgN9-O)EH~4sa!nQ+h@A z(n2IA8jrflU0Nxu__vW^hJ*Y2Bh#kqb(;Rcn1fK)x6kw4jP**|%-p|W3fNknJqg!N z{pQrn!W3!T1E0QE9~~eg&yM$EYk1*gd`jmlbhQwD3^O?=EDjn7V*In{>*zA#FG2|- z(jS7wY=Oqen6L))(MJUQbLgw+%AgV7Gb@zFAitgg_hvJ+h>Sueg2Ug3zD#@`r2Y0= zm4~V$o(FX#Uq&J{CHfFlL#C58a4VBVBK*_nQuGy~bD=Y6?4&=12s0NvG8L)sMJf#^ zK7xA!`*EbUoSv_05H%ZNHU}mB2}GD}P(`MqOP~$+Pwa_ERfTSYK66yXtdIE;{#i=j zCaPxQWr60{^F%ueJDSof6s8TBELTxlh-;$r38r6-TS2;Ht+JvRDbju)UC%J}=eV{( zI^+6YhNUrs+6}%9O>rwJOrx}L&DN^n;68k;_H=qof#*&|6J~vb;v_V|b-o8rmEc;@ z0%;2yUW6FhU!e09N-aElGMcjS6-Xge2;URDsD-qdnHOSW7XCLA=iu6T-@y|hue-`~aQiVM>$407fe?u2zw!rL$)K{XlXf92D zJQ)0oP(t6p-Gc~bKjeV$aYOn>3b#MuVDV3a!QYFvAmgwHL5djseEf5m9f?kc?tZk_eea>3f*Slk@sA^QMDw6+ zaPz5vGQCOiGe#dmx<7VgKO{~C-%D#~^%UFGv-nF?ZH^s7F#Dg02F@qP~~!@+%>2<=o)r(qXHZilJi*^}sel`;D7 zKsNx;w@AL3w}b5-JOyjWW_I-bVVqcu7!43w&a&yWyxol_%+fdx}ROMggrarDyr-8CAyy@8iySP zlzpIvgZuFDZbZEZ-_2$}M=UGu=IM`PicC2jF({Y?f-V0S4c0|*)>BAoCHAMJscDx5$%}bx5`yIs7xdFZ!F-R5Z-;gOi#I5K@VxHi% zDINza)Z5m@UyI2>7QkwP=hqLPNju z>p`;o75sDP65=mG8=4~HbH>i)U@$vD5otggfn3rV^c8r5Nk0U)wj>sV6zG166+dV6 ziB!)m`)RDH_PTbHyh+O+h$k}b=eQNf%C%V=3bhp1BYlT-CB;p_g;(tT3B?Qt_jNhG z3%&zYMr_OGzd}9lTuU?pf#=U;;&If^LEU@UfSR`9TA2A|)YJJY&GSKc=>~j>jjsS% z8#~IOA~vn0Ev*05VEoi{JLyW=o@en*n3)s~8@!vT?C^IDG$12$Q^4n81^z8~0Kk3> zN@d1Q8MLhmCz=l;#U2vs8DjIvoHVim?Z!VCRE{Yj5$;-KD)z%jTv>ZP9C?v5It>~~ zzJOR5h1BD2#C`xt2Es-HJXMGL4MdooL;S_!AA=73Yp@cku}Acx<&;nSH8Kse3o@#Q z_u(qWP9|^p1gylr4lAI5J%;oaXrf^*#S<&Q>qCsBrk2tIT5hIl3r3xUTRtSwo(eEb z5shiOns^3dKL-+Un6((E<^Qqw-f?yn_5c5KX3lMU@7-Rrn@V~h36Mrrnn+U=1r-Z5 zQl$xkT@(>intT8$ih?v1R1^Ub0SOQYy#zuDkg{pp_ttY}=J&@vH%ns5?qRRr#NVAi zcmR*xJLjBx_BHQ$&FlSoJ&0IN+lh!c;TnHexBbI<8QiyRh(}{IK+_SZB=23p#Gmli zcX|B`5>uIa9XbORlP}4;XmS{jNHdL}1gP5&m1NPr7|jmfqV9lFu5CG=lCIhfz*r{E zBQc#tN8v#DOh1=w(>>@C^9=fNoYTPgIdgy<2L)4Q7i7_Y=5&Np{HQSc-UB(p z#B{% z{y&XH#m>(_AooQiAnyAw`q_tfB1Uh5o*H1K3YOtvzxm6%98$=SqwhzKBlKRAmHo6{B2KVw9PQdf~OQUV*l*z^G5L~AT^I$@X4-ENimpe< zyhFa9_Ir?)@ZsnO5DADP_Z&o^bAe_#1>1}MKSUO_Cw3Y7E!2_V75zar2Q)GCAD|i> zUrw&ZfB=Pg3cCiIg)D?nhkc;aCkz68H`E{;)Mx+0s%5=mrx1(!47L-S^X-ufMXPfX zn5}rP`yZA;NW>V3K@VzgY!>}{5U3---GG(anAeKo-cF=}NEONN(RUv*5#)8133~5E zC5i3Ih^zeoykLAz?sc*+Ai~6^5#Avnva2fAU4@JyVl-SxRU;;~#osVEt$3>mwQO8w z=?-je+m*PN!F{_O#&=LsQCg1yL4GYNPTvbG+=HgW8F?z!D~Xb_zyN4NxSkPT!DPv= z#fkIk@wlC|e1Xh$P<6p$av> zXfl(6u%Gem99ztN-Kfc4B9eHQpicBpHGLNWQ-q-z0M>;(=Yd4uiCvC50VG0g zmRKK%Mcokugz;{~7F+q{ULX*1>l}he;$4e6(q9z{XTM}Y6d9YdirDmlCngknA>I>= z__1HD+w_pFQVQPdx{t2AX*e0D8C5xOa5}Vt-9aT;aU8K-ss19?qw~6e{E4h!&4pAS z<0s#&yTw<8=@-Oh7|pemVi6;_j5L1YBh zY+AYTVHq2XP=soc5n{E>d7KwMiMtLn9y=KevTkE3r*94eW-(G1PMrCd#J1<{!2{%AiTOZ!=K=?<|2UF&my9zU#amxSf~2 zz)rVp(fLc@^-+Hyji12edH3h2sGmsCd?c~4pi0$%S}3R+KSlFV=rqf&L8n=BFV@3k z8TV~4=xo6J;=%mYfb?d*?!rBu0ze4!D7F)`mc&k|1o1

|n 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 B12O;r literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/before_clipping_preview.png b/doc/salome/gui/SMESH/images/before_clipping_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..f0740cf264b74de53741a5c54a13efd4e009fea2 GIT binary patch literal 119384 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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/dataset_clipping.png b/doc/salome/gui/SMESH/images/dataset_clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..b50e38a5c0ad3e0a9cea71aa51504b587a830231 GIT binary patch literal 21157 zcmb5WcRbbM|39qyP-K*d%+fi=$(~u2LpbKaIn=R|WQ8)bl~HyMhaB@b#^D&rK31|q z2gl4Vna9dX2=`l`@8iDj-yh${}e4YZgTxEN??XqaHy8pbp< zXI+4=+ZWCPPii2r65z)f4`VGTO=&OBGVllebM1#7G&Ia!r(b94Y>lLWhvz+E`uERI zUAV%?!x3;*fuDxvIt@%i4e@e(EyJbw=|kk=s2$fc64On3SqW(w8%79|;I~V1N+E9* zwKyP1?bxTUJWyi%_TQ*>2AI@gU>uC5NF$6Z9M2NlTRk zhXEOlaXz`i{pXqf>vfA>%~@5y_m2i{-1izbG0gDyKgm29cPmZ z;xA#~8y_tV%_ltY%S*QZ&yV6yZ{q))_`f{*ZUl_{f0jQT^}jt*Ilb_IMEu{Q{+CA~ zT4#Wv|Hr8RACLZ>`X3Re%m17BzdbrVBF+DM)cgF)jxQN#1}EEY(u8<1@4-B9d%?Z} zr(_2p{gUAl*Ab`VDF*imAzHrwp$UPX0oJ~b2w}>$=Abd<6oqP#G!x!F`{&w<`;tw?%C@pYf|DC$3Paua^c!Rf5Q^X3-E zJn4&<;-rXs4bOT5#7$`fcn9qBNHD@GX(cq+!)X2LWnHM<16E+eZ(p)UIf8JiI5hlB z{Mit?P$hayJ_sQ6gGA&3x2Nb3kz6HXYo|k4yQS46_>U|RTf&$23!zck&i&DElnsMl z|9AYAP`>q5jhEBme5@INEi3#93>i`X*344ttNH0Iu)|6fjxdm6E8=wAIlad-kEXK+ z!!5LMN?e{Of`HlieM1{-R(f{eW*NcMK|NWaA<0k!hAItf)_>c=YzfWVuXUPwVh+)z z21^XMvj89O)9H^S_$S{y%2494x7TeF42v?^6sAGkqU_kCdXK)+mWv?+5@^4 zVu0)L{B7X0>*OKkVm;8_n(=s(P62wl!Ia<-&30@W8l-NGF6W*Mvw;B=vX&JMRG)Rc z

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 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/images/opengl_clipping.png b/doc/salome/gui/SMESH/images/opengl_clipping.png new file mode 100644 index 0000000000000000000000000000000000000000..475151a048f727fe902e71c140094e67d1e29e70 GIT binary patch literal 21714 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 #include +#include #include #include @@ -534,6 +535,8 @@ SMESH_ActorDef::SMESH_ActorDef() myImplicitBoolean = vtkImplicitBoolean::New(); myImplicitBoolean->SetOperationTypeToIntersection(); + myPlaneCollection = vtkPlaneCollection::New(); + //Quadratic 2D elements representation //----------------------------------------------------------------------------- int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0); @@ -619,6 +622,7 @@ SMESH_ActorDef::~SMESH_ActorDef() //my0DExtActor->Delete(); myImplicitBoolean->Delete(); + myPlaneCollection->Delete(); #ifndef DISABLE_PLOT2DVIEWER if(my2dHistogram) { @@ -2149,10 +2153,67 @@ SMESH_ActorDef::AddClippingPlane(vtkPlane* thePlane) return myCippingPlaneCont.size(); } +void +SMESH_ActorDef::AddOpenGLClippingPlane(vtkPlane* thePlane) +{ + if(thePlane) + myPlaneCollection->AddItem( thePlane ); +} + +void +SMESH_ActorDef::SetOpenGLClippingPlane() +{ + // before use this method you must add clipping planes using method + // SMESH_ActorDef::AddOpenGLClippingPlane(vtkPlane* thePlane) + if( !myPlaneCollection->GetNumberOfItems() ) + return; + + // It is necessary to set plane collection for each mapper of actor + // and update current inputs of mapper + myNodeActor->SetPlaneCollection( myPlaneCollection ); + myNodeActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myBaseActor->SetPlaneCollection( myPlaneCollection ); + myBaseActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myHighlitableActor->SetPlaneCollection( myPlaneCollection ); + myHighlitableActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my1DActor->SetPlaneCollection( myPlaneCollection ); + my1DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my2DActor->SetPlaneCollection( myPlaneCollection ); + my2DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myNodeExtActor->SetPlaneCollection( myPlaneCollection ); + myNodeExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my0DActor->SetPlaneCollection( myPlaneCollection ); + my0DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myBallActor->SetPlaneCollection( myPlaneCollection ); + myBallActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my1DExtActor->SetPlaneCollection( myPlaneCollection ); + my1DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my2DExtActor->SetPlaneCollection( myPlaneCollection ); + my2DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my3DActor->SetPlaneCollection( myPlaneCollection ); + my3DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my3DExtActor->SetPlaneCollection( myPlaneCollection ); + my3DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + Modified(); +} + void SMESH_ActorDef:: RemoveAllClippingPlanes() { + myPlaneCollection->RemoveAllItems(); myImplicitBoolean->GetFunction()->RemoveAllItems(); myImplicitBoolean->GetFunction()->Modified(); // VTK bug myCippingPlaneCont.clear(); diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h index 3d60fe899..b64ba3147 100644 --- a/src/OBJECT/SMESH_Actor.h +++ b/src/OBJECT/SMESH_Actor.h @@ -154,6 +154,8 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor virtual vtkIdType GetNumberOfClippingPlanes() = 0; virtual vtkPlane* GetClippingPlane(vtkIdType theID) = 0; virtual vtkIdType AddClippingPlane(vtkPlane* thePlane) = 0; + virtual void AddOpenGLClippingPlane(vtkPlane* thePlane) = 0; + virtual void SetOpenGLClippingPlane() = 0; virtual TVisualObjPtr GetObject() = 0; diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h index c891d3cc8..c5c9f412d 100644 --- a/src/OBJECT/SMESH_ActorDef.h +++ b/src/OBJECT/SMESH_ActorDef.h @@ -65,6 +65,7 @@ class vtkLookupTable; class vtkPlane; class vtkImplicitBoolean; class vtkTimeStamp; +class vtkPlaneCollection; class SMESH_DeviceActor; class SMESH_NodeLabelActor; @@ -212,6 +213,8 @@ class SMESH_ActorDef : public SMESH_Actor virtual vtkIdType GetNumberOfClippingPlanes(); virtual vtkPlane* GetClippingPlane(vtkIdType theID); virtual vtkIdType AddClippingPlane(vtkPlane* thePlane); + virtual void AddOpenGLClippingPlane(vtkPlane* thePlane); + virtual void SetOpenGLClippingPlane(); virtual TVisualObjPtr GetObject() { return myVisualObj;} @@ -296,6 +299,7 @@ class SMESH_ActorDef : public SMESH_Actor bool myIsShrunk; vtkImplicitBoolean* myImplicitBoolean; + vtkPlaneCollection* myPlaneCollection; typedef TVTKSmartPtr TPlanePtr; typedef std::vector TCippingPlaneCont; TCippingPlaneCont myCippingPlaneCont; diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx index 4a46932cc..02eefc529 100644 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ b/src/OBJECT/SMESH_DeviceActor.cxx @@ -63,6 +63,8 @@ #include +#include + #include "utilities.h" #ifdef _DEBUG_ @@ -90,6 +92,7 @@ SMESH_DeviceActor myProperty = vtkProperty::New(); myMapper = VTKViewer_PolyDataMapper::New(); + myPlaneCollection = vtkPlaneCollection::New(); vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, myPolygonOffsetUnits); @@ -139,6 +142,7 @@ SMESH_DeviceActor if(MYDEBUG) MESSAGE("~SMESH_DeviceActor - "<Delete(); + myPlaneCollection->Delete(); myProperty->Delete(); @@ -256,12 +260,20 @@ SMESH_DeviceActor anId++; // 5 myMapper->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() ); + if( myPlaneCollection->GetNumberOfItems() ) + myMapper->SetClippingPlanes( myPlaneCollection ); vtkLODActor::SetMapper( myMapper ); Modified(); } } +void +SMESH_DeviceActor +::SetPlaneCollection( vtkPlaneCollection* theCollection ) +{ + myPlaneCollection = theCollection; +} VTKViewer_ExtractUnstructuredGrid* SMESH_DeviceActor diff --git a/src/OBJECT/SMESH_DeviceActor.h b/src/OBJECT/SMESH_DeviceActor.h index e3c63a761..e2931d88f 100644 --- a/src/OBJECT/SMESH_DeviceActor.h +++ b/src/OBJECT/SMESH_DeviceActor.h @@ -45,6 +45,7 @@ class vtkUnstructuredGrid; class vtkLookupTable; class vtkImplicitBoolean; class vtkPassThroughFilter; +class vtkPlaneCollection; class VTKViewer_Transform; class VTKViewer_TransformFilter; @@ -119,6 +120,8 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{ VTKViewer_ExtractUnstructuredGrid* GetExtractUnstructuredGrid(); vtkUnstructuredGrid* GetUnstructuredGrid(); + void SetPlaneCollection( vtkPlaneCollection* theCollection ); + void SetControlMode(SMESH::Controls::FunctorPtr theFunctor, SMESH_ScalarBarActor* theScalarBarActor, vtkLookupTable* theLookupTable); @@ -158,6 +161,7 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{ VTKViewer_PolyDataMapper *myMapper; TVisualObjPtr myVisualObj; + vtkPlaneCollection* myPlaneCollection; vtkProperty *myProperty; EReperesent myRepresentation; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 2486a5099..fe84076d7 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -960,7 +960,7 @@ { SMESH::SMESH_GroupBase_var aGroupObject = aListOfGroups[i]; //SALOMEDS::Color aColor = aGroupObject->GetColor(); - + #ifdef SIMPLE_AUTOCOLOR // simplified algorithm for auto-colors SALOMEDS::Color aColor = SMESHGUI::getPredefinedUniqueColor(); #else // old algorithm for auto-colors @@ -1004,7 +1004,7 @@ SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); - + if ( selected.IsEmpty() ) return; SALOME_ListIteratorOfListIO It( selected ); for ( ; It.More(); It.Next() ) { @@ -1228,7 +1228,7 @@ SALOME_ListIO selected; if( aSel ) { aSel->selectedObjects( selected ); - + if(selected.Extent()){ Handle(SALOME_InteractiveObject) anIObject = selected.First(); _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); @@ -2065,7 +2065,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, } total += nbBalls; } - + return autoUpdate && !exceeded; } @@ -3505,7 +3505,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr( "NOT_A_VTK_VIEWER" ) ); } break; - case 6032: + case 6032: OverallMeshQuality(); break; case 9010: @@ -4516,7 +4516,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule ); - + popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP @@ -5533,13 +5533,34 @@ void SMESHGUI::storeVisualParameters (int savePoint) aPropertyName += gSeparator; aPropertyName += QString::number( anId ); - QString aPropertyValue = QString::number( (int)aPlane->GetOrientation() ).toLatin1().constData(); + QString aPropertyValue = QString::number( (int)aPlane->PlaneMode ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + aPropertyValue += QString::number( aPlane->IsOpenGLClipping ).toLatin1().constData(); aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); - aPropertyValue += gDigitsSep; - aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPropertyValue += QString::number( aPlane->myAbsoluteOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->X ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Y ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Z ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dx ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dy ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->Dz ).toLatin1().constData(); + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPropertyValue += QString::number( (int)aPlane->myRelativeOrientation ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->GetDistance() ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[0] ).toLatin1().constData(); + aPropertyValue += gDigitsSep; + aPropertyValue += QString::number( aPlane->myAngle[1] ).toLatin1().constData(); + } ip->setProperty( aPropertyName.toStdString(), aPropertyValue.toStdString() ); } @@ -5749,9 +5770,13 @@ void SMESHGUI::storeVisualParameters (int savePoint) // data structures for clipping planes processing typedef struct { int Id; - vtkIdType Orientation; + int Mode; + bool isOpenGLClipping; + vtkIdType RelativeOrientation; double Distance; double Angle[2]; + int AbsoluteOrientation; + double X, Y, Z, Dx, Dy, Dz; } TPlaneData; typedef std::list TPlaneDataList; typedef std::map TPlaneDataMap; @@ -5868,31 +5893,80 @@ void SMESHGUI::restoreVisualParameters (int savePoint) continue; QStringList aPropertyValueList = aPropertyValue.split( gDigitsSep, QString::SkipEmptyParts ); - if( aPropertyValueList.size() != 4 ) + if( aPropertyValueList.size() != 6 && aPropertyValueList.size() != 9 ) continue; TPlaneData aPlaneData; aPlaneData.Id = aClippingPlaneId; ok = false; - aPlaneData.Orientation = aPropertyValueList[0].toInt( &ok ); + aPlaneData.Mode = aPropertyValueList[0].toInt( &ok ); if( !ok ) continue; - + ok = false; - aPlaneData.Distance = aPropertyValueList[1].toDouble( &ok ); + aPlaneData.isOpenGLClipping = aPropertyValueList[1].toInt( &ok ); if( !ok ) continue; - ok = false; - aPlaneData.Angle[0] = aPropertyValueList[2].toDouble( &ok ); - if( !ok ) - continue; + if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Absolute ) + { + ok = false; + aPlaneData.AbsoluteOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; - ok = false; - aPlaneData.Angle[1] = aPropertyValueList[3].toDouble( &ok ); - if( !ok ) - continue; + ok = false; + aPlaneData.X = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Y = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Z = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dx = aPropertyValueList[6].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dy = aPropertyValueList[7].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Dz = aPropertyValueList[8].toDouble( &ok ); + if( !ok ) + continue; + } + else if ( (SMESH::Mode)aPlaneData.Mode == SMESH::Relative ) { + ok = false; + aPlaneData.RelativeOrientation = aPropertyValueList[2].toInt( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Distance = aPropertyValueList[3].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[0] = aPropertyValueList[4].toDouble( &ok ); + if( !ok ) + continue; + + ok = false; + aPlaneData.Angle[1] = aPropertyValueList[5].toDouble( &ok ); + if( !ok ) + continue; + } TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ]; aPlaneDataList.push_back( aPlaneData ); @@ -6315,21 +6389,18 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Clipping else if (paramNameStr.startsWith("ClippingPlane")) { QStringList vals = val.split(gDigitsSep, QString::SkipEmptyParts); - // old format - val looks like "Off" or "0:0.5:0:0" (orientation, distance, two angles) + // old format - val looks like "Off" or "1:0:0:0.5:0:0" + // (mode(relative), is OpenGL clipping plane, orientation, distance, two angles) + // or "0:1:1:10.5:1.0:1.0:15.0:10.0:10.0" + // (mode(absolute), is OpenGL clipping plane, orientation, base point(x, y, z), direction (dx, dy, dz)) // new format - val looks like "Off" or "0" (plane id) // (note: in new format "Off" value is used only for consistency, // so it is processed together with values in old format) - bool anIsOldFormat = ( vals.count() == 4 || val == "Off" ); + bool anIsOldFormat = ( vals.count() == 6 || vals.count() == 9 || val == "Off" ); if( anIsOldFormat ) { if (paramNameStr == "ClippingPlane1" || val == "Off") aSmeshActor->RemoveAllClippingPlanes(); if (val != "Off") { - SMESH::Orientation anOrientation = (SMESH::Orientation)vals[0].toInt(); - double aDistance = vals[1].toFloat(); - double anAngle[2]; - anAngle[0] = vals[2].toFloat(); - anAngle[1] = vals[3].toFloat(); - QList lst; getApp()->viewManagers(viewerTypStr, lst); // SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager @@ -6341,13 +6412,35 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SMESH::TActorList anActorList; anActorList.push_back( aSmeshActor ); - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane(anActorList, vtkView, anOrientation, aDistance, anAngle); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( vtkView ); + aPlane->myViewWindow = vtkView; + SMESH::Mode aMode = ( SMESH::Mode )vals[0].toInt(); + aPlane->PlaneMode = aMode; + bool isOpenGLClipping = ( bool )vals[1].toInt(); + aPlane->IsOpenGLClipping = isOpenGLClipping; + if ( aMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = vals[2].toInt(); + aPlane->X = vals[3].toFloat(); + aPlane->Y = vals[4].toFloat(); + aPlane->Z = vals[5].toFloat(); + aPlane->Dx = vals[6].toFloat(); + aPlane->Dy = vals[7].toFloat(); + aPlane->Dz = vals[8].toFloat(); + } + else if ( aMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)vals[2].toInt(); + aPlane->myDistance = vals[3].toFloat(); + aPlane->myAngle[0] = vals[4].toFloat(); + aPlane->myAngle[1] = vals[5].toFloat(); + } + if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } } } @@ -6468,23 +6561,40 @@ void SMESHGUI::restoreVisualParameters (int savePoint) for( ; anIter4 != aPlaneDataList.end(); anIter4++ ) { const TPlaneData& aPlaneData = *anIter4; if( aPlaneData.Id == aPlaneId ) { - SMESH::OrientedPlane* aPlane = - SMESHGUI_ClippingDlg::AddPlane( anActorList, - aViewWindow, - (SMESH::Orientation)aPlaneData.Orientation, - aPlaneData.Distance, - aPlaneData.Angle ); + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New( aViewWindow ); + aPlane->myViewWindow = aViewWindow; + aPlane->PlaneMode = (SMESH::Mode)aPlaneData.Mode; + aPlane->IsOpenGLClipping = aPlaneData.isOpenGLClipping; + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = aPlaneData.AbsoluteOrientation; + aPlane->X = aPlaneData.X; + aPlane->Y = aPlaneData.Y; + aPlane->Z = aPlaneData.Z; + aPlane->Dx = aPlaneData.Dx; + aPlane->Dy = aPlaneData.Dy; + aPlane->Dz = aPlaneData.Dz; + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + aPlane->myRelativeOrientation = (SMESH::Orientation)aPlaneData.RelativeOrientation; + aPlane->myDistance = aPlaneData.Distance; + aPlane->myAngle[0] = aPlaneData.Angle[0]; + aPlane->myAngle[1] = aPlaneData.Angle[1]; + } if( aPlane ) { - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = aPlane; - aClippingPlaneInfo.ActorList = anActorList; - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + if ( SMESHGUI_ClippingDlg::AddPlane( anActorList, aPlane ) ) { + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = aPlane; + aClippingPlaneInfo.ActorList = anActorList; + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } } break; } } + } } + // update all VTK views QList lst; @@ -6493,6 +6603,14 @@ void SMESHGUI::restoreVisualParameters (int savePoint) SUIT_ViewModel* vmodel = (*it)->getViewModel(); if (vmodel && vmodel->getType() == SVTK_Viewer::Type()) { SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView(); + // set OpenGL clipping planes + VTK::ActorCollectionCopy aCopy( vtkView->getRenderer()->GetActors() ); + vtkActorCollection* anAllActors = aCopy.GetActors(); + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) + anActor->SetOpenGLClippingPlane(); + vtkView->getRenderer()->ResetCameraClippingRange(); vtkView->Repaint(); } @@ -6691,7 +6809,6 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { return false; } - SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor() { static QList colors; diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx index c1e63059d..9078e7b6e 100644 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.cxx @@ -52,6 +52,7 @@ #include #include +#include // Qt includes #include @@ -64,6 +65,9 @@ #include #include #include +#include +#include +#include // VTK includes #include @@ -72,64 +76,113 @@ #include #include #include +#include +#include + +#include #define SPACING 6 #define MARGIN 11 +#define SIZEFACTOR 1.1 -//================================================================================= -// class : OrientedPlane -// purpose : -//================================================================================= +/*! + Create new object of class OrientedPlane + */ SMESH::OrientedPlane* SMESH::OrientedPlane::New() { return new OrientedPlane(); } -SMESH::OrientedPlane* SMESH::OrientedPlane::New(SVTK_ViewWindow* theViewWindow) +/*! + Create new object of class OrientedPlane + */ +SMESH::OrientedPlane* SMESH::OrientedPlane::New( SVTK_ViewWindow* theViewWindow ) { - return new OrientedPlane(theViewWindow); + return new OrientedPlane( theViewWindow ); } -void SMESH::OrientedPlane::ShallowCopy(SMESH::OrientedPlane* theOrientedPlane) +/*! + Copy the object of class OrientedPlane + */ +void SMESH::OrientedPlane::ShallowCopy( SMESH::OrientedPlane* theOrientedPlane ) { - SetNormal(theOrientedPlane->GetNormal()); - SetOrigin(theOrientedPlane->GetOrigin()); + SetNormal( theOrientedPlane->GetNormal() ); + SetOrigin( theOrientedPlane->GetOrigin() ); - myOrientation = theOrientedPlane->GetOrientation(); + myRelativeOrientation = theOrientedPlane->GetOrientation(); myDistance = theOrientedPlane->GetDistance(); + IsOpenGLClipping = theOrientedPlane->IsOpenGLClipping; + myAngle[0] = theOrientedPlane->myAngle[0]; myAngle[1] = theOrientedPlane->myAngle[1]; - myPlaneSource->SetNormal(theOrientedPlane->myPlaneSource->GetNormal()); - myPlaneSource->SetOrigin(theOrientedPlane->myPlaneSource->GetOrigin()); - myPlaneSource->SetPoint1(theOrientedPlane->myPlaneSource->GetPoint1()); - myPlaneSource->SetPoint2(theOrientedPlane->myPlaneSource->GetPoint2()); + myAbsoluteOrientation = theOrientedPlane->myAbsoluteOrientation; + X = theOrientedPlane->X; + Y = theOrientedPlane->Y; + Z = theOrientedPlane->Z; + Dx = theOrientedPlane->Dx; + Dy = theOrientedPlane->Dy; + Dz = theOrientedPlane->Dz; + + PlaneMode = theOrientedPlane->PlaneMode; + + myPlaneSource->SetNormal( theOrientedPlane->myPlaneSource->GetNormal() ); + myPlaneSource->SetOrigin( theOrientedPlane->myPlaneSource->GetOrigin() ); + myPlaneSource->SetPoint1( theOrientedPlane->myPlaneSource->GetPoint1() ); + myPlaneSource->SetPoint2( theOrientedPlane->myPlaneSource->GetPoint2() ); myPlaneSource->Update(); } +/*! + Invert current clipping plane in contrary direction + */ +SMESH::OrientedPlane* SMESH::OrientedPlane::InvertPlane() +{ + OrientedPlane* aPlane = new OrientedPlane(); + aPlane->ShallowCopy( this ); + double* aNormal = aPlane->GetNormal(); + for( int i=0; i<3; i++ ) + aNormal[i] = -aNormal[i]; + aPlane->SetNormal( aNormal ); + return aPlane; +} + +/*! + Constructor of class OrientedPlane + */ SMESH::OrientedPlane::OrientedPlane(SVTK_ViewWindow* theViewWindow): - myViewWindow(theViewWindow), - myOrientation(SMESH::XY), - myDistance(0.5) + myViewWindow(theViewWindow) { Init(); myViewWindow->AddActor(myActor, false, false); // don't adjust actors } +/*! + Constructor of class OrientedPlane + */ SMESH::OrientedPlane::OrientedPlane(): - myOrientation(SMESH::XY), - myViewWindow(NULL), - myDistance(0.5) + myViewWindow(NULL) { Init(); } +/*! + Initialize parameters of class OrientedPlane + */ void SMESH::OrientedPlane::Init() { myPlaneSource = vtkPlaneSource::New(); + PlaneMode = SMESH::Absolute; + X = Y = Z = 0.0; + Dx = Dy = Dz = 1.0; + myAbsoluteOrientation = 0; // CUSTOM + myRelativeOrientation = SMESH::XY; + myDistance = 0.5; myAngle[0] = myAngle[1] = 0.0; + IsInvert = false; + IsOpenGLClipping = false; // Create and display actor myMapper = vtkDataSetMapper::New(); @@ -160,6 +213,9 @@ void SMESH::OrientedPlane::Init() aBackProp->Delete(); } +/*! + Destructor of class OrientedPlane + */ SMESH::OrientedPlane::~OrientedPlane() { if (myViewWindow) @@ -170,14 +226,13 @@ SMESH::OrientedPlane::~OrientedPlane() myMapper->Delete(); // commented: porting to vtk 5.0 - // myPlaneSource->UnRegisterAllOutputs(); + // myPlaneSource->UnRegisterAllOutputs(); myPlaneSource->Delete(); } -//================================================================================= -// class : ActorItem -// purpose : -//================================================================================= +/*! + Definition of class ActorItem + */ class ActorItem : public QListWidgetItem { public: @@ -191,11 +246,11 @@ private: SMESH_Actor* myActor; }; -//================================================================================= -// class : TSetVisibility -// purpose : -//================================================================================= +/*! + Definition of class TSetVisibility + */ struct TSetVisibility { + // Set visibility of cutting plane TSetVisibility(int theIsVisible): myIsVisible(theIsVisible){} void operator()(SMESH::TPlaneData& thePlaneData){ bool anIsEmpty = thePlaneData.ActorList.empty(); @@ -204,147 +259,13 @@ struct TSetVisibility { int myIsVisible; }; -//================================================================================= -// used in SMESHGUI::restoreVisualParameters() to avoid -// declaration of OrientedPlane outside of SMESHGUI_ClippingDlg.cxx -//================================================================================= -SMESH::OrientedPlane* SMESHGUI_ClippingDlg::AddPlane (SMESH::TActorList theActorList, - SVTK_ViewWindow* theViewWindow, - SMESH::Orientation theOrientation, - double theDistance, - const double theAngle[2]) -{ - SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New(theViewWindow); - - aPlane->myAngle[0] = theAngle[0]; - aPlane->myAngle[1] = theAngle[1]; - - aPlane->SetOrientation(theOrientation); - aPlane->SetDistance(theDistance); - - double aNormal[3]; - double aDir[2][3] = {{0, 0, 0}, {0, 0, 0}}; - { - static double aCoeff = vtkMath::Pi()/180.0; - - double anU[2] = {cos(aCoeff * theAngle[0]), cos(aCoeff * theAngle[1])}; - double aV[2] = {sqrt(1.0 - anU[0]*anU[0]), sqrt(1.0 - anU[1]*anU[1])}; - aV[0] = theAngle[0] > 0? aV[0]: -aV[0]; - aV[1] = theAngle[1] > 0? aV[1]: -aV[1]; - - switch (theOrientation) { - case SMESH::XY: - aDir[0][1] = anU[0]; - aDir[0][2] = aV[0]; - - aDir[1][0] = anU[1]; - aDir[1][2] = aV[1]; - - break; - case SMESH::YZ: - aDir[0][2] = anU[0]; - aDir[0][0] = aV[0]; - - aDir[1][1] = anU[1]; - aDir[1][0] = aV[1]; - - break; - case SMESH::ZX: - aDir[0][0] = anU[0]; - aDir[0][1] = aV[0]; - - aDir[1][2] = anU[1]; - aDir[1][1] = aV[1]; - - break; - } - - vtkMath::Cross(aDir[1],aDir[0],aNormal); - vtkMath::Normalize(aNormal); - vtkMath::Cross(aNormal,aDir[1],aDir[0]); - } - - double aBounds[6]; - double anOrigin[3]; - - bool anIsOk = false; - if( theActorList.empty() ) { - // to support planes with empty actor list we should create - // a nullified plane that will be initialized later - anOrigin[0] = anOrigin[1] = anOrigin[2] = 0; - aBounds[0] = aBounds[2] = aBounds[4] = 0; - aBounds[1] = aBounds[3] = aBounds[5] = 0; - anIsOk = true; - } - else - anIsOk = SMESH::ComputeClippingPlaneParameters( theActorList, - aNormal, - theDistance, - aBounds, - anOrigin ); - if( !anIsOk ) - return NULL; - - aPlane->SetNormal( aNormal ); - aPlane->SetOrigin( anOrigin ); - - double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2., - ( aBounds[2] + aBounds[3] ) / 2., - ( aBounds[4] + aBounds[5] ) / 2. }; - - double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) + - pow( aBounds[3] - aBounds[2], 2 ) + - pow( aBounds[5] - aBounds[4], 2 ), 0.5 ); - - double aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel}, - {aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel}}; - double aParam, aPnt0[3], aPnt1[3], aPnt2[3]; - - double aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0], - aPnt[1] - aDelta[0][1] - aDelta[1][1], - aPnt[2] - aDelta[0][2] - aDelta[1][2]}; - double aPnt02[3] = {aPnt01[0] + aNormal[0], - aPnt01[1] + aNormal[1], - aPnt01[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0); - - double aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0], - aPnt[1] - aDelta[0][1] + aDelta[1][1], - aPnt[2] - aDelta[0][2] + aDelta[1][2]}; - double aPnt12[3] = {aPnt11[0] + aNormal[0], - aPnt11[1] + aNormal[1], - aPnt11[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1); - - double aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0], - aPnt[1] + aDelta[0][1] - aDelta[1][1], - aPnt[2] + aDelta[0][2] - aDelta[1][2]}; - double aPnt22[3] = {aPnt21[0] + aNormal[0], - aPnt21[1] + aNormal[1], - aPnt21[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2); - - vtkPlaneSource* aPlaneSource = aPlane->myPlaneSource; - aPlaneSource->SetNormal(aNormal[0],aNormal[1],aNormal[2]); - aPlaneSource->SetOrigin(aPnt0[0],aPnt0[1],aPnt0[2]); - aPlaneSource->SetPoint1(aPnt1[0],aPnt1[1],aPnt1[2]); - aPlaneSource->SetPoint2(aPnt2[0],aPnt2[1],aPnt2[2]); - aPlaneSource->Update(); - - SMESH::TActorList::iterator anIter = theActorList.begin(); - for ( ; anIter != theActorList.end(); anIter++ ) - if( vtkActor* aVTKActor = *anIter ) - if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) - anActor->AddClippingPlane( aPlane ); - - return aPlane; -} +/********************************************************************************* + ********************* class SMESHGUI_ClippingDlg ********************* + *********************************************************************************/ -//================================================================================= -// class : SMESHGUI_ClippingDlg() -// purpose : -// -//================================================================================= +/*! + Constructor +*/ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg( SMESHGUI* theModule, SVTK_ViewWindow* theViewWindow ): QDialog( SMESH::GetDesktop(theModule) ), mySMESHGUI(theModule), @@ -355,6 +276,14 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg( SMESHGUI* theModule, SVTK_ViewWindow setWindowTitle(tr("SMESH_CLIPPING_TITLE")); setSizeGripEnabled(true); + myPreviewWidget = vtkImplicitPlaneWidget::New(); + myCallback = vtkCallbackCommand::New(); + myCallback->SetClientData( this ); + myCallback->SetCallback( SMESHGUI_ClippingDlg::ProcessEvents ); + myPreviewWidget = createPreviewWidget(); + + myIsPreviewMoved = false; + QVBoxLayout* SMESHGUI_ClippingDlgLayout = new QVBoxLayout(this); SMESHGUI_ClippingDlgLayout->setSpacing(SPACING); SMESHGUI_ClippingDlgLayout->setMargin(MARGIN); @@ -367,8 +296,17 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg( SMESHGUI* theModule, SVTK_ViewWindow ComboBoxPlanes = new QComboBox(GroupPlanes); + isOpenGLClipping = new QCheckBox( GroupPlanes ); + isOpenGLClipping->setText( tr( "IS_OPENGL_CLIPPING" ) ); + buttonNew = new QPushButton(tr("SMESH_BUT_NEW"), GroupPlanes); + MenuMode = new QMenu( "MenuMode", buttonNew ); + MenuMode->addAction( tr( "ABSOLUTE" ), this, SLOT( onModeAbsolute() ) ); + MenuMode->addAction( tr( "RELATIVE" ), this, SLOT( onModeRelative() ) ); + buttonNew->setMenu( MenuMode ); + CurrentMode = SMESH::Absolute; + buttonDelete = new QPushButton(tr("SMESH_BUT_DELETE"), GroupPlanes); QLabel* aLabel = new QLabel(tr("MESHES_SUBMESHES_GROUPS"), GroupPlanes); @@ -379,705 +317,769 @@ SMESHGUI_ClippingDlg::SMESHGUI_ClippingDlg( SMESHGUI* theModule, SVTK_ViewWindow SelectAllCheckBox = new QCheckBox(tr("SELECT_ALL"), GroupPlanes); GroupPlanesLayout->addWidget(ComboBoxPlanes, 0, 0); - GroupPlanesLayout->addWidget(new QWidget(), 0, 1); - GroupPlanesLayout->addWidget(buttonNew, 0, 2); - GroupPlanesLayout->addWidget(buttonDelete, 0, 3); - GroupPlanesLayout->addWidget(aLabel, 1, 0, 1, 4); - GroupPlanesLayout->addWidget(ActorList, 2, 0, 1, 4); - GroupPlanesLayout->addWidget(SelectAllCheckBox, 3, 0, 1, 4); + GroupPlanesLayout->addWidget(isOpenGLClipping, 0, 1); + GroupPlanesLayout->addWidget(new QWidget(), 0, 2); + GroupPlanesLayout->addWidget(buttonNew, 0, 3); + GroupPlanesLayout->addWidget(buttonDelete, 0, 4); + GroupPlanesLayout->addWidget(aLabel, 1, 0, 1, 5); + GroupPlanesLayout->addWidget(ActorList, 2, 0, 1, 5); + GroupPlanesLayout->addWidget(SelectAllCheckBox, 3, 0, 1, 5); GroupPlanesLayout->setColumnStretch( 1, 1 ); - // Controls for defining plane parameters - QGroupBox* GroupParameters = new QGroupBox(tr("SMESH_PARAMETERS"), this); - QGridLayout* GroupParametersLayout = new QGridLayout(GroupParameters); - GroupParametersLayout->setSpacing(SPACING); - GroupParametersLayout->setMargin(MARGIN); - - TextLabelOrientation = new QLabel(tr("SMESH_ORIENTATION"), GroupParameters); - - ComboBoxOrientation = new QComboBox(GroupParameters); - - TextLabelDistance = new QLabel(tr("SMESH_DISTANCE"), GroupParameters); - - SpinBoxDistance = new SMESHGUI_SpinBox(GroupParameters); - - TextLabelRot1 = new QLabel(tr("ROTATION_AROUND_X_Y2Z"), GroupParameters); - - SpinBoxRot1 = new SMESHGUI_SpinBox(GroupParameters); - - TextLabelRot2 = new QLabel(tr("ROTATION_AROUND_Y_X2Z"), GroupParameters); - - SpinBoxRot2 = new SMESHGUI_SpinBox(GroupParameters); - - PreviewCheckBox = new QCheckBox(tr("SHOW_PREVIEW"), GroupParameters); - PreviewCheckBox->setChecked(true); - - AutoApplyCheckBox = new QCheckBox(tr("AUTO_APPLY"), GroupParameters); - AutoApplyCheckBox->setChecked(false); - - GroupParametersLayout->addWidget(TextLabelOrientation, 0, 0); - GroupParametersLayout->addWidget(ComboBoxOrientation, 0, 1); - GroupParametersLayout->addWidget(TextLabelDistance, 1, 0); - GroupParametersLayout->addWidget(SpinBoxDistance, 1, 1); - GroupParametersLayout->addWidget(TextLabelRot1, 2, 0); - GroupParametersLayout->addWidget(SpinBoxRot1, 2, 1); - GroupParametersLayout->addWidget(TextLabelRot2, 3, 0); - GroupParametersLayout->addWidget(SpinBoxRot2, 3, 1); - GroupParametersLayout->addWidget(PreviewCheckBox, 4, 0); - GroupParametersLayout->addWidget(AutoApplyCheckBox, 4, 1); + ModeStackedLayout = new QStackedLayout(); + // Controls for defining plane parameters + /********************** Mode Absolute **********************/ + /* Controls for absolute mode of clipping plane: + X, Y, Z - coordinates of the intersection of cutting plane and the three axes + Dx, Dy, Dz - components of normal to the cutting plane + Orientation - direction of cutting plane + */ + const double min = -1e+7; + const double max = 1e+7; + const double step = 5; + const int precision = -7; + + // Croup Point + QGroupBox* GroupAbsolutePoint = new QGroupBox( this ); + GroupAbsolutePoint->setObjectName( "GroupPoint" ); + GroupAbsolutePoint->setTitle( tr("BASE_POINT") ); + QGridLayout* GroupPointLayout = new QGridLayout( GroupAbsolutePoint ); + GroupPointLayout->setAlignment( Qt::AlignTop ); + GroupPointLayout->setSpacing( 6 ); GroupPointLayout->setMargin( 11 ); + + TextLabelX = new QLabel( GroupAbsolutePoint ); + TextLabelX->setObjectName( "TextLabelX" ); + TextLabelX->setText( tr("X:") ); + GroupPointLayout->addWidget( TextLabelX, 0, 0 ); + + SpinBox_X = new QtxDoubleSpinBox( min, max, step, GroupAbsolutePoint ); + SpinBox_X->setObjectName("SpinBox_X" ); + SpinBox_X->setPrecision( precision ); + GroupPointLayout->addWidget( SpinBox_X, 0, 1 ); + + TextLabelY = new QLabel( GroupAbsolutePoint ); + TextLabelY->setObjectName( "TextLabelY" ); + TextLabelY->setText( tr("Y:") ); + GroupPointLayout->addWidget( TextLabelY, 0, 2 ); + + SpinBox_Y = new QtxDoubleSpinBox( min, max, step, GroupAbsolutePoint ); + SpinBox_Y->setObjectName("SpinBox_Y" ); + SpinBox_Y->setPrecision( precision ); + GroupPointLayout->addWidget( SpinBox_Y, 0, 3 ); + + TextLabelZ = new QLabel( GroupAbsolutePoint ); + TextLabelZ->setObjectName( "TextLabelZ" ); + TextLabelZ->setText( tr("Z:") ); + GroupPointLayout->addWidget( TextLabelZ, 0, 4 ); + + SpinBox_Z = new QtxDoubleSpinBox( min, max, step, GroupAbsolutePoint ); + SpinBox_Z->setObjectName("SpinBox_Z" ); + SpinBox_Z->setPrecision( precision ); + GroupPointLayout->addWidget( SpinBox_Z, 0, 5 ); + + resetButton = new QPushButton( GroupAbsolutePoint ); + resetButton->setObjectName( "resetButton" ); + resetButton->setText( tr( "RESET" ) ); + GroupPointLayout->addWidget( resetButton, 0, 6 ); + + // Group Direction + GroupAbsoluteDirection = new QGroupBox( this ); + GroupAbsoluteDirection->setObjectName( "GroupDirection" ); + GroupAbsoluteDirection->setTitle( tr("DIRECTION") ); + QGridLayout* GroupDirectionLayout = new QGridLayout( GroupAbsoluteDirection ); + GroupDirectionLayout->setAlignment( Qt::AlignTop ); + GroupDirectionLayout->setSpacing( 6 ); + GroupDirectionLayout->setMargin( 11 ); + + TextLabelDx = new QLabel( GroupAbsoluteDirection ); + TextLabelDx->setObjectName( "TextLabelDx" ); + TextLabelDx->setText( tr("Dx:") ); + GroupDirectionLayout->addWidget( TextLabelDx, 0, 0 ); + + SpinBox_Dx = new QtxDoubleSpinBox( min, max, step, GroupAbsoluteDirection ); + SpinBox_Dx->setObjectName("SpinBox_Dx" ); + SpinBox_Dx->setPrecision( precision ); + GroupDirectionLayout->addWidget( SpinBox_Dx, 0, 1 ); + + TextLabelDy = new QLabel( GroupAbsoluteDirection ); + TextLabelDy->setObjectName( "TextLabelDy" ); + TextLabelDy->setText( tr("Dy:") ); + GroupDirectionLayout->addWidget( TextLabelDy, 0, 2 ); + + SpinBox_Dy = new QtxDoubleSpinBox( min, max, step, GroupAbsoluteDirection ); + SpinBox_Dy->setObjectName("SpinBox_Dy" ); + SpinBox_Dy->setPrecision( precision ); + GroupDirectionLayout->addWidget( SpinBox_Dy, 0, 3 ); + + TextLabelDz = new QLabel( GroupAbsoluteDirection ); + TextLabelDz->setObjectName( "TextLabelDz" ); + TextLabelDz->setText( tr("Dz:") ); + GroupDirectionLayout->addWidget( TextLabelDz, 0, 4 ); + + SpinBox_Dz = new QtxDoubleSpinBox( min, max, step, GroupAbsoluteDirection ); + SpinBox_Dz->setObjectName("SpinBox_Dz" ); + SpinBox_Dz->setPrecision( precision ); + GroupDirectionLayout->addWidget( SpinBox_Dz, 0, 5 ); + + invertButton = new QPushButton( GroupAbsoluteDirection ); + invertButton->setObjectName( "invertButton" ); + invertButton->setText( tr( "INVERT" ) ); + GroupDirectionLayout->addWidget( invertButton, 0, 6 ); + + CBAbsoluteOrientation = new QComboBox( GroupAbsoluteDirection ); + CBAbsoluteOrientation->setObjectName( "AbsoluteOrientation" ); + CBAbsoluteOrientation->insertItem( CBAbsoluteOrientation->count(), tr( "CUSTOM" ) ); + CBAbsoluteOrientation->insertItem( CBAbsoluteOrientation->count(), tr( "||X-Y" ) ); + CBAbsoluteOrientation->insertItem( CBAbsoluteOrientation->count(), tr( "||Y-Z" ) ); + CBAbsoluteOrientation->insertItem( CBAbsoluteOrientation->count(), tr( "||Z-X" ) ); + GroupDirectionLayout->addWidget( CBAbsoluteOrientation, 1, 0, 1, 6 ); + + QVBoxLayout* ModeActiveLayout = new QVBoxLayout(); + ModeActiveLayout->setMargin( 11 ); ModeActiveLayout->setSpacing( 6 ); + ModeActiveLayout->addWidget( GroupAbsolutePoint ); + ModeActiveLayout->addWidget( GroupAbsoluteDirection ); + + QWidget* ModeActiveWidget = new QWidget( this ); + ModeActiveWidget->setLayout( ModeActiveLayout ); + + /********************** Mode Relative **********************/ + /* Controls for relative mode of clipping plane: + Distance - Value from 0 to 1. + Specifies the distance from the minimum value in a given direction of bounding box to the current position + Rotation1, Rotation2 - turn angles of cutting plane in given directions + Orientation - direction of cutting plane + */ + QGroupBox* GroupParameters = new QGroupBox( tr("SMESH_PARAMETERS"), this ); + QGridLayout* GroupParametersLayout = new QGridLayout( GroupParameters ); + GroupParametersLayout->setMargin( 11 ); GroupParametersLayout->setSpacing( 6 ); + + TextLabelOrientation = new QLabel( tr("SMESH_ORIENTATION"), GroupParameters); + TextLabelOrientation->setObjectName( "TextLabelOrientation" ); + GroupParametersLayout->addWidget( TextLabelOrientation, 0, 0 ); + + CBRelativeOrientation = new QComboBox(GroupParameters); + CBRelativeOrientation->setObjectName( "RelativeOrientation" ); + CBRelativeOrientation->addItem( tr("ALONG_XY") ); + CBRelativeOrientation->addItem( tr("ALONG_YZ") ); + CBRelativeOrientation->addItem( tr("ALONG_ZX") ); + GroupParametersLayout->addWidget( CBRelativeOrientation, 0, 1 ); + + TLValueDistance = new QLabel( GroupParameters ); + TLValueDistance->setObjectName( "TLValueDistance" ); + TLValueDistance->setAlignment( Qt::AlignCenter ); + TLValueDistance->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + QFont fnt = TLValueDistance->font(); fnt.setBold( true ); TLValueDistance->setFont( fnt ); + GroupParametersLayout->addWidget( TLValueDistance, 1, 1 ); + + TextLabelDistance = new QLabel( tr("SMESH_DISTANCE"), GroupParameters ); + TextLabelDistance->setObjectName( "TextLabelDistance" ); + GroupParametersLayout->addWidget( TextLabelDistance, 2, 0 ); + + SliderDistance = new QSlider( Qt::Horizontal, GroupParameters ); + SliderDistance->setObjectName( "SliderDistance" ); + SliderDistance->setFocusPolicy( Qt::NoFocus ); + SliderDistance->setMinimumSize( 300, 0 ); + SliderDistance->setMinimum( 0 ); + SliderDistance->setMaximum( 100 ); + SliderDistance->setSingleStep( 1 ); + SliderDistance->setPageStep( 10 ); + SliderDistance->setTracking( false ); + GroupParametersLayout->addWidget( SliderDistance, 2, 1 ); + + TLValueRotation1 = new QLabel( GroupParameters ); + TLValueRotation1->setObjectName( "TLValueRotation1" ); + TLValueRotation1->setAlignment( Qt::AlignCenter ); + TLValueRotation1->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + TLValueRotation1->setFont( fnt ); + GroupParametersLayout->addWidget( TLValueRotation1, 3, 1 ); + + TextLabelRotation1 = new QLabel( tr("ROTATION_AROUND_X_Y2Z"), GroupParameters ); + TextLabelRotation1->setObjectName( "TextLabelRotation1" ); + GroupParametersLayout->addWidget( TextLabelRotation1, 4, 0 ); + + SliderRotation1 = new QSlider( Qt::Horizontal, GroupParameters ); + SliderRotation1->setObjectName( "SliderRotation1" ); + SliderRotation1->setFocusPolicy( Qt::NoFocus ); + SliderRotation1->setMinimumSize( 300, 0 ); + SliderRotation1->setMinimum( -180 ); + SliderRotation1->setMaximum( 180 ); + SliderRotation1->setSingleStep( 1 ); + SliderRotation1->setPageStep( 10 ); + SliderRotation1->setTracking(false); + GroupParametersLayout->addWidget( SliderRotation1, 4, 1 ); + + TLValueRotation2 = new QLabel( GroupParameters ); + TLValueRotation2->setObjectName( "TLValueRotation2" ); + TLValueRotation2->setAlignment( Qt::AlignCenter ); + TLValueRotation2->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + TLValueRotation2->setFont( fnt ); + GroupParametersLayout->addWidget( TLValueRotation2, 5, 1 ); + + TextLabelRotation2 = new QLabel(tr("ROTATION_AROUND_Y_X2Z"), GroupParameters); + TextLabelRotation2->setObjectName( "TextLabelRotation2" ); + TextLabelRotation2->setObjectName( "TextLabelRotation2" ); + GroupParametersLayout->addWidget( TextLabelRotation2, 6, 0 ); + + SliderRotation2 = new QSlider( Qt::Horizontal, GroupParameters ); + SliderRotation2->setObjectName( "SliderRotation2" ); + SliderRotation2->setFocusPolicy( Qt::NoFocus ); + SliderRotation2->setMinimumSize( 300, 0 ); + SliderRotation2->setMinimum( -180 ); + SliderRotation2->setMaximum( 180 ); + SliderRotation2->setSingleStep( 1 ); + SliderRotation2->setPageStep( 10 ); + SliderRotation2->setTracking(false); + GroupParametersLayout->addWidget( SliderRotation2, 6, 1 ); + + /***************************************************************/ + QWidget* CheckBoxWidget = new QWidget( this ); + QHBoxLayout* CheckBoxLayout = new QHBoxLayout( CheckBoxWidget ); + + PreviewCheckBox = new QCheckBox( tr("SHOW_PREVIEW"), CheckBoxWidget ); + PreviewCheckBox->setObjectName( "PreviewCheckBox" ); + PreviewCheckBox->setChecked( true ); + CheckBoxLayout->addWidget( PreviewCheckBox, 0, Qt::AlignCenter ); + + AutoApplyCheckBox = new QCheckBox( tr("AUTO_APPLY"), CheckBoxWidget ); + AutoApplyCheckBox->setObjectName( "AutoApplyCheckBox" ); + CheckBoxLayout->addWidget( AutoApplyCheckBox, 0, Qt::AlignCenter ); + + /***************************************************************/ // Controls for "Ok", "Apply" and "Close" button QGroupBox* GroupButtons = new QGroupBox(this); QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); GroupButtonsLayout->setSpacing(SPACING); GroupButtonsLayout->setMargin(MARGIN); - buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons); - buttonOk->setAutoDefault(true); - buttonOk->setDefault(true); - buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); - buttonApply->setAutoDefault(true); - buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons); - buttonCancel->setAutoDefault(true); - buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons); - buttonHelp->setAutoDefault(true); - GroupButtonsLayout->addWidget(buttonOk); + buttonOk = new QPushButton( tr( "SMESH_BUT_APPLY_AND_CLOSE" ), GroupButtons ); + buttonOk->setAutoDefault( true ); + buttonOk->setDefault( true ); + buttonApply = new QPushButton( tr( "SMESH_BUT_APPLY" ), GroupButtons ); + buttonApply->setAutoDefault( true ); + buttonCancel = new QPushButton( tr( "SMESH_BUT_CLOSE" ), GroupButtons ); + buttonCancel->setAutoDefault( true ); + buttonHelp = new QPushButton( tr( "SMESH_BUT_HELP" ), GroupButtons ); + buttonHelp->setAutoDefault( true ); + GroupButtonsLayout->addWidget( buttonOk ); GroupButtonsLayout->addSpacing(10); - GroupButtonsLayout->addWidget(buttonApply); + GroupButtonsLayout->addWidget( buttonApply ); GroupButtonsLayout->addSpacing(10); GroupButtonsLayout->addStretch(); - GroupButtonsLayout->addWidget(buttonCancel); - GroupButtonsLayout->addWidget(buttonHelp); + GroupButtonsLayout->addWidget( buttonCancel ); + GroupButtonsLayout->addWidget( buttonHelp ); - SMESHGUI_ClippingDlgLayout->addWidget(GroupPlanes); - SMESHGUI_ClippingDlgLayout->addWidget(GroupParameters); - SMESHGUI_ClippingDlgLayout->addWidget(GroupButtons); + ModeStackedLayout->addWidget( ModeActiveWidget ); + ModeStackedLayout->addWidget( GroupParameters ); - // Initial state - SpinBoxDistance->RangeStepAndValidator(0.0, 1.0, 0.01, "length_precision" ); - SpinBoxRot1->RangeStepAndValidator(-180.0, 180.0, 1, "angle_precision" ); - SpinBoxRot2->RangeStepAndValidator(-180.0, 180.0, 1, "angle_precision" ); + SMESHGUI_ClippingDlgLayout->addWidget( GroupPlanes ); + SMESHGUI_ClippingDlgLayout->addLayout( ModeStackedLayout ); + SMESHGUI_ClippingDlgLayout->addWidget( CheckBoxWidget ); + SMESHGUI_ClippingDlgLayout->addWidget( GroupButtons ); - ComboBoxOrientation->addItem(tr("ALONG_XY")); - ComboBoxOrientation->addItem(tr("ALONG_YZ")); - ComboBoxOrientation->addItem(tr("ALONG_ZX")); - - SpinBoxDistance->SetValue(0.5); + // Initializations + initParam(); myIsSelectPlane = false; - initializePlaneData(); - synchronize(); - myHelpFileName = "clipping_page.html"; // signals and slots connections : - connect(ComboBoxPlanes, SIGNAL(activated(int)), this, SLOT(onSelectPlane(int))); - connect(buttonNew, SIGNAL(clicked()), this, SLOT(ClickOnNew())); - connect(buttonDelete, SIGNAL(clicked()), this, SLOT(ClickOnDelete())); - connect(ActorList, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(onActorItemChanged(QListWidgetItem*))); - connect(SelectAllCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onSelectAll(int))); - connect(ComboBoxOrientation, SIGNAL(activated(int)), this, SLOT(onSelectOrientation(int))); - connect(SpinBoxDistance, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(SpinBoxRot1, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(SpinBoxRot2, SIGNAL(valueChanged(double)), this, SLOT(SetCurrentPlaneParam())); - connect(PreviewCheckBox, SIGNAL(toggled(bool)), this, SLOT(OnPreviewToggle(bool))); - connect(AutoApplyCheckBox, SIGNAL(toggled(bool)), this, SLOT(onAutoApply(bool))); - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); - connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(reject())); + connect( ComboBoxPlanes, SIGNAL( activated( int ) ), this, SLOT( onSelectPlane( int ) ) ); + connect( isOpenGLClipping, SIGNAL( toggled( bool ) ), this, SLOT( onIsOpenGLClipping( bool ) ) ); + connect( buttonNew, SIGNAL( clicked() ), buttonNew, SLOT( showMenu() ) ); + connect( buttonDelete, SIGNAL( clicked() ), this, SLOT( ClickOnDelete() ) ); + connect( ActorList, SIGNAL( itemChanged( QListWidgetItem* ) ), this, SLOT( onActorItemChanged( QListWidgetItem*) ) ); + connect( SelectAllCheckBox, SIGNAL( stateChanged( int ) ), this, SLOT( onSelectAll( int ) ) ); + + connect( invertButton, SIGNAL (clicked() ), this, SLOT( onInvert() ) ) ; + connect( resetButton, SIGNAL (clicked() ), this, SLOT( onReset() ) ); + connect( SpinBox_X, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( SpinBox_Y, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( SpinBox_Z, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( SpinBox_Dx, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( SpinBox_Dy, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( SpinBox_Dz, SIGNAL ( valueChanged( double ) ), this, SLOT( SetCurrentPlaneParam() ) ); + connect( CBAbsoluteOrientation, SIGNAL ( activated ( int ) ), this, SLOT( onSelectAbsoluteOrientation( int ) ) ) ; + + connect( CBRelativeOrientation, SIGNAL( activated( int ) ), this, SLOT( onSelectRelativeOrientation( int ) ) ); + connect( SliderDistance, SIGNAL( sliderMoved( int ) ), this, SLOT( SliderDistanceHasMoved( int ) ) ); + connect( SliderDistance, SIGNAL( valueChanged( int ) ), this, SLOT( SliderDistanceHasMoved( int ) ) ); + connect( SliderRotation1, SIGNAL( sliderMoved( int ) ), this, SLOT( SliderRotation1HasMoved( int ) ) ); + connect( SliderRotation1, SIGNAL( valueChanged( int ) ), this, SLOT( SliderRotation1HasMoved( int ) ) ); + connect( SliderRotation2, SIGNAL( sliderMoved( int ) ), this, SLOT( SliderRotation2HasMoved( int ) ) ); + connect( SliderRotation2, SIGNAL( valueChanged( int ) ), this, SLOT( SliderRotation2HasMoved( int ) ) ); + + connect( PreviewCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( OnPreviewToggle( bool ) ) ); + connect( AutoApplyCheckBox, SIGNAL( toggled( bool ) ), this, SLOT( onAutoApply( bool ) ) ); + connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); + connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect( buttonHelp, SIGNAL( clicked() ), this, SLOT( ClickOnHelp() ) ); + connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( reject() ) ); /* to close dialog if study frame change */ - connect(mySMESHGUI, SIGNAL (SignalStudyFrameChanged()), this, SLOT(reject())); + connect( mySMESHGUI, SIGNAL ( SignalStudyFrameChanged() ), this, SLOT( reject() ) ); + + initializePlaneData(); + synchronize(); this->show(); } -//================================================================================= -// function : ~SMESHGUI_ClippingDlg() -// purpose : -//================================================================================= +/*! + Destructor + Destroys the object and frees any allocated resources +*/ SMESHGUI_ClippingDlg::~SMESHGUI_ClippingDlg() { // no need to delete child widgets, Qt does it all for us std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisibility(false)); if (myViewWindow) SMESH::RenderViewWindow(myViewWindow); + + for( int i=0; i< myPlanes.size(); i++ ) { + SMESH::TPlaneData aPlaneData = myPlanes[i]; + aPlaneData.Plane->Delete(); + } + + if (myPreviewWidget) { + myPreviewWidget->Off(); + myPreviewWidget->Delete(); + } + myPreviewWidget = 0; + myCallback->Delete(); + + myViewWindow->Repaint(); } +/*! + Get distance for cutting plane in relative mode +*/ double SMESHGUI_ClippingDlg::getDistance() const { - return SpinBoxDistance->GetValue(); + return TLValueDistance->text().toDouble(); } +/*! + Set distance of cutting plane in relative mode +*/ void SMESHGUI_ClippingDlg::setDistance( const double theDistance ) { - SpinBoxDistance->SetValue( theDistance ); + SliderDistance->setValue( theDistance*100 ); } +/*! + Get rotation1 for cutting plane in relative mode +*/ double SMESHGUI_ClippingDlg::getRotation1() const { - return SpinBoxRot1->GetValue(); + return TLValueRotation1->text().remove("\xB0").toInt(); } +/*! + Get rotation2 for cutting plane in relative mode +*/ double SMESHGUI_ClippingDlg::getRotation2() const { - return SpinBoxRot2->GetValue(); + return TLValueRotation2->text().remove("\xB0").toInt(); } -//======================================================================= -// function : ClickOnApply() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnApply() +/*! + Set angles of clipping plane in relative mode +*/ +void SMESHGUI_ClippingDlg::setRotation (const double theRot1, const double theRot2) { - if (myViewWindow) { - SUIT_OverrideCursor wc; - - QWidget *aCurrWid = this->focusWidget(); - aCurrWid->clearFocus(); - aCurrWid->setFocus(); - - SMESHGUI_ClippingPlaneInfoMap& aClippingPlaneInfoMap = mySMESHGUI->getClippingPlaneInfoMap(); - SMESHGUI_ClippingPlaneInfoList& aClippingPlaneInfoList = aClippingPlaneInfoMap[ myViewWindow->getViewManager() ]; - - // clean memory allocated for planes - SMESHGUI_ClippingPlaneInfoList::iterator anIter1 = aClippingPlaneInfoList.begin(); - for( ; anIter1 != aClippingPlaneInfoList.end(); anIter1++ ) - if( SMESH::OrientedPlane* aPlane = (*anIter1).Plane ) - aPlane->Delete(); + SliderRotation1->setValue( theRot1 ); + SliderRotation2->setValue( theRot2 ); +} - aClippingPlaneInfoList.clear(); +/*! + Set coordinates of origin point in dialog box +*/ +void SMESHGUI_ClippingDlg::setOrigin( double theVal[3] ) +{ + int anOrientation = CBAbsoluteOrientation->currentIndex(); + if( anOrientation == 0 || anOrientation == 2 ) + SpinBox_X->setValue( theVal[0] ); + if( anOrientation == 0 || anOrientation == 3 ) + SpinBox_Y->setValue( theVal[1] ); + if( anOrientation == 0 || anOrientation == 1 ) + SpinBox_Z->setValue( theVal[2] ); +} - VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() ); - vtkActorCollection* anAllActors = aCopy.GetActors(); - anAllActors->InitTraversal(); - while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) - if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) - anActor->RemoveAllClippingPlanes(); +/*! + Set coordinates of normal vector in dialog box +*/ +void SMESHGUI_ClippingDlg::setDirection( double theVal[3] ) +{ + int anOrientation = CBAbsoluteOrientation->currentIndex(); + if( anOrientation == 0 ) { + SpinBox_Dx->setValue( theVal[0] ); + SpinBox_Dy->setValue( theVal[1] ); + SpinBox_Dz->setValue( theVal[2] ); + } +} - SMESH::TPlaneDataVector::iterator anIter2 = myPlanes.begin(); - for( ; anIter2 != myPlanes.end(); anIter2++ ) { - SMESH::TPlaneData aPlaneData = *anIter2; - SMESH::TPlane aPlane = aPlaneData.Plane; - SMESH::TActorList anActorList = aPlaneData.ActorList; +/*! + Create a new widget for preview clipping plane +*/ +vtkImplicitPlaneWidget* SMESHGUI_ClippingDlg::createPreviewWidget() +{ + vtkImplicitPlaneWidget* aPlaneWgt = vtkImplicitPlaneWidget::New(); - // the check is disabled to support planes with empty actor list - //if( anActorList.empty() ) - // continue; + aPlaneWgt->SetInteractor( myViewWindow->getInteractor() ); + aPlaneWgt->SetPlaceFactor( SIZEFACTOR ); + aPlaneWgt->ScaleEnabledOff(); + aPlaneWgt->SetOrigin( 0, 0, 0 ); + aPlaneWgt->SetNormal( -1, -1, -1 ); + aPlaneWgt->Off(); - SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow); - anOrientedPlane->ShallowCopy(aPlane.GetPointer()); + double anRGB[3]; + SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); - SMESH::TActorList::iterator anIter3 = anActorList.begin(); - for( ; anIter3 != anActorList.end(); anIter3++ ) - if( vtkActor* aVTKActor = *anIter3 ) - if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) - anActor->AddClippingPlane(anOrientedPlane); + aPlaneWgt->GetPlaneProperty()->SetColor( anRGB[0],anRGB[1],anRGB[2] ); + aPlaneWgt->GetPlaneProperty()->SetOpacity( 0.2 );; - SMESH::ClippingPlaneInfo aClippingPlaneInfo; - aClippingPlaneInfo.Plane = anOrientedPlane; - aClippingPlaneInfo.ActorList = anActorList; + aPlaneWgt->GetSelectedPlaneProperty()->SetColor( anRGB[0],anRGB[1],anRGB[2] ); + aPlaneWgt->GetSelectedPlaneProperty()->SetOpacity( 0.2 ); + aPlaneWgt->GetSelectedPlaneProperty()->SetLineWidth( 2.0 ); - aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); - } + aPlaneWgt->AddObserver(vtkCommand::InteractionEvent, myCallback, 0.); - SMESH::RenderViewWindow( myViewWindow ); - } + return aPlaneWgt; } -//======================================================================= -// function : ClickOnOk() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnOk() +/*! + Translate two angles of plane to normal +*/ +void rotationToNormal ( double theRotation[2], + int theOrientation, + double theNormal[3], + double theDir[2][3] ) { - ClickOnApply(); - reject(); -} + static double aCoeff = M_PI/180.0; + + double anU[2] = { cos( aCoeff * theRotation[0] ), cos( aCoeff * theRotation[1] ) }; + double aV[2] = { sqrt( 1.0 - anU[0]*anU[0] ), sqrt( 1.0 - anU[1] * anU[1] ) }; + aV[0] = theRotation[0] > 0? aV[0]: -aV[0]; + aV[1] = theRotation[1] > 0? aV[1]: -aV[1]; + + switch ( theOrientation ) { + case 0: + case 1: + theDir[0][1] = anU[0]; + theDir[0][2] = aV[0]; + theDir[1][0] = anU[1]; + theDir[1][2] = aV[1]; + break; + case 2: + theDir[0][2] = anU[0]; + theDir[0][0] = aV[0]; + theDir[1][1] = anU[1]; + theDir[1][0] = aV[1]; + break; + case 3: + theDir[0][0] = anU[0]; + theDir[0][1] = aV[0]; + theDir[1][2] = anU[1]; + theDir[1][1] = aV[1]; + break; + } -//======================================================================= -// function : reject() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::reject() -{ - //here we can insert actions to do at close. - QDialog::reject(); + vtkMath::Cross( theDir[1], theDir[0], theNormal ); + vtkMath::Normalize( theNormal ); + vtkMath::Cross( theNormal, theDir[1], theDir[0] ); } -//================================================================================= -// function : ClickOnHelp() -// purpose : -//================================================================================= -void SMESHGUI_ClippingDlg::ClickOnHelp() +/*! + Used in SMESHGUI::restoreVisualParameters() to avoid + Declaration of OrientedPlane outside of SMESHGUI_ClippingDlg.cxx +*/ +bool SMESHGUI_ClippingDlg::AddPlane ( SMESH::TActorList theActorList, + SMESH::OrientedPlane* thePlane ) { - LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); - if (app) - app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); - else { - QString platform; -#ifdef WIN32 - platform = "winapplication"; -#else - platform = "application"; -#endif - SUIT_MessageBox::warning(this, tr("WRN_WARNING"), - tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", - platform)). - arg(myHelpFileName)); + double aNormal[3]; + double aDir[2][3] = {{0, 0, 0}, {0, 0, 0}}; + static double aCoeff = vtkMath::Pi()/180.0; + + int anOrientation; + if ( thePlane->PlaneMode == SMESH::Absolute ) + anOrientation = thePlane->myAbsoluteOrientation; + else if ( thePlane->PlaneMode == SMESH::Relative ) + anOrientation = thePlane->myRelativeOrientation + 1; + + if ( anOrientation == 0 ) { + // compute a direction for plane in absolute mode + double znam = sqrt( thePlane->Dx*thePlane->Dx + thePlane->Dy*thePlane->Dy + thePlane->Dz*thePlane->Dz ); + double aRotation = acos( thePlane->Dy/znam )/aCoeff; + if ( thePlane->Dy >= 0.0 && thePlane->Dz >= 0.0 ) thePlane->myAngle[0] = 90.0 + aRotation; + else if ( thePlane->Dy >= 0.0 && thePlane->Dz < 0.0 ) thePlane->myAngle[0] = 90.0 - aRotation; + else if ( thePlane->Dy < 0.0 && thePlane->Dz >= 0.0 ) thePlane->myAngle[0] = aRotation - 90.0; + else if ( thePlane->Dy < 0.0 && thePlane->Dz < 0.0 ) thePlane->myAngle[0] = 270.0 - aRotation; + + aRotation = acos( thePlane->Dx/znam )/aCoeff; + if ( thePlane->Dx >= 0.0 && thePlane->Dz >= 0.0 ) thePlane->myAngle[1] = 90.0 + aRotation; + else if ( thePlane->Dx >= 0.0 && thePlane->Dz < 0.0 ) thePlane->myAngle[1] = 90.0 - aRotation; + else if ( thePlane->Dx < 0.0 && thePlane->Dz >= 0.0 ) thePlane->myAngle[1] = aRotation - 90.0; + else if ( thePlane->Dx < 0.0 && thePlane->Dz < 0.0 ) thePlane->myAngle[1] = 270.0 - aRotation; } -} -//======================================================================= -// function : onSelectPlane() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onSelectPlane (int theIndex) -{ - if (myPlanes.empty()) - return; + // compute a normal + rotationToNormal( thePlane->myAngle, anOrientation, aNormal, aDir ); - SMESH::TPlaneData aPlaneData = myPlanes[theIndex]; - SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer(); + double aBounds[6]; + double anOrigin[3]; - // Orientation - SMESH::Orientation anOrientation = aPlane->GetOrientation(); + if ( thePlane->PlaneMode == SMESH::Absolute ) { + aNormal[0] = thePlane->Dx; + aNormal[1] = thePlane->Dy; + aNormal[2] = thePlane->Dz; + } - // Rotations - double aRot[2] = {aPlane->myAngle[0], aPlane->myAngle[1]}; + bool anIsOk = false; + if( theActorList.empty() ) { + // to support planes with empty actor list we should create + // a nullified plane that will be initialized later + anOrigin[0] = anOrigin[1] = anOrigin[2] = 0; + aBounds[0] = aBounds[2] = aBounds[4] = 0; + aBounds[1] = aBounds[3] = aBounds[5] = 0; + anIsOk = true; + } + else + anIsOk = SMESH::ComputeClippingPlaneParameters( theActorList, + aNormal, + thePlane->myDistance, + aBounds, + anOrigin ); + if( !anIsOk ) + return false; - // Set plane parameters in the dialog - myIsSelectPlane = true; - setDistance(aPlane->GetDistance()); - setRotation(aRot[0], aRot[1]); - switch (anOrientation) { - case SMESH::XY: - ComboBoxOrientation->setCurrentIndex(0); - onSelectOrientation(0); - break; - case SMESH::YZ: - ComboBoxOrientation->setCurrentIndex(1); - onSelectOrientation(1); - break; - case SMESH::ZX: - ComboBoxOrientation->setCurrentIndex(2); - onSelectOrientation(2); - break; + if ( thePlane->PlaneMode == SMESH::Absolute ) { + anOrigin[0] = thePlane->X; + anOrigin[1] = thePlane->Y; + anOrigin[2] = thePlane->Z; } - myIsSelectPlane = false; + thePlane->SetNormal( aNormal ); + thePlane->SetOrigin( anOrigin ); - // Actors - bool anIsBlocked = ActorList->blockSignals( true ); - updateActorList(); - ActorList->blockSignals( anIsBlocked ); -} -//======================================================================= -// function : ClickOnNew() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnNew() -{ - if(myViewWindow){ - SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New(myViewWindow); - SMESH::TPlane aTPlane(aPlane); + double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2., + ( aBounds[2] + aBounds[3] ) / 2., + ( aBounds[4] + aBounds[5] ) / 2. }; - SMESH::TActorList anActorList; - VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() ); - vtkActorCollection* anAllActors = aCopy.GetActors(); - anAllActors->InitTraversal(); - while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) - if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) - anActorList.push_back( anActor ); + double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) + + pow( aBounds[3] - aBounds[2], 2 ) + + pow( aBounds[5] - aBounds[4], 2 ), 0.5 ); - SMESH::TPlaneData aPlaneData(aTPlane, anActorList); + double aDelta[2][3] = { { aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel }, + { aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel } }; + double aParam, aPnt0[3], aPnt1[3], aPnt2[3]; - myPlanes.push_back(aPlaneData); + double aPnt01[3] = { aPnt[0] - aDelta[0][0] - aDelta[1][0], + aPnt[1] - aDelta[0][1] - aDelta[1][1], + aPnt[2] - aDelta[0][2] - aDelta[1][2] }; + double aPnt02[3] = { aPnt01[0] + aNormal[0], + aPnt01[1] + aNormal[1], + aPnt01[2] + aNormal[2] }; + vtkPlane::IntersectWithLine( aPnt01, aPnt02, aNormal, anOrigin, aParam, aPnt0 ); + + double aPnt11[3] = { aPnt[0] - aDelta[0][0] + aDelta[1][0], + aPnt[1] - aDelta[0][1] + aDelta[1][1], + aPnt[2] - aDelta[0][2] + aDelta[1][2] }; + double aPnt12[3] = { aPnt11[0] + aNormal[0], + aPnt11[1] + aNormal[1], + aPnt11[2] + aNormal[2] }; + vtkPlane::IntersectWithLine( aPnt11, aPnt12, aNormal, anOrigin, aParam, aPnt1); + + double aPnt21[3] = { aPnt[0] + aDelta[0][0] - aDelta[1][0], + aPnt[1] + aDelta[0][1] - aDelta[1][1], + aPnt[2] + aDelta[0][2] - aDelta[1][2] }; + double aPnt22[3] = { aPnt21[0] + aNormal[0], + aPnt21[1] + aNormal[1], + aPnt21[2] + aNormal[2] }; + vtkPlane::IntersectWithLine( aPnt21, aPnt22, aNormal, anOrigin, aParam, aPnt2); + + vtkPlaneSource* aPlaneSource = thePlane->myPlaneSource; + aPlaneSource->SetNormal( aNormal[0], aNormal[1], aNormal[2] ); + aPlaneSource->SetOrigin( aPnt0[0], aPnt0[1], aPnt0[2] ); + aPlaneSource->SetPoint1( aPnt1[0], aPnt1[1], aPnt1[2] ); + aPlaneSource->SetPoint2( aPnt2[0], aPnt2[1], aPnt2[2] ); + aPlaneSource->Update(); - if (PreviewCheckBox->isChecked()) - aTPlane->myActor->VisibilityOn(); + SMESH::TActorList::iterator anIter = theActorList.begin(); + for ( ; anIter != theActorList.end(); anIter++ ) + if( vtkActor* aVTKActor = *anIter ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) { + if( thePlane->IsOpenGLClipping ) + anActor->AddOpenGLClippingPlane( thePlane->InvertPlane() ); + else + anActor->AddClippingPlane( thePlane ); + } - bool anIsBlocked = ActorList->blockSignals( true ); + return true; +} - synchronize(); - SetCurrentPlaneParam(); +/*! + Custom handling of events +*/ +void SMESHGUI_ClippingDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; - ActorList->blockSignals( anIsBlocked ); + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); } } -//======================================================================= -// function : ClickOnDelete() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::ClickOnDelete() +/*! + Handles the char preview widget activation event +*/ +void SMESHGUI_ClippingDlg::ProcessEvents( vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* vtkNotUsed( theCallData ) ) { - if (myPlanes.empty()) - return; + vtkImplicitPlaneWidget* aWidget = vtkImplicitPlaneWidget::SafeDownCast( theObject ); + if ( aWidget == NULL ) return; + if ( theClientData == NULL ) return; - int aPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESHGUI_ClippingDlg* aDlg = (SMESHGUI_ClippingDlg*) theClientData; - SMESH::TPlaneDataVector::iterator anIter = myPlanes.begin() + aPlaneIndex; - SMESH::TPlaneData aPlaneData = *anIter; - aPlaneData.Plane.GetPointer()->myActor->SetVisibility(false); - myPlanes.erase(anIter); + double anOrigin[3]; + double aDir[3]; - if(AutoApplyCheckBox->isChecked()) - ClickOnApply(); + switch( theEvent ){ + case vtkCommand::InteractionEvent: + aWidget->GetOrigin( anOrigin ); + aWidget->GetNormal( aDir ); - synchronize(); - SMESH::RenderViewWindow( myViewWindow ); -} - -//======================================================================= -// function : updateActorItem() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::updateActorItem( QListWidgetItem* theItem, - bool theUpdateSelectAll, - bool theUpdateClippingPlaneMap ) -{ - // update Select All check box - if( theUpdateSelectAll ) { - int aNbItems = ActorList->count(), aNbChecked = 0; - for( int i = 0; i < aNbItems; i++ ) - if( QListWidgetItem* anItem = ActorList->item( i ) ) - if( anItem->checkState() == Qt::Checked ) - aNbChecked++; - - bool anIsBlocked = SelectAllCheckBox->blockSignals( true ); - SelectAllCheckBox->setCheckState( aNbChecked == aNbItems ? Qt::Checked : Qt::Unchecked); - SelectAllCheckBox->blockSignals( anIsBlocked ); - } + aDlg->myIsSelectPlane = true; - // update clipping plane map - if( theUpdateClippingPlaneMap ) { - int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); - if( ActorItem* anItem = dynamic_cast( theItem ) ) { - if( SMESH_Actor* anActor = anItem->getActor() ) { - SMESH::TPlaneData& aPlaneData = myPlanes[ aCurPlaneIndex ]; - SMESH::TActorList& anActorList = aPlaneData.ActorList; - bool anIsPushed = false; - SMESH::TActorList::iterator anIter = anActorList.begin(); - for ( ; anIter != anActorList.end(); anIter++ ) { - if( anActor == *anIter ) { - anIsPushed = true; - break; - } - } - if( theItem->checkState() == Qt::Checked && !anIsPushed ) - anActorList.push_back( anActor ); - else if( theItem->checkState() == Qt::Unchecked && anIsPushed ) - anActorList.remove( anActor ); - } + if( aDlg->CurrentMode == SMESH::Absolute ) { + aDlg->setOrigin( anOrigin ); + aDlg->setDirection( aDir ); + aDlg->myIsPreviewMoved = true; } - } -} + else if( aDlg->CurrentMode == SMESH::Relative ) { + aDlg->absolutePlaneToRelative( anOrigin, aDir ); + } + aDlg->myIsSelectPlane = false; -//======================================================================= -// function : onActorItemChanged() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onActorItemChanged( QListWidgetItem* theItem ) -{ - updateActorItem( theItem, true, true ); - SetCurrentPlaneParam(); + aDlg->SetCurrentPlaneParam(); + aDlg->myIsPreviewMoved = false; + break; + } } -//======================================================================= -// function : onSelectAll() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onSelectAll( int theState ) +/*! + Initialize the planes's data when the dialog opened +*/ +void SMESHGUI_ClippingDlg::initializePlaneData() { - if( theState == Qt::PartiallyChecked ) { - SelectAllCheckBox->setCheckState( Qt::Checked ); - return; - } - - bool anIsBlocked = ActorList->blockSignals( true ); - for( int i = 0, n = ActorList->count(); i < n; i++ ) { - if( QListWidgetItem* anItem = ActorList->item( i ) ) { - anItem->setCheckState( theState == Qt::Checked ? Qt::Checked : Qt::Unchecked ); - updateActorItem( anItem, false, true ); + const SMESHGUI_ClippingPlaneInfoMap& aClippingPlaneInfoMap = mySMESHGUI->getClippingPlaneInfoMap(); + SMESHGUI_ClippingPlaneInfoMap::const_iterator anIter1 = aClippingPlaneInfoMap.find( myViewWindow->getViewManager() ); + if( anIter1 != aClippingPlaneInfoMap.end() ) { + const SMESHGUI_ClippingPlaneInfoList& aClippingPlaneInfoList = anIter1->second; + SMESHGUI_ClippingPlaneInfoList::const_iterator anIter2 = aClippingPlaneInfoList.begin(); + for( ; anIter2 != aClippingPlaneInfoList.end(); anIter2++ ) { + const SMESH::ClippingPlaneInfo& aClippingPlaneInfo = *anIter2; + SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow); + anOrientedPlane->ShallowCopy(aClippingPlaneInfo.Plane); + SMESH::TPlane aTPlane( anOrientedPlane ); + SMESH::TPlaneData aPlaneData( aTPlane, aClippingPlaneInfo.ActorList ); + myPlanes.push_back( aPlaneData ); } } - SelectAllCheckBox->setTristate( false ); - ActorList->blockSignals( anIsBlocked ); - SetCurrentPlaneParam(); + std::for_each( myPlanes.begin(),myPlanes.end(), TSetVisibility( PreviewCheckBox->isChecked() ) ); + if( myPlanes.size() ) + myPreviewWidget->SetEnabled( PreviewCheckBox->isChecked() ); } -//======================================================================= -// function : onSelectOrientation() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::onSelectOrientation (int theItem) +/*! + Initialization of initial values of widgets +*/ +void SMESHGUI_ClippingDlg::initParam() { - if (myPlanes.empty()) - return; - - if (theItem == 0) { - TextLabelRot1->setText(tr("ROTATION_AROUND_X_Y2Z")); - TextLabelRot2->setText(tr("ROTATION_AROUND_Y_X2Z")); - } - else if (theItem == 1) { - TextLabelRot1->setText(tr("ROTATION_AROUND_Y_Z2X")); - TextLabelRot2->setText(tr("ROTATION_AROUND_Z_Y2X")); - } - else if (theItem == 2) { - TextLabelRot1->setText(tr("ROTATION_AROUND_Z_X2Y")); - TextLabelRot2->setText(tr("ROTATION_AROUND_X_Z2Y")); - } - - if((QComboBox*)sender() == ComboBoxOrientation) - SetCurrentPlaneParam(); + SpinBox_X->setValue( 0.0 ); + SpinBox_Y->setValue( 0.0 ); + SpinBox_Z->setValue( 0.0 ); + + SpinBox_Dx->setValue( 1.0 ); + SpinBox_Dy->setValue( 1.0 ); + SpinBox_Dz->setValue( 1.0 ); + + CBAbsoluteOrientation->setCurrentIndex(0); + + TLValueDistance->setText( "0.5" ); + TLValueRotation1->setText( "0\xB0" ); + TLValueRotation2->setText( "0\xB0" ); + CBRelativeOrientation->setCurrentIndex( 0 ); + SliderDistance->setValue( 50 ); + SliderRotation1->setValue( 0 ); + SliderRotation2->setValue( 0 ); } -//======================================================================= -// function : synchronize() -// purpose : -//======================================================================= +/*! + Synchronize dialog's widgets with data +*/ void SMESHGUI_ClippingDlg::synchronize() { int aNbPlanes = myPlanes.size(); ComboBoxPlanes->clear(); QString aName; - for(int i = 1; i<=aNbPlanes; i++) { - aName = QString(tr("PLANE_NUM")).arg(i); - ComboBoxPlanes->addItem(aName); + for( int i = 1; i<=aNbPlanes; i++ ) { + aName = QString( tr( "PLANE_NUM" ) ).arg(i); + ComboBoxPlanes->addItem( aName ); } int aPos = ComboBoxPlanes->count() - 1; - ComboBoxPlanes->setCurrentIndex(aPos); + ComboBoxPlanes->setCurrentIndex( aPos ); - bool anIsControlsEnable = (aPos >= 0); - if (anIsControlsEnable) { - onSelectPlane(aPos); + bool anIsControlsEnable = ( aPos >= 0 ); + if ( anIsControlsEnable ) { + onSelectPlane( aPos ); updateActorList(); - } else { - ComboBoxPlanes->addItem(tr("NO_PLANES")); - ActorList->clear(); - SpinBoxRot1->SetValue(0.0); - SpinBoxRot2->SetValue(0.0); - SpinBoxDistance->SetValue(0.5); - } - - ActorList->setEnabled(anIsControlsEnable); - SelectAllCheckBox->setEnabled(anIsControlsEnable); - buttonDelete->setEnabled(anIsControlsEnable); - // the following 3 controls should be enabled - //buttonApply->setEnabled(anIsControlsEnable); - //PreviewCheckBox->setEnabled(anIsControlsEnable); - //AutoApplyCheckBox->setEnabled(anIsControlsEnable); - ComboBoxOrientation->setEnabled(anIsControlsEnable); - SpinBoxDistance->setEnabled(anIsControlsEnable); - SpinBoxRot1->setEnabled(anIsControlsEnable); - SpinBoxRot2->setEnabled(anIsControlsEnable); -} - -//======================================================================= -// function : setRotation() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::setRotation (const double theRot1, const double theRot2) -{ - SpinBoxRot1->SetValue(theRot1); - SpinBoxRot2->SetValue(theRot2); -} - -//======================================================================= -// function : SetCurrentPlaneParam() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::SetCurrentPlaneParam() -{ - if (myPlanes.empty() || myIsSelectPlane) - return; - - int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); - - SMESH::TPlaneData aPlaneData = myPlanes[aCurPlaneIndex]; - SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer(); - - double aNormal[3]; - SMESH::Orientation anOrientation; - double aDir[3][3] = {{0, 0, 0}, {0, 0, 0}}; - { - static double aCoeff = vtkMath::Pi()/180.0; - - double aRot[2] = {getRotation1(), getRotation2()}; - aPlane->myAngle[0] = aRot[0]; - aPlane->myAngle[1] = aRot[1]; - - double anU[2] = {cos(aCoeff*aRot[0]), cos(aCoeff*aRot[1])}; - double aV[2] = {sqrt(1.0-anU[0]*anU[0]), sqrt(1.0-anU[1]*anU[1])}; - aV[0] = aRot[0] > 0? aV[0]: -aV[0]; - aV[1] = aRot[1] > 0? aV[1]: -aV[1]; - - switch (ComboBoxOrientation->currentIndex()) { - case 0: - anOrientation = SMESH::XY; - - aDir[0][1] = anU[0]; - aDir[0][2] = aV[0]; - - aDir[1][0] = anU[1]; - aDir[1][2] = aV[1]; - - break; - case 1: - anOrientation = SMESH::YZ; - - aDir[0][2] = anU[0]; - aDir[0][0] = aV[0]; - - aDir[1][1] = anU[1]; - aDir[1][0] = aV[1]; - - break; - case 2: - anOrientation = SMESH::ZX; - - aDir[0][0] = anU[0]; - aDir[0][1] = aV[0]; - - aDir[1][2] = anU[1]; - aDir[1][1] = aV[1]; - - break; - } - - vtkMath::Cross(aDir[1],aDir[0],aNormal); - vtkMath::Normalize(aNormal); - vtkMath::Cross(aNormal,aDir[1],aDir[0]); + if( PreviewCheckBox->isChecked() ) + myPreviewWidget->On(); } - - aPlane->SetOrientation(anOrientation); - aPlane->SetDistance(getDistance()); - - SMESH::TActorList anActorList = aPlaneData.ActorList; - - double aBounds[6]; - double anOrigin[3]; - bool anIsOk = SMESH::ComputeClippingPlaneParameters( anActorList, - aNormal, - getDistance(), - aBounds, - anOrigin ); - - aPlane->myActor->SetVisibility( anIsOk && PreviewCheckBox->isChecked() ); - - if( anIsOk ) { - aPlane->SetNormal( aNormal ); - aPlane->SetOrigin( anOrigin ); - - double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2., - ( aBounds[2] + aBounds[3] ) / 2., - ( aBounds[4] + aBounds[5] ) / 2. }; - - double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) + - pow( aBounds[3] - aBounds[2], 2 ) + - pow( aBounds[5] - aBounds[4], 2 ), 0.5 ); - - double aDelta[2][3] = {{aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel}, - {aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel}}; - double aParam, aPnt0[3], aPnt1[3], aPnt2[3]; - - double aPnt01[3] = {aPnt[0] - aDelta[0][0] - aDelta[1][0], - aPnt[1] - aDelta[0][1] - aDelta[1][1], - aPnt[2] - aDelta[0][2] - aDelta[1][2]}; - double aPnt02[3] = {aPnt01[0] + aNormal[0], - aPnt01[1] + aNormal[1], - aPnt01[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0); - - double aPnt11[3] = {aPnt[0] - aDelta[0][0] + aDelta[1][0], - aPnt[1] - aDelta[0][1] + aDelta[1][1], - aPnt[2] - aDelta[0][2] + aDelta[1][2]}; - double aPnt12[3] = {aPnt11[0] + aNormal[0], - aPnt11[1] + aNormal[1], - aPnt11[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1); - - double aPnt21[3] = {aPnt[0] + aDelta[0][0] - aDelta[1][0], - aPnt[1] + aDelta[0][1] - aDelta[1][1], - aPnt[2] + aDelta[0][2] - aDelta[1][2]}; - double aPnt22[3] = {aPnt21[0] + aNormal[0], - aPnt21[1] + aNormal[1], - aPnt21[2] + aNormal[2]}; - vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2); - - vtkPlaneSource* aPlaneSource = aPlane->myPlaneSource; - aPlaneSource->SetNormal(aNormal[0],aNormal[1],aNormal[2]); - aPlaneSource->SetOrigin(aPnt0[0],aPnt0[1],aPnt0[2]); - aPlaneSource->SetPoint1(aPnt1[0],aPnt1[1],aPnt1[2]); - aPlaneSource->SetPoint2(aPnt2[0],aPnt2[1],aPnt2[2]); - aPlaneSource->Update(); + else { + ComboBoxPlanes->addItem( tr( "NO_PLANES" ) ); + ActorList->clear(); + initParam(); + if( PreviewCheckBox->isChecked() ) + myPreviewWidget->Off(); } - if(AutoApplyCheckBox->isChecked()) - ClickOnApply(); - - SMESH::RenderViewWindow( myViewWindow ); -} - -//======================================================================= -// function : OnPreviewToggle() -// purpose : -//======================================================================= -void SMESHGUI_ClippingDlg::OnPreviewToggle (bool theIsToggled) -{ - std::for_each(myPlanes.begin(),myPlanes.end(),TSetVisibility(theIsToggled)); - SMESH::RenderViewWindow( myViewWindow ); -} - -//================================================================================= -// function : keyPressEvent() -// purpose : -//================================================================================= -void SMESHGUI_ClippingDlg::keyPressEvent( QKeyEvent* e ) -{ - QDialog::keyPressEvent( e ); - if ( e->isAccepted() ) - return; - - if ( e->key() == Qt::Key_F1 ) { - e->accept(); - ClickOnHelp(); + isOpenGLClipping->setEnabled( anIsControlsEnable ); + ActorList->setEnabled( anIsControlsEnable ); + SelectAllCheckBox->setEnabled( anIsControlsEnable ); + buttonDelete->setEnabled( anIsControlsEnable ); + if ( CurrentMode == SMESH::Absolute ) { + SpinBox_X->setEnabled( anIsControlsEnable ); + SpinBox_Y->setEnabled( anIsControlsEnable ); + SpinBox_Z->setEnabled( anIsControlsEnable ); + SpinBox_Dx->setEnabled( anIsControlsEnable ); + SpinBox_Dy->setEnabled( anIsControlsEnable ); + SpinBox_Dz->setEnabled( anIsControlsEnable ); + CBAbsoluteOrientation->setEnabled( anIsControlsEnable ); + invertButton->setEnabled( anIsControlsEnable ); + resetButton->setEnabled( anIsControlsEnable ); } -} - -//================================================================================= -// function : initializePlaneData() -// purpose : -//================================================================================= -void SMESHGUI_ClippingDlg::initializePlaneData() -{ - const SMESHGUI_ClippingPlaneInfoMap& aClippingPlaneInfoMap = mySMESHGUI->getClippingPlaneInfoMap(); - SMESHGUI_ClippingPlaneInfoMap::const_iterator anIter1 = aClippingPlaneInfoMap.find( myViewWindow->getViewManager() ); - if( anIter1 != aClippingPlaneInfoMap.end() ) { - const SMESHGUI_ClippingPlaneInfoList& aClippingPlaneInfoList = anIter1->second; - SMESHGUI_ClippingPlaneInfoList::const_iterator anIter2 = aClippingPlaneInfoList.begin(); - for( ; anIter2 != aClippingPlaneInfoList.end(); anIter2++ ) { - const SMESH::ClippingPlaneInfo& aClippingPlaneInfo = *anIter2; - SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow); - anOrientedPlane->ShallowCopy(aClippingPlaneInfo.Plane); - SMESH::TPlane aTPlane( anOrientedPlane ); - SMESH::TPlaneData aPlaneData( aTPlane, aClippingPlaneInfo.ActorList ); - myPlanes.push_back( aPlaneData ); - } + else if ( CurrentMode == SMESH::Relative ) { + CBRelativeOrientation->setEnabled( anIsControlsEnable ); + SliderDistance->setEnabled( anIsControlsEnable ); + SliderRotation1->setEnabled( anIsControlsEnable ); + SliderRotation2->setEnabled( anIsControlsEnable ); } - std::for_each( myPlanes.begin(),myPlanes.end(), TSetVisibility( PreviewCheckBox->isChecked() ) ); } -//================================================================================= -// function : updateActorList() -// purpose : -//================================================================================= +/*! + Update the list of actors +*/ void SMESHGUI_ClippingDlg::updateActorList() { ActorList->clear(); @@ -1097,6 +1099,9 @@ void SMESHGUI_ClippingDlg::updateActorList() const SMESH::TPlaneData& aPlaneData = myPlanes[ aCurPlaneIndex ]; const SMESH::TActorList& anActorList = aPlaneData.ActorList; + std::for_each( myPlanes.begin(),myPlanes.end(), TSetVisibility( PreviewCheckBox->isChecked() ) ); + aPlaneData.Plane.GetPointer()->myActor->SetVisibility( false ); + VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() ); vtkActorCollection* anAllActors = aCopy.GetActors(); anAllActors->InitTraversal(); @@ -1127,10 +1132,57 @@ void SMESHGUI_ClippingDlg::updateActorList() } } -//================================================================================= -// function : getCurrentActors() -// purpose : -//================================================================================= +/*! + Update an actor in actor's list +*/ +void SMESHGUI_ClippingDlg::updateActorItem( QListWidgetItem* theItem, + bool theUpdateSelectAll, + bool theUpdateClippingPlaneMap ) +{ + // update Select All check box + if( theUpdateSelectAll ) { + int aNbItems = ActorList->count(), aNbChecked = 0; + for( int i = 0; i < aNbItems; i++ ) + if( QListWidgetItem* anItem = ActorList->item( i ) ) + if( anItem->checkState() == Qt::Checked ) + aNbChecked++; + + bool anIsBlocked = SelectAllCheckBox->blockSignals( true ); + SelectAllCheckBox->setCheckState( aNbChecked == aNbItems ? Qt::Checked : Qt::Unchecked); + SelectAllCheckBox->blockSignals( anIsBlocked ); + } + + // update clipping plane map + if( theUpdateClippingPlaneMap ) { + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + if( ActorItem* anItem = dynamic_cast( theItem ) ) { + if( SMESH_Actor* anActor = anItem->getActor() ) { + SMESH::TPlaneData& aPlaneData = myPlanes[ aCurPlaneIndex ]; + SMESH::TActorList& anActorList = aPlaneData.ActorList; + bool anIsPushed = false; + SMESH::TActorList::iterator anIter = anActorList.begin(); + for ( ; anIter != anActorList.end(); anIter++ ) { + if( anActor == *anIter ) { + anIsPushed = true; + break; + } + } + if( theItem->checkState() == Qt::Checked && !anIsPushed ) + anActorList.push_back( anActor ); + else if( theItem->checkState() == Qt::Unchecked && anIsPushed ) + anActorList.remove( anActor ); + + SMESH::ComputeBounds( anActorList, myBounds ); + myPreviewWidget->PlaceWidget( myBounds[0], myBounds[1], myBounds[2], + myBounds[3], myBounds[4], myBounds[5] ); + } + } + } +} + +/*! + Get the list of current actors +*/ SMESH::TActorList SMESHGUI_ClippingDlg::getCurrentActors() { SMESH::TActorList anActorList; @@ -1142,10 +1194,9 @@ SMESH::TActorList SMESHGUI_ClippingDlg::getCurrentActors() return anActorList; } -//================================================================================= -// function : dumpPlaneData() -// purpose : -//================================================================================= +/*! + Dump the parameters of clipping planes +*/ void SMESHGUI_ClippingDlg::dumpPlaneData() const { printf( "----------- Plane Data -----------\n" ); @@ -1174,7 +1225,789 @@ void SMESHGUI_ClippingDlg::dumpPlaneData() const printf( "----------------------------------\n" ); } -void SMESHGUI_ClippingDlg::onAutoApply(bool toggled) +/*! + SLOT on close button click: rejects dialog +*/ +void SMESHGUI_ClippingDlg::reject() { - if ( toggled ) ClickOnApply(); + //here we can insert actions to do at close. + QDialog::reject(); +} + +/*! + Set absolute mode of clipping plane +*/ +void SMESHGUI_ClippingDlg::onModeAbsolute() +{ + ModeStackedLayout->setCurrentIndex(0); + CurrentMode = SMESH::Absolute; + ClickOnNew(); + SetCurrentPlaneParam(); +} + +/*! + Set relative mode of clipping plane +*/ +void SMESHGUI_ClippingDlg::onModeRelative() +{ + ModeStackedLayout->setCurrentIndex(1); + CurrentMode = SMESH::Relative; + ClickOnNew(); + SetCurrentPlaneParam(); } + +/*! + SLOT on new button click: create a new clipping plane +*/ +void SMESHGUI_ClippingDlg::ClickOnNew() +{ + if(myViewWindow) { + SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New(myViewWindow); + SMESH::TPlane aTPlane(aPlane); + aPlane->PlaneMode = CurrentMode; + SMESH::TActorList anActorList; + VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() ); + vtkActorCollection* anAllActors = aCopy.GetActors(); + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) + anActorList.push_back( anActor ); + + SMESH::TPlaneData aPlaneData(aTPlane, anActorList); + + myPlanes.push_back(aPlaneData); + + + std::for_each( myPlanes.begin(),myPlanes.end(), TSetVisibility( PreviewCheckBox->isChecked() ) ); + aPlane->myActor->SetVisibility( false ); + + bool anIsBlocked = ActorList->blockSignals( true ); + + SMESH::ComputeBounds( anActorList, myBounds ); + myPreviewWidget->PlaceWidget( myBounds[0],myBounds[1],myBounds[2], + myBounds[3],myBounds[4],myBounds[5] ); + synchronize(); + SetCurrentPlaneParam(); + + ActorList->blockSignals( anIsBlocked ); + } +} + +/*! + SLOT on delete button click: Delete selected clipping plane +*/ +void SMESHGUI_ClippingDlg::ClickOnDelete() +{ + if (myPlanes.empty()) + return; + + int aPlaneIndex = ComboBoxPlanes->currentIndex(); + + SMESH::TPlaneDataVector::iterator anIter = myPlanes.begin() + aPlaneIndex; + SMESH::TPlaneData aPlaneData = *anIter; + aPlaneData.Plane.GetPointer()->myActor->SetVisibility(false); + myPlanes.erase(anIter); + + if(AutoApplyCheckBox->isChecked()) + ClickOnApply(); + + synchronize(); + SMESH::RenderViewWindow( myViewWindow ); +} + +/*! + Set current parameters of selected plane +*/ +void SMESHGUI_ClippingDlg::onSelectPlane ( int theIndex ) +{ + if ( myPlanes.empty() ) + return; + + SMESH::TPlaneData aPlaneData = myPlanes[theIndex]; + SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer(); + + myIsSelectPlane = true; + isOpenGLClipping->setChecked( aPlane->IsOpenGLClipping ); + + if ( aPlane->PlaneMode == SMESH::Absolute ) { + ModeStackedLayout->setCurrentIndex( 0 ); + CurrentMode = SMESH::Absolute; + int anOrientation = aPlane->myAbsoluteOrientation; + // Set plane parameters in the dialog + double anOrigin[3], aDir[3]; + anOrigin[0] = aPlane->X; + anOrigin[1] = aPlane->Y; + anOrigin[2] = aPlane->Z; + setOrigin( anOrigin ); + aDir[0] = aPlane->Dx; + aDir[1] = aPlane->Dy; + aDir[2] = aPlane->Dz; + setDirection( aDir ); + CBAbsoluteOrientation->setCurrentIndex( anOrientation ); + onSelectAbsoluteOrientation( anOrientation ); + } + else if ( aPlane->PlaneMode == SMESH::Relative ) { + ModeStackedLayout->setCurrentIndex( 1 ); + CurrentMode = SMESH::Relative; + SMESH::Orientation anOrientation = aPlane->GetOrientation(); + double aRot[2] = { aPlane->myAngle[0], aPlane->myAngle[1] }; + // Set plane parameters in the dialog + setDistance( aPlane->GetDistance() ); + setRotation( aRot[0], aRot[1] ); + switch ( anOrientation ) { + case SMESH::XY: + CBRelativeOrientation->setCurrentIndex(0); + onSelectRelativeOrientation(0); + break; + case SMESH::YZ: + CBRelativeOrientation->setCurrentIndex(1); + onSelectRelativeOrientation(1); + break; + case SMESH::ZX: + CBRelativeOrientation->setCurrentIndex(2); + onSelectRelativeOrientation(2); + break; + } + } + myIsSelectPlane = false; + SMESH::ComputeBounds( aPlaneData.ActorList, myBounds ); + myPreviewWidget->PlaceWidget( myBounds[0], myBounds[1], myBounds[2], + myBounds[3], myBounds[4], myBounds[5] ); + SetCurrentPlaneParam(); + + // Actors + bool anIsBlocked = ActorList->blockSignals( true ); + updateActorList(); + ActorList->blockSignals( anIsBlocked ); +} + +/*! + SLOT: called on OpenGLClipping check box toggled +*/ +void SMESHGUI_ClippingDlg::onIsOpenGLClipping( bool toggled ) +{ + if ( myPlanes.empty() || myIsSelectPlane ) + return; + + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESH::TPlaneData aPlane = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlaneData = aPlane.Plane.GetPointer(); + aPlaneData->IsOpenGLClipping = toggled; + + if( AutoApplyCheckBox->isChecked() ) + ClickOnApply(); +} + +/*! + SLOT: called on SelectAll check box toggled +*/ +void SMESHGUI_ClippingDlg::onSelectAll( int theState ) +{ + if( theState == Qt::PartiallyChecked ) { + SelectAllCheckBox->setCheckState( Qt::Checked ); + return; + } + + bool anIsBlocked = ActorList->blockSignals( true ); + for( int i = 0, n = ActorList->count(); i < n; i++ ) { + if( QListWidgetItem* anItem = ActorList->item( i ) ) { + anItem->setCheckState( theState == Qt::Checked ? Qt::Checked : Qt::Unchecked ); + updateActorItem( anItem, false, true ); + } + } + SelectAllCheckBox->setTristate( false ); + ActorList->blockSignals( anIsBlocked ); + SetCurrentPlaneParam(); +} + +/*! + SLOT: called when actor item was changed +*/ +void SMESHGUI_ClippingDlg::onActorItemChanged( QListWidgetItem* theItem ) +{ + updateActorItem( theItem, true, true ); + SetCurrentPlaneParam(); +} + +/*! + Restore parameters of selected plane +*/ +void SMESHGUI_ClippingDlg::SetCurrentPlaneParam() +{ + if ( myPlanes.empty() || myIsSelectPlane ) + return; + + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + + SMESH::TPlaneData aPlaneData = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer(); + + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aPlane->myAbsoluteOrientation = CBAbsoluteOrientation->currentIndex(); + aPlane->X = SpinBox_X->value(); + aPlane->Y = SpinBox_Y->value(); + aPlane->Z = SpinBox_Z->value(); + aPlane->Dx = SpinBox_Dx->value(); + aPlane->Dy = SpinBox_Dy->value(); + aPlane->Dz = SpinBox_Dz->value(); + } + + double aNormal[3]; + double aDir[2][3] = { {0, 0, 0}, {0, 0, 0} }; + static double aCoeff = vtkMath::Pi()/180.0; + + double aRot[2] = { getRotation1(), getRotation2() }; + int anOrient; + if ( aPlane->PlaneMode == SMESH::Absolute ) + anOrient = CBAbsoluteOrientation->currentIndex(); + else if ( aPlane->PlaneMode == SMESH::Relative ) + anOrient = CBRelativeOrientation->currentIndex() + 1; + + if ( aPlane->PlaneMode == SMESH::Relative ) { + aPlane->myAngle[0] = aRot[0]; + aPlane->myAngle[1] = aRot[1]; + aPlane->SetOrientation( SMESH::Orientation( CBRelativeOrientation->currentIndex() ) ); + aPlane->SetDistance( getDistance() ); + } + + if ( anOrient == 0 ) { + // compute a direction for plane in absolute mode + double znam = sqrt( aPlane->Dx*aPlane->Dx + aPlane->Dy*aPlane->Dy + aPlane->Dz*aPlane->Dz ); + double aRotation = acos( aPlane->Dy/znam )/aCoeff; + if ( aPlane->Dy >= 0.0 && aPlane->Dz >= 0.0 ) aRot[0] = 90.0 + aRotation; + else if ( aPlane->Dy >= 0.0 && aPlane->Dz < 0.0 ) aRot[0] = 90.0 - aRotation; + else if ( aPlane->Dy < 0.0 && aPlane->Dz >= 0.0 ) aRot[0] = aRotation - 90.0; + else if ( aPlane->Dy < 0.0 && aPlane->Dz < 0.0 ) aRot[0] = 270.0 - aRotation; + + aRotation = acos( aPlane->Dx/znam )/aCoeff; + if ( aPlane->Dx >= 0.0 && aPlane->Dz >= 0.0 ) aRot[1] = 90.0 + aRotation; + else if ( aPlane->Dx >= 0.0 && aPlane->Dz < 0.0 ) aRot[1] = 90.0 - aRotation; + else if ( aPlane->Dx < 0.0 && aPlane->Dz >= 0.0 ) aRot[1] = aRotation - 90.0; + else if ( aPlane->Dx < 0.0 && aPlane->Dz < 0.0 ) aRot[1] = 270.0 - aRotation; + } + + // compute a normal + rotationToNormal( aRot, anOrient, aNormal, aDir ); + + + SMESH::TActorList anActorList = aPlaneData.ActorList; + + double aBounds[6]; + double anOrigin[3]; + double aDistance; + aDistance = getDistance(); + if ( aPlane->PlaneMode == SMESH::Absolute ) { + aNormal[0] = aPlane->Dx; + aNormal[1] = aPlane->Dy; + aNormal[2] = aPlane->Dz; + } + + bool anIsOk = SMESH::ComputeClippingPlaneParameters( anActorList, + aNormal, + aDistance, + aBounds, + anOrigin ); + + if ( aPlane->PlaneMode == SMESH::Absolute ) { + anOrigin[0] = aPlane->X; + anOrigin[1] = aPlane->Y; + anOrigin[2] = aPlane->Z; + } + + if( anIsOk ) { + aPlane->SetNormal( aNormal ); + aPlane->SetOrigin( anOrigin ); + + double aPnt[3] = { ( aBounds[0] + aBounds[1] ) / 2., + ( aBounds[2] + aBounds[3] ) / 2., + ( aBounds[4] + aBounds[5] ) / 2. }; + + double aDel = pow( pow( aBounds[1] - aBounds[0], 2 ) + + pow( aBounds[3] - aBounds[2], 2 ) + + pow( aBounds[5] - aBounds[4], 2 ), 0.5 ); + + double aDelta[2][3] = { { aDir[0][0]*aDel, aDir[0][1]*aDel, aDir[0][2]*aDel }, + { aDir[1][0]*aDel, aDir[1][1]*aDel, aDir[1][2]*aDel } }; + double aParam, aPnt0[3], aPnt1[3], aPnt2[3]; + + double aPnt01[3] = { aPnt[0] - aDelta[0][0] - aDelta[1][0], + aPnt[1] - aDelta[0][1] - aDelta[1][1], + aPnt[2] - aDelta[0][2] - aDelta[1][2] }; + double aPnt02[3] = { aPnt01[0] + aNormal[0], + aPnt01[1] + aNormal[1], + aPnt01[2] + aNormal[2] }; + vtkPlane::IntersectWithLine(aPnt01,aPnt02,aNormal,anOrigin,aParam,aPnt0); + + double aPnt11[3] = { aPnt[0] - aDelta[0][0] + aDelta[1][0], + aPnt[1] - aDelta[0][1] + aDelta[1][1], + aPnt[2] - aDelta[0][2] + aDelta[1][2] }; + double aPnt12[3] = { aPnt11[0] + aNormal[0], + aPnt11[1] + aNormal[1], + aPnt11[2] + aNormal[2] }; + vtkPlane::IntersectWithLine(aPnt11,aPnt12,aNormal,anOrigin,aParam,aPnt1); + + double aPnt21[3] = { aPnt[0] + aDelta[0][0] - aDelta[1][0], + aPnt[1] + aDelta[0][1] - aDelta[1][1], + aPnt[2] + aDelta[0][2] - aDelta[1][2] }; + double aPnt22[3] = { aPnt21[0] + aNormal[0], + aPnt21[1] + aNormal[1], + aPnt21[2] + aNormal[2] }; + vtkPlane::IntersectWithLine(aPnt21,aPnt22,aNormal,anOrigin,aParam,aPnt2); + + vtkPlaneSource* aPlaneSource = aPlane->myPlaneSource; + + aPlaneSource->SetNormal( aNormal[0], aNormal[1], aNormal[2] ); + aPlaneSource->SetOrigin( aPnt0[0], aPnt0[1], aPnt0[2] ); + aPlaneSource->SetPoint1( aPnt1[0], aPnt1[1], aPnt1[2] ); + aPlaneSource->SetPoint2( aPnt2[0], aPnt2[1], aPnt2[2] ); + aPlaneSource->Update(); + } + + setBoundsForPreviewWidget(); + + myPreviewWidget->SetOrigin( anOrigin ); + myPreviewWidget->SetNormal( aNormal ); + + if(AutoApplyCheckBox->isChecked()) + ClickOnApply(); + + SMESH::RenderViewWindow( myViewWindow ); +} + +/*! + Set current bounds for preview widget +*/ +void SMESHGUI_ClippingDlg::setBoundsForPreviewWidget() +{ + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESH::TPlaneData aPlaneData = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlane = aPlaneData.Plane.GetPointer(); + SMESH::TActorList anActorList = aPlaneData.ActorList; + + double* anOrigin = aPlane->GetOrigin(); + + double aBounds[6]; + SMESH::ComputeBounds( anActorList, aBounds ); + + bool isBoundsChanged = false; + + if( myIsPreviewMoved ) { + // if widget has moved by hand the bounds can to minimize + if( anOrigin[0] > myBounds[0] && anOrigin[0] < aBounds[0] ) { + myBounds[0] = anOrigin[0]; isBoundsChanged = true; } + if( anOrigin[0] < myBounds[1] && anOrigin[0] > aBounds[1] ) { + myBounds[1] = anOrigin[0]; isBoundsChanged = true; } + if( anOrigin[1] > myBounds[2] && anOrigin[1] < aBounds[2] ) { + myBounds[2] = anOrigin[1]; isBoundsChanged = true; } + if( anOrigin[1] < myBounds[3] && anOrigin[1] > aBounds[3] ) { + myBounds[3] = anOrigin[1]; isBoundsChanged = true; } + if( anOrigin[2] > myBounds[4] && anOrigin[2] < aBounds[4] ) { + myBounds[4] = anOrigin[2]; isBoundsChanged = true; } + if( anOrigin[2] < myBounds[5] && anOrigin[2] > aBounds[5] ) { + myBounds[5] = anOrigin[2]; isBoundsChanged = true; } + } + else { + // if widget has moved by dialog data the bounds can to take necessary size + if( anOrigin[0] < aBounds[0] ) { + myBounds[0] = anOrigin[0]; isBoundsChanged = true; } + if( anOrigin[0] > aBounds[1] ) { + myBounds[1] = anOrigin[0]; isBoundsChanged = true; } + if( anOrigin[1] < aBounds[2] ) { + myBounds[2] = anOrigin[1]; isBoundsChanged = true; } + if( anOrigin[1] > aBounds[3] ) { + myBounds[3] = anOrigin[1]; isBoundsChanged = true; } + if( anOrigin[2] < aBounds[4] ) { + myBounds[4] = anOrigin[2]; isBoundsChanged = true; } + if( anOrigin[2] > aBounds[5] ) { + myBounds[5] = anOrigin[2]; isBoundsChanged = true; } + } + + if( isBoundsChanged ) + myPreviewWidget->PlaceWidget( myBounds[0],myBounds[1],myBounds[2], + myBounds[3],myBounds[4],myBounds[5] ); + else if( !myIsPreviewMoved ) + myPreviewWidget->PlaceWidget( aBounds[0],aBounds[1],aBounds[2], + aBounds[3],aBounds[4],aBounds[5] ); + +} + +/*! + Convert absolute coordinates of plane to relative mode +*/ +void SMESHGUI_ClippingDlg::absolutePlaneToRelative ( double theOrigin[3], double theDir[3] ) +{ + double aRot[2]; + + aRot[0] = getRotation1(); + aRot[1] = getRotation2(); + + double eps = 0.0001; + + int anOrientation = CBRelativeOrientation->currentIndex(); + double aDirection[3]; + double aRotation1, aRotation2; + switch( anOrientation ) { + case 0: + aDirection[0] = theDir[0] + eps; + aDirection[1] = theDir[1] + eps; + aDirection[2] = theDir[2] + eps; + aRotation1 = atan2( theDir[2], theDir[1] )*180.0/M_PI; + aRotation2 = atan2( theDir[2], theDir[0] )*180.0/M_PI; + break; + case 1: + aDirection[0] = theDir[1] + eps; + aDirection[1] = theDir[2] + eps; + aDirection[2] = theDir[0] + eps; + aRotation1 = atan2( theDir[0], theDir[2] )*180.0/M_PI; + aRotation2 = atan2( theDir[0], theDir[1] )*180.0/M_PI; + break; + case 2: + aDirection[0] = theDir[2] + eps; + aDirection[1] = theDir[0] + eps; + aDirection[2] = theDir[1] + eps; + aRotation1 = atan2( theDir[1], theDir[0] )*180.0/M_PI; + aRotation2 = atan2( theDir[1], theDir[2] )*180.0/M_PI; + break; + } + + if( aDirection[0] > 0 && aDirection[1] > 0 && aDirection[2] > 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] > 0 && aDirection[1] > 0 && aDirection[2] > 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 + 90.0; } + else if( aDirection[0] > 0 && aDirection[1] > 0 && aDirection[2] < 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 + 90.0; } + else if( aDirection[0] > 0 && aDirection[1] > 0 && aDirection[2] < 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] > 0 && aDirection[1] < 0 && aDirection[2] > 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 270.0; aRot[1] = aRotation2 + 90.0; } + else if( aDirection[0] > 0 && aDirection[1] < 0 && aDirection[2] > 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] > 0 && aDirection[1] < 0 && aDirection[2] < 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] > 0 && aDirection[1] < 0 && aDirection[2] < 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 270.0; aRot[1] = aRotation2 + 90.0; } + else if( aDirection[0] < 0 && aDirection[1] > 0 && aDirection[2] > 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] < 0 && aDirection[1] > 0 && aDirection[2] > 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 - 270.0; } + else if( aDirection[0] < 0 && aDirection[1] > 0 && aDirection[2] < 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 + 90.0; } + else if( aDirection[0] < 0 && aDirection[1] > 0 && aDirection[2] < 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 + 270.0; } + else if( aDirection[0] < 0 && aDirection[1] < 0 && aDirection[2] > 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 - 270.0; aRot[1] = aRotation2 - 270.0; } + else if( aDirection[0] < 0 && aDirection[1] < 0 && aDirection[2] > 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 - 90.0; aRot[1] = aRotation2 - 90.0; } + else if( aDirection[0] < 0 && aDirection[1] < 0 && aDirection[2] < 0 && aRot[0] <= 0 ) { + aRot[0] = aRotation1 + 90.0; aRot[1] = aRotation2 + 270.0; } + else if( aDirection[0] < 0 && aDirection[1] < 0 && aDirection[2] < 0 && aRot[0] > 0 ) { + aRot[0] = aRotation1 + 270.0; aRot[1] = aRotation2 + 90.0; } + + SliderRotation1HasMoved( round( aRot[0] ) ); + SliderRotation1->setValue( round( aRot[0] ) ); + SliderRotation2HasMoved( round( aRot[1] ) ); + SliderRotation2->setValue( round( aRot[1] ) ); + + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + const SMESH::TPlaneData& aPlaneData = myPlanes[ aCurPlaneIndex ]; + const SMESH::TActorList& anActorList = aPlaneData.ActorList; + + double aBounds[6]; + double aDist; + SMESH::ComputeBounds( anActorList, aBounds ); + SMESH::PositionToDistance( aBounds, theDir, theOrigin, aDist ); + aDist = 1.0 - aDist; + if( aDist>1.0 ) + aDist = 1.0; + else if( aDist < 0.0 ) + aDist = 0.0; + + SliderDistanceHasMoved( round( aDist*100 ) ); + SliderDistance->setValue( round( aDist*100 ) ); + return; +} + +/*! + SLOT: called on preview check box toggled +*/ +void SMESHGUI_ClippingDlg::OnPreviewToggle (bool theIsToggled) +{ + std::for_each( myPlanes.begin(), myPlanes.end(), TSetVisibility( theIsToggled ) ); + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESH::TPlaneData aPlane = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlaneData = aPlane.Plane.GetPointer(); + aPlaneData->myActor->SetVisibility( false ); + if( theIsToggled ) + myPreviewWidget->On(); + else + myPreviewWidget->Off(); + SMESH::RenderViewWindow( myViewWindow ); +} + +/*! + SLOT: called on Auto Apply check box toggled +*/ +void SMESHGUI_ClippingDlg::onAutoApply(bool toggled) +{ + if ( toggled ) ClickOnApply(); +} + +/*! + SLOT on ok button click: sets cutting plane and closes dialog +*/ +void SMESHGUI_ClippingDlg::ClickOnOk() +{ + ClickOnApply(); + accept(); +} + + +/*! + SLOT on Apply button click: sets cutting plane and update viewer +*/ +void SMESHGUI_ClippingDlg::ClickOnApply() +{ + if (myViewWindow) { + SUIT_OverrideCursor wc; + + QWidget *aCurrWid = this->focusWidget(); + aCurrWid->clearFocus(); + aCurrWid->setFocus(); + + SMESHGUI_ClippingPlaneInfoMap& aClippingPlaneInfoMap = mySMESHGUI->getClippingPlaneInfoMap(); + SMESHGUI_ClippingPlaneInfoList& aClippingPlaneInfoList = aClippingPlaneInfoMap[ myViewWindow->getViewManager() ]; + + // clean memory allocated for planes + SMESHGUI_ClippingPlaneInfoList::iterator anIter1 = aClippingPlaneInfoList.begin(); + for( ; anIter1 != aClippingPlaneInfoList.end(); anIter1++ ) + if( SMESH::OrientedPlane* aPlane = (*anIter1).Plane ) + aPlane->Delete(); + + aClippingPlaneInfoList.clear(); + + VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() ); + vtkActorCollection* anAllActors = aCopy.GetActors(); + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) + anActor->RemoveAllClippingPlanes(); + + SMESH::TPlaneDataVector::iterator anIter2 = myPlanes.begin(); + for( ; anIter2 != myPlanes.end(); anIter2++ ) { + SMESH::TPlaneData aPlaneData = *anIter2; + SMESH::TPlane aPlane = aPlaneData.Plane; + SMESH::TActorList anActorList = aPlaneData.ActorList; + + // the check is disabled to support planes with empty actor list + //if( anActorList.empty() ) + // continue; + + SMESH::OrientedPlane* anOrientedPlane = SMESH::OrientedPlane::New(myViewWindow); + anOrientedPlane->ShallowCopy(aPlane.GetPointer()); + SMESH::TActorList::iterator anIter3 = anActorList.begin(); + for( ; anIter3 != anActorList.end(); anIter3++ ) + if( vtkActor* aVTKActor = *anIter3 ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) { + if( anOrientedPlane->IsOpenGLClipping ) + anActor->AddOpenGLClippingPlane( anOrientedPlane->InvertPlane() ); + else + anActor->AddClippingPlane( anOrientedPlane ); + } + + SMESH::ClippingPlaneInfo aClippingPlaneInfo; + aClippingPlaneInfo.Plane = anOrientedPlane; + aClippingPlaneInfo.ActorList = anActorList; + + aClippingPlaneInfoList.push_back( aClippingPlaneInfo ); + } + + SMESH_Actor* anSMESHActor; + anAllActors->InitTraversal(); + while( vtkActor* aVTKActor = anAllActors->GetNextActor() ) + if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) ) { + anSMESHActor = anActor; + anActor->SetOpenGLClippingPlane(); + } + + SMESH::RenderViewWindow( myViewWindow ); + } +} + +/*! + SLOT on help button click: opens a help page +*/ +void SMESHGUI_ClippingDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); + } +} + +/*! + SLOT: Called when value of slider distance change +*/ +void SMESHGUI_ClippingDlg::SliderDistanceHasMoved( int value ) +{ + double new_value = value/100.; + TLValueDistance->setText( QString("%1").arg( new_value ) ); + SetCurrentPlaneParam(); +} + +/*! + SLOT: Called when value of slider rotation1 change +*/ +void SMESHGUI_ClippingDlg::SliderRotation1HasMoved( int value ) +{ + TLValueRotation1->setText( QString("%1\xB0").arg( value ) ); + SetCurrentPlaneParam(); +} + +/*! + SLOT: Called when value of slider rotation2 change +*/ +void SMESHGUI_ClippingDlg::SliderRotation2HasMoved( int value ) +{ + TLValueRotation2->setText( QString("%1\xB0").arg( value ) ); + SetCurrentPlaneParam(); +} + +void SMESHGUI_ClippingDlg::onSelectAbsoluteOrientation( int mode ) +{ + bool isUserMode = (mode==0); + + TextLabelX->setEnabled( isUserMode ); + TextLabelY->setEnabled( isUserMode ); + TextLabelZ->setEnabled( isUserMode ); + + SpinBox_X->setEnabled( isUserMode ); + SpinBox_Y->setEnabled( isUserMode ); + SpinBox_Z->setEnabled( isUserMode ); + + TextLabelDx->setEnabled( isUserMode ); + TextLabelDy->setEnabled( isUserMode ); + TextLabelDz->setEnabled( isUserMode ); + + SpinBox_Dx->setEnabled( isUserMode ); + SpinBox_Dy->setEnabled( isUserMode ); + SpinBox_Dz->setEnabled( isUserMode ); + + if ( isUserMode ) + return; + + double aDx = 0, aDy = 0, aDz = 0; + + if ( mode == 1 ) + { + aDz = 1; + TextLabelZ->setEnabled( true ); + SpinBox_Z->setEnabled( true ); + SpinBox_Z->setFocus(); + } + else if ( mode == 2 ) + { + aDx = 1; + TextLabelX->setEnabled( true ); + SpinBox_X->setEnabled( true ); + SpinBox_X->setFocus(); + } + else if ( mode == 3 ) + { + aDy = 1; + TextLabelY->setEnabled( true ); + SpinBox_Y->setEnabled( true ); + SpinBox_Y->setFocus(); + } + + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESH::TPlaneData aPlane = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlaneData = aPlane.Plane.GetPointer(); + + if ( aPlaneData->IsInvert == true ) { + aDx = -aDx; aDy = -aDy; aDz = -aDz; + } + + myIsSelectPlane = true; + SpinBox_Dx->setValue( aDx ); + SpinBox_Dy->setValue( aDy ); + SpinBox_Dz->setValue( aDz ); + myIsSelectPlane = false; + + SetCurrentPlaneParam(); +} + +/*! + SLOT: called on orientation of clipping plane in relative mode changed +*/ +void SMESHGUI_ClippingDlg::onSelectRelativeOrientation ( int theItem ) +{ + if ( myPlanes.empty() ) + return; + + if ( theItem == 0 ) { + TextLabelRotation1->setText( tr( "ROTATION_AROUND_X_Y2Z" ) ); + TextLabelRotation2->setText( tr( "ROTATION_AROUND_Y_X2Z" ) ); + } + else if ( theItem == 1 ) { + TextLabelRotation1->setText( tr( "ROTATION_AROUND_Y_Z2X" ) ); + TextLabelRotation2->setText( tr( "ROTATION_AROUND_Z_Y2X" ) ); + } + else if ( theItem == 2 ) { + TextLabelRotation1->setText( tr( "ROTATION_AROUND_Z_X2Y" ) ); + TextLabelRotation2->setText( tr( "ROTATION_AROUND_X_Z2Y" ) ); + } + + if( (QComboBox*)sender() == CBRelativeOrientation ) + SetCurrentPlaneParam(); +} + +/*! + SLOT on reset button click: sets default values +*/ +void SMESHGUI_ClippingDlg::onReset() +{ + myIsSelectPlane = true; + SpinBox_X->setValue(0); + SpinBox_Y->setValue(0); + SpinBox_Z->setValue(0); + myIsSelectPlane = false; + + SetCurrentPlaneParam(); +} + +/*! + SLOT on invert button click: inverts normal of cutting plane +*/ +void SMESHGUI_ClippingDlg::onInvert() +{ + double Dx = SpinBox_Dx->value(); + double Dy = SpinBox_Dy->value(); + double Dz = SpinBox_Dz->value(); + + myIsSelectPlane = true; + SpinBox_Dx->setValue( -Dx ); + SpinBox_Dy->setValue( -Dy ); + SpinBox_Dz->setValue( -Dz ); + myIsSelectPlane = false; + + if ( !myPlanes.empty() ) { + int aCurPlaneIndex = ComboBoxPlanes->currentIndex(); + SMESH::TPlaneData aPlane = myPlanes[aCurPlaneIndex]; + SMESH::OrientedPlane* aPlaneData = aPlane.Plane.GetPointer(); + aPlaneData->IsInvert = !aPlaneData->IsInvert; + } + SetCurrentPlaneParam(); +} + diff --git a/src/SMESHGUI/SMESHGUI_ClippingDlg.h b/src/SMESHGUI/SMESHGUI_ClippingDlg.h index d36c92cc1..b66c6f149 100644 --- a/src/SMESHGUI/SMESHGUI_ClippingDlg.h +++ b/src/SMESHGUI/SMESHGUI_ClippingDlg.h @@ -46,60 +46,74 @@ #include #include +class QGroupBox; class QLabel; class QPushButton; class QCheckBox; class QComboBox; class QListWidget; class QListWidgetItem; +class QStackedLayout; +class QSlider; +class QMenu; class SALOME_Actor; class SMESHGUI; class SMESH_Actor; -class SMESHGUI_SpinBox; +class QtxDoubleSpinBox; class vtkActor; class vtkDataSetMapper; class vtkPlaneSource; +class vtkCallbackCommand; +class vtkObject; +class vtkImplicitPlaneWidget; namespace SMESH { + enum Mode { Absolute, Relative }; enum Orientation { XY, YZ, ZX }; class OrientedPlane: public vtkPlane { - QPointer myViewWindow; vtkDataSetMapper* myMapper; - public: - static OrientedPlane *New(); - static OrientedPlane *New(SVTK_ViewWindow* theViewWindow); - vtkTypeMacro (OrientedPlane, vtkPlane); + public: + static OrientedPlane *New(); + static OrientedPlane *New(SVTK_ViewWindow* theViewWindow); + vtkTypeMacro (OrientedPlane, vtkPlane); - SMESH::Orientation myOrientation; - float myDistance; - double myAngle[2]; + QPointer myViewWindow; + SMESH::Orientation myRelativeOrientation; + float myDistance; + double myAngle[2]; + double X, Y, Z, Dx, Dy, Dz; + int myAbsoluteOrientation; + bool IsInvert; + bool IsOpenGLClipping; + Mode PlaneMode; - vtkPlaneSource* myPlaneSource; - SALOME_Actor *myActor; + vtkPlaneSource* myPlaneSource; + SALOME_Actor *myActor; - void SetOrientation (SMESH::Orientation theOrientation) { myOrientation = theOrientation; } - SMESH::Orientation GetOrientation() { return myOrientation; } + void SetOrientation (SMESH::Orientation theOrientation) { myRelativeOrientation = theOrientation; } + SMESH::Orientation GetOrientation() { return myRelativeOrientation; } - void SetDistance (float theDistance) { myDistance = theDistance; } - float GetDistance() { return myDistance; } + void SetDistance (float theDistance) { myDistance = theDistance; } + float GetDistance() { return myDistance; } - void ShallowCopy (OrientedPlane* theOrientedPlane); + void ShallowCopy (OrientedPlane* theOrientedPlane); + OrientedPlane* InvertPlane (); - protected: - OrientedPlane(SVTK_ViewWindow* theViewWindow); - OrientedPlane(); + protected: + OrientedPlane(SVTK_ViewWindow* theViewWindow); + OrientedPlane(); - void Init(); + void Init(); - ~OrientedPlane(); - private: - // Not implemented. - OrientedPlane (const OrientedPlane&); - void operator= (const OrientedPlane&); + ~OrientedPlane(); + private: + // Not implemented. + OrientedPlane (const OrientedPlane&); + void operator= (const OrientedPlane&); }; typedef vtkSmartPointer TPlane; @@ -132,82 +146,133 @@ class SMESHGUI_EXPORT SMESHGUI_ClippingDlg : public QDialog public: SMESHGUI_ClippingDlg( SMESHGUI*, SVTK_ViewWindow* ); ~SMESHGUI_ClippingDlg(); - - double getDistance() const; - void setDistance( const double ); - double getRotation1() const; - double getRotation2() const; - void setRotation( const double, const double ); - - // used in SMESHGUI::restoreVisualParameters() to avoid - // declaration of OrientedPlane outside of SMESHGUI_ClippingDlg.cxx - static SMESH::OrientedPlane* AddPlane (SMESH::TActorList theActorList, - SVTK_ViewWindow* theViewWindow, - SMESH::Orientation theOrientation, - double theDistance, - const double theAngle[2]); - -protected: - void keyPressEvent( QKeyEvent* ); + static bool AddPlane ( SMESH::TActorList theActorList, + SMESH::OrientedPlane* thePlane ); +protected: + void keyPressEvent( QKeyEvent* ); + static void ProcessEvents( vtkObject* theObject, + unsigned long theEvent, + void* theClientData, + void* theCallData); private: - void initializePlaneData(); - - void synchronize(); - - void updateActorList(); - SMESH::TActorList getCurrentActors(); + double getDistance() const; + void setDistance( const double ); + double getRotation1() const; + double getRotation2() const; + void setRotation( const double, const double ); + + void setOrigin(double theVal[3]); + void setDirection(double theVal[3]); + + void initializePlaneData(); + void initParam(); + void synchronize(); + void updateActorList(); + void updateActorItem( QListWidgetItem* theItem, + bool theUpdateSelectAll, + bool theUpdateClippingPlaneMap ); + SMESH::TActorList getCurrentActors(); + + void dumpPlaneData() const; + void absolutePlaneToRelative ( double theOrigin[3], double theDir[3] ); + void setBoundsForPreviewWidget(); + vtkImplicitPlaneWidget* createPreviewWidget(); - void updateActorItem( QListWidgetItem* theItem, - bool theUpdateSelectAll, - bool theUpdateClippingPlaneMap ); - - void dumpPlaneData() const; private: SMESHGUI* mySMESHGUI; SVTK_ViewWindow* myViewWindow; SMESH::TPlaneDataVector myPlanes; + + vtkCallbackCommand* myCallback; + vtkImplicitPlaneWidget* myPreviewWidget; + double myBounds[6]; QComboBox* ComboBoxPlanes; + QCheckBox* isOpenGLClipping; QPushButton* buttonNew; + QMenu* MenuMode; QPushButton* buttonDelete; + QListWidget* ActorList; QCheckBox* SelectAllCheckBox; + + QStackedLayout* ModeStackedLayout; + + QGroupBox* GroupAbsolutePoint; + QLabel* TextLabelX; + QLabel* TextLabelY; + QLabel* TextLabelZ; + QtxDoubleSpinBox* SpinBox_X; + QtxDoubleSpinBox* SpinBox_Y; + QtxDoubleSpinBox* SpinBox_Z; + QPushButton* resetButton; + + QGroupBox* GroupAbsoluteDirection; + QLabel* TextLabelDx; + QLabel* TextLabelDy; + QLabel* TextLabelDz; + QtxDoubleSpinBox* SpinBox_Dx; + QtxDoubleSpinBox* SpinBox_Dy; + QtxDoubleSpinBox* SpinBox_Dz; + QPushButton* invertButton; + QComboBox* CBAbsoluteOrientation; + + QGroupBox* GroupRelative; QLabel* TextLabelOrientation; - QComboBox* ComboBoxOrientation; QLabel* TextLabelDistance; - SMESHGUI_SpinBox* SpinBoxDistance; - QLabel* TextLabelRot1; - SMESHGUI_SpinBox* SpinBoxRot1; - QLabel* TextLabelRot2; - SMESHGUI_SpinBox* SpinBoxRot2; + QLabel* TextLabelRotation1; + QLabel* TextLabelRotation2; + QLabel* TLValueDistance; + QLabel* TLValueRotation1; + QLabel* TLValueRotation2; + QSlider* SliderDistance; + QSlider* SliderRotation1; + QSlider* SliderRotation2; + QComboBox* CBRelativeOrientation; + QCheckBox* PreviewCheckBox; QCheckBox* AutoApplyCheckBox; + QPushButton* buttonOk; QPushButton* buttonCancel; QPushButton* buttonApply; QPushButton* buttonHelp; bool myIsSelectPlane; + bool myIsPreviewMoved; QString myHelpFileName; + SMESH::Mode CurrentMode; + protected slots: - virtual void reject(); + virtual void reject(); public slots: - void onSelectPlane( int ); - void ClickOnNew(); - void ClickOnDelete(); - void onActorItemChanged( QListWidgetItem* ); - void onSelectAll( int ); - void onSelectOrientation( int ); - void SetCurrentPlaneParam(); - void OnPreviewToggle( bool ); - void onAutoApply(bool); - void ClickOnOk(); - void ClickOnApply(); - void ClickOnHelp(); + void onModeAbsolute(); + void onModeRelative(); + void ClickOnNew(); + void ClickOnDelete(); + void onSelectPlane( int ); + void onSelectAll( int ); + void onActorItemChanged( QListWidgetItem* ); + void SetCurrentPlaneParam(); + + void onIsOpenGLClipping(bool); + void OnPreviewToggle( bool ); + void onAutoApply(bool); + void ClickOnOk(); + void ClickOnApply(); + void ClickOnHelp(); + + void SliderDistanceHasMoved(int); + void SliderRotation1HasMoved(int); + void SliderRotation2HasMoved(int); + void onSelectAbsoluteOrientation( int ); + void onSelectRelativeOrientation( int ); + void onReset(); + void onInvert(); }; #endif // SMESHGUI_CLIPPINGDLG_H diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx index efc82df3d..4a72abca5 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx @@ -1396,6 +1396,20 @@ namespace SMESH double theDist, double theBounds[6], double theOrigin[3] ) + { + bool anIsOk = false; + anIsOk = ComputeBounds( theActorList, theBounds ); + + + if( !anIsOk ) + return false; + + DistanceToPosition( theBounds, theNormal, theDist, theOrigin ); + return true; + } + + bool ComputeBounds( std::list theActorList, + double theBounds[6]) { bool anIsOk = false; theBounds[0] = theBounds[2] = theBounds[4] = VTK_DOUBLE_MAX; @@ -1416,12 +1430,7 @@ namespace SMESH } } } - - if( !anIsOk ) - return false; - - DistanceToPosition( theBounds, theNormal, theDist, theOrigin ); - return true; + return anIsOk; } #ifndef DISABLE_PLOT2DVIEWER diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.h b/src/SMESHGUI/SMESHGUI_VTKUtils.h index 0250fb30a..c45edf22f 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.h +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.h @@ -206,6 +206,14 @@ SMESHGUI_EXPORT double theDist, double theBounds[6], double theOrigin[3] ); + + bool ComputeBounds( std::list theActorList, + double theBounds[6]); + + void PositionToDistance( double theBounds[6], + double theDirection[3], + double thePos[3], + double& theDist ); SMESHGUI_EXPORT void RemoveVisualObjectWithActors( const char* theEntry, bool fromAllViews = false ); }; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 3920df48b..711dc55b9 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -6548,6 +6548,10 @@ It is impossible to read point coordinates from file CLIP_PLANES Clipping planes + + IS_OPENGL_CLIPPING + OpenGL clipping + MESHES_SUBMESHES_GROUPS Meshes, sub-meshes and groups @@ -6608,6 +6612,30 @@ It is impossible to read point coordinates from file NO_PLANES No planes + + ABSOLUTE + Absolute + + + RELATIVE + Relative + + + BASE_POINT + Base point + + + DIRECTION + Direction + + + RESET + Reset + + + INVERT + Invert + SMESHGUI_DuplicateNodesDlg diff --git a/src/SMESHGUI/SMESH_msg_fr.ts b/src/SMESHGUI/SMESH_msg_fr.ts index 6f409879b..63e309652 100755 --- a/src/SMESHGUI/SMESH_msg_fr.ts +++ b/src/SMESHGUI/SMESH_msg_fr.ts @@ -6486,6 +6486,10 @@ Il y a trop peu de points dans le fichier CLIP_PLANES Plans de découpe + + IS_OPENGL_CLIPPING + OpenGL découpage + MESHES_SUBMESHES_GROUPS Maillages, sous-maillages et groupes @@ -6546,6 +6550,30 @@ Il y a trop peu de points dans le fichier NO_PLANES Pas de plans + + ABSOLUTE + Absolute + + + RELATIVE + Relative + + + RESET + Réinitialiser + + + INVERT + Inverser + + + BASE_POINT + Le point fondamental + + + DIRECTION + Direction + SMESHGUI_DuplicateNodesDlg -- 2.30.2