From 9ef0cb493201874670ff656e23f59f8b2ee94fb9 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Fri, 18 Nov 2005 02:12:04 +0000 Subject: [PATCH] - Added icons to the project file [meshlab.qrc] - Enabled renderToolbar with icons --- src/meshlab/images/backlines.png | Bin 0 -> 2803 bytes src/meshlab/images/flat.png | Bin 0 -> 1187 bytes src/meshlab/images/flatlines.png | Bin 0 -> 3272 bytes src/meshlab/images/info.png | Bin 0 -> 1301 bytes src/meshlab/images/points.png | Bin 0 -> 1597 bytes src/meshlab/images/smooth.png | Bin 0 -> 1646 bytes src/meshlab/images/wire.png | Bin 0 -> 3947 bytes src/meshlab/mainwindow.cpp | 273 +++++++++++++++++-------------- src/meshlab/mainwindow.h | 69 ++++---- src/meshlab/meshlab.qrc | 15 +- 10 files changed, 196 insertions(+), 161 deletions(-) create mode 100644 src/meshlab/images/backlines.png create mode 100644 src/meshlab/images/flat.png create mode 100644 src/meshlab/images/flatlines.png create mode 100644 src/meshlab/images/info.png create mode 100644 src/meshlab/images/points.png create mode 100644 src/meshlab/images/smooth.png create mode 100644 src/meshlab/images/wire.png diff --git a/src/meshlab/images/backlines.png b/src/meshlab/images/backlines.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7d7063c7d8fd9e74a3f304d613dc53ec1e2708 GIT binary patch literal 2803 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 FV1k`IU`YS~ literal 0 HcmV?d00001 diff --git a/src/meshlab/images/flat.png b/src/meshlab/images/flat.png new file mode 100644 index 0000000000000000000000000000000000000000..4a470cada745d94ded647b0c7f3a94e41517341c GIT binary patch literal 1187 zcmaJ>drX^E6u%!|Y0C<<3<)m-<&7I6g{i=bEtOYcOdu}7EC`l5VnQekH#P>eyf(;S zfVxnWuFNbkPR7f`pi!Wu6mW}WZUZJxps;nUoxInUw%_%3E++bif1GffM4RCIvwj;YC++x|*FRsf8tH}!2Md`gb zmH8`s?3RL7<{sou3!?cpDQ+oM%1hdkz*d3o#F9H6P1uM{<^!c5!ckQx1Ziw^p_KEI&TRGoW%{iXoEw}Ax%ew;RxH%%ML8i zSnE{I?IiX7$X5ZD)I#x!OIp1@b~|%U+t}FJoGQJX>NQ0Uz2T{mpM*87Upq4;)XTh< zmTv9OI~55&!$#|ak%jpnj48?8=nU)DUXSRm!u5LxE3Wu`zuic?kbyZ+<&-lM9$vA- zl-XTf37c(RqWC!itU-hGcs)Bt{iHEpOjvCiQ)gFwZAaskKF-I>f8O&HZ+wGMnMzl| z%95~tP;9eq>gPl~MFgwdTJ+`BA_Bruqd~SHA{5EFU9j+&6N7s#uC7&vH!%&1qcz0d zuAV*!=fE+Ks3gUA*Z7OH(-7 zUX5WP*Bne@aNkzrEwSkV2)%U{FeT@!_B&8}0@g7Ui03yso$~|8{j7QLqMhp-#X2hzB!dN7aTTeSxDC&?i=wU zp?SI*yaQodzr2>J#P_gO_mXz8R4V=GNoC%$yi&=b9xZJUi*0E3mx~3!(nf# z!p2M=2tx0~6hm<|OEOzGK)`9|!YCUI3Ngt#*C?z|#BA;|>5Tnc(kTkXb0%iYWHz?d z+F(TrIqTZEcQIED#Z$k0Xo2<3%l^kck3|h6%XvK4CgSd_J*Ab9$?^T!I4aYkkK>El Z;ov)SU@*5#*?~S3z)wD!)W<8R`wKMZ{h$B< literal 0 HcmV?d00001 diff --git a/src/meshlab/images/flatlines.png b/src/meshlab/images/flatlines.png new file mode 100644 index 0000000000000000000000000000000000000000..ff678844060986e7665d39f7b1612b2df3e76699 GIT binary patch literal 3272 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 literal 0 HcmV?d00001 diff --git a/src/meshlab/images/info.png b/src/meshlab/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..c24c549561d3dc6acafbc90ad6f2092ce0b1b44d GIT binary patch literal 1301 zcmX|BdsNbQ6u-bP!3Tjh$+==!YD;Tj*+T{ge3Y7KSV~x;C@Xd5$>l5`p=f5H)~t*i zMLte8G9}z8Pn{m(QX*#Mqlate(4DNb*`_&lS?)`xvp>Gyd%ySG@AuyOxu5%03L=8Z zcCK~+Kn@KF+KeR6x=47md)N;tk+4kDC--g6sWy>|1r%#@^Zt3gn?Cj_$b2^Tm&Z`p$g{sO*m!A~P&3nb- zg$IpzjJlX}s>e`o>1~p3y%;w~n4ngx4f>?ST3-xZ`Bpng1bnh-?T~fP1%|x%`Uk`R zsv_@Q!H=7&MxS1r?7Ny_C>AFte{t|BtOF7wCkuK@;`EZ%fm??L78&X#UA61GySpns zn@iG&Dmyd;~rh2=#;5BEC9(D8f zw*Q(CCab>9d^j>Pvc=ni9=D@|>O@^#U3s1~A;GPakbeGRd`sfPfaMhC%9RL9XEwaj zh(x0Fj0}R9;yy5VG42NbABlb^co`9aBA3|WN*D55Q67oW4zEga*Gvz_kiARqv+oZh zxna<7gnhXIJl#-rHAFd?-Z1Ft=^6FL>S87sRQN|O;7Lc+^4f+W2*(T)BafSo7;!z6 zXNw(8s5!~caIpu59)xpwPS!&~>HHPlEMnjcPWN%eQEH27QEvDYQWx^u z|Fy@zpPi*3k2id7R0mKW6GBmZCGlPr_xtERlSwhW7l%6G0Tq;6uf|EY{V5xddO;;jHr1FL8KxSrUiX#CHQqY70@B>7*8QPU)2d$ya zbXa3SpmgkT+&9`6b1B*JStyAi*RmT5FW45v;s_%zcl@GS9((1l`&C?{(fG-l2*gD* z-Js5sL;pj}>&57(jSaWFv9@-Rm)FLc!-zFIDD0d!qzh9+cTW}kYU%i46_G;6JYqc& zF|<=tS!Uu^YvAMibvm7)s387uL&L7<=o7`oHqpB9-X?}YI2LZmj zkRU2ksZ^V9u+W5mlLIa~1C2W*Sir0~R8-{d?k@1L44_iAv6QT=tZF4{JBqr5!_m-m zL_9)pk5h?KIXyGIN*_pAmLzY?&&|!1#Dw-#*iw0cdFQQv%XErR4z6Q#AXU4)#(h+o Y5P2f0xa4hPJo>^QbbUmSE00007bV*G`2h|G_ z0WUkDGBQU100r?$L_t(|ob8(1PZLcT#;0}Z(zIwRf>Fu}r7cuTh+@20;VTD%j*7`Q+a!i8dje}QtaHHHE$ZLugwiPW|nO3OhP39_u;#U`5` z_}FEs-S12GcQupD`@ZvZW~Z~+hc`Gl2;#-i(2&F7IDGhUWo4yMD2z!?C?;9xU^E(A zTU&qr{0RVXI2_H*%@T=Z|7rPj26c3F)YsSR_4@JgamJP2ym>>+9spoAn~g>z<5Zzg z3wZwgd2es8%jI%790r5I>2xxyw7I!Sws9Qa-ri=GCjx2#p}%?{5U|_r%qnTMTC%ND zsq*vl=|o`|*5BW6G#V!-CwCk`{S1WeR0x7ZA`zX!(OkQBO(YTx4-ZQulG@tZ^y$;#;o+5)mAt$>y$SBt9LMM9=T}!(i;IgR#!#<-LZP^S|GwRBhhey+ zq=fMbFdz^JY;0_hUBBNSJtk6s#bW8~>_kx%L6Cd*?h&W8TrQW(<$raqJEBx7lai9i zvnwkrD|$@W7MhrtXl-qsot;Hd)aUbgJf70h(zr}@XJj&&R4R45-7pNFJ$v@{?b|#a zFJesC3Vi$a&Fl4&U6;!hk7lq&<>kACgb5IdM9Im? z!C;W+rlh3&y}3p+Gc)t}@#CqfDF}khW^+?h6P@cu*cM7pPhVPET3J~^QBM#s5o6U)d ziI*>5K6B;_ohaV^-v=BH$AbqCmY0_S04kNrU@)YnrtUK*ePSR00Py9@mk%F4@OZon z7cLw-c5MF%=@T0PEJEvr=D!RlfNeMdY{Lm)8%_Y*a01wd6Tmi{0Jh--uni}GZ8!mJ z!wFy;P5|3*0@x;gW)A?s=;-L@&!5F&aYaSN|Ie*rGMSz{c|v@KaXOthZ{DQ&xqEkL z3Fz$X93LMS3WYT_H5!eES*70IUh*T7$z(cx`t-$%7n!9Bg<3#YS65F@57GYq{ky?n zP^nZ5Dn+4<=O1#)t79zJ|% zu~-BGL0MT@Jl!gOzyH^-Uu4(k^F@z|6kxa8U%Ys+yu7SZsqWmlLs)~@a;qp53Xw>( zzP?U$5d?`I6Sjpuefrea);2vojiRXA?e==TB_$>CnCZVDlgWfap~vI-^XE@~e*WFN zcPZQ|Znt}Oc9!hM->ot^IXOQ+kK?#jt0kT^old9I>2?VT6Ce}{j~qD?2n2|3a&q$D zn`<;)ueZIu-RX3~Fg!FgbnDiwJ-by91X)^Inwy*3+}uo0Prq^F22Hohz`(%EmoLp` zb7p2H;|oGtTieLU2moMvd)wpjq@<)|XJ=DJMY>h4U%#%=XtuVt5CqwiTZJ&U*=)9! zmX;m8VU&crRWJ-AH^S~jojKd?!#%jzhmb00000NkvXXu0mjfWBZl(^hG{p75$tg*HL%4ZTuQdDtK-DIf_ZWc#Ok&g|^&%$aXy&bOo4 zl)Bc35x@Wd_$05BW)NEJ5gLiuLzs^>grXO$+gbzwE72p!PoI2pn|P$`lx&m$aQ%qV znSO$}b3a&@u@QjM5CHHB0OlZ}#{t+E1;7(I0B>jkSdxD{>n9li3r3TrlD7{0UomJ< zVV#?(0O{(A>O#c8r-TJ4DDzZjMeX6bI(CDt%Nq7kt2pkFX>T!L+knU`vc59FxcA506nW{`s22})LO7Wd#M~g?PhZ4`df0R+?a^D_veZ|5GWF#?oRD-;|Jv}vjfjrM!KVeWhuTQ%k#9BE1 zl)@_rjr%mv@pEX`y%jOvw7{9MhwcyaG05Ar8KI!XET!Y_v~?vjY&tFJan|5&@4<%M zyLUgG**ot{%Q|A2e>oEA+a5)sag{npB!41Sb_0X{2AC~}^Y!zP_4;EN9)30D>US@C z9c&^c8={KN6|Ws0ek-Fn~%+|WJrdOUAA9YbG~ir&-n$qB|C0! zMd;&S@YU;S_b=#TymVf1^=IOWuC-MD@S<55hu`d!bRXs101c7x&4AcWZyInr4=KeY&u)GfW^P`W|HtHO@uw!gXrAgee| z@*mVV{-v~UNH|b5?T=yo>ibI`nZ~^&S#0h8l9s8B z9?oY7J$7zyyYyx#k&$L9B{{oQVSSm_?L{+-Mj~VgDbIGKN65RbEm%tt1EDD)ZgazD zHUdErkWgaB)<@#(p>V~W2_FKptKydNG|DgY@Z0z62X|D_4A68?BnGHBr6SQwgmPl2 zG;Zjb(f>lfTj$x2SP41HQNs5=?lr4gvy$NwdOW`?rp$d5ER!js33duiSf-{B}Xyt)`rf=WI;>J{KZKa<6P(u$c(y`Q+7ZO$M(nmj6DKllV{_Tl@|6mJ@ zrhiAssJu%_2vKB9N&Q=s(Y)h}B0R=^h6%zi8#S6;3kgy`+i(G%3|Y43JOO}2$O`w< z)%V&x1yqz?_Y(e-MAOdJ%Vu^4h5WC2u*O1vLL&ZV zvU&`rowi{9WriJ&d$vYhZTY#$pyoF0<0NYC!ZW!!v(R!8T5@t+Z`LS?nN<4Qm?g{G zGUP&86y(tB`4+k@?89!A0}Dh z13=Oo0MIl5zW&7LHvnuG0`L|Az*z-=?v_LAZY=?T)#vT$;lHCZ^jXbr_nXVefKXpA ztS5-Tm9~3>cMcfs{y89)L_5JUt#8>!mDdC|Y%qW#kqc76yNSjf_qg6&2;@hsb2As;Y%; z$(R9KnvC!2vE1C1{{Ho)5Fd>@3S+>+!UB*R(`j6$mX@(X^c*U&Y_l&bE5p$GcS*=F z;m9nP9hx&|YMYuEHq>S^_UcMht06K7mCO)+dEMVn;7&XK2XZeyApsu9t=at(s-)BD zvP}dk=2h7VIO)qYI#wRBPDF1#$G76;_jAO-HZe5gf8V*IdGU#BgU{daA80LH`F0IQm>GL0DLw(<#@zxk$|EXlIO(iZs%V;< zMou+URqPBo9-LtGAidObVbw?k@IOE`?K>!+w_#z`=#8q0JI%tx$W%Yfxb1}Apmu%9 zt<$1at41jX?IsGTfBCjA4Ep9(i~XrsD>wi`>-5J&(|EDiw#w-HXFq@5hQ~3BYYvgN zJinnO1vhToXgX>Qn>{>v(x3oB^hn#ZuKtwQe(i74E$v8y4Gj&E3mZd2p=LHm8)@vq zv$8qh{Q2|dz9+%$l$|@BG_SzG79@Cmp-nj8pqG=b5qM-daE2}gAivEQeN;ROwD619 zn^WwIP7L<`u>33LQV~@Ax`jD>+~-hUhW~?o7h9tB#(PSQLb_WrcMW~_T?(_>@_51d z!jNgsDR;Trb(+_bij;hJ_!;zmIoTZ4^Evg!DV=*}1s>Z&JsL_*PswRApYU!NF8s}Z;=b}|#?Xpv8UY>Tj=#}S@OL&~t?l-}!4f@+AA}<%Un~;AH42K+}GUhrwULe=L zQnRj{f@zB!UD2cG`9Sp=HP+SECX`NBrK5R7RWtfjn}_IPK(;ivI_Yt1D|_X>{fb^10V58IHFdbhXR-PfHO!n#d>TOlOO9rpx8- z$^2bh=F3g(L7*>&9r`EH5nP8=BZWRE$d=wXYoKs2WM(7;cZ=kNt3z@i`{(9R$lSSe zkt0ksr?=lsBSF1Lwr?m@oK7ihz}SM=PzLsf-N_+*0-CM-at0K$7!F~p)A}~)A@5;( zo@U#U)!FV87{_McXVA9oharFv7CCY=Vya$St#5rUo*;1r6dM~G?4*`dj+L@v8=rP{ z!6ka$wt#~N5;#!Ta{36^Bc@t|=1^HIGdr?!rV8r>suuJhP?wcw+#6 znx;95`7@>Bi7qi9q(6j3yWy4QscaCl61m^k*LP5*$}H(kwLxu;BU4k)^-65*gva=9E!(bLtXY*_qqIa}|XXy^lA7!@qW&Oz!r+ccvG zt+&I>@KEB>X3O2l?dm{SFu^w_N@=2L9VvI7S7(F=S2VO=3X-pK)3}lK6;Br_K3jdb zgLlhc_b@1eOy!BY4WJ{CaQi?_jr&!;#x`Z@$4-+^z;r_1ZG+5$hK)hYB8MvUKJ?jo zs-DIX5f5?NSivt{uu(iu)m_KH7Y8KKa*z>?Je>5*Qqha z8v+Jb&`pqB2CqYPL|3=~E}30?koC$=XT?W|0g&gq4WtZ`Mn{nt-)oDyPl8|Bfy*oy_Be=~ z29*b)so>}-SsAvlWyd~$gb1Y>U3yDupA-!#n@kX9@8yhNub}P#G7h0@qjIy`))9ul z^@9!zlVA@kz;Uwor0NVqn)?1dv}AT0N8wGySKk2|iAV80-+X7%s~206p^I_I3v!`} z#3N_*!A+f|G}+{>+qXkE63dJ4>pvjoa&R^8fhHUbIKA>GGE))XIgaz`QUrpalBm`t zLpg*-ypJa*Cx>mb2TLrm(qku2GS%;T$L0#hQBw`zcXSh0?;$2b9K15pU4ft*y+X6( z%6%y_e%7}#L2?l0pw&pj4F28P|9h#So(=eHC7ebbK=^pUoec#&1;EVkMc3qeUwchH zv$+C$=J%t4q#0af*i#4NV2KL_k)g=yjBOPXdg_kj^X={7B~aT~Mn(p)tLXiUOjQQw zzwfv8)>G*k|K?I_M+h(lCrWElC+pUXhmn+97061RUx@lAZ%yfayA=c>OMc$U-QC^R zn0|l|n)FJ93-{cK4tobvWz|VzxG|H@A!xocHb}USpbHsUc@UY(ud{*YzpxDSBRpco zt^`AFh!Z*QkT@oAJxRHdr}{3pw*6s6z|}HA(7k$D76Z)EVt&lbq#`2>+r7Mp=zWs( z8kX)Q9L9xYA@StcWI|BRtB7?t7n4t6R~fPiC;`&Iq7)`r%0hk<$JyxoU#1;^W^1cJ zL(?766F7};Wks(e-G-Ivf-*i2#y0XgY@mU#ABz^^^bog^Foi+KdQuW_+aoark)Fsn zDZ@k=KRz5N3DWP-CXL@hBVQOTB_++2?I+CTG_=h#Jc3iI6&5{*PuTkS_$W_lDT(CU z`*r8_Cb%uw(vvPk<=+PH&n9;ewYNHzFqmypUq3%eq4$J>s{S(p@usU4sMg;&u3pBQ z;$FDd=nL_9=%!6tmK^@*qR}!exs;B8&!?_mPm)Ne%U6aK9Y<^UIN>SQOkdYqd-Eo2%YBdo+M}^4b3-qP$nj+Zc>3V>hTr#%j&A0k z;4+hvk~GDEV9Ar(G|J7JH;pSJrha_Q&d$aytTJ#u66g?dR|i=-f8IPcuNZUDa^R}! z7sPge*wT=SID*Pe-Z*_QYX1EBJLu`z3kmk{npTz`Aof;e`+!U_@A`#B)ESC`J#(GX zV!Gj>@6~&taVQx+tY^_Rs2Q7|k zDaUIckB$9{vY02R$Ac$NqHsrL^cL!*Gml)oYKJiN0^Y-1X>_!Ou-c=2AqZo~%+pc5 zFqf);)T*+wGI~9;IT=$bbe?0Y`AYf4nbiO9npn2u_P72M*-rl+d)C=WcVG=Vs-H4s zze9f+%61+(d|33~!;V>F{;cMiBJ;?osM+i~@m3*jp8q8_OE7AE1SA6MKLC4sdnHld z%G^A0^qEt0ZAig)bc3#{9w(Ub{(5DJn`Rgq&yb&CWxEzYJBIrp>=E=C7G3}$J73<` zn&8_C$Dklv98g$8{a>^A;IGJ7NXQZ2-(XNn=)O7STCMI^=!6JqDi=WY%qHT@ctxguciDAwSG1fA9Rza%CN3W0knIXp$ za%_3=0>9)f)Y!;(pN3}J5Im6<1ED!!I7)0OdCl+)fwKP)CZ?%C`KB&1GZI-(%H|+r z^Yw`+iRGx=qF}gBMS_aU(i!^#LY>Rw16n=Ngl*?4X*(A_|x#Dn7wMoZa9Ie zDRPVJ1;Qri;q-7DLm5lV!!jIpUWyOJO@J+H?C}sFIJ^qD3=?_a)l@`Fb<#K)|1k#M Li+w$d#faj6M8ajP literal 0 HcmV?d00001 diff --git a/src/meshlab/mainwindow.cpp b/src/meshlab/mainwindow.cpp index 977309a11..e7b8fc914 100644 --- a/src/meshlab/mainwindow.cpp +++ b/src/meshlab/mainwindow.cpp @@ -21,9 +21,13 @@ * * ****************************************************************************/ /**************************************************************************** - History +History $Log$ +Revision 1.8 2005/11/18 02:12:04 glvertex +- Added icons to the project file [meshlab.qrc] +- Enabled renderToolbar with icons + Revision 1.7 2005/11/18 00:36:50 davide_portelli Added View->Toolbar and Windows->Tile and Windows->Cascade @@ -59,211 +63,226 @@ First rough version. It simply load a mesh. MainWindow::MainWindow() { - workspace = new QWorkspace(this); + workspace = new QWorkspace(this); - setCentralWidget(workspace); - createActions(); - createMenus(); - createToolBars(); - - addToolBar(mainToolBar); - //addToolBar(renderToolBar); - + setCentralWidget(workspace); + createActions(); + createMenus(); + createToolBars(); - setWindowTitle(tr("MeshLab 1.0")); + addToolBar(mainToolBar); + addToolBar(renderToolBar); - //QTimer::singleShot(500, this, SLOT(aboutPlugins())); + setWindowTitle(tr("MeshLab v0.1")); - if(QCoreApplication::instance ()->argc()>1) - open(QCoreApplication::instance ()->argv()[1]); - else - QTimer::singleShot(500, this, SLOT(open())); + //QTimer::singleShot(500, this, SLOT(aboutPlugins())); - loadPlugins(); + if(QCoreApplication::instance ()->argc()>1) + open(QCoreApplication::instance ()->argv()[1]); + else + QTimer::singleShot(500, this, SLOT(open())); + + loadPlugins(); } void MainWindow::open(QString fileName) { - if (fileName.isEmpty()) - { - /*QStringList types << - << "Text files (*.txt)" - << "Any files (*)"; - QFileDialog fd = new QFileDialog( this ); - fd->setFilters( types ); - fd->show();*/ + if (fileName.isEmpty()) + { + /*QStringList types << + << "Text files (*.txt)" + << "Any files (*)"; + QFileDialog fd = new QFileDialog( this ); + fd->setFilters( types ); + fd->show();*/ - fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"../sample","Mesh files (*.ply *.off *.stl)"); - } - if (!fileName.isEmpty()) { - MeshModel *nm= new MeshModel(); - if(!nm->Open(fileName.toAscii())){ - QMessageBox::information(this, tr("Plug & Paint"), - tr("Cannot load %1.").arg(fileName)); + fileName = QFileDialog::getOpenFileName(this,tr("Open File"),"../sample","Mesh files (*.ply *.off *.stl)"); + } + if (!fileName.isEmpty()) { + MeshModel *nm= new MeshModel(); + if(!nm->Open(fileName.toAscii())){ + QMessageBox::information(this, tr("Plug & Paint"), + tr("Cannot load %1.").arg(fileName)); - delete nm; - return; - } - else - { - //QMessageBox::information(this, tr("MeshLab"), tr("Opened Mesh of %1. triangles").arg(nm->cm.fn)); - VM.push_back(nm); - GLArea *gla=new GLArea(workspace); - gla->mm=nm; - gla->setWindowTitle(fileName); - workspace->addWindow(gla); - gla->showMaximized(); - return; - } - } + delete nm; + return; + } + else + { + //QMessageBox::information(this, tr("MeshLab"), tr("Opened Mesh of %1. triangles").arg(nm->cm.fn)); + VM.push_back(nm); + GLArea *gla=new GLArea(workspace); + gla->mm=nm; + gla->setWindowTitle(fileName); + workspace->addWindow(gla); + gla->showMaximized(); + return; + } + } } bool MainWindow::saveAs() { - QString initialPath = QDir::currentPath() + "/untitled.png"; + QString initialPath = QDir::currentPath() + "/untitled.png"; - QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), initialPath); - if (fileName.isEmpty()) { - return false; - } else { -// return paintArea->saveImage(fileName, "png"); - return true; - } + QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"), initialPath); + if (fileName.isEmpty()) { + return false; + } else { + // return paintArea->saveImage(fileName, "png"); + return true; + } } void MainWindow::about() { - QMessageBox::about(this, tr("About Plug & Paint"), - tr("The Plug & Paint example demonstrates how to write Qt " - "applications that can be extended through plugins.")); + QMessageBox::about(this, tr("About Plug & Paint"), + tr("The Plug & Paint example demonstrates how to write Qt " + "applications that can be extended through plugins.")); } void MainWindow::aboutPlugins() { - PluginDialog dialog(pluginsDir.path(), pluginFileNames, this); - dialog.exec(); + PluginDialog dialog(pluginsDir.path(), pluginFileNames, this); + dialog.exec(); } void MainWindow::createActions() { - - openAct = new QAction(QIcon(":/images/open.png"),tr("&Open..."), this); - openAct->setShortcut(tr("Ctrl+O")); - connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + openAct = new QAction(QIcon(":/images/open.png"),tr("&Open..."), this); + openAct->setShortcut(tr("Ctrl+O")); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); - saveAsAct = new QAction(QIcon(":/images/save.png"),tr("&Save As..."), this); - saveAsAct->setShortcut(tr("Ctrl+S")); - connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); + saveAsAct = new QAction(QIcon(":/images/save.png"),tr("&Save As..."), this); + saveAsAct->setShortcut(tr("Ctrl+S")); + connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); - exitAct = new QAction(tr("E&xit"), this); - exitAct->setShortcut(tr("Ctrl+Q")); - connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); + viewModePoints = new QAction(QIcon(":/images/points.png"),tr("&Points"), this); + viewModeWire = new QAction(QIcon(":/images/wire.png"),tr("&Wireframe"), this); + viewModeLines = new QAction(QIcon(":/images/backlines.png"),tr("&Hidden Lines"), this); + viewModeFlatLines = new QAction(QIcon(":/images/flatlines.png"),tr("Flat &Lines"), this); + viewModeFlat = new QAction(QIcon(":/images/flat.png"),tr("&Flat"), this); + viewModeSmooth = new QAction(QIcon(":/images/smooth.png"),tr("&Smooth"), this); - aboutAct = new QAction(tr("&About"), this); - connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + exitAct = new QAction(tr("E&xit"), this); + exitAct->setShortcut(tr("Ctrl+Q")); + connect(exitAct, SIGNAL(triggered()), this, SLOT(close())); - aboutQtAct = new QAction(tr("About &Qt"), this); - connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); + aboutAct = new QAction(tr("&About"), this); + connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); + + aboutQtAct = new QAction(tr("About &Qt"), this); + connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt())); aboutPluginsAct = new QAction(tr("About &Plugins"), this); - connect(aboutPluginsAct, SIGNAL(triggered()), this, SLOT(aboutPlugins())); + connect(aboutPluginsAct, SIGNAL(triggered()), this, SLOT(aboutPlugins())); viewToolbarAct = new QAction (tr("&Toolbar"), this); connect(viewToolbarAct, SIGNAL(triggered()), this, SLOT(viewToolbar())); windowsTileAct = new QAction(tr("&Tile"), this); - connect(windowsTileAct, SIGNAL(triggered()), this, SLOT(windowsTile())); + connect(windowsTileAct, SIGNAL(triggered()), this, SLOT(windowsTile())); windowsCascadeAct = new QAction(tr("&Cascade"), this); - connect(windowsCascadeAct, SIGNAL(triggered()), this, SLOT(windowsCascade())); + connect(windowsCascadeAct, SIGNAL(triggered()), this, SLOT(windowsCascade())); } void MainWindow::createToolBars() { - mainToolBar = new QToolBar(this); - mainToolBar->addAction(openAct); - mainToolBar->addAction(saveAsAct); + mainToolBar = new QToolBar(this); + mainToolBar->setIconSize(QSize(32,32)); + mainToolBar->addAction(openAct); + mainToolBar->addAction(saveAsAct); + + renderToolBar = new QToolBar(this); + renderToolBar->setIconSize(QSize(32,32)); + renderToolBar->addAction(viewModePoints); + renderToolBar->addAction(viewModeWire); + renderToolBar->addAction(viewModeLines); + renderToolBar->addAction(viewModeFlatLines); + renderToolBar->addAction(viewModeFlat); + renderToolBar->addAction(viewModeSmooth); } void MainWindow::createMenus() { - fileMenu = menuBar()->addMenu(tr("&File")); - fileMenu->addAction(openAct); - fileMenu->addAction(saveAsAct); - fileMenu->addSeparator(); - fileMenu->addAction(exitAct); + fileMenu = menuBar()->addMenu(tr("&File")); + fileMenu->addAction(openAct); + fileMenu->addAction(saveAsAct); + fileMenu->addSeparator(); + fileMenu->addAction(exitAct); - filterMenu = menuBar()->addMenu(tr("&Filter")); + filterMenu = menuBar()->addMenu(tr("&Filter")); viewMenu = menuBar()->addMenu(tr("&View")); viewMenu->addAction(viewToolbarAct); - + windowsMenu = menuBar()->addMenu(tr("&Windows")); windowsMenu->addAction(windowsTileAct); windowsMenu->addAction(windowsCascadeAct); - menuBar()->addSeparator(); + menuBar()->addSeparator(); - helpMenu = menuBar()->addMenu(tr("&Help")); - helpMenu->addAction(aboutAct); - helpMenu->addAction(aboutQtAct); + helpMenu = menuBar()->addMenu(tr("&Help")); + helpMenu->addAction(aboutAct); + helpMenu->addAction(aboutQtAct); helpMenu->addAction(aboutPluginsAct); } void MainWindow::loadPlugins() { - pluginsDir = QDir(qApp->applicationDirPath()); + pluginsDir = QDir(qApp->applicationDirPath()); #if defined(Q_OS_WIN) - if (pluginsDir.dirName() == "debug" || pluginsDir.dirName() == "release") - pluginsDir.cdUp(); + if (pluginsDir.dirName() == "debug" || pluginsDir.dirName() == "release") + pluginsDir.cdUp(); #elif defined(Q_OS_MAC) - if (pluginsDir.dirName() == "MacOS") { - pluginsDir.cdUp(); - pluginsDir.cdUp(); - pluginsDir.cdUp(); - } + if (pluginsDir.dirName() == "MacOS") { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } #endif - pluginsDir.cd("plugins"); + pluginsDir.cd("plugins"); - foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { - QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); - QObject *plugin = loader.instance(); - if (plugin) { - MeshFilterInterface *iFilter = qobject_cast(plugin); - if (iFilter) - addToMenu(plugin, iFilter->filters(), filterMenu, SLOT(applyFilter())); - - pluginFileNames += fileName; - } - } + foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { + QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); + QObject *plugin = loader.instance(); + if (plugin) { + MeshFilterInterface *iFilter = qobject_cast(plugin); + if (iFilter) + addToMenu(plugin, iFilter->filters(), filterMenu, SLOT(applyFilter())); -// brushMenu->setEnabled(!brushActionGroup->actions().isEmpty()); -// shapesMenu->setEnabled(!shapesMenu->actions().isEmpty()); - filterMenu->setEnabled(!filterMenu->actions().isEmpty()); + pluginFileNames += fileName; + } + } + + // brushMenu->setEnabled(!brushActionGroup->actions().isEmpty()); + // shapesMenu->setEnabled(!shapesMenu->actions().isEmpty()); + filterMenu->setEnabled(!filterMenu->actions().isEmpty()); } void MainWindow::addToMenu(QObject *plugin, const QStringList &texts,QMenu *menu, const char *member, - QActionGroup *actionGroup) + QActionGroup *actionGroup) { - foreach (QString text, texts) { - QAction *action = new QAction(text, plugin); - connect(action, SIGNAL(triggered()), this, member); - menu->addAction(action); + foreach (QString text, texts) { + QAction *action = new QAction(text, plugin); + connect(action, SIGNAL(triggered()), this, member); + menu->addAction(action); - if (actionGroup) { - action->setCheckable(true); - actionGroup->addAction(action); - } - } + if (actionGroup) { + action->setCheckable(true); + actionGroup->addAction(action); + } + } } void MainWindow::applyFilter() { - QAction *action = qobject_cast(sender()); - MeshFilterInterface *iFilter = qobject_cast(action->parent()); - iFilter->applyFilter(action->text(), *(((GLArea *)(workspace->activeWindow()))->mm ), this); + QAction *action = qobject_cast(sender()); + MeshFilterInterface *iFilter = qobject_cast(action->parent()); + iFilter->applyFilter(action->text(), *(((GLArea *)(workspace->activeWindow()))->mm ), this); } diff --git a/src/meshlab/mainwindow.h b/src/meshlab/mainwindow.h index 1eb62623c..0e8f08bae 100644 --- a/src/meshlab/mainwindow.h +++ b/src/meshlab/mainwindow.h @@ -36,50 +36,59 @@ class GLArea; class MainWindow : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - MainWindow(); + MainWindow(); private slots: - + void open(QString fileName=QString()); - bool saveAs(); - void about(); - void aboutPlugins(); - void applyFilter(); + bool saveAs(); + void about(); + void aboutPlugins(); + void applyFilter(); void windowsTile(); void windowsCascade(); void viewToolbar(); private: - void createActions(); - void createMenus(); - void createToolBars(); - void loadPlugins(); - void addToMenu(QObject *plugin, const QStringList &texts, QMenu *menu, - const char *member, QActionGroup *actionGroup = 0); + void createActions(); + void createMenus(); + void createToolBars(); + void loadPlugins(); + void addToMenu(QObject *plugin, const QStringList &texts, QMenu *menu, + const char *member, QActionGroup *actionGroup = 0); - QWorkspace *workspace; + QWorkspace *workspace; - vector VM; - GLArea *paintArea; - QScrollArea *scrollArea; - QDir pluginsDir; - QStringList pluginFileNames; - QToolBar *mainToolBar; - //QToolBar *renderToolBar; - - QMenu *fileMenu; - QMenu *filterMenu; + vector VM; + GLArea *paintArea; + QScrollArea *scrollArea; + QDir pluginsDir; + QStringList pluginFileNames; + QToolBar *mainToolBar; + QToolBar *renderToolBar; + + QMenu *fileMenu; + QMenu *filterMenu; QMenu *viewMenu; QMenu *windowsMenu; - QMenu *helpMenu; - QAction *openAct; - QAction *saveAsAct; - QAction *exitAct; - QAction *aboutAct; - QAction *aboutQtAct; + QMenu *helpMenu; + + QAction *openAct; + QAction *saveAsAct; + + QAction *viewModePoints; + QAction *viewModeWire; + QAction *viewModeLines; + QAction *viewModeFlatLines; + QAction *viewModeFlat; + QAction *viewModeSmooth; + + QAction *exitAct; + QAction *aboutAct; + QAction *aboutQtAct; QAction *aboutPluginsAct; QAction *viewToolbarAct; QAction *windowsTileAct; diff --git a/src/meshlab/meshlab.qrc b/src/meshlab/meshlab.qrc index 3b7d2639f..4586b268a 100644 --- a/src/meshlab/meshlab.qrc +++ b/src/meshlab/meshlab.qrc @@ -1,6 +1,13 @@ - - - images/open.png - images/save.png + + + images\backlines.png + images\flat.png + images\flatlines.png + images\info.png + images\open.png + images\points.png + images\save.png + images\smooth.png + images\wire.png