From 2fe01ba98ef5bd3b8dfed9bc26c8147410b65dd9 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Sat, 5 Apr 2008 16:13:46 +0000 Subject: [PATCH] Now the render area is sizeble. Improved icons. Improved interface --- src/fgt/edit_texture/edittexture.cpp | 15 ++-- src/fgt/edit_texture/images/sel_move.png | Bin 219 -> 229 bytes src/fgt/edit_texture/images/selarea.png | Bin 2137 -> 2136 bytes src/fgt/edit_texture/images/selcon.png | Bin 2879 -> 2815 bytes src/fgt/edit_texture/images/selpan.png | Bin 2670 -> 1946 bytes src/fgt/edit_texture/meshlab.qrc | 1 + src/fgt/edit_texture/renderarea.cpp | 80 +++++++++++-------- src/fgt/edit_texture/renderarea.h | 41 ++++------ src/fgt/edit_texture/textureeditor.cpp | 27 +++---- src/fgt/edit_texture/textureeditor.h | 9 +-- src/fgt/edit_texture/textureeditor.ui | 97 +++++++---------------- 11 files changed, 115 insertions(+), 155 deletions(-) diff --git a/src/fgt/edit_texture/edittexture.cpp b/src/fgt/edit_texture/edittexture.cpp index 02e3cd66c..d48ae0f32 100644 --- a/src/fgt/edit_texture/edittexture.cpp +++ b/src/fgt/edit_texture/edittexture.cpp @@ -51,7 +51,7 @@ const PluginInfo &EditTexturePlugin::Info() { static PluginInfo ai; ai.Date=tr(__DATE__); - ai.Version = tr("0.7.3"); + ai.Version = tr("0.8"); ai.Author = ("Riccardo Dini"); return ai; } @@ -116,7 +116,6 @@ void EditTexturePlugin::mouseMoveEvent (QAction *,QMouseEvent * event, MeshModel glFlush(); } } - } void EditTexturePlugin::mouseReleaseEvent(QAction *,QMouseEvent * event, MeshModel &m, GLArea * gla) @@ -176,9 +175,7 @@ void EditTexturePlugin::StartEdit(QAction * /*mode*/, MeshModel &m, GLArea *gla CMeshO::FaceIterator ff; for(ff = m.cm.face.begin(); ff != m.cm.face.end(); ++ff) if(!(*ff).IsD() && (*ff).IsS()) FaceSel.push_back(&*ff); - // Reset the flag - //m.cm.face.EnableFFAdjacency(); - //tri::UpdateTopology::FaceFace(m.cm); + CMeshO::FaceIterator fi; for(fi = m.cm.face.begin(); fi != m.cm.face.end(); ++fi) (*fi).ClearS(); @@ -227,7 +224,7 @@ void EditTexturePlugin::EndEdit(QAction * , MeshModel &m , GLArea * ) void EditTexturePlugin::DrawXORRect(GLArea *gla) { -/* Draw the rectangle of the selection area */ + // Draw the rectangle of the selection area glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); @@ -252,7 +249,7 @@ void EditTexturePlugin::DrawXORRect(GLArea *gla) glDisable(GL_LOGIC_OP); glPopAttrib(); - glPopMatrix(); // restore modelview + glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); @@ -260,12 +257,10 @@ void EditTexturePlugin::DrawXORRect(GLArea *gla) void EditTexturePlugin::InitTexture(MeshModel &m) { - // Get the textures folder + // Get the textures name and add the tab QString s = QString(m.fileName.c_str()); - // Add the tab for(unsigned i = 0; i < m.cm.textures.size(); i++) widget->AddRenderArea(m.cm.textures[i].c_str(), &m, i); - vcg::Trackball tb; } Q_EXPORT_PLUGIN(EditTexturePlugin) diff --git a/src/fgt/edit_texture/images/sel_move.png b/src/fgt/edit_texture/images/sel_move.png index be27a38599a417980f817c9268914dfd058773c2..bf47051a9c7ce3cf3a1404b77ee43e454d027eb1 100644 GIT binary patch delta 115 zcmV-(0F3|J0p$UZd2ClnL_t(|+T@c#3IHGo1jqk>I`B}W;?^uz3)n=Y>L~c^gjEDVFegz&#27{TKn@dSa`Sa(`t5>g{KYyN(kns8Q=kxRPXV0FQo0~g0IJCC5 zmXwq%FE39`O-)WtuCK3mcXv-rOcWIregFPFJv}`(HWmtn=H%o!IyxR69wL#*hK2?W z4GkY3A1^Pj#Kgqy?QIhilbD#8;o)I5H8m?MtI^R>ZEbBOB_(!tc1A|VfPer}Qqt+^ z>6Mk0rlzLq>gt}Jo^Rj2{r>&?%azU$e5Z?CtGcU0wbC{fmo>-QC?^zI<6; zUY?hi7at!V5fQ<}#3UghAtxsn9v;rd#>U0P_2I*Z)zwuH2t-0c5)~CCARzGL$B&kl z7GGaqDJiMK!osAaBr!3u+qZ99T3R+XHuCWB{QC6^3wBqW5Dl~r6^oP~u2g+eJPC`d|5GB7Yi zMn-aQa4<77*Vfi{bae3Y@@i>mT|4~h|D&GUS9VR-eT?-@{#E`17m%MGn|hsj0c|xE zQ@^SF@gu~2-MbXKos!Cx%9QuCC^ zvN-}1Wb+3+M=6ikxH4OB0WK{TSQ2oaAm`;H7heYeuLQ!9rz1X}o|@YP=PFB%7W*CY z=svFL!RSa2VE(jpoi!UKFhsTc6`ICN)gzz_L3f*M*?5^3A?NaJt6~aHP>Bf19d7I8 zday?26Iv3Y+KOc|4RIn@$9?ZG(5^_@o())y$?JKsv%Ku+NOKm#r2{$35JHQ6luqB& z!}3^Oo#)XpP2DT(zu?Ld&LN@#3otcT%=Mk#_3 z4E2U4Cs&N8mVq#Fb28h}i@R$Sm*dn9@IPGdghw%B6u3_My_jdRm8Ym`cYDiG5TI*y zwb5rY#28u;LlGg|40-Ur3yzbZQ^L8?hY9&CSe*r=t|LFtsp5DzRVF7@D}^%d#EkZ* zDa{ccVd@nZ5kgUdz#5D)0iDfem0nS8(ln@9dzIP-+S+U#eC(Ph&CxfLA}ga`OO{Ox zTaI?8zX$>zOGve-f^` zfN$w7OCmfA3EAH(YQSU3GNKT4MYQ>R92)q$9HLzEwEPI z#YVK3uN`Qq<3rQj<3R=w^#+Dgn*tO>{54o|wzVFz0M<#&hr#5i(v5m{>= zIk%fiWOjN9P{$344ZO!OjVd-`!Rk_d3|{LJ&o4rWbPy5r-EgZNMZtx9H(ijAvNYF0 z>3ROvtTB)06540JLT*P#a^`93c~r+2KeX2kVq)i)db?pt7)CwN_nj2F8Ywn=Gr~lU zAf`af7Y-{1Sac7a8P`Yg+u}5_>ad`cZ+u*g{8A(50fju?;LmbT2hZv<{8-Il-AXG= zmb$^-Die#RW2&n6?nmY`8&T+d#24=K{yjR+!>i*?xw6M@FC6+~IxFy3XFV?|X=(LR zzFg8V9`8jL`~nN~jSgtN; mh>AEcu=j5JbT^v>1bFb}r=9T!Fx7Qe0<_ij)yhFMe6^77!|;N#=t z{{H^#?Ci$I#`*dA`uh6x^z`uX@b~xk=H}+=>gw_F@!j3s&CSj3?(XO3=k4w7>+9>$ z(b4ns^WNUx)YR1B;o-~6%Rxaw#l^+a($aBpaeRDyt*xz(kAIKX*VoR@&Tw#WZflq1q@=yQy|%WtV`F1kSy{lqz@??7m6ersb#+x$ zRgsaAxVX6J=;+zm*;-m!;^N{~R#vR6tlHYz$jHd3sHl2+dUSMjjEsz-p`o|8x7F3v zzrVkTh={tnx_@M3WJX3tl9G~BQ&WqJi^<8!-{0RvL_}R(T}eqvKR-X2nVBCSA8&7O z7#JAS)6)Y317&4p+uPgN*x0kPv%I{#!NI|8ZEd-^xlK(?w6wH+eSMUal&Pty$H&K* zn3$rXqOPv4fPjEtU|={nIM2_|XlQ77cz8=oOQxo#Qh!oXYinyvOiXuocTiAJ5)u+; zXJ^C1!#zDc6%`eimzSNLozT$G%F4>t*4E_Y8YFH8L_XCMG6dUthkyzKV*99UUDP z7Z-MRc04>h5D*Xq1O$eLhE7gSTwGi}K0chBoPTL)X*oGLlarGX5fOxhgeNB_Ha0d5 z4GknDBnb%#etv#2F)f&UU9Jay?35g+3Q z4u5O*9&`51OVQ)vKywG_{X^%(h3O802Li*vGRw28_^3<)KQQTFwd47vGHrLU$P|cl zu-f?I#&MuGSc^+o=MEx_|Gzz+fqpmzj}wtO8vM`RMSkq#E_ z8Z~BfE^A^X9lR1e#;B{^86%T}@xh3bd9+dIS2_)h(9G5+J48}u=^!*{#E1~!qGnB2 zd|K_@S_QLXN5Dd^T(6#4;NJ5n`pF-y3Efsb&X78o@Dj|CD=RDN_tx1XuO3aGK7XUi zA&_AlwlI*z3?7NKpYHm|-g^F4nk%@_z~i!o#iV9O*xH9XBkPvuCw;JON!8|TDPRj@ zf{FE~uXnb$w5`nj(pi7$pF$<>H?ok!1>Py zB&juFJe_Sr&)VP5B=?ryTYoMg#D8pHob91f5$XlO6N@YY0@wEcw)Do7ZEbE>6GixKXP`EIV}ItS_A5PC zF0{NA6(o=&j#Lr<;1jQ2KGQcf967u?EhF;kuWMVP7EjsVs8(?iAgI`O2-SqxKfL$M zjrSL?Y+KxrJFo7Jhm;G2JW|v1IMJxU{iYp$YSqn>r2K~D-q73AeoVK@0OG3h(jh$7 zr^oz7&W)XVaPFj}q_Ama>wmW%=+R{3LWC*%PQjBJ0fXvcSQoPMhMa|SH zv6NPVIDEnMt_=wugPgeu0vTmH`$c_bM{!M4cV)=HH)j=64ibyh`3(h4luE)JnIC6K zIax5LBB;_zlGcrrGSnhWD8v=Ve{xT@khF6)4C5loSTxhtZ6;MboPVH#{%#bgfUjH; z^Is2UE*An~zCmC%TXjA!a^(h3<}ZCDPl)8C=jrXK8x?e|U^p_sq=c4G;X_Rp@CBOB z!zcpy=4@`~?36+g#sniSz%Vg*rVZ2gxell3eC0C4+>hOEV=5OK@rWx`80US~toN47 z6nA1($KYlqkHZl8<$p~~m?w6n#+f)sqBTE?K37D^B&=aBkF+d`RvUcf(pBxOu5jq+ zEj~&SP+2!c&du{$9LTI;f2OX9(PC^PBMv6Y*?QeGWO1_p)zE>EI1^wCBVgJR5*z^e4fww;XKbd&pFRYzF~PyR9IRV002>h=~bJ3 z{_9^CeFQ7ywk^bq}O0>}#nIxP6FifOp6v_lI5p%rn5lOCI6pj`Xte za`y}m>hapI0GYgDeiIIYOCZPu!8rzl0fPHBO{G%1ySsULd6$=$XJ%&X?Ckpb`nX)K zr>7?fQa}I*3=FKStP~LuHZg&pJ*z4qAqIl;etv#*I^E37EGsL^gog)(LV@6#loWJq zY;tfWYxP#hc_rlzJA z7Z(`-z-F_#+`%J9B+JT5K#=9;<_3aeT<+}o^XlQ@;evt!X=!OjMn)486HF#^a&of1 zzTU#Z0t89%|HAL=*;Cfm)&>R!OG`^E7K=zEwzs#RJ9p06+1bEAdu3&%xVRXNMz620 zH#Ide7=3trbxcf*9Rvb`8@ahrG#aj_rzbx@e|2^B<;$0wo8xHoi{0H_JOCsoC*Qnj z5*6k9?OXHC4s~E)Kv7W+i^ZCo!$5G-(()3A!>O&Ut*NQ;@VK?SO#JdCYi(`#&6_tJ z9UT!7p1*(po|_{P2z|4&voM%$eSIm|Qa%F!gM7T4<43~6_S>Wm4`bTfOW(aq{q!j_ zEiHIxXec^5h)!>AXsFH3j>TXwsi{wjiZUq_?8wN-*49>ke-#dg>+P*u3$To128Twr@5z z7Be$_U{?i+MBLn*T3=_7$-P`IoyGc3e}Db%E)9=wC6k9&SGz(&e5q8jqlBoprO7=Z zfts36si_Hyyu6EwGPASY)6*STY#o>T3*^#~NV~v5FFJj8fB(V%B3j0yU|;+Wv9YxM zU*`WR0>`N=C;;%I5m#Y1A5RpHcsa^kKLSwurCVf5gOr6N6ck?ZsWF+i&S-R*1*zR? zaD3Dj%39jLB_{J+OElHeUo`=uL5u9&SY`GV278N{9_{JZdu4_wf70D(tYKQQ+9%;F zrGw8#mLlV8v3Ig9{E{__c&-(ijL1mE5)^;d{2;i97MKsPQ+QKNw3Y_xc0?l&HA89m zxMJIR*Xj??WhHqPlLny=ym0UYlTSt3-nV_X4?k%}9;?<(Y%l&;Ffxd`^K`lMRhb?U znKpi-^)IOcRqt_Zxx04VfW41!2?A!9c1sD0j{5$cZafiXPh^DL`~KQ&;FtWplYu_P zxT0dw%saEfO}37AoI2St7NQHkIQG|*VeYDS!#>JS(FcZbERVS3c4mREow9qN`Wb#* z0yPUWrrvp&cwtM_y>+KpvDPxf;b33&gMK=B`BxGW%!5kKyYi1}*y&5({b+jCrjVMwWI+{CXkD?)w498J@ z8+o*qzf=Ao+NB1fc0cF+^TV525tTH_jII`%=u+aSsbO!HN`~Pl8<}GQ?%nx5cGvq{ zb{2(1XtD)a_(rwx^shSW8r#)>Wx7zcg+wl*r7cR!n29&nB$R{Z%b%Any{dT$OS5}> zZ=s}F{fk!KNn3p4=Nsg*@xwfS7L}|GG$g>;I|1^a17v9pKHCoy6yT?aJk2tuRPyiG z>Pr=PEQP&9={dA&@&MGXR`&4|xkxRa_4CpgwOiQ%ox%ym_L?70V>v4yP8jToWv1xf z4_$&@3_UjIjN2Y8PgXSgshpq15Db1Tdb)m_ZzdC`zQY;(Gun8(t}+QCj}B!|eK_If z!t0PcXnX4O7`ObwS(NFV>BtDu7NTy7H+e$b;EjIbIhU1=OX|02^cfgYj@MKAcu+m^ z2Fy>^S-OMR;@2bgzO>xswe|2@sq24hcwd>zD3X%j$i`6511-od+ItQMW1(Y0v zbjA9**7_512$D48mGoX>_Jhakt+>6u@siD=jA((yWALgAb3E^iiqg_+6*z(ymTk3eR(RvX+#VELQ*Z9 zr@Ft(F?L!vw@xTm#MQeRJs!iOZ!42Cey?V4$I z%ACgDTaY3?-7J)!cudF+cuK|7jev*Q&*p*(+@8@^@zyOrVwj_;8GbVK3ezqt1^tjYJrusZk?yGU5tE zBE(hE`LMWK==4@O4>C&|NG|eCqBGpFh)b0!!JUQeb-r%P>In{ z@K|$1xLI5v%=jnjhpJrS>~(}|#q~>Q>YqgNSHWA!!k5X2$lsy`_n$YhD6EZ!OOcmW zpgX( zgE_ys0_o8;Tkh=Vi|HnecC04t?))q%SIl*j!kl77Zub39G4h`n5g==O6x-|jcU!*D z&(~(M@$9M6w}twpO2#_vsevj_u#uSYS(e)vzKvgyL+eUi;!Xz*;by$m)2-NKkncDU YL%3RbMQ6Hp|7imVxaHN)#%^){05ldklmGw# delta 2819 zcmV+e3;gu|6~7jcSbqZmP)t-s|Nr9SgwwMyQPGLZKb89m6etC_0FH4f~l#g|NrQ*v9V-iWdHy7 z|Nrj({`Fc~OuoLeZEbCl0=sf~<`bN~O; zIt2u|xw(9NeEb&($do8cqsY*x1+l7!=#v z)lpGVN=i!1%*<3&M*RHF|Nq>bot-i=GRVlVmX?9OzN$t60kX1{+S=OI*48R2DR6LQ z|Nq$01Ox8w+&VfjO-)TqOhMGtw!px^U0q%9@YtfFo`1Hsw!pxnDk>w-&(8}B3QkTx zT3T9F0s^$Oob2r6|28g*i+ah)$-BFpy}iA|!^2WiO~=Q_A|f88rIR{3I{Fb06ciJ_ zzP{rC0E`9&K0ZF)-ou21g!=l`_V(hBkB{BmzM!CsMMXOH_VSF3jKRUd^Yh%Tt(;$9 zP*NHdZGUZDK|w(S0|T?Ov;F`~Uy``1tt!{r&az_5c6<{QUgy@9+Nr0RR8||NrIo_V)k(=lc5k z`T6qxVV(Eyt?b_>-YE2 z@bJa*^632h_51txbaZR6v8&|d#-ya8=H}#oe{tR2-DwF2|HZ7s!?gVT+0@k1`}^D1 z*UI_%_|wzVVq#WjXI1s}-M6>1W==-_{`~498(RwhEvvzy4_i*vTMZx!vlXK1|-+%Mme$Vs1Ac{_)<$b6H0yqJzLDFV<7#<|C zG&xCrE;IQMG~hA4R&E}bK{MNyjf2)SbS;h#uV7e*mg_rEs-}Lcq{>|T0J%IIh>~aS zxN-@Tw!F}RG;9q7hY8ZkplhPWc>#X9rmRzE_f(#^L1$RWCBqhv zUvd>sD(}!4bxK}9MK05Awk#DU-G5=DlJJf~gR!Ghl)&S}6^{+rmI@DHnsHG}W{*x@ zrVuFGxfKU7*W!N9fz8Zwl0rPQMXt`PlZqvrhGIYK11%F48%a$;53?di-y}zND@EeA z@u(WQ{lPI?-D4OwOfwH)n!R|7x~xv1Y~^uAYtqK<%C^bWiZ9dLs^|Pr!A=}E}6-2-Ilniw?8B#C@3VP*K`kT)^JkV+xAw~uv{)IcU0FR$dLq` zN=>^XP?M=2fuW(o(CDC$-a9j_0ksitO*iJFBnnc_0kxpM@3i zJcZ6^Xpzg+W%~As5u2B^)5BZ14HNc1|9zI^J7SK-LI^3ifFB)Vntz3*c?N?zPpwwe zh0B{%n1>)xz3_yp)Ze}H%g3h4#LaIb()fP2_RzKu&O3y&Q3FL&b7hV|p{NtA$q{EO z>2A_%8(}JSYlG7GGcW(4q;Dz(IY#j z!K{SW>=)J~{ml>8y?@*FY*DZt87)7%3&=8jO5ysijQCk(dOBwS3v1xEiHY2k1sYC}KxgdKB_WayuJv5%-&y)+e>6*a35=lxxRQ-*E zS2~S>ESJSQ#F$VhR&3vya~zh8r;4mR@NHyt)cOsN!*W|w`~K4PVYEJ4zk znidh=PEt8bFv8lWvmp$Qak7y(cLu{94(c=Pu2?wfpy~w(8)-HVk<;^;Ff+n9Jrz^s z8Vi%d>My_Y*F*iWOAa9WnGwF^%Z?6;7CO%8;c6!e8-I8S;?6;gu(?>N;gxg-Rj%Dh zP=EZTm@~nY?ILHo;^^F zd|&w&co}8h$>uvjL1aF>Sl|%OfxWf?EICI#F-DaOtALYRHm-Z~$JaOLwOLu(+RNRq z+}Z_ztbZi(GXvaE-~jVBn-O}wE`f<8PP*wL!)t&1_KR=IB3EAR>pKmnS8VB%m%IJ7 zSs$+g^Y%wGqc{auP2~(z6@GUMlK6F>Pf;^|+`ab6i?R63CrSfPtS#SUR18+(U;?|rC-}IiCP-!HhlIpj`AM6 z)j8wxePCj6gn8xW_~y-<-aGKGEgzyGs=b<}g&#hH!bO>y-7yx~^erAn+La&OynOli zx4u~S;$I_H*CIJ)t(Q4x!@Vy|9p#v+8-G&$_tjtQ+2aHm&!a~8d}?ambuw7&yg>|F z?S2@>7JLYcuKLft?BcN3LJkdB2h619r@d%rNBbS0N^|esfBC-v0{~Om V!r!w>Sh)ZI002ovPDHLkV1hHM1MvU= diff --git a/src/fgt/edit_texture/images/selpan.png b/src/fgt/edit_texture/images/selpan.png index 72dff67ca8f36bec3498ee8d288f71911119464d..663d5bf37016d842854c32da3caf3b27c29c632d 100644 GIT binary patch literal 1946 zcmdT^`8ykk7LBT1ecCZv+DF>gXB*luW;Ar#GSow<5;Jz935MD;meNPGXf;~3RD)Qn z5;C!`DMr+8l9HrB5(!bMT?G*&8S`hn`+eu0d(IE%r+e=+R~P$J%G$~R0N|9ve{J24 z`T9Rll>NuKWO(bCPKH=JTLSVNNU4;muCB&rvsF}-CnqPt;A;?wI~)#2qaVRw z5H~lc@^Z}V?5tEe>+9={L?R^;Nli_rNHk_@YS7e_Yh`7IMrRNRe?&xh4h{}BH#bK_ zgzxP!oSYnujg1Nm3z^JjZEdaX?d|sVHZwC20s$wJ$vhq}G&Fc)W8KfsFEB80dHIV} z`jN}!0)fEz_;|6Hj6|j!9Wirrb8BjH=I47vqG>NLPl<%Fw6yg0ZGKElw7tFk{{H^z zDmgPV^XH#!Y-}uhdU_HQ!_a87Sj;AoNN9B0?(WX)ES1lvZ*8$85-N>GTU=Zei^V9^ zb26DUH#f&(ja62b9UdMgCqEn>9>QX4>+0(0bi(LpHx`>cF)?0UUDe&)y}wW0*_oqK zr&d;0c)TeZZFp^Mjlt;Wa)|{6sL9E(=;&|+A{K|MNJ)vw&VELx)1N*?PESvdjNn8f z(ZE1YX=zDAL+#kuXm>Xj3iTCfYXtzP=ulIn>pKK_X*PQvA4Fl0Y!CurQOA^&6i* z$>(=(ZEfxDerRlbyR|=xb3i4Bw2L>;oy64-`3`zo3BunK5|)=3 z5%;ajzfmpfG_0?+*@JLZ@+p7t6w z0E>vU)K`_cC#UI=p?GVM^qH%w$CHe)#H+uJ6Cx_AFb$wEScc%Ob4VH!nfCT0Gpp_^DEx<^2H|j028k2l?wi zi6a@z)_&!nn24>el;q1TXblh0EZTk<@ks;WahKum7 zWKC36U$f4m_UIqg?$flcoiOrpsJ`S8LSUB5aJ-ku{{K55e{Of%#Dx?0SU zto(s{nU}2ji9a5%s`z^q?aMVCVDG?z`^YFE>4 zkbEU*Ugcb0M(w`}PP3FC11@ z)e*b?G)wTHtv>lxt`;!m`SUP{++&!9(4&uT%PuCSAhG#CBRn{;wq@CQ#lN15h2Hr~ z^a{jcnUm(DOv`)N zsw2u`qqNkw<&D*(OAE$?XrmzsPdwn)2S~s_UE9Y8!IB_>>lGV+3C}zs-n`%+5TNV7 z?Cr&_;4rEyGt**hTrSF|N~vJqmmHt94R5&awHL19T+<5B>2zl5A#{F&ong7jVGw`S z!4~zZqb%hSrJ7e{_FW!PX0Q)eHd_OvVrP2%z;~_G<=WcM_~`HKNItmam&A8D`r&;$ z4TjiW2wBl0X5em;aQDPdgD>ukWMzlxu5OLIyUY?cJr4eJNVT;}n-RJ=s5oPLzDNWi zbg4y7nh5lmdeqJ&M3J+pkD^QXC*J97FMaUwzZX&mH+?P{{Hyngww6@74D9*WlpZ{Mp#p*nE6( zk&%CJaBKMZ)BF44`T6bq{NMKW^!E1X)6>%D=ihX6a^2n6`}_B0WnT33-o3rEprDGE zmxZsdr(j@UTwGcZ5Dx$U`v3p+|Nr*?|M&m@=Kufj|Nra%|Lp(&@&Etf|Nrj)|MUO< z^8Wt*lz)_N|Nr#=|KR`s+xhwV`}_O<|L_0*<^TWf|NrFw|LXes`v3ph`1tt$|L5W1 zz5f3D|NqeD=H{rViv0ZWsHms>{POPZ?fw1z{QT_Wu6&fq`+|-G8|K{rI%Bu;Adr=H|$-u%!9<=DND5 z$H&6V%*)r;!JVCnjg5Ey{_yqn#NpxK{{HkwM@NT;Y5o1|^77T<;@Rlv+5Z0X^YhuS zubKAt+rGZI{{H&$@#wj^o#*G#{{H3u{^uYdAmHG;{{HX&{_Feu`sU{3|Nr~{|M~y_ z{D1%d{r~^|00030|NrT+yAS{X2J}fpK~#9!l$U#4Q)L*(51I)?c#2pbFlg&UG zEKp&AM2Hgzg#UBQekF?QqeTT(B80X;4XL`?tip- zu+TO1a4-?IOn*p@32Sl6YK55mkY45;_Yg3Vu6E`T$sjB_!fYo}<_AnpxqV_5?zXI| z_8})dBn%d+0{65EuvmV=V9s+23LZ&FXeKNn;gN!ZIbhEIz}5joXH?2DrVxgY9XkfY zLMA3x8g+<2a|TP*q}O)JIT*7`D1Q`oF)@z3Q>$-6hR-$`H`1imDrxc#jz**5bjWE+ zt-1;Et4M5Cg4QXtDrF~)M(b3nvhu6NQCE+6?D|5SxIc3*MrwceE%7mX(6I`V6ZGPorM6!lmJkVlY1GX0Pgk%477q*AI58TFp4 zX({RkAFPP7WUkqOQU#zll7FsX^<;ZS#OfX31~G#ImL#&~(BQ3rM{1!rbBf8>`3JhYH!viuBojJC6V{ER9l zrs<#oL54_;?GoO~!bfW4Dn%30Z*wxHC^l6|Y0)C~;*u9X_zpN@BY*L%BSNPjL!`#S zwLmvUwsHumqTsg1LD*qg-&^+2`30}NN#ig_0%@s*NkN7V1C323wJsb;l?q6eD`TFp z!;zd+b7@8WJJn-_;iM?00zp0uahPzhQ)9ykiB-#}jNJ}999LrkMjY5!HM!X-$iXm^ z17X7BVyD(L!>yc7Ab(XpV29&r==#UI?smes__z>*Rzs9fH6H`|Y;?mlx4|VV^R7;r z{lKHC&6Gbt>9{XAY8zFk25xssB5P~RjEb*De=!K-^gE24nL@!Of}mNVMtXYs^|Ke= z@*Eip4EHf-H_Y1ejWWDHRtd^><-x`VbpAHGk^DtOUv$yjDWW9s6G33 zf=9M}uQLe?GBT0{$tfZHEfI{DX6$(U(clD+b@o|dCIZfg4@t~F#~v47E{R}dZ-4cN zvlkLPD$I9nH(YhFPl)1*)-OxROG)JO8+V=>fBD^y3h=C3fv(#2xvNa{{5)1>Z($@} zl+P~RlOvwKeSgU(bz|=RtYYF=rfXOE+|MTd304C?Qe3!&zl_c8$!p-puwI_KHuk`C z)g9D+_NgQ$z9_p-To}>YD=E+0ZRrUT?_4@1bb0;jf4P-}5+*MVGw~zv^x_5voe^Dm zt_N-Fj;mz-6uSKR&k0wThIy-}OJ>8;qernsJ2PL(4u7Z&C^b8{8PNfkrtLj{@=LdR z4x!sl(GR<_|H|eiF>x`c=Eq1j^q_{7>mylHLRT!f=+^E3oEWyj4}OBgq}4s&;L;fZ{9j~TW5=nMuA_dlNd z@tb>rt@{2z?Ap2XQ-U@JcT-_;NKi7@fDYSMjD7a8U2nXxYhu+48)MhZtlYB@H3;TM zvf}e{&6eRBnlpiu?i06C+E9=?@o2CdYqtJc;P9?YF& z$qfNb#Oeb#r)3o-FBYUE;&F*7-8?dI zKO5KIKaJf#N)nWEIxQ!nZ|Me*Gt~c<`S;iB_fDfnr6rX&GWw!Iu9lKH^VzHmJ(~3{ z4S(&;=U1>3CHu0Y`H_-FR{XZy5{v)Wgg;L{`P80(!rnf-GHPEAQ7Mz|d_fsa2)cN* z^Mdkz*rF#+_lYYRjHrOEvrcDl4Z~cGh|@HDvg>MeakpSxl1LPgnOQs^zza?2oiAlw z;8G@}E@emm=9UJ9B#Fw)MP(sDWX2%>uPTG6IX5pqtt=;}EN#O!0S|=zuK)u8D{?yk TZ;bop00000NkvXXu0mjfP2J2V diff --git a/src/fgt/edit_texture/meshlab.qrc b/src/fgt/edit_texture/meshlab.qrc index d61dce07e..0eab1cef3 100644 --- a/src/fgt/edit_texture/meshlab.qrc +++ b/src/fgt/edit_texture/meshlab.qrc @@ -10,5 +10,6 @@ images/selarea.png images/selcon.png images/selpan.png + images/selver.png diff --git a/src/fgt/edit_texture/renderarea.cpp b/src/fgt/edit_texture/renderarea.cpp index 8387544c6..59dd3ab9f 100644 --- a/src/fgt/edit_texture/renderarea.cpp +++ b/src/fgt/edit_texture/renderarea.cpp @@ -9,6 +9,7 @@ #define ORIGINRECT 200 #define MAX 100000 #define NOSEL -1 +#define AREADIM 400 RenderArea::RenderArea(QWidget *parent, QString textureName, MeshModel *m, unsigned tnum) : QGLWidget(parent) { @@ -23,8 +24,7 @@ RenderArea::RenderArea(QWidget *parent, QString textureName, MeshModel *m, unsig } textNum = tnum; model = m; - AREADIM = 400; - + // Init oldX = 0; oldY = 0; viewport = Point2f(0,0); @@ -131,9 +131,12 @@ void RenderArea::paintEvent(QPaintEvent *) { if (selected && !model->cm.face[i].IsUserBit(selBit)) glVertex3f(model->cm.face[i].WT(j).u() * AREADIM , AREADIM - (model->cm.face[i].WT(j).v() * AREADIM), 1); - else glVertex3f((oScale.x() + (model->cm.face[i].WT(j).u() - oScale.x()) * scaleX) * AREADIM - panX/zoom, - AREADIM - ((oScale.y() + (model->cm.face[i].WT(j).v() - oScale.y()) * scaleY) * AREADIM) - panY/zoom, 1); - } + else if (editMode == Scale) + glVertex3f((oScale.x() + (model->cm.face[i].WT(j).u() - oScale.x()) * scaleX) * AREADIM - panX/zoom, + AREADIM - ((oScale.y() + (model->cm.face[i].WT(j).v() - oScale.y()) * scaleY) * AREADIM) - panY/zoom, 1); + else glVertex3f((origin.x() + (cos(degree) * (model->cm.face[i].WT(j).u() - origin.x()) - sin(degree) * (model->cm.face[i].WT(j).v() - origin.y()))) * AREADIM - panX/zoom, + AREADIM - ((origin.y() + (sin(degree) * (model->cm.face[i].WT(j).u() - origin.x()) + cos(degree) * (model->cm.face[i].WT(j).v() - origin.y()))) * AREADIM) - panY/zoom, 1); + } glEnd(); // Draw the selected faces @@ -170,7 +173,7 @@ void RenderArea::paintEvent(QPaintEvent *) glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); - glOrtho(0,AREADIM,AREADIM,0,-1,1); + glOrtho(0,this->width(),this->height(),0,-1,1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); @@ -179,11 +182,15 @@ void RenderArea::paintEvent(QPaintEvent *) glDisable(GL_LIGHTING); glDisable(GL_TEXTURE_2D); // Line and text (native Qt) - painter.drawLine(0,AREADIM,AREADIM,AREADIM); - painter.drawLine(0,AREADIM,0,0); - painter.drawText(TRANSLATE, AREADIM - TRANSLATE, QString("(%1,%2)").arg((float)-viewport.X()/AREADIM).arg((float)viewport.Y()/AREADIM)); + int w = this->visibleRegion().boundingRect().width(); + int h = this->visibleRegion().boundingRect().height(); + painter.drawLine(0,h,w,h); + painter.drawLine(0,h,0,0); + // Calculate the coords and draw it + float c0 = (float)(w-viewport.X())/AREADIM, c1 = (float)(AREADIM - h + viewport.Y())/AREADIM; + painter.drawText(TRANSLATE, h - TRANSLATE, QString("(%1,%2)").arg((float)-viewport.X()/AREADIM).arg((float)(AREADIM - h + viewport.Y())/AREADIM)); painter.drawText(TRANSLATE, TRANSLATE*3, QString("(%1,%2)").arg((float)-viewport.X()/AREADIM).arg((float)viewport.Y()/AREADIM + 1)); - painter.drawText(AREADIM - TRANSLATE*18, AREADIM - TRANSLATE, QString("(%1,%2)").arg((float)-(viewport.X()/AREADIM) + 1).arg((float)viewport.Y()/AREADIM)); + painter.drawText(w - TRANSLATE*18, h - TRANSLATE, QString("(%1,%2)").arg(c0).arg(c1)); painter.drawText(TRANSLATE, TRANSLATE*6, QString("V")); painter.drawText(AREADIM - TRANSLATE*23, AREADIM - TRANSLATE, QString("U")); @@ -281,7 +288,7 @@ void RenderArea::mousePressEvent(QMouseEvent *e) } } -void RenderArea::mouseReleaseEvent(QMouseEvent *e) +void RenderArea::mouseReleaseEvent(QMouseEvent *) { switch(mode) { @@ -344,7 +351,7 @@ void RenderArea::mouseReleaseEvent(QMouseEvent *e) this->update(selection); } } - else // Connected + else if (selectMode == Connected) { // <--------- } @@ -385,13 +392,15 @@ void RenderArea::mouseMoveEvent(QMouseEvent *e) { // Move the origin rect inside the selection area orX = tpanX - e->x(); - int tx = originR.center().x() - orX; + /*int tx = originR.center().x() - orX; if (tx < selection.x()) orX = - selection.x() + originR.center().x(); else if (tx > selection.x() + selection.width()) orX = originR.center().x() - (selection.x() + selection.width()); + */ orY = tpanY - e->y(); - int ty = originR.y() - posY - orY; + /*int ty = originR.y() - posY - orY; if (ty < selection.y()) orY = - selection.y() + originR.center().y(); else if (ty > selection.y() + selection.height()) orY = originR.center().y() - (selection.y() + selection.height()); + */ this->update(originR); } else if (pressed > NOSEL && pressed < selRect.size()) @@ -408,10 +417,10 @@ void RenderArea::mouseMoveEvent(QMouseEvent *e) if (start.x() < end.x()) {x1 = start.x(); x2 = end.x();} else {x1 = end.x(); x2 = start.x();} if (start.y() < end.y()) {y1 = start.y(); y2 = end.y();} else {y1 = end.y(); y2 = start.y();} area = QRect(x1,y1,x2-x1,y2-y1); - if (selectMode == Area) SelectFaces(); + SelectFaces(); this->update(area); } - else + else if (selectMode == Connected) { // <------- } @@ -509,7 +518,7 @@ void RenderArea::RemapClamp() panX = 0; panY = 0; tpanX = 0; tpanY = 0; oldPX = 0; oldPY = 0; ResetTrack(true); this->update(); - emit UpdateStat(0,0,0,0,0); // <-------- + emit UpdateModel(); } void RenderArea::RemapMod() @@ -536,7 +545,7 @@ void RenderArea::RemapMod() panX = 0; panY = 0; tpanX = 0; tpanY = 0; oldPX = 0; oldPY = 0; ResetTrack(true); this->update(); - emit UpdateStat(0,0,0,0,0); // <-------- + emit UpdateModel(); } void RenderArea::ChangeMode(int index) @@ -574,8 +583,10 @@ void RenderArea::ChangeMode(int index) } } break; - case 3: + case 3: // For internal use... reset the selction mode = Select; + for (unsigned i = 0; i < model->cm.face.size(); i++) model->cm.face[i].ClearUserBit(selBit); + selection = QRect(); this->setCursor(Qt::CrossCursor); break; } @@ -585,8 +596,21 @@ void RenderArea::ChangeMode(int index) void RenderArea::ChangeSelectMode(int index) { // Change the function of the mouse selection - if (index == 0) selectMode = Area; - else selectMode = Connected; + switch(index) + { + case 0: + selectMode = Area; + break; + case 1: + selectMode = Connected; + break; + case 2: + selectMode = Vertex; + break; + default: + selectMode = Area; + break; + } } void RenderArea::RotateComponent(float alfa) @@ -610,7 +634,7 @@ void RenderArea::RotateComponent(float alfa) } } this->update(); - emit UpdateStat(0,0,0,0,0); // <-------- + emit UpdateModel(); } } @@ -629,7 +653,7 @@ void RenderArea::ScaleComponent(float percX, float percY) } } this->update(); - emit UpdateStat(0,0,0,0,0); + emit UpdateModel(); } void RenderArea::UpdateUV() @@ -648,7 +672,7 @@ void RenderArea::UpdateUV() } panX = 0; panY = 0; tpanX = 0; tpanY = 0; oldPX = 0; oldPY = 0; this->update(); - emit UpdateStat(0,0,0,0,0); // <-------- + emit UpdateModel(); } void RenderArea::ResetTrack(bool resetViewPort) @@ -661,14 +685,6 @@ void RenderArea::ResetTrack(bool resetViewPort) tb->track.SetTranslate(Point3f(viewport.X(), viewport.Y(), 1)); } -void RenderArea::SetDimension(int dim) -{ - // Change the dimension of the control - AREADIM = dim; - // <-------- resize e cambio areadim - this->update(); -} - void RenderArea::SelectFaces() { // Check if a face is inside the rectangle of selection and mark it diff --git a/src/fgt/edit_texture/renderarea.h b/src/fgt/edit_texture/renderarea.h index f259a3acb..deffdea1d 100644 --- a/src/fgt/edit_texture/renderarea.h +++ b/src/fgt/edit_texture/renderarea.h @@ -15,12 +15,6 @@ #define RADIUS 10 #define RECTDIM 30 -#define NO_CHANGE -1 -#define RESET -2 -#define IGNORECMD -3 -#define ENABLECMD -4 -#define DISABLECMD -5 - using namespace std; class RenderArea : public QGLWidget @@ -30,7 +24,7 @@ class RenderArea : public QGLWidget public: enum Mode { View, Edit, Select }; enum EditMode { Scale, Rotate, NoEdit }; - enum SelectMode { Area, Connected }; + enum SelectMode { Area, Connected, Vertex }; RenderArea(QWidget *parent = 0, QString path = QString(), MeshModel *m = 0, unsigned textNum = 0); ~RenderArea(); @@ -44,7 +38,6 @@ public: void ChangeSelectMode(int index); void RemapClamp(); void RemapMod(); - void SetDimension(int dim); protected: void paintEvent(QPaintEvent *event); @@ -52,7 +45,7 @@ protected: void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); - void wheelEvent(QWheelEvent*e); + void wheelEvent(QWheelEvent *event); private: bool antialiased; // Antialiasing @@ -77,32 +70,30 @@ private: int panX, panY, tpanX, tpanY, oldPX, oldPY; // Temp for axis int maxX, maxY, minX, minY; // For texCoord out of border - int selBit; - bool selected; + int selBit; // User bit: idicates if a face is selected for editing + bool selected; // Indicates if the are some selected faces QPointF origin; // Origin for rotate editing QRect originR; int orX, orY; QPoint start, end; // Selection area - QRect area; + QRect area; // Dragged rectangle // Info for interactive editing - vector selRect; - QRect selection; + vector selRect; // Vector of buttons area + QRect selection; // Selection area QPoint selStart, selEnd; - int posX, posY, rectX, rectY, oldSRX, oldSRY; - float degree, scaleX, scaleY; - int highlighted, pressed, oldDelta; - QPointF oScale; - int initVX, initVY; - float B2, Rm, Rq; + int posX, posY, rectX, rectY, oldSRX, oldSRY; // Stored value + float degree, scaleX, scaleY; // Value for edit + int highlighted, pressed, oldDelta; // Info about mouse + QPointF oScale; // Point of origin for scaling + int initVX, initVY; // Old values of viewport + float B2, Rm, Rq; // Params for line intersection - QImage rot, scal; + QImage rot, scal; // Images for buttons - int AREADIM; - - float zoom; + float zoom; // Actual value of zoom void UpdateUV(); void ResetTrack(bool reset); @@ -115,7 +106,7 @@ private: void UpdateSelectionArea(int x, int y); signals: - void UpdateStat(float u, float v, int faceN, int vertN, int countFace); + void UpdateModel(); }; diff --git a/src/fgt/edit_texture/textureeditor.cpp b/src/fgt/edit_texture/textureeditor.cpp index 75b487566..19f9c2736 100644 --- a/src/fgt/edit_texture/textureeditor.cpp +++ b/src/fgt/edit_texture/textureeditor.cpp @@ -29,7 +29,7 @@ void TextureEditor::AddRenderArea(QString texture, MeshModel *m, unsigned index) QTabBar *t = new QTabBar(ui.tabWidget); RenderArea *ra= new RenderArea(t, texture, m, index); - ra->setGeometry(MARGIN,MARGIN,400,400); + ra->setGeometry(MARGIN,MARGIN,MAXW,MAXH); ui.tabWidget->addTab(t, name); if (countPage == 1) { @@ -38,7 +38,7 @@ void TextureEditor::AddRenderArea(QString texture, MeshModel *m, unsigned index) ra->show(); } countPage++; - QObject::connect(ra, SIGNAL(UpdateStat(float,float,int,int, int)),this, SLOT(UpStat(float,float,int,int, int))); + QObject::connect(ra, SIGNAL(UpdateModel()),this, SLOT(UpdateModel())); } @@ -51,10 +51,9 @@ void TextureEditor::AddEmptyRenderArea() ra->show(); } -void TextureEditor::UpStat(float u, float v, int faceN, int vertN, int countFace) +void TextureEditor::UpdateModel() { - // Manage the update of the controls from RenderArea to the editor, also enable/disable controls - // <----- TODO + // Update the mesh after an edit area->update(); } @@ -91,7 +90,7 @@ void TextureEditor::on_connectedButton_clicked() ResetLayout(); ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->ChangeMode(2); ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->ChangeSelectMode(1); - ui.moveButton->setChecked(true); + ui.connectedButton->setChecked(true); } void TextureEditor::on_selectButton_clicked() @@ -102,16 +101,12 @@ void TextureEditor::on_selectButton_clicked() ui.selectButton->setChecked(true); } -void TextureEditor::on_optimizeButton_clicked() +void TextureEditor::on_vertexButton_clicked() { ResetLayout(); - ui.optimizeButton->setChecked(true); -} - -void TextureEditor::on_optionButton_clicked() -{ - ResetLayout(); - ui.optionButton->setChecked(true); + ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->ChangeMode(2); + ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->ChangeSelectMode(2); + ui.vertexButton->setChecked(true); } void TextureEditor::on_clampButton_clicked() @@ -129,7 +124,7 @@ void TextureEditor::ResetLayout() // uncheck all the buttons ui.connectedButton->setChecked(false); ui.moveButton->setChecked(false); - ui.optionButton->setChecked(false); ui.selectButton->setChecked(false); - ui.optimizeButton->setChecked(false); + ui.vertexButton->setChecked(false); } + diff --git a/src/fgt/edit_texture/textureeditor.h b/src/fgt/edit_texture/textureeditor.h index 2a1d7984a..57e5e04b3 100644 --- a/src/fgt/edit_texture/textureeditor.h +++ b/src/fgt/edit_texture/textureeditor.h @@ -8,6 +8,8 @@ #include "renderarea.h" #define MARGIN 5 +#define MAXW 1400 +#define MAXH 1000 using namespace std; @@ -36,18 +38,15 @@ private: private slots: void on_connectedButton_clicked(); - void on_optimizeButton_clicked(); void on_moveButton_clicked(); void on_selectButton_clicked(); - void on_optionButton_clicked(); + void on_vertexButton_clicked(); void on_clampButton_clicked(); void on_modulusButton_clicked(); public slots: - void UpStat(float u, float v, int faceN, int vertN, int countFace); + void UpdateModel(); -signals: - void updateUV(float u, float v); }; #endif // TEXTUREEDITOR_H diff --git a/src/fgt/edit_texture/textureeditor.ui b/src/fgt/edit_texture/textureeditor.ui index b214f0762..35b6fbb0f 100644 --- a/src/fgt/edit_texture/textureeditor.ui +++ b/src/fgt/edit_texture/textureeditor.ui @@ -5,8 +5,8 @@ 0 0 - 443 - 748 + 439 + 686 @@ -43,6 +43,19 @@ 6 + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -100,7 +113,7 @@ - Allow the selection of face inside a dragged area + Allow the selection of faces inside a dragged area @@ -176,7 +189,7 @@ - + 0 @@ -185,8 +198,20 @@ 0 + + Allow the selection of vertexes inside a dragged area + - Optimize + + + + :/images/selver.png + + + + 32 + 32 + true @@ -206,24 +231,6 @@ - - - - - 0 - 0 - 0 - 0 - - - - Option - - - true - - - @@ -353,50 +360,6 @@ - - - - Options - - - - 9 - - - 6 - - - - - - - - Color: - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - -