From 4c671781ff582d8b63c2d171c5f5153f7851aa2e Mon Sep 17 00:00:00 2001 From: ouv Date: Thu, 25 Mar 2010 13:39:32 +0000 Subject: [PATCH] Issue 0020613: EDF 1106 : Modify Node Marker in SMESH and VISU --- doc/salome/gui/images/pref22.png | Bin 34291 -> 40064 bytes doc/salome/gui/images/pref33.png | Bin 65975 -> 73444 bytes doc/salome/gui/input/mesh_preferences.doc | 3 +- doc/salome/gui/input/postpro_preferences.doc | 2 + src/SVTK/SALOME_Actor.cxx | 75 ++- src/SVTK/SALOME_Actor.h | 29 +- src/SVTK/SVTK_DeviceActor.cxx | 70 ++- src/SVTK/SVTK_DeviceActor.h | 27 +- src/VTKViewer/Makefile.am | 36 +- src/VTKViewer/VTKViewer.qrc | 13 + src/VTKViewer/VTKViewer_DataSetMapper.cxx | 113 ++++ src/VTKViewer/VTKViewer_DataSetMapper.h | 73 +++ src/VTKViewer/VTKViewer_MarkerDef.h | 66 +++ src/VTKViewer/VTKViewer_MarkerDlg.cxx | 89 +++ src/VTKViewer/VTKViewer_MarkerDlg.h | 57 ++ src/VTKViewer/VTKViewer_MarkerUtils.cxx | 163 +++++ src/VTKViewer/VTKViewer_MarkerUtils.h | 50 ++ src/VTKViewer/VTKViewer_MarkerWidget.cxx | 256 ++++++++ src/VTKViewer/VTKViewer_MarkerWidget.h | 74 +++ src/VTKViewer/VTKViewer_PolyDataMapper.cxx | 593 +++++++++++++++++++ src/VTKViewer/VTKViewer_PolyDataMapper.h | 121 ++++ src/VTKViewer/resources/VTKViewer_images.ts | 36 ++ src/VTKViewer/resources/VTKViewer_msg_en.ts | 38 ++ src/VTKViewer/resources/marker_1.png | Bin 0 -> 239 bytes src/VTKViewer/resources/marker_2.png | Bin 0 -> 261 bytes src/VTKViewer/resources/marker_3.png | Bin 0 -> 282 bytes src/VTKViewer/resources/marker_4.png | Bin 0 -> 274 bytes src/VTKViewer/resources/marker_5.png | Bin 0 -> 266 bytes src/VTKViewer/resources/marker_6.png | Bin 0 -> 283 bytes src/VTKViewer/resources/marker_7.png | Bin 0 -> 282 bytes src/VTKViewer/resources/marker_8.png | Bin 0 -> 320 bytes src/VTKViewer/resources/marker_9.png | Bin 0 -> 300 bytes src/VTKViewer/textures/texture1.dat | 284 +++++++++ src/VTKViewer/textures/texture2.dat | 284 +++++++++ src/VTKViewer/textures/texture3.dat | 284 +++++++++ src/VTKViewer/textures/texture4.dat | 284 +++++++++ src/VTKViewer/textures/texture5.dat | 284 +++++++++ src/VTKViewer/textures/texture6.dat | 284 +++++++++ src/VTKViewer/textures/texture7.dat | 284 +++++++++ src/VTKViewer/textures/texture8.dat | 284 +++++++++ src/VTKViewer/textures/texture9.dat | 284 +++++++++ 41 files changed, 4520 insertions(+), 20 deletions(-) create mode 100644 src/VTKViewer/VTKViewer.qrc create mode 100644 src/VTKViewer/VTKViewer_DataSetMapper.cxx create mode 100644 src/VTKViewer/VTKViewer_DataSetMapper.h create mode 100644 src/VTKViewer/VTKViewer_MarkerDef.h create mode 100644 src/VTKViewer/VTKViewer_MarkerDlg.cxx create mode 100644 src/VTKViewer/VTKViewer_MarkerDlg.h create mode 100755 src/VTKViewer/VTKViewer_MarkerUtils.cxx create mode 100755 src/VTKViewer/VTKViewer_MarkerUtils.h create mode 100644 src/VTKViewer/VTKViewer_MarkerWidget.cxx create mode 100644 src/VTKViewer/VTKViewer_MarkerWidget.h create mode 100644 src/VTKViewer/VTKViewer_PolyDataMapper.cxx create mode 100644 src/VTKViewer/VTKViewer_PolyDataMapper.h create mode 100755 src/VTKViewer/resources/marker_1.png create mode 100755 src/VTKViewer/resources/marker_2.png create mode 100755 src/VTKViewer/resources/marker_3.png create mode 100755 src/VTKViewer/resources/marker_4.png create mode 100755 src/VTKViewer/resources/marker_5.png create mode 100755 src/VTKViewer/resources/marker_6.png create mode 100755 src/VTKViewer/resources/marker_7.png create mode 100755 src/VTKViewer/resources/marker_8.png create mode 100755 src/VTKViewer/resources/marker_9.png create mode 100644 src/VTKViewer/textures/texture1.dat create mode 100644 src/VTKViewer/textures/texture2.dat create mode 100644 src/VTKViewer/textures/texture3.dat create mode 100644 src/VTKViewer/textures/texture4.dat create mode 100644 src/VTKViewer/textures/texture5.dat create mode 100644 src/VTKViewer/textures/texture6.dat create mode 100644 src/VTKViewer/textures/texture7.dat create mode 100644 src/VTKViewer/textures/texture8.dat create mode 100644 src/VTKViewer/textures/texture9.dat diff --git a/doc/salome/gui/images/pref22.png b/doc/salome/gui/images/pref22.png index 154ad1b706b3887256bc9a17671aae5266591243..318d36deffff570906925a63626329ff093ca76e 100755 GIT binary patch literal 40064 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 literal 34291 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›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 C*PhV; literal 65975 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

qD{uCVO<=AbK#Iszf@d9g1J}K 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≠{I@(8_?{XUQAmOhFDnf zQ03mLxmMN2V^j8T0H$MYJt2j*GI(&1RB^T3k@HQKw43yFk5~4iL@hvi$Xs-*tqa?O zIeVQB3&zC9*?ECQf0YxSqCy)yfA^SOd9qY7n~~t_k*f{65N7necUrZ^tyES?X}#=D zv*ktWIID!iaRSOLC)lWxIg%e)i>z03--Ww}CTV?G#JMPAC;(8KRGZbO-+tW3uG6oX=%%28;;K=bQdM#)N*fO*`4|$+Re?)fPB&t8oqw?g+EZK{CvBG z^9#x_k`n>>)znau{s9ZoeuOjzPS{IiN(KQpKsq!=ry%2kPQ$B*ZToX_+l1pZ0rw%E znUHm0s{Q*i24%rx7dd2JE!yk7#_=q!L2;ct0So zlY%Lm{*LXCs5dDh`ei-Eo=0%b?Vo<9g4h^J(7*&#J>#3#9WliqHmpFgE^+?DPvcOd z`!O*wQ5^1%Bv5UZJanghsld!ezxYz&beznT3K{inpE2VsK{u7)XAj^% zRD?M0;cwxaM3pF^mkT=lTQ5gw;Z8E3@YT6a=-F;CQRL&Dei2GL{0XfbIIhUJT@(xg zTS*)D?!Er?(xceiC$4U3mK!Hcw(L6kI&H>RRbVT4EE1C>x%Q|3(+|0U+91qg{l`ZK zJqj15)daT2-*cq=CB2hpf8e(DOqs3#eh5kcxBFU&0E4^lCVo+8Y7}+#tGIQBjDP>t z@}~xcE&D=5aaiXY&5!BFucN3r6khsLAO>&V=(M;nuP(3_>>8C13w_`tt@ zua?!;|3>&$F4d|nUeTrUYH|i+eqLT)86m#D%7Ye`1E2aIS9F!<$`4xLY+L(rH?4N* z-65;JH5g!ZGn_%k0Jy2L;eIYy}wh ze&#p1bGBJpm7K?9h%rEaY46+%DKdq$>06fp`AECCpf+F~FD2m@o|uky3jHSqpT{q$ovQo|11YbI3CDk*sc^m7 zPMOe|JS80r`*xMuR!8#5 z`Pu0+<1^*;%V=N^-nny(-~h*zUAmFNyISUFRX9j{A{!fnPd3uiyJ1RQfLq6Q`QGC@ zyAT8YXnASAyXjiWx6$?$&6t)0IDsZocc@maS#t~+j?t%AZ}g0$ZMLx~C!QZ0yJ`m; zMbp6Mdro2R9)6om#a;uT44JE1w&By;me^zU&0#pfB#dJQm?sV)-EctWrOTJ^U*T{$ z8|H-n?cXTF>Rm5KR{u>Y60ipnMO|^S4+#m;VF2Dexi})-Y#VlBg#Ho2WpO)jqQYWA*4r7#pKz4e6G@e z<#HNA?*Fms?(Nk;h}8Xf?P-W@3-Z53;~!n7BcJ&TxllzC6pGCdGeP<)CMb!OA$t0m zCHE%X>X0`>{OQP^OHzh)i4rM9XRlt}k3c)sGHX~~6_}+G}EBF5)?u!)TX?7gWYOo5>%_)ru8*lYI_Uw?AfAiH^DSo`_6=Vr4^~b>yz@)zKA0%fid8o8no4E*;@8bMm3g&71TnC&gnxwe_3@)2*%2h~)<*Xrj z@=Eo$-3AlEp|fr)Cwq_u{s7LTuaMah+9&{2t;4kQ>M{*2MfSD?a0T%nK|&Kf1Maf= zE8gM|rP&Z-JDss}hS2*G1trWx$dradjtc3Q$7n=VRrj8keGhCms?*o!zX#1i?>zN_ z(igoGIk%TKUwLnWGB7IGY=K#SLuTqTHd-yG(s@sRyfF4(UHb+?2 zP5VI_F0Qptx-{H8vim4=6NkI*1tgXZ(B2?OL;GK^bl~e~ZzC zDj|kr4k=tp(j30T@a(c;{-?!mvs;XeW{=;06tH31U)>*sJfT|#U%y`F`1+2&V7SYF z!f@JE3i4<(@CXjtw_D@0AOolAMh8|ATRRU!iQz<7}kRYE`B=6(RgK7 zW5)2Di0yVXKwrMN<{F_mf6;TS;)gjBy9h}$I7(@5$M^qQn1?ndsOjU35+pE;0E9jl zmitQ!CjXJoJ-?*!irUuBPeV+96Ng681MDA4m;LaSg7(}Ix)5FFYh2UoBs50m$OksA zZcfx#1INN5c|Z#uBbrIbiQJvFR;l`-ZIqFD)_JHb+dgd@`Yt(t?4?I-9rvzYv-;Yh z>@$y(*Iw&>TN|NES(qguwCgr>!-TA9$Y}T_qMwH6ZmASsD=gnLJUqOEhi@~2Coc3# z1^=x0q8yJL&5?cB8#aLHkrr8)e5}paD_Clmv3v-@n6$u0>rxy=B6K7RDITj+rCwcL zZI?Q+h55y1x2=00^FO!v=$gdQB17D1JC3K%@5{_v#0Hi2SAWpc%uEf?z@}?jI*^yJ zM|ovwW4t`+w?C&SW96qY36`Vgz}?EK*=dW|kP}J>3OVB3)xZi`KMM ztoq``DgBka&hJJezC5evVpU0}y{(~ObDZ{(#mNb2 zCMu>g+iRmNc7H|%oG^Icpuw#xdHH)5_bD_SKW9xrDmbo787;MED`{4*A!g{8FwZw` zP7J(iX2842oDoiPiUsZY^9qiB+_J$$LZc9^(mls5;SZHt7?OB4*g~h12%#TZh7(OX zArRy7Xb{esM<3rqkoUW*xls~+FybiP>ZNvso4p!Z(($2yJn*O!LFam-OEDSSWO!rm zqV0AVYwV=hf9d(2@A&m9cp+2@ z8%ZSDM3s~)vDZ3^$h3zpy2bit0q~hy3&xk}H|tDwKwQiV@my~e$nf{PJ24fJB`q|y z6A3VfE)b-%J8_geR0j@U3YT~w@j|Q}YomBj>^1KfG*SWkhUf^Cg|JxOdFfF5NEQU3 z_BAweH%iVw+V1RnLyW0nzn7vGB!30HMWFF!QuJ4A=)PXV6J7^- z4F(gv!MtMiKeAt!mv3@h{OPhTobh1zLxM{E3*W3SLLOTf2ICT~zN&~$Q{M2uLYu@E z`@6_L9o(I)z_SdgEis()z5UJ&yLa!tPyXoM{d0D(`?K`hpp&%Ucn;eH?cYfK*lS4S zal^wY+WjcVJ7&7xl$IidL(u7L+$+o2sKQGv=Kr1(7k6W6}H6 zIUGIkd}(C)KR`}76D<(_!R<|Y+ypY>`4s3D&j*)<_@9oD$=xyeY5U3XYVn)#p3c#0BSJ4hYTw>@hylW!I26^tkQ z1WmU?4*w^}P+MqgMMQJ|CC!^IHu1Gd!O1?xY`VSEx|fb{wiEpKlPBj^RxPa}?XKs% zD)oIIvQJ;GI4#ePI~Kjq9Bh#&-Mf9e6U>trwUY(2<4)3htib+MC19l!NW~=K1ndEH z3BnInBMtBkk+%Wes30bqsN~;b53%mqOFE5+x=xKrj$2(t+u%xsR$;7^)}(K0+F0t7 z8zB}*s^1kA6}4xfR0T8C)Kc8y40$JQsP@YHb1PPB$t5%qh<4HJw=IOIjyNIUxyE8d zmdfkHcnuYMxsj4*k{J&OK+>0BuktG1zch!JK1u23bYiO?75@g5v1b4UrCy)g+^>R3 zUoe?`{n&cKPe_*+0Lv;8LNVo}B_ubwpyPyk{3-n@SA^_bZHiZ{PtCRHC1lx`1OnEA zDM?THfl8`=?4f36~3#Jl4z{}@v}oO(x9k!p z!{+?d={3o2p(C64J0vj5v6o^@@gWwLO)*l+8ON`^ePD2WPyS8q6u#%jy*+lONCZKL zi6~(BN#SI^0Jq{s?E4SThJC3&4PQuu0>c(8W0FJqX~#er5T=a3%i>mg*Vz6?$Aw9= zwKu`H(ybg=jNA0Y zuq)ypS^zeHY@k0W=mj=HBueO4!y?XB#V07RMv?s`9wPietwct?-ZwPVq!`}q2z%Z3_MtZR=5%fIDZVV?Rh#5*uJ#RStN(X6A$J#PBtH1Vh;C-*o$ zifM}z`1ofvH)~hci-g{HXfsVkMuh=RA2HTK?*aK70ZIMRn0Z@RTE5@HS>OaAA(Rkw zf@=}ILOT81=kR6d%JEHhEx!4YHmFX4d2r3KP4fhgN;}R|L8x{74L?|9O>JIf<8H?w z)MMbi|KYZf`0cjveQJwD8wg3f1_bZCTdX*5c2P0Fp=Qw zi^tE}KkQhzW>lzk;(0D%md3~nLKz$;b4e(n(bQmm^^v8s0yefY7jeH3dL8iEj7N?f zBC4U{u>%JW4jvp5G)>w^5}q61xx7OpTJ3HQ*^F>jn2+=*v@`79eZ=0jD+t{-0Y@s? zZewkl_RC~Fdh`W72^oPKfdha|RXNET?juT;a@Nfk-r{_ARn*x{&T^}quN*jh85*&F zlt1^&mgZ-#egE+Mq-EcBXzXZ?ZXgl8^Jr1w6y3ocJ64(Yk6a(KlKS`d1qBTQ16E`# zt-+|uH=Ug!LQLlyzwHeSd;vrYG!p!`&K3lq!@?w~P=(Z6BKiz|_?8qU={)hLnuquxQhyoG>#Z$zPd znGiEXQMCaWt$R(};a~78*F6F+#-D#%2@yKW8&RkUeJJkIJag1?gt6hgq{L-Mtykae zy@-;9+OVaFZmp~n^P}x+S8d;)q|DKH@>W-#J5u8+Wix*s|BDW;W7wxAyK&8{v$&mOsbs-w$8y3YLNxvxB!lSn%dBd&>ly+ANi_3>$QiX3mXuGPIqL`y6YQ)< zw@2wW^Yo=UL&<)|w^{=twFgi!ic=}Vxqz^NM=ckN9}@Ed>aAH<7WN3-U|wI$ zwdd>T17hsOl=(UoUUMMt2Q+qLZaKc1hE9Co%GtJTh2Ybc&51{b&8-M3Dbtv7t zfs*dQ*|;zDm$u0K>@m?>wcovxPpMkvtT!NKDY{eFKv~)>fTp~XureB-_P#JPRkd5l zDYj@+xXjP}8(SU!h_QOx^``$s%+Fz~u5T;ZR=qzZ8y~Nfb@fxnMF&KI#lT*|irsoT;DD3aXsmzI!{%J*UkB-`*mDKQ3rpE7blJ#8-9i{Z;jK*qzw6#q9{18$8@%xF;xsNxvM(u7!1GA+OaVTh+@voi^glepC zq-f!mtxEikEAQw-noU$vV4EzGSg5LW4q@WlvT0KtBCwgn)N;+E!1zXDuT|(1OjH`w z5h><5bxIw?ZSx1&LzRNYU=Udgwz*+S??ogGwm23od%U~NTAB8u3>Bmt0^Zhn&s4y_N0Ed#za+lQICC1 z*ip$%ipu?c&m+c9STED+lIK3IQVbSb$?v}(x1W1m%SI*Ko?rwc!N!nBKC6N)@Z$e4 zG#oF^S|n2N^C9hFu~3KkxUaSYEh#As4vS%OgNjO%+;h+J!$;~J9cNRPrhsbjAX&Sl zw3Ic^FoWLyyR6QQ8<*ynS~B3aVCCgiGAryBcegbwed0Pu7lSR4#^`xeDCdf_A7yPSkk_SGQJJ=AI02xxRn95oJe8goJg)w}P0uw7orOJ8ED zmQ=Vhdh!DKQ9VA49t07@ho2s9GX(0P!&=!pPd%c0hPoea-5ZY42MPcen*hRcqegP4JEe3pT@{nMYOyB8!q7ry-t&c5aJRWY#9(;jJ$VzG$)Paz!0bz&kV_^lFys_} z;;t6f?XsJ2Kd3G`0G_~;5sZm6id43&U?1`VUz^p7DGLS9^dF{~j$I2)n&hERvbdhy zhRsJ~3QcudwMfdY*JFCA=QKBN-Kqfi2Ns`1NQk=z7bHX%s#a!JmP6Y;(uVjrH=OmN zY|YS@Po-M{|M%kAvzO4L7`GQmE{%-F#2gVeW(dVcM|v|e5}v^=+aNvkiMwH4xU(nU zVMA~h523%-(TC?qTuMr*qIX^QhHW(8Z_^=pDNZtwPapG`k-zN2sE>0!t?B7rj$0Q9 zs?2!w4dae1#fXa@_0XdROQ|;^Bb6KRd&EzHB-Xj@zL^t5+%Z^F>TE}gbwh~*6fdli zU2^LgjIVMl_&HCT7gHnjupz^^MG5SfnSjIRPi8i^>Mhy|bkdO@^f@5qyWLU_Yx=L- zLeS{bF|zwe{P4=>WPC=UpYN$C2338g$+`>fdh}u6CCdZ2$gV_SdnR%imTj6PW?B;R zL)S&r1fE;TzfxYeJF@&n+De*A#KmoJuOqGN46J=#%ZO!SWoEtv4QN}IaUc;Bn`zi0 zg%q;}q)=GmUIZ}|hZY&)_Ig;LGLhFujL^YkNsKAp?(qj@+?U-AZ$%?6y1NQR-V3=P z7F9}ZA9|`#29Bj-PfyPmp`j_#B1;NLr98^p+1fiq={S3zX-UWPp%A|Wf`nSi#25^L zB2)Cr`V4nHI`U)Bu$9|%I)Y{!Ua-i&C}2^AZa}JX=7!_e+4#4PJYV~4i6pRjXj!?T zkxLmpK{w1NWPOJ=rq^2aD`zdS;5kq1&iLVVPit3A@Tr*KQ?~~YhZrDao5je|<)bxJ zh(&XtBR`vwrAVt_{kFxW*YID;*w0U!B_!fvvvP6Cy$jhF&7qMWtI>Yj)rhKJiSFag z^pO#>Y{oe94Z|gD#!|jK>^zcSl;otOo}zan!-?cO?B(wthu8)s2)HSH8#?ClSz{7| zs#=11EpFDmy)ch1cj}D`Lrze0tMdvnmF7`CxU%ofKcOHD&zeJv`Qc>MF1cG0_K>D3{vMa-&80+Knyn$#uGw^Ui8mc0JxKt#N9c?>F0Qwyam_oYVU zMU>OoIJ8Y*jg!57J1fm1jk=4ob6J3gM^V&+j(uWo78FB1au%X+`y@aN8g=h(UGGuo z!%h`_3OhpYc-F8vSr!qhbk*-VhP$YxD~_vC=!V8Y$!d>4ylLy{{svK#;;GwlX+o_G zYm~#m7qhakh@p?kP0kx&HBl~0?pq#x%4C(ZR1{HWHz?qE*2|ZAd9`t>%A~KDV_m^} zYqcD`Fr00KAH-l_CD+uhotr5rvQ{ikDC;02;IMsAB-U+x5GesCbf4028@=4EdFPD| zT@YQY_lv;51XQJZ!+Dvmj~>+$1N9Ei%YlLNO+I#I9s#uZVS$~P}(F0WviQPc}a@RHXI7X^QV^HYNRFX=;-LtoRHrh zo?g?A5Y%nHF$EC+H$i=dQ*s%AzHj*r_$+-bG3X-`R}pD06(2t;5NZ`fOLZV1*#<)# z*`hcU&y>rb$BGpRRzzs-yH`bZxe_YC)YpKC!puXJ>SsEOY(`ppC+BHPq`NGq_$wWyI3wua|J#;y(>7SZ{636gJrQFJuC7<&Ye5ggvq9bNM)S9hJ4KBBUU>4TGClvu16ETo1a=J z*o)Fy79m+9d4n98#tll8f@7!s2M~ZfI*9E@8GC1A_=PPPjb87tV+6nwvEkq{5!Vxb zU*3Y!_&f{CiVwvUi?_n-hJP|?hkk-DMQ6JS+9u8w_Ieunp z=tK>xkWfd24sV;)owrTqC#mS^lLK$%p-7T@wGFJusi5S8Gpn395v|=d32EdY1j57$ z29EE?q+c!VzTp!Ljzea_B95B5yUoc+lUvZn#w|4y+<8&ji!v8ZVIENCRYCmn2-ms` zk~qA-A({<^)#}x2Zj`6%y?(c*F+=qX=Q%ySSgiF?pjiCxe^i@(I?K)~_{~zMQU6RCDRhog7SoZ367CVNu1?=2sxAUFNQcNR7sq4r|CyhI=gA zvR9NAxu0BkvRi*K=ckQzb!EIpe%7vHrJ{B|-|T(LQ*3cZji*so8_Z|)=lv|DZGzWa z%#;6vQE^Yq*rcS0S7@SA0u7HrB<85dqmDKgSW)gN4u`r@|7*gQrc`;+g)vl_l7YgK zl+%tf+i19DB(nD`$mc#T))_J^TIdZ{~Q#UhuLI0Y!LRGm2yIg#e@| zOHBJcZA&YuZ((l-rcP`snL=!|cz|R2_JjzjXn-9EG~LoSMl>hqsjl{Jl>NbeQS#NZys!Fgm@2mEW z%vOrlYkK=Yj_Tv(pcq`$DBVb38exovT}a_mRJFO7H_()%9KUU|w^fiRSzKCK!qV+2 zoruy`ornSWkd?xQ(dp5L!kxD#glwf}kS6=bFu)V{j= zm7A{3N~Y~r%K=N&FlxaWdExO&!;n(EabTT*5#>cdz`*oW;A`)rWaao@JHP(?9(st?W_EQEtsMox9Kn(*p>e&3&(8evv#{*+OOd;ZWix}9udHac}& zHUT7(sc(YC5EA|REqcEyUjX48z;6+4&iS2{n>*vP?tW6N-Nl9XC|={?3Riw#0UnpT3he*Ilu2s|@c2_63?4+WK@bh!!m)w5(hk0h#=jEDV{I+-PT9Q+s-P9FZ z(wL&6PO+HYYSL>-#UGUnBo5#Bv@S;ORZf(&r*0-@CpfJj7(5(lN+ZJtq}U!j(%r+X zIZ3R;e48XmUn0UsT)$Bm3O}4$^*S*5{irirQc<;Os2T}>j-AG<;?J4~On>|K^TyRA zJB5K{1ry~}-pm8Z%=j=tEwmGF@+iu6)oKXFj$ zDn}~>1N(;!UZ1|BlCxy3ICtbJ$?4lh9LqaAM2v9`h4Y%poA%A|FX=7_cq$C>lU@$| z`j>2N7SBUNM@s@;GJ2IW#?1gLXsqzsT~2N*Dhw;M;7pc#CHYE zLP8qG?HP(*rvg5?IJ-CxMl><-2W8nBSh5KPMhnsvRMnE;-0; zt$OLwBjJUi6DiHtfaj|%&-}2#Fad>_TXbUe$dsDGBTMrzdK_Kr_{>bonEBoK4+g2M z`=4oKa;B>#QiNWv|EPL`XO7eB^0p16E2^_h)7Q|8wV+<#`NtpOsAs5Yvu6?tX@qWO zygdtdnZ=Q$#WHbQ&PJjIwI08*)GM;`yy<$=Hong4rKzC>0(*zmwdx6VRL4{!-XC5S}{OJ%6z`UsFXag*>+|Z%8>K%Mpk*>o2 zfQg|uF-FW&DpX+D6o%@GZ@t5t6|7Jh40IOeFM(26yO3k1UDlr~R--@RQw4a3b-Ku` zyHp<)oOtJpM1b$tyDz%!3B$0TsK`jY_G#k*D@PF_p`ZFL6Ez<{HlhiR$Nm&U-p6D9 z0?FV>N$pwj7<+<)|VqTN{{HOil6#cxYI(Fj!o{^{s#60c& znhbP;SHGry6v|onv9;g&&%zbzh$CXIqq|cu^Q*m#sPG0_(_fV&QmS2BF`tgNi!kdPzcWzQfLDOm<*O|f%JF=XCDi-K?K_ffx9 z2TF=jY_KIM+hYqQWs4+VN2IjKoPy_zpdcfL-83}u6tZ*~V@=M}jt~5OePa%}c$^Gw zfm&tqb9zlbg1AyC+lw8GiIp7@6CE~#Nz*n^dPt#$VOD&Y->{0A)`rPWt2`w7Z5f(v ztcUTarFPO*3#@ZuqZE?VRJtQ6FRPwq^t`yZSkr&S6;(}?a|(w-nH1d<$%(&j2;Qwm zSsv=B=dko7_a)bD-njMI;hOMOl$0_JHznzsp~#?2zzf(crj~i@mU|tpxnBGuhml>a z;8J&)drPH-W>(jiH#@9i)_f7RIbs)D=e~b>q`gvLtrM$L?e_~97uFzs#KByk2$BH; zg<6_ICpJ`b=-|N&47LzkcOY&qxN5jNIk$(VFmJ4ht0}5$X{m8^*@2?$!uj)kUeY3F zDl6eD5#=5Iq#TdH^|Qjux$Gnb`v=i%3TkQrh>MB)yd`(@wrx?$8)CyxZk(~lG8j9* zQBpY;v2-Qx-`~lnA+h?Gyp7W+O70W5Zoleu(|IhI3`!Zj;RRMr=YRZKpM-xci*G}o zgf=)%n@fJ#`qwh0nxwRZ#&-HP&le`_7%vSD5({LYuyGz%ZLX{Td_iim@(ZOSN%%dP z^@*IM*nq_Xja9^oJf`y>R_6cu+r>~OhG%(fO+UD0tuAOh#2!T=F+Z;Tt}`{*#Mv+@ z60>qejE8vPFB`+kpKP}ELlVRhukss?h&kZ5>zth~)l5E)zm{1tmGq)CJ#q})Ow1_U zj>=x8lH%J8n=@3MTgb?)9l%h}@cfGj>JoextlXOc-32#C2)Z^ep~H18=Ird|!n-() zhsTs}$f5FETr3DRLCW&v`)=vJj+stHG^~tb2#OTIfYzw0bimAN>9-}LyeaYCIp3BJ zndMOXx!DAK{@M1er4iUw$?YeKmMwaP7*gUHi5|ufiJ-3T?0c5`4tcO5dhFWX-kQ)B z6v7HIQgjQiP;_SF6kJ;X+os zk;KJ9tzkt7;Hg_qNfAP&7a_bjJOvRv_+O;1jx%!q4Y6Tq%d!tdP&uO*&GG9GU{rtM zDR-;@H{|5x`xrVODs)9hT!i8{g7fuY8=W6~;)p6LU%V;-BCoa#YcE6-V!^oCTDA?b zbLD}andEjQcN!saEPk0Dw0yUNLINj)cuiUpkr?()$4qG%4?Q>37>7;7mEhpYZQG24 zV}9H)Vdr$}ZaFhIKdth~0*D@6-P{^q9dU`f+`?hdk`;Wg{rmu`_O@K@7$^qf5FB>d zbKH3DAvqXh8VD#3jd@?!%5pZLh7cP6a46u|wR?=^M!bU~^j4QW)kL$JA*a=IG*L4M zz?vNi93RWyAY8qkkwk}$xOv1gdoh;GJZS--Kv&(RI!CP3XkD6MmJpMJ3x9H2-Gr87 z3y${-1#mOmW_z8Z6O!}9Q8+$B8+Q8i8`i3d3OQ`Jg^Q6MUT8QE40jc4VIZ>X{fFBo z;Q;wiQzMNY>0#li!%cDWqHt>~qS2t^~AJ?um4Q$}8)M6SPrCQuuZ7 z>+kV=JvjE36E(sShfR(?uevFZC6-6GdY_maKoSC<$Ca3yTVR3sFkOrFB%KL@Dg&_4 z;3;L>f9$l6;FI-&g6L0p$R|SquoK|R=HwlT1qFgUc~Q@i5HxDO7kw$u?awMxeRbzh z|Hx#2x>ZtI%(X)8PQxR1UpnD-p`Oiw2bJ@87>ag=yCv{j+FX z`ak{DF41HVHvhD20~(%&?^e*#6rRmtVuA#bXV<1B?avjZ;GbOK@#xX3E;guAQ6O}LiY~B8A?R-rN+w_0^?bCi zA_`%hfaTuFP`0>V_4mF5+}5(!C>x5F79jN*q6ES3QbXI-`KgkJxEbOZlJ&<|jjTmf z(D%tDf?)adG7JO4lIg8xWQ?*^wjpaBm}rY|6;cMM9kr0y;ujK<%;X;UVquB8+;>1u z6=~lwB~Ny>YuV;4;}vBb{#?u^PG~A3#&~`xy=JmJCY1Td1d!dbBixoBWQJSQMLiV~ zl-QG0^LxyXQY@DlWcn-=qB>M7n4PJ8Kab~VjQ-E(c#509{!gx9y3^IO@WfwKhzhY$ zph&(IdJ}-JtGl}*CyvJhfaYRD2eWtlC5O>1A6u zG^lB56V`3n^{MjCUqsCS6st7Cb~)Fzx3taGiPEz-M_0F*)klf}W>A8zlq~&OD5_cO z0{aG>s4IuK=SWtoWev9zao`I%e~0<$e1xvP zCSjRwZZ=luF_>hQ3>HxIBxnxf&pER2vUo;1E_O43f(pHN|301134`y<00q?4vyBzu z=;H2n-di%z3b@F)tw0QQC`J;dix;k#*QC_KD$vN2mjK`~AK7`6@2R9eRqFl4Dg3n& z)mHz>Lky?UA>7h>ZY9ok52XsptDtVi=B|1I(y2O}Wc{{5$+Px1M+ zw4-R==M(4?5Dom5SRyg(Q^2CfjgduA@QRSlWGx7t$TRoX>;Di@8i3WuQsv^!o6$u} z)9MHk;13FIHEQk<8u4Mwd}@@0l$2D3y}q^%a%Y(N?|gYlSV0zE!B;>)31IFA8nQhi z?+tq19{Ci9k8c15#52-Py-0mnFEaesCm1>K`{G!iZ9oMa2Me4)kXC(}7>u*e2&@@1 z)MC%PTTe_6`OFHXk20i@wQXcWB)5bS^xP-O&C9bfA_m{(55cp*-f_F#*ue5~1Xqg& z>&aQp@1vuffmJ=Gd6hyUhfvH<57zt>`n>^C!aJZ@@syA91;{W+B!{wo>tE~jz{Tx{ zAw~NW7*sU40(>6h2pS8lEw<4Ms?-QhxYf%wFp7cyB&u!3Boyh8QE^T!1F$Q{BrG(9 zo{?6{Me0V2bXK3k43l#&)=1lTI_c;bbhU+kpYq};pSszBY9b%m^# zYc44l=1qxbo(UU&>J>RZH842q_%wg31W1i-wA_u@D3m{N@q1$V{EZNN>`n^_na#LW zGoXFP6mtp8{gQLPq5iFGqcd1%wQTliQo_J`Fm==Z%;5vyl=;#1e~eG3g1?{>x5 zW5qWX!x8z0>4g%UAMb=!{Q9>|lwswStm(b6iOA{bHRF^I&Ld}#+nYDXKmYyWO_Y51 z@E-pepZTx5fPemN-n|Q1uHRF3W3mP5rOmM<6^oNvo}Fs`;fhSzFYlDFc{d@c4m9sVDc$pPC%|ad-QO6Z7%qZQ-HKiQJC;p-yzVGwT0++wmmmqkp0OW3?QYGFA8=TTl_b zh%8-rM)wmsf=Gm7AP#&Q(Hz?gW8omS)ROaMu~sRa0uGBg@2q_iyB<>=nf&llv@!Ft zGE@u(;4E)tYS)?XWA{B&-S&~105VDOl)v|H@2!%DZ3PI@X9CEiWIOKw0>wHVNA0tF z&=(lldQ_EuclV5h;YNSbudXf6IH4^=KVmQE$5+w>zx}9Z2LT7M$j9`hmeI>&_Zmvk ztqRf!y^WTK_#41J2915P)AC>TRi(!Q!j3bvR5o7ey$#f;57U55Rc7AGD9oO;pU?Pe z?yb(z(+08*?}&W;B}pO8DCZ-Zp4Mgp9dtI-si`fO2y=;?C+2-xK{xPD_gtQ;It zo;$lZHSe#dNb}$etojWIVW+}PmA5dGe^?9vemzEnT@B^^&+O?0#@5%rS+ijZmdkb* zlV5h1X6bLdx<8D>BfoN3sOp$=pvtheZC4~vbT zm@B`T-WpTvXPf$&%oA8Ood+L9r4es?+1$cHd#~4TGO#a-pHqJ@E6HYXI2$vXD}=gS zd*Z9EgaQ2|y`10wdv`0RJ+pJTA2ScrQ6DGTFU;uI_}XUlRtnhw^BP|Dm9;`G3xn=uu6JR8`L*of^jAwI_Mhq_R3u}MmI-?~C2hDcLvr}U(xxsoDHCAxI zPY7i1Or<=9>+Rob!cAFD4$M6({jZM)KC|Lzikw~Xx9p*(MpSXwjOFCzF-s&?zaggo z%`#=YNoY}tO)z*zY6gZBw7j28{9a+eRF$Jn(e-fc41}mj+IKFg`|U;})%3|syD37H zaw<2*!{A{vcaW|uL6c-9wKsy$Ap|m&D@6q#C#-lVm5qBg16(1Inq2;yMLq_kbEUjI zr}+P9ohSA|MKM4emKX$(UB+L@?>Sl9=fQ0$lgQZbeW4O}AE%z3Z8ul(ku*idm`Bz- z{<&Nw76^&%du6-(_YX`Z8>n3k4GNx2qZo)429m^VBk(WZ#l8)pShktrBpx~8k&xbp z6$Q5R_=Z%Y*wZob>(2Ub7yDJ6$*0M+k!Dl`CXYpne@6f-!Jss#GZ3xIn0-(PQHhY& z10Tnqt4<&i{`cGeJsbafGmx(Cf8DSeS|CB2;#MP{RwIsy1rE)E*g%sa)fP>wByf;1 zlWvwVj`CJfHVS3HG6ZczaN3;Me9OYbJTZi$VydVwK0XI^qMS;t`%+>CdyR}yfx zz3ZcG$b;4jWynO*C)W>{7w*PCeeIoc_N-UQbr#2Ut5++$yK)YIhBqUi<(w(O*CMA6 zD7)lrl|aEo-?9V0eR@jqKnpj(Bz`++92@#`fX;|{0*U{~;~*k5n$>>GV$k~ZRVQd- zG}cGI4PlZVfaeQaMEtW5Ceg11i6m7 z{L%wxl32Rsh~6)jf|ZF|)pdjC!)-JJ&bu{hGxQt8-Py{!y0oCbLkyuOqtImSIkohg z?v=gJU+CmTm&ek>tRn-d#AL(c(25qk3Kp|O*W759(V0PKqCnoZSKvIrUC+&{6=adD zW1rgM92O@7Wdx38_3E8}$UHO*SXM5>Y0p(ys<|25be~c<7DwO{&w$r*8b~^88*ppk zo$)|xLQGoquC>vdsF(=3N7%Kn&0DrLFs#g$$q5OsTD2~wbqNuRS(FyN))=bBRddrP zAx0lT5)}f0QLx+wR|zB}rmu612oJZMsNx$OG$~4cbdy*#W!5S5@kok3rI&3u6%enR z65<(|-DT6>pWzGv31X@;5#=jJ$jmxyZec&RoGA#OpyRuJB~@VO`a+mz>G*9P(4NK% zkzOT?HB3;@3&x`LYM>9oSACXhVjuwtY333c$k}J&C0^JbZy5&ZGUt<6gY8wHQUc)M zQAOhJA~mT;ecnjO_g#(X`c1Eh;bbLR)v#Gedz}%&zM6@NV7}ya_(ho|g*NuGhTAc5 z=N2e9q{(bU$J+|@(;4HGM>TH=Wvj634yLKwo#olQ`}dNipSK z|M;EEm~uM6?7qW%fsFkVNulj7`8FXaVANWg#&d{Lg+y{wxTF^_y_jKMh_FP7a}T%H zL2FzwwY+;}KD_d^0wPvAf4^F%;ATm%5l6+q(YHm27YNS$FfY!2b)>w{1n>Wkr$J$) z7M+{Q^QoL~JYeG66^Zwd*;GLnu-VpJrgm4^Q-+D#Jj4$bR*Rt7ApY3x{X1mmq~5|U z8FVr=ZIHO|B;j%$y>A@W#Fz0We8V2+ej`7Plpw8p%0lQZ#kbe^6G%_bsoG)ku&Jr&cngNj?dQ9rCL z4Ub0!TU&HdxF9(dPcbA*nbwsz7hXa7t`Fgx4T8Q2ceJk#p`xd4HmQ9cAqt2{YlN4j zEgINb)3*yxpco%B_f{O4Q@)|9`B}I+NZ6vaow!XDb?mh;Le51EndqI%?d|bE#u@d& zTvUAcAOq0FZbT*R;H;&djdnRLq`&@z9uXWOv@yy^U8{o+B<#b7ORb5#V)e`R3sc{{ zqz&L>7}(Wb)vF|@)2s_&0&zJCvu1gWJ2OVbD=&c+6rYEwP+d{Yh5BCWQs2u4U#$hQ9pofh-SlR5Q1agpO0T6I5|8}Zs>5zIk|5P& zn>m~Ok>{hhghV3{-CHIN_g93O<6bUxfBTkUvQl)N><At^wV1vzfUV$s&4k3dn_UxhKy^L35jS#7Dj2DveGZBrW3Fq z$j}T~NJC7@)@*(;0lV2(A@)70*jVETs&Q;!HMqC-IO)Lgj?BjyWe zCz9|%3qOtZSn;+ze$-Eyb0(y&AmP`nA6D^s7 zUGW`sqXRQPc@qe59*H`7?@G4~e2z=MSrahaoby&d1Xm6}j)Z8h9D`z!nv@4OF7?ix z-xr3JZ}7VcLw*+p*Q@ZrNO*79k%fYH07i@)4);7!1Dd)Ylu*gmiDW0P0{At=TyPy>+hZ8>HU zyvCi850*D|nuu7nO*yvL5zu60B%{#8&-T8s?y}WFurcbe4DH^h*N3h6vvA^*6}-(Btp^%e2otVBedJ^Hva8ia-R@6` z)2&!Ko>Q5G{Zq@A^GIM52oME>PUjS3r9j*lxI2LKz9c|&JnX@%SASNEtc*`<8@;c{ zz$`4R$(tbAaXqhpF0O`csn?RA3-J>KN(|7qYv3yc*m;2Xyl%o5VdhMxNZK2Z3XVme z>`8CacOc2e(Hkq1Lu2yO9g{Mq&#t_s%qxxrlxk~om6 z0A4RfkR(1;2J$#R4vRlUecL~Sp`AjuW1Ov3S-Uo>9GmIBe#>C&S!Jx<3tU}3CMvh< zMhzlH@937DR@F`4>QPfrqAOjKfM*f?H+gpK8jpVcdtp0>kxM+2fT$4;8)QQnG{(vj zo{pMzF%^2n1cm`$1XtiM%8pSCaMyfagaes$JV}n`J zhqL6Yh3^Yh(&C)Uf9p+aB4+CWlKK*}LaK5oYM=pn%FFs`=bj~4w}{h<&} zqPPD3{Q9uU$zdq4_xW_kY7*8X1a9xG5Z&);1KrB}ld`xZ&KUm3n#RuH?!cz&) zk2ft+=cuzDA8FS%HGS1E3~=J4^4>0AFjxd+9j86%Ibk_P$H_0e-ex4X_aEmZT`kE5 zT6P|b9*JNfTP39gMUkaRFT&GNMsF*D&A4+62ThoSs%|zQ6Nijkrb^A0$_@u&1jX{0 ziwNP~2(=r3EIjv}st^$TJS6zT#_}hFn+%#TyN`PB-u~vC@C~uqoi+(bJ|c`Hp!2`D z>KA)fUdvR=w4J%du9k5Lh0$~T3q@rOVyKn@$V~9Xs2MA&s+zC|?(;E&QCs!sE)A;= zGJZUdp#EVZeV#Zj0^h-syN#CjQyDe;5m+X6b82GvgYS*ZT|qWJ*ne>#2?#!*;Wv*2 zSJFK-Z4sk!IZOK59rMXHy+GK-AX;_*+(v&ntLw)nuz)#oip^&2;F7qZ#sDGr$p!wq z6*)CEwbapDzi+JMr!}neUpYdD^*tjY8>+aTs)teJo40NSW*o{S;r9|xHnln?Ik94j z31k=s7%fRS*m|mi2Tuq|dDl5Wpb3y$IW-OHog3+`Fa+G{FnzZTdw3mI;Hfsl6c(5t zz$m}U4y?=ZB#(d&BlHDmX{>eBnQH`-loF7|ow9-c4ko6E;o1?lF~HX#ajtPrMEPpU zUB4aUyR5j zfmvgy+tr5(LOdul3GEns%MA%BMe%r21|XwHiKL8&4hQNIxh>NeTX=Hg zW`dAS65(8pP~yhmaXl3zT0X6wYp&zWP77Q~Qim=Z53oJXRwE)TbkGc-hJj+n5GN_B zC_mV~EcBFBb^q~abwB;H{ge{LGG$%I(T}I4Q!|x0{Y~*ubl?P zS`Kp;h(Wj_D|0nm?iSxu9G4RQpMjP&0$cWbnzDad$7k=??p?nGkGOh3k?ZkfOO+f86Gf4NfJHuuyC;2x4?!1M@Q z&l&<;!umC;UwOHIeV+df9qFl*=znPRBmdZ zfBCKFo2Q(YIrn>4)OAbQ@GD!d$F45FUw!@Gt?0M4OV^~wKjnV={GAzas7kAEd;i1L zm%i^i|IH*+m55d@k&R(&%C}~00|TR+r;B5V z=<%oa+d&+|IbZ6?~^1TDmI zxSG827I49o+{G<7va2(=csVDj{QUj%WY*@BS!ct6w+O0+gF5^Sdye0~51P!(`8nz8 zGYjUM&cR{dmNqf|t21K%dHQ@x(91I*cQAyyH|+Ne3*MI_HhWFjY?-gpH=Qs4gyVozzm2>)aZJfPLs^B;>k*pxXZLq1$j+9*0_ zQF^h|tTo>n>+0sr01XxbCx?JW8C%Nd^ZR};+x@lZ3U~-{oyM|h8-;hcf;*EIAOABR WW&L^LaI{nk$TUw^KbLh*2~7aIJ_E-9 diff --git a/doc/salome/gui/input/mesh_preferences.doc b/doc/salome/gui/input/mesh_preferences.doc index e19ee4eb0..37c4792b9 100644 --- a/doc/salome/gui/input/mesh_preferences.doc +++ b/doc/salome/gui/input/mesh_preferences.doc @@ -73,7 +73,8 @@ number of segments on each edge

  • Color - allows to select the color of nodes. Click on the colored line to access to the \ref select_color_and_font_page "Select Color" dialog box.
  • -
  • Size - allows to define the size of nodes.
  • +
  • Type of marker - allows to define the shape of nodes.
  • +
  • Scale of marker - allows to define the size of nodes.
  • Elements
    • diff --git a/doc/salome/gui/input/postpro_preferences.doc b/doc/salome/gui/input/postpro_preferences.doc index a919373ec..2f7550fcc 100644 --- a/doc/salome/gui/input/postpro_preferences.doc +++ b/doc/salome/gui/input/postpro_preferences.doc @@ -164,6 +164,8 @@ selecting lines or arcs for representation of quadratic elements. application to build arcs.
    • Edge Color - allows selecting the color for representation of edges.
    • +
    • Type of marker - allows to choose a shape of point markers.
    • +
    • Scale of marker - allows to choose a scale of point markers.
    • Use Shading - when this option is checked, the objects will be displayed with shading.
    • Display only on creation - when this option is checked, all diff --git a/src/SVTK/SALOME_Actor.cxx b/src/SVTK/SALOME_Actor.cxx index 3d74ab9bc..604f25905 100644 --- a/src/SVTK/SALOME_Actor.cxx +++ b/src/SVTK/SALOME_Actor.cxx @@ -269,12 +269,15 @@ void SALOME_Actor ::AddToRender(vtkRenderer* theRenderer) { + // these two actors have to be added first + // for correct visualization of selection + theRenderer->AddActor( myHighlightActor.GetPointer() ); + theRenderer->AddActor( myPreHighlightActor.GetPointer() ); + Superclass::AddToRender(theRenderer); myRenderer = theRenderer; - theRenderer->AddActor( myPreHighlightActor.GetPointer() ); - theRenderer->AddActor( myHighlightActor.GetPointer() ); theRenderer->AddActor( myOutlineActor.GetPointer() ); theRenderer->AddActor( myNameActor.GetPointer() ); } @@ -286,10 +289,11 @@ void SALOME_Actor ::RemoveFromRender(vtkRenderer* theRenderer) { + theRenderer->RemoveActor( myHighlightActor.GetPointer() ); + theRenderer->RemoveActor( myPreHighlightActor.GetPointer() ); + Superclass::RemoveFromRender(theRenderer); - theRenderer->RemoveActor( myPreHighlightActor.GetPointer() ); - theRenderer->RemoveActor( myHighlightActor.GetPointer() ); theRenderer->RemoveActor( myOutlineActor.GetPointer() ); theRenderer->RemoveActor( myNameActor.GetPointer() ); } @@ -486,6 +490,8 @@ SALOME_Actor Selection_Mode aSelectionMode = theSelectionEvent->mySelectionMode; bool anIsChanged = (mySelectionMode != aSelectionMode); + myPreHighlightActor->SetMarkerEnabled( aSelectionMode == NodeSelection ); + vtkFloatingPointType x = theSelectionEvent->myX; vtkFloatingPointType y = theSelectionEvent->myY; vtkFloatingPointType z = 0.0; @@ -640,6 +646,8 @@ SALOME_Actor if ( !theIsHighlight ) return true; + myHighlightActor->SetMarkerEnabled( aSelectionMode == NodeSelection ); + vtkFloatingPointType x = theSelectionEvent->myX; vtkFloatingPointType y = theSelectionEvent->myY; vtkFloatingPointType z = 0.0; @@ -979,3 +987,62 @@ SALOME_Actor { myHighlightActor->SetProperty(theProperty); } + +/*! + Set standard point marker + \param theMarkerType type of the marker + \param theMarkerScale scale of the marker +*/ +void +SALOME_Actor +::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + myPreHighlightActor->SetMarkerStd( theMarkerType, theMarkerScale ); + myHighlightActor->SetMarkerStd( theMarkerType, theMarkerScale ); +} + +/*! + Set custom point marker + \param theMarkerId id of the marker texture + \param theMarkerTexture marker texture +*/ +void +SALOME_Actor +::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + myPreHighlightActor->SetMarkerTexture( theMarkerId, theMarkerTexture ); + myHighlightActor->SetMarkerTexture( theMarkerId, theMarkerTexture ); +} + +/*! + Get type of the point marker + \return type of the point marker +*/ +VTK::MarkerType +SALOME_Actor +::GetMarkerType() +{ + return myPreHighlightActor->GetMarkerType(); +} + +/*! + Get scale of the point marker + \return scale of the point marker +*/ +VTK::MarkerScale +SALOME_Actor +::GetMarkerScale() +{ + return myPreHighlightActor->GetMarkerScale(); +} + +/*! + Get texture identifier of the point marker + \return texture identifier of the point marker + */ +int +SALOME_Actor +::GetMarkerTexture() +{ + return myPreHighlightActor->GetMarkerTexture(); +} diff --git a/src/SVTK/SALOME_Actor.h b/src/SVTK/SALOME_Actor.h index 0c3e468a7..49527dfb7 100644 --- a/src/SVTK/SALOME_Actor.h +++ b/src/SVTK/SALOME_Actor.h @@ -39,7 +39,8 @@ class Handle(SALOME_InteractiveObject); #undef min #undef max -#include "VTKViewer_Actor.h" +#include +#include #include @@ -214,6 +215,32 @@ class SVTK_EXPORT SALOME_Actor : public VTKViewer_Actor void UpdateNameActors(); + //---------------------------------------------------------------------------- + //! Set standard point marker + virtual + void + SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + + //! Set custom point marker + virtual + void + SetMarkerTexture( int, VTK::MarkerTexture ); + + //! Get type of the point marker + virtual + VTK::MarkerType + GetMarkerType(); + + //! Get scale of the point marker + virtual + VTK::MarkerScale + GetMarkerScale(); + + //! Get texture identifier of the point marker + virtual + int + GetMarkerTexture(); + //---------------------------------------------------------------------------- //! To set up a picker for nodal selection (initialized by #SVTK_Renderer::AddActor) void diff --git a/src/SVTK/SVTK_DeviceActor.cxx b/src/SVTK/SVTK_DeviceActor.cxx index a3ce7ecef..72a4b89f0 100644 --- a/src/SVTK/SVTK_DeviceActor.cxx +++ b/src/SVTK/SVTK_DeviceActor.cxx @@ -39,8 +39,8 @@ #include #include -#include -#include +#include +#include #include @@ -68,7 +68,7 @@ SVTK_DeviceActor vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, myPolygonOffsetUnits); - myMapper = vtkDataSetMapper::New(); + myMapper = VTKViewer_DataSetMapper::New(); myShrinkFilter = vtkShrinkFilter::New(); @@ -141,9 +141,9 @@ SVTK_DeviceActor myPassFilter[ anId + 1 ]->SetInput( myPassFilter[ anId ]->GetOutput() ); anId++; // 5 - if(vtkDataSetMapper* aMapper = dynamic_cast(theMapper)){ + if(VTKViewer_DataSetMapper* aMapper = dynamic_cast(theMapper)){ aMapper->SetInput(myPassFilter[anId]->GetOutput()); - }else if(vtkPolyDataMapper* aMapper = dynamic_cast(theMapper)){ + }else if(VTKViewer_PolyDataMapper* aMapper = dynamic_cast(theMapper)){ aMapper->SetInput(myPassFilter[anId]->GetPolyDataOutput()); } } @@ -507,6 +507,8 @@ SVTK_DeviceActor break; } + SetMarkerEnabled( theMode == Points ); + myRepresentation = theMode; } @@ -652,7 +654,7 @@ SVTK_DeviceActor units = myPolygonOffsetUnits; } -vtkDataSetMapper* SVTK_DeviceActor::GetDataSetMapper() +VTKViewer_DataSetMapper* SVTK_DeviceActor::GetDataSetMapper() { return myMapper; } @@ -683,3 +685,59 @@ void SVTK_DeviceActor::SetQuadraticArcAngle(vtkFloatingPointType theMaxAngle){ vtkFloatingPointType SVTK_DeviceActor::GetQuadraticArcAngle(){ return myGeomFilter->GetQuadraticArcAngle(); } + +/*! + * Set point marker enabled + * \param theMarkerEnabled flag to enable/disable point marker + */ +void SVTK_DeviceActor::SetMarkerEnabled( bool theMarkerEnabled ) +{ + myMapper->SetMarkerEnabled( theMarkerEnabled ); +} + +/*! + * Set standard point marker + * \param theMarkerType type of the marker + * \param theMarkerScale scale of the marker + */ +void SVTK_DeviceActor::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + myMapper->SetMarkerStd( theMarkerType, theMarkerScale ); +} + +/*! + * Set custom point marker + * \param theMarkerId id of the marker texture + * \param theMarkerTexture marker texture + */ +void SVTK_DeviceActor::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + myMapper->SetMarkerTexture( theMarkerId, theMarkerTexture ); +} + +/*! + * Get type of the point marker + * \return type of the point marker + */ +VTK::MarkerType SVTK_DeviceActor::GetMarkerType() +{ + return myMapper->GetMarkerType(); +} + +/*! + Get scale of the point marker + \return scale of the point marker +*/ +VTK::MarkerScale SVTK_DeviceActor::GetMarkerScale() +{ + return myMapper->GetMarkerScale(); +} + +/*! + * Get texture identifier of the point marker + * \return texture identifier of the point marker + */ +int SVTK_DeviceActor::GetMarkerTexture() +{ + return myMapper->GetMarkerTexture(); +} diff --git a/src/SVTK/SVTK_DeviceActor.h b/src/SVTK/SVTK_DeviceActor.h index 4b7f106c7..d25a169f6 100644 --- a/src/SVTK/SVTK_DeviceActor.h +++ b/src/SVTK/SVTK_DeviceActor.h @@ -30,6 +30,7 @@ #include "SVTK.h" #include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" #include @@ -44,7 +45,7 @@ class vtkCell; class vtkDataSet; class vtkShrinkFilter; class vtkFeatureEdges; -class vtkDataSetMapper; +class VTKViewer_DataSetMapper; class vtkPassThroughFilter; namespace SVTK @@ -219,11 +220,31 @@ class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor SetShaded(bool theShaded); //@} + /** @name For marker management purpose */ + void + SetMarkerEnabled( bool ); + + void + SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + + void + SetMarkerTexture( int, VTK::MarkerTexture ); + + VTK::MarkerType + GetMarkerType(); + + VTK::MarkerScale + GetMarkerScale(); + + int + GetMarkerTexture(); + //@} + virtual void Render(vtkRenderer *, vtkMapper *); - vtkDataSetMapper* GetDataSetMapper(); + VTKViewer_DataSetMapper* GetDataSetMapper(); //---------------------------------------------------------------------------- //! Setting for displaying quadratic elements @@ -247,7 +268,7 @@ class SVTK_EXPORT SVTK_DeviceActor: public vtkLODActor std::vector myPassFilter; vtkShrinkFilter* myShrinkFilter; vtkFeatureEdges* myFeatureEdges; - vtkDataSetMapper* myMapper; + VTKViewer_DataSetMapper* myMapper; bool myIsShrinkable; bool myIsShrunk; diff --git a/src/VTKViewer/Makefile.am b/src/VTKViewer/Makefile.am index 7d94c6cc0..f453619b2 100755 --- a/src/VTKViewer/Makefile.am +++ b/src/VTKViewer/Makefile.am @@ -50,7 +50,13 @@ salomeinclude_HEADERS = \ VTKViewer_ViewModel.h \ VTKViewer_ViewWindow.h \ VTKViewer_Functor.h \ - VTKViewer_ArcBuilder.h + VTKViewer_ArcBuilder.h \ + VTKViewer_MarkerDef.h \ + VTKViewer_MarkerUtils.h \ + VTKViewer_MarkerWidget.h \ + VTKViewer_MarkerDlg.h \ + VTKViewer_PolyDataMapper.h \ + VTKViewer_DataSetMapper.h dist_libVTKViewer_la_SOURCES = \ VTKViewer_CellLocationsArray.cxx \ @@ -73,15 +79,26 @@ dist_libVTKViewer_la_SOURCES = \ VTKViewer_ViewModel.cxx \ VTKViewer_ConvexTool.cxx \ VTKViewer_ViewWindow.cxx \ - VTKViewer_ArcBuilder.cxx + VTKViewer_ArcBuilder.cxx \ + VTKViewer_MarkerUtils.cxx \ + VTKViewer_MarkerWidget.cxx \ + VTKViewer_MarkerDlg.cxx \ + VTKViewer_PolyDataMapper.cxx \ + VTKViewer_DataSetMapper.cxx MOC_FILES = \ VTKViewer_RenderWindow_moc.cxx \ VTKViewer_RenderWindowInteractor_moc.cxx \ VTKViewer_ViewManager_moc.cxx \ VTKViewer_ViewModel_moc.cxx \ - VTKViewer_ViewWindow_moc.cxx -nodist_libVTKViewer_la_SOURCES = $(MOC_FILES) + VTKViewer_ViewWindow_moc.cxx \ + VTKViewer_MarkerWidget_moc.cxx \ + VTKViewer_MarkerDlg_moc.cxx + +QRC_FILES = \ + qrc_VTKViewer.cxx + +nodist_libVTKViewer_la_SOURCES = $(MOC_FILES) $(QRC_FILES) dist_salomeres_DATA = \ resources/vtk_view_back.png \ @@ -98,7 +115,16 @@ dist_salomeres_DATA = \ resources/vtk_view_rotate.png \ resources/vtk_view_top.png \ resources/vtk_view_triedre.png \ - resources/vtk_view_zoom.png + resources/vtk_view_zoom.png \ + resources/marker_1.png \ + resources/marker_2.png \ + resources/marker_3.png \ + resources/marker_4.png \ + resources/marker_5.png \ + resources/marker_6.png \ + resources/marker_7.png \ + resources/marker_8.png \ + resources/marker_9.png nodist_salomeres_DATA = \ VTKViewer_images.qm \ diff --git a/src/VTKViewer/VTKViewer.qrc b/src/VTKViewer/VTKViewer.qrc new file mode 100644 index 000000000..02fa7468b --- /dev/null +++ b/src/VTKViewer/VTKViewer.qrc @@ -0,0 +1,13 @@ + + + textures/texture1.dat + textures/texture2.dat + textures/texture3.dat + textures/texture4.dat + textures/texture5.dat + textures/texture6.dat + textures/texture7.dat + textures/texture8.dat + textures/texture9.dat + + diff --git a/src/VTKViewer/VTKViewer_DataSetMapper.cxx b/src/VTKViewer/VTKViewer_DataSetMapper.cxx new file mode 100644 index 000000000..3abde031f --- /dev/null +++ b/src/VTKViewer/VTKViewer_DataSetMapper.cxx @@ -0,0 +1,113 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "VTKViewer_DataSetMapper.h" +#include "VTKViewer_PolyDataMapper.h" + +#include +#include + +vtkCxxRevisionMacro(VTKViewer_DataSetMapper, "Revision$"); +vtkStandardNewMacro(VTKViewer_DataSetMapper); + +//---------------------------------------------------------------------------- +VTKViewer_DataSetMapper::VTKViewer_DataSetMapper() +{ + this->MarkerEnabled = false; + this->MarkerType = VTK::MT_NONE; + this->MarkerScale = VTK::MS_NONE; + this->MarkerId = 0; +} + +//---------------------------------------------------------------------------- +VTKViewer_DataSetMapper::~VTKViewer_DataSetMapper() +{ +} + +//---------------------------------------------------------------------------- +void VTKViewer_DataSetMapper::Render(vtkRenderer *ren, vtkActor *act) +{ + // just to create VTKViewer_PolyDataMapper instead of vtkPolyDataMapper + if( this->PolyDataMapper == NULL ) + { + vtkDataSetSurfaceFilter *gf = vtkDataSetSurfaceFilter::New(); + VTKViewer_PolyDataMapper *pm = VTKViewer_PolyDataMapper::New(); + pm->SetInput(gf->GetOutput()); + + pm->SetMarkerEnabled( this->MarkerEnabled ); + if( this->MarkerType != VTK::MT_USER ) + pm->SetMarkerStd( this->MarkerType, this->MarkerScale ); + else + pm->SetMarkerTexture( this->MarkerId, this->MarkerTexture ); + + this->GeometryExtractor = gf; + this->PolyDataMapper = pm; + } + vtkDataSetMapper::Render(ren, act); +} + +//----------------------------------------------------------------------------- +void VTKViewer_DataSetMapper::SetMarkerEnabled( bool theMarkerEnabled ) +{ + this->MarkerEnabled = theMarkerEnabled; + if( this->PolyDataMapper ) + if( VTKViewer_PolyDataMapper* aMapper = dynamic_cast( this->PolyDataMapper ) ) + aMapper->SetMarkerEnabled( theMarkerEnabled ); +} + +//---------------------------------------------------------------------------- +void VTKViewer_DataSetMapper::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + this->MarkerType = theMarkerType; + this->MarkerScale = theMarkerScale; + if( this->PolyDataMapper ) + if( VTKViewer_PolyDataMapper* aMapper = dynamic_cast( this->PolyDataMapper ) ) + aMapper->SetMarkerStd( theMarkerType, theMarkerScale ); +} + +//---------------------------------------------------------------------------- +void VTKViewer_DataSetMapper::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + this->MarkerType = VTK::MT_USER; + this->MarkerId = theMarkerId; + this->MarkerTexture = theMarkerTexture; + if( this->PolyDataMapper ) + if( VTKViewer_PolyDataMapper* aMapper = dynamic_cast( this->PolyDataMapper ) ) + aMapper->SetMarkerTexture( theMarkerId, theMarkerTexture ); +} + +//----------------------------------------------------------------------------- +VTK::MarkerType VTKViewer_DataSetMapper::GetMarkerType() +{ + return this->MarkerType; +} + +//----------------------------------------------------------------------------- +VTK::MarkerScale VTKViewer_DataSetMapper::GetMarkerScale() +{ + return this->MarkerScale; +} + +//----------------------------------------------------------------------------- +int VTKViewer_DataSetMapper::GetMarkerTexture() +{ + return this->MarkerId; +} diff --git a/src/VTKViewer/VTKViewer_DataSetMapper.h b/src/VTKViewer/VTKViewer_DataSetMapper.h new file mode 100644 index 000000000..6ca357168 --- /dev/null +++ b/src/VTKViewer/VTKViewer_DataSetMapper.h @@ -0,0 +1,73 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKViewer_DATASETMAPPER_H +#define VTKViewer_DATASETMAPPER_H + +#include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" + +#include + +class VTKVIEWER_EXPORT VTKViewer_DataSetMapper : public vtkDataSetMapper +{ +public: + static VTKViewer_DataSetMapper *New(); + vtkTypeRevisionMacro(VTKViewer_DataSetMapper,vtkDataSetMapper); + + //! Set point marker enabled + void SetMarkerEnabled( bool ); + + //! Set standard point marker + void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + + //! Set custom point marker + void SetMarkerTexture( int, VTK::MarkerTexture ); + + //! Get type of the point marker + VTK::MarkerType GetMarkerType(); + + //! Get scale of the point marker + VTK::MarkerScale GetMarkerScale(); + + //! Get texture identifier of the point marker + int GetMarkerTexture(); + + //! Implement superclass render method. + void Render(vtkRenderer *ren, vtkActor *act); + +protected: + VTKViewer_DataSetMapper(); + ~VTKViewer_DataSetMapper(); + +private: + VTKViewer_DataSetMapper(const VTKViewer_DataSetMapper&); // Not implemented. + void operator=(const VTKViewer_DataSetMapper&); // Not implemented. + +private: + bool MarkerEnabled; + VTK::MarkerType MarkerType; + VTK::MarkerScale MarkerScale; + int MarkerId; + VTK::MarkerTexture MarkerTexture; +}; + +#endif diff --git a/src/VTKViewer/VTKViewer_MarkerDef.h b/src/VTKViewer/VTKViewer_MarkerDef.h new file mode 100644 index 000000000..73466bc11 --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerDef.h @@ -0,0 +1,66 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKVIEWER_MARKERDEF_H +#define VTKVIEWER_MARKERDEF_H + +#include +#include + +namespace VTK +{ + //! Type of standard marker for advanced rendering of vtk points + typedef int MarkerType; + const MarkerType MT_NONE = 0; + const MarkerType MT_POINT = 1; + const MarkerType MT_PLUS = 2; + const MarkerType MT_STAR = 3; + const MarkerType MT_O = 4; + const MarkerType MT_X = 5; + const MarkerType MT_O_POINT = 6; + const MarkerType MT_O_PLUS = 7; + const MarkerType MT_O_STAR = 8; + const MarkerType MT_O_X = 9; + const MarkerType MT_USER = 10; + + //! Scale of standard marker for advanced rendering of vtk points + typedef int MarkerScale; + const MarkerScale MS_NONE = 0; + const MarkerScale MS_10 = 1; + const MarkerScale MS_15 = 2; + const MarkerScale MS_20 = 3; + const MarkerScale MS_25 = 4; + const MarkerScale MS_30 = 5; + const MarkerScale MS_35 = 6; + const MarkerScale MS_40 = 7; + const MarkerScale MS_45 = 8; + const MarkerScale MS_50 = 9; + const MarkerScale MS_55 = 10; + const MarkerScale MS_60 = 11; + const MarkerScale MS_65 = 12; + const MarkerScale MS_70 = 13; + + typedef std::list MarkerTexture; + typedef std::pair MarkerData; + typedef std::map MarkerMap; +} + +#endif diff --git a/src/VTKViewer/VTKViewer_MarkerDlg.cxx b/src/VTKViewer/VTKViewer_MarkerDlg.cxx new file mode 100644 index 000000000..192c5dc1d --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerDlg.cxx @@ -0,0 +1,89 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "VTKViewer_MarkerDlg.h" +#include "VTKViewer_MarkerWidget.h" + +#include +#include + +/*! + * Class : VTKViewer_MarkerDlg + * Description : Dialog for specifying point marker parameters + */ + +/*! + Constructor +*/ +VTKViewer_MarkerDlg::VTKViewer_MarkerDlg( QWidget* theParent ) +: QtxDialog( theParent, true, true ) +{ + setWindowTitle( tr( "SET_MARKER_TLT" ) ); + + myMarkerWidget = new VTKViewer_MarkerWidget( mainFrame() ); + + QBoxLayout* aTopLayout = new QHBoxLayout( mainFrame() ); + aTopLayout->setSpacing( 0 ); + aTopLayout->setMargin( 0 ); + aTopLayout->addWidget( myMarkerWidget ); +} + +/*! + Destructor +*/ +VTKViewer_MarkerDlg::~VTKViewer_MarkerDlg() +{ +} + +void VTKViewer_MarkerDlg::setCustomMarkerMap( VTK::MarkerMap theMarkerMap ) +{ + myMarkerWidget->setCustomMarkerMap( theMarkerMap ); +} + +VTK::MarkerMap VTKViewer_MarkerDlg::getCustomMarkerMap() +{ + return myMarkerWidget->getCustomMarkerMap(); +} + +void VTKViewer_MarkerDlg::setStandardMarker( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + myMarkerWidget->setStandardMarker( theMarkerType, theMarkerScale ); +} + +void VTKViewer_MarkerDlg::setCustomMarker( int theId ) +{ + myMarkerWidget->setCustomMarker( theId ); +} + +VTK::MarkerType VTKViewer_MarkerDlg::getMarkerType() const +{ + return myMarkerWidget->getMarkerType(); +} + +VTK::MarkerScale VTKViewer_MarkerDlg::getStandardMarkerScale() const +{ + return myMarkerWidget->getStandardMarkerScale(); +} + +int VTKViewer_MarkerDlg::getCustomMarkerID() const +{ + return myMarkerWidget->getCustomMarkerID(); +} diff --git a/src/VTKViewer/VTKViewer_MarkerDlg.h b/src/VTKViewer/VTKViewer_MarkerDlg.h new file mode 100644 index 000000000..e23cf2369 --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerDlg.h @@ -0,0 +1,57 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKVIEWER_MARKERDLG_H +#define VTKVIEWER_MARKERDLG_H + +#include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" + +#include + +class VTKViewer_MarkerWidget; + +/*! + * Class : VTKViewer_MarkerDlg + * Description : Dialog for specifying point marker parameters + */ +class VTKVIEWER_EXPORT VTKViewer_MarkerDlg : public QtxDialog +{ + Q_OBJECT + +public: + VTKViewer_MarkerDlg( QWidget* = 0 ); + virtual ~VTKViewer_MarkerDlg(); + + void setCustomMarkerMap( VTK::MarkerMap ); + VTK::MarkerMap getCustomMarkerMap(); + + void setStandardMarker( VTK::MarkerType, VTK::MarkerScale ); + void setCustomMarker( int ); + VTK::MarkerType getMarkerType() const; + VTK::MarkerScale getStandardMarkerScale() const; + int getCustomMarkerID() const; + +private: + VTKViewer_MarkerWidget* myMarkerWidget; +}; + +#endif diff --git a/src/VTKViewer/VTKViewer_MarkerUtils.cxx b/src/VTKViewer/VTKViewer_MarkerUtils.cxx new file mode 100755 index 000000000..f8ef5efda --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerUtils.cxx @@ -0,0 +1,163 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "VTKViewer_MarkerUtils.h" + +// VTK Includes +#include + +// QT Includes +#include +#include +#include +#include + +using namespace std; + +namespace VTK +{ + bool LoadTextureData( const QString& theFileName, + VTK::MarkerScale theMarkerScale, + VTK::MarkerTexture& theMarkerTexture ) + { + theMarkerTexture.clear(); + + QFile aFile( theFileName ); + if( !aFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) + return false; + + bool ok; + int aWidth = 0, aHeight = 0; + + int aTextureIndex = theMarkerScale == VTK::MS_NONE ? 0 : (int)theMarkerScale-1; + int aCurrentTexture = 0; + + QTextStream aTextStream( &aFile ); + while( !aTextStream.atEnd() ) + { + QString aLine = aTextStream.readLine(); + if( aLine.isEmpty() ) + { + aCurrentTexture++; + continue; + } + + if( aCurrentTexture != aTextureIndex ) + continue; + + int aLineSize = aLine.size(); + for( int i = 0; i < aLineSize; i++ ) + { + ok = false; + unsigned int aPixel = QString( aLine.at( i ) ).toUInt( &ok ); + if( ok ) + theMarkerTexture.push_back( aPixel ); + } + if( aWidth == 0 ) + aWidth = aLineSize; + aHeight++; + } + + if( theMarkerTexture.size() != aWidth * aHeight ) + return false; + + theMarkerTexture.push_front( aWidth ); + theMarkerTexture.push_front( aHeight ); + return true; + } + + vtkSmartPointer MakeVTKImage( const VTK::MarkerTexture& theMarkerTexture, + bool theWhiteForeground ) + { + VTK::MarkerTexture::const_iterator anIter = theMarkerTexture.begin(); + + int aWidth = *anIter++; + int aHeight = *anIter++; + + vtkSmartPointer anImageData = vtkImageData::New(); + anImageData->Delete(); + + anImageData->SetExtent( 0, aWidth-1, 0, aHeight-1, 0, 0 ); + anImageData->SetScalarTypeToUnsignedChar(); + anImageData->SetNumberOfScalarComponents( 4 ); + anImageData->AllocateScalars(); + + unsigned char* aDataPtr = (unsigned char*)anImageData->GetScalarPointer(); + + int anId = 0; + int aSize = aWidth * aHeight * 4; + int aCoef = theWhiteForeground ? 1 : 0; + while( anId < aSize ) + { + int aValue = (*anIter++) * 255; + aDataPtr[ anId++ ] = aValue * aCoef; + aDataPtr[ anId++ ] = aValue * aCoef; + aDataPtr[ anId++ ] = aValue * aCoef; + aDataPtr[ anId++ ] = aValue; + } + anImageData->Update(); + + return anImageData; + } + + QImage ConvertToQImage( vtkImageData* theImageData ) + { + if( theImageData->GetScalarType() != VTK_UNSIGNED_CHAR ) + return QImage(); + + int extent[6]; + theImageData->GetExtent( extent ); + int width = extent[1] - extent[0] + 1; + int height = extent[3] - extent[2] + 1; + + QImage anImage(width, height, QImage::Format_ARGB32); + for( int i = 0; i < height; i++ ) + { + QRgb* bits = reinterpret_cast( anImage.scanLine(i) ); + unsigned char* row = static_cast( + theImageData->GetScalarPointer( extent[0], extent[2] + height - i - 1, extent[4] ) ); + for( int j = 0; j < width; j++ ) + { + unsigned char* data = &row[ j*4 ]; + bits[j] = qRgba( data[0], data[1], data[2], data[3] ); + } + } + return anImage; + } + + int GetUniqueId( const VTK::MarkerMap& theMarkerMap ) + { + int anId = 0; + while( anId++ < 100 ) { + bool anOk = true; + VTK::MarkerMap::const_iterator anIter = theMarkerMap.begin(); + for( ; anIter != theMarkerMap.end(); anIter++ ) { + if( anId == anIter->first ) { + anOk = false; + continue; + } + } + if( anOk ) + return anId; + } + return theMarkerMap.size() + 1; + } +} diff --git a/src/VTKViewer/VTKViewer_MarkerUtils.h b/src/VTKViewer/VTKViewer_MarkerUtils.h new file mode 100755 index 000000000..d2f475352 --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerUtils.h @@ -0,0 +1,50 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKVIEWER_MARKERUTILS_H +#define VTKVIEWER_MARKERUTILS_H + +#include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" + +// VTK Includes +#include + +class vtkImageData; + +class QImage; +class QString; + +namespace VTK +{ + VTKVIEWER_EXPORT bool LoadTextureData( const QString& theFileName, + VTK::MarkerScale theMarkerScale, + VTK::MarkerTexture& theTextureData ); + + VTKVIEWER_EXPORT vtkSmartPointer MakeVTKImage( const VTK::MarkerTexture& theTextureData, + bool theWhiteForeground = true ); + + VTKVIEWER_EXPORT QImage ConvertToQImage( vtkImageData* theImageData ); + + VTKVIEWER_EXPORT int GetUniqueId( const VTK::MarkerMap& theMarkerMap ); +} + +#endif diff --git a/src/VTKViewer/VTKViewer_MarkerWidget.cxx b/src/VTKViewer/VTKViewer_MarkerWidget.cxx new file mode 100644 index 000000000..123f201ea --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerWidget.cxx @@ -0,0 +1,256 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "VTKViewer_MarkerWidget.h" +#include "VTKViewer_MarkerUtils.h" + +#include + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#define MARGIN 9 +#define SPACING 6 + +/*! + * Class : VTKViewer_MarkerWidget + * Description : Widget for specifying point marker parameters + */ + +/*! + Constructor +*/ +VTKViewer_MarkerWidget::VTKViewer_MarkerWidget( QWidget* theParent ) +: QWidget( theParent ) +{ + QRadioButton* aStandardTypeRB = new QRadioButton( tr( "STANDARD_MARKER" ), this ); + QRadioButton* aCustomTypeRB = new QRadioButton( tr( "CUSTOM_MARKER" ), this ); + myTypeGroup = new QButtonGroup( this ); + myTypeGroup->addButton( aStandardTypeRB, 0 ); + myTypeGroup->addButton( aCustomTypeRB, 1 ); + + QHBoxLayout* aRadioLayout = new QHBoxLayout; + aRadioLayout->setMargin( 0 ); + aRadioLayout->setSpacing( SPACING ); + aRadioLayout->addWidget( aStandardTypeRB ); + aRadioLayout->addWidget( aCustomTypeRB ); + + // --- + + myWGStack = new QStackedWidget( this ); + myWGStack->setFrameStyle( QFrame::Box | QFrame::Sunken ); + + // --- + + QWidget* aStdWidget = new QWidget( myWGStack ); + + QLabel* aTypeLab = new QLabel( tr( "TYPE" ), aStdWidget ); + QLabel* aScaleLab = new QLabel( tr( "SCALE" ), aStdWidget ); + + myStdTypeCombo = new QtxComboBox( aStdWidget ); + myStdScaleCombo = new QtxComboBox( aStdWidget ); + + QGridLayout* aStdLayout = new QGridLayout; + aStdLayout->setMargin( MARGIN ); + aStdLayout->setSpacing( SPACING ); + aStdLayout->addWidget( aTypeLab, 0, 0 ); + aStdLayout->addWidget( myStdTypeCombo, 0, 1 ); + aStdLayout->addWidget( aScaleLab, 1, 0 ); + aStdLayout->addWidget( myStdScaleCombo, 1, 1 ); + aStdWidget->setLayout( aStdLayout ); + + // --- + + QWidget* aCustomWidget = new QWidget( myWGStack ); + + QLabel* aCustomLab = new QLabel( tr( "CUSTOM" ), aCustomWidget ); + myCustomTypeCombo = new QtxComboBox( aCustomWidget ); + QPushButton* aBrowseBtn = new QPushButton( tr( "BROWSE" ), aCustomWidget ); + + QGridLayout* aCustomLayout = new QGridLayout; + aCustomLayout->setMargin( MARGIN ); + aCustomLayout->setSpacing( SPACING ); + aCustomLayout->addWidget( aCustomLab, 0, 0 ); + aCustomLayout->addWidget( myCustomTypeCombo, 0, 1 ); + aCustomLayout->addWidget( aBrowseBtn, 0, 2 ); + aCustomLayout->setRowStretch( 1, 5 ); + aCustomWidget->setLayout( aCustomLayout ); + + // --- + + myWGStack->insertWidget( 0, aStdWidget ); + myWGStack->insertWidget( 1, aCustomWidget ); + + // --- + + QVBoxLayout* aTopLayout = new QVBoxLayout; + aTopLayout->setMargin( MARGIN ); + aTopLayout->setSpacing( SPACING ); + aTopLayout->addLayout( aRadioLayout ); + aTopLayout->addWidget( myWGStack ); + setLayout( aTopLayout ); + + // --- + + connect( myTypeGroup, SIGNAL( buttonClicked( int ) ), myWGStack, SLOT( setCurrentIndex( int ) ) ); + connect( aBrowseBtn, SIGNAL( clicked() ), this, SLOT( browse() ) ); + + // --- + + aStandardTypeRB->setChecked( true ); + init(); +} + +/*! + Destructor +*/ +VTKViewer_MarkerWidget::~VTKViewer_MarkerWidget() +{ +} + +void VTKViewer_MarkerWidget::setCustomMarkerMap( VTK::MarkerMap theMarkerMap ) +{ + myCustomMarkerMap = theMarkerMap; + + VTK::MarkerMap::const_iterator it = theMarkerMap.begin(), itEnd = theMarkerMap.end(); + for( ; it != itEnd; it++ ) + { + int anId = it->first; + VTK::MarkerData aMarkerData = it->second; + QPixmap aPixmap = markerFromData( aMarkerData ); + if( !aPixmap.isNull() ) + { + myCustomTypeCombo->addItem( aPixmap, QString::number( anId ) ); + myCustomTypeCombo->setId( myCustomTypeCombo->count()-1, anId ); + } + } +} + +VTK::MarkerMap VTKViewer_MarkerWidget::getCustomMarkerMap() +{ + return myCustomMarkerMap; +} + +void VTKViewer_MarkerWidget::setStandardMarker( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + if ( theMarkerType > VTK::MT_NONE && theMarkerType < VTK::MT_USER ) { + myTypeGroup->button( 0 )->setChecked( true ); + myWGStack->setCurrentIndex( 0 ); + myStdTypeCombo->setCurrentIndex( (int)theMarkerType-1 ); + int aMarkerScale = std::max( (int)VTK::MS_10, std::min( (int)VTK::MS_70, (int)theMarkerScale ) ); + myStdScaleCombo->setCurrentIndex( aMarkerScale-1 ); + } +} + +void VTKViewer_MarkerWidget::setCustomMarker( int theId ) +{ + if ( theId > 0 ) { + myTypeGroup->button( 1 )->setChecked( true ); + myWGStack->setCurrentIndex( 1 ); + addTexture( theId ); + myCustomTypeCombo->setCurrentId( theId ); + } +} + +VTK::MarkerType VTKViewer_MarkerWidget::getMarkerType() const +{ + return myWGStack->currentIndex() == 0 ? (VTK::MarkerType)myStdTypeCombo->currentId() : VTK::MT_USER; +} + +VTK::MarkerScale VTKViewer_MarkerWidget::getStandardMarkerScale() const +{ + return myWGStack->currentIndex() == 0 ? (VTK::MarkerScale)myStdScaleCombo->currentId() : VTK::MS_NONE; +} + +int VTKViewer_MarkerWidget::getCustomMarkerID() const +{ + return myWGStack->currentIndex() == 1 ? myCustomTypeCombo->currentId() : 0; +} + +void VTKViewer_MarkerWidget::init() +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + + for ( int i = VTK::MT_POINT; i < VTK::MT_USER; i++ ) { + QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i ); + QPixmap pixmap = resMgr->loadPixmap( "VTKViewer", tr( qPrintable( icoFile ) ) ); + myStdTypeCombo->addItem( pixmap, QString() ); + myStdTypeCombo->setId( myStdTypeCombo->count()-1, i ); + } + + for ( int i = VTK::MS_10; i <= VTK::MS_70; i++ ) { + myStdScaleCombo->addItem( QString::number( (i-1)*0.5 + 1.0 ) ); + myStdScaleCombo->setId( myStdScaleCombo->count()-1, i ); + } +} + +void VTKViewer_MarkerWidget::addTexture( int id, bool select ) +{ + if ( id > 0 && myCustomTypeCombo->index( id ) == -1 && + myCustomMarkerMap.find( id ) != myCustomMarkerMap.end() ) { + VTK::MarkerData aMarkerData = myCustomMarkerMap[ id ]; + QPixmap pixmap = markerFromData( aMarkerData ); + if( !pixmap.isNull() ) { + myCustomTypeCombo->addItem( pixmap, QString::number( id ) ); + myCustomTypeCombo->setId( myCustomTypeCombo->count()-1, id ); + if ( select ) myCustomTypeCombo->setCurrentId( id ); + } + } +} + +QPixmap VTKViewer_MarkerWidget::markerFromData( const VTK::MarkerData& theMarkerData ) +{ + const VTK::MarkerTexture& aMarkerTexture = theMarkerData.second; + vtkSmartPointer anImageData = VTK::MakeVTKImage( aMarkerTexture, false ); + + QImage anImage = VTK::ConvertToQImage( anImageData.GetPointer() ); + if( anImage.isNull() ) + return QPixmap(); + + return QPixmap::fromImage( anImage ); +} + +void VTKViewer_MarkerWidget::browse() +{ + QStringList filters; + filters << tr( "Texture files (*.dat)" ) << tr( "All files (*)" ); + QString aFileName = SUIT_Session::session()->activeApplication()->getFileName( true, QString(), filters.join( ";;" ), tr( "LOAD_TEXTURE_TLT" ), this ); + if ( !aFileName.isEmpty() ) { + VTK::MarkerTexture aMarkerTexture; + if ( VTK::LoadTextureData( aFileName, VTK::MS_NONE, aMarkerTexture ) ) { + int anId = VTK::GetUniqueId( myCustomMarkerMap ); + VTK::MarkerData& aMarkerData = myCustomMarkerMap[ anId ]; + aMarkerData.first = aFileName.toStdString(); + aMarkerData.second = aMarkerTexture; + addTexture( anId, true ); + } + } +} diff --git a/src/VTKViewer/VTKViewer_MarkerWidget.h b/src/VTKViewer/VTKViewer_MarkerWidget.h new file mode 100644 index 000000000..2268885ab --- /dev/null +++ b/src/VTKViewer/VTKViewer_MarkerWidget.h @@ -0,0 +1,74 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKVIEWER_MARKERWIDGET_H +#define VTKVIEWER_MARKERWIDGET_H + +#include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" + +#include + +class QButtonGroup; +class QStackedWidget; + +class QtxComboBox; + +/*! + * Class : VTKViewer_MarkerWidget + * Description : Widget for specifying point marker parameters + */ +class VTKVIEWER_EXPORT VTKViewer_MarkerWidget : public QWidget +{ + Q_OBJECT + +public: + VTKViewer_MarkerWidget( QWidget* ); + virtual ~VTKViewer_MarkerWidget(); + + void setCustomMarkerMap( VTK::MarkerMap ); + VTK::MarkerMap getCustomMarkerMap(); + + void setStandardMarker( VTK::MarkerType, VTK::MarkerScale ); + void setCustomMarker( int ); + VTK::MarkerType getMarkerType() const; + VTK::MarkerScale getStandardMarkerScale() const; + int getCustomMarkerID() const; + +private: + void init(); + void addTexture( int, bool = false ); + QPixmap markerFromData( const VTK::MarkerData& ); + +private slots: + void browse(); + +private: + QButtonGroup* myTypeGroup; + QStackedWidget* myWGStack; + QtxComboBox* myStdTypeCombo; + QtxComboBox* myStdScaleCombo; + QtxComboBox* myCustomTypeCombo; + + VTK::MarkerMap myCustomMarkerMap; +}; + +#endif diff --git a/src/VTKViewer/VTKViewer_PolyDataMapper.cxx b/src/VTKViewer/VTKViewer_PolyDataMapper.cxx new file mode 100644 index 000000000..6373cd0cd --- /dev/null +++ b/src/VTKViewer/VTKViewer_PolyDataMapper.cxx @@ -0,0 +1,593 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#include "VTKViewer_PolyDataMapper.h" +#include "VTKViewer_MarkerUtils.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef WNT +# ifndef GLX_GLXEXT_LEGACY +# define GLX_GLXEXT_LEGACY +# endif +# include +# include +#else +# include +#endif + +#ifndef VTK_IMPLEMENT_MESA_CXX +vtkCxxRevisionMacro(VTKViewer_PolyDataMapper, "Revision$"); +vtkStandardNewMacro(VTKViewer_PolyDataMapper); +#endif + +// some definitions for what the polydata has in it +#define VTK_PDPSM_COLORS 0x0001 +#define VTK_PDPSM_CELL_COLORS 0x0002 +#define VTK_PDPSM_POINT_TYPE_FLOAT 0x0004 +#define VTK_PDPSM_POINT_TYPE_DOUBLE 0x0008 +#define VTK_PDPSM_NORMAL_TYPE_FLOAT 0x0010 +#define VTK_PDPSM_NORMAL_TYPE_DOUBLE 0x0020 +#define VTK_PDPSM_OPAQUE_COLORS 0x0040 + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#endif + +#ifndef GL_ARB_point_sprite +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif + +#ifndef GL_ARB_vertex_buffer_object +typedef ptrdiff_t GLsizeiptrARB; + +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_STATIC_DRAW_ARB 0x88E4 +#endif + +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); + +static PFNGLGENBUFFERSARBPROC vglGenBuffersARB = NULL; +static PFNGLBINDBUFFERARBPROC vglBindBufferARB = NULL; +static PFNGLBUFFERDATAARBPROC vglBufferDataARB = NULL; +static PFNGLDELETEBUFFERSARBPROC vglDeleteBuffersARB = NULL; + +#ifndef WNT +#define GL_GetProcAddress( x ) glXGetProcAddressARB( (const GLubyte*)x ) +#else +#define GL_GetProcAddress( x ) wglGetProcAddress( (const LPCSTR)x ) +#endif + +bool InitializeBufferExtensions() +{ + vglGenBuffersARB = (PFNGLGENBUFFERSARBPROC)GL_GetProcAddress( "glGenBuffersARB" ); + if( !vglGenBuffersARB ) + return false; + + vglBindBufferARB = (PFNGLBINDBUFFERARBPROC)GL_GetProcAddress( "glBindBufferARB" ); + if( !vglBindBufferARB ) + return false; + + vglBufferDataARB = (PFNGLBUFFERDATAARBPROC)GL_GetProcAddress( "glBufferDataARB" ); + if( !vglBufferDataARB ) + return false; + + vglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)GL_GetProcAddress( "glDeleteBuffersARB" ); + if( !vglDeleteBuffersARB ) + return false; + + return true; +}; + +static bool IsBufferExtensionsInitialized = InitializeBufferExtensions(); + +//----------------------------------------------------------------------------- +VTKViewer_PolyDataMapper::VTKViewer_PolyDataMapper() +{ + Q_INIT_RESOURCE( VTKViewer ); + + this->ExtensionsInitialized = 0; + + this->PointSpriteTexture = 0; + + this->MarkerEnabled = false; + this->MarkerType = VTK::MT_NONE; + this->MarkerScale = VTK::MS_NONE; + this->MarkerId = 0; +} + +//----------------------------------------------------------------------------- +VTKViewer_PolyDataMapper::~VTKViewer_PolyDataMapper() +{ + if( PointSpriteTexture > 0 ) + glDeleteTextures( 1, &PointSpriteTexture ); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::SetMarkerEnabled( bool theMarkerEnabled ) +{ + if( this->MarkerEnabled == theMarkerEnabled ) + return; + + this->MarkerEnabled = theMarkerEnabled; + this->Modified(); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::SetMarkerStd( VTK::MarkerType theMarkerType, VTK::MarkerScale theMarkerScale ) +{ + if( this->MarkerType == theMarkerType && this->MarkerScale == theMarkerScale ) + return; + + this->MarkerType = theMarkerType; + this->MarkerScale = theMarkerScale; + + if( this->MarkerType == VTK::MT_NONE || this->MarkerType == VTK::MT_USER ) { + this->ImageData = NULL; + this->Modified(); + return; + } + + int aMarkerType = (int)this->MarkerType; + int aMarkerScale = (int)this->MarkerScale; + + int anId = (int)VTK::MS_70 * aMarkerType + aMarkerScale; + + if( this->StandardTextures.find( anId ) == this->StandardTextures.end() ) + { + QString aFileName = QString( ":/textures/texture%1.dat" ).arg( aMarkerType ); + VTK::MarkerTexture aMarkerTexture; + if( VTK::LoadTextureData( aFileName, theMarkerScale, aMarkerTexture ) ) + this->StandardTextures[ anId ] = VTK::MakeVTKImage( aMarkerTexture ); + } + + this->ImageData = this->StandardTextures[ anId ]; + this->Modified(); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMarkerTexture ) +{ + if( this->MarkerType == VTK::MT_USER && this->MarkerId == theMarkerId ) + return; + + this->MarkerType = VTK::MT_USER; + this->MarkerId = theMarkerId; + + if( this->CustomTextures.find( theMarkerId ) == this->CustomTextures.end() ) + this->CustomTextures[ theMarkerId ] = VTK::MakeVTKImage( theMarkerTexture ); + + this->ImageData = this->CustomTextures[ theMarkerId ]; + this->Modified(); +} + +//----------------------------------------------------------------------------- +VTK::MarkerType VTKViewer_PolyDataMapper::GetMarkerType() +{ + return this->MarkerType; +} + +//----------------------------------------------------------------------------- +VTK::MarkerScale VTKViewer_PolyDataMapper::GetMarkerScale() +{ + return this->MarkerScale; +} + +//----------------------------------------------------------------------------- +int VTKViewer_PolyDataMapper::GetMarkerTexture() +{ + return this->MarkerId; +} + +//----------------------------------------------------------------------------- +bool VTKViewer_PolyDataMapper::InitExtensions() +{ + if( this->ExtensionsInitialized ) + return true; + + InitializeBufferExtensions(); + + char* ext = (char*)glGetString( GL_EXTENSIONS ); + if( !IsBufferExtensionsInitialized || + strstr( ext, "GL_ARB_point_sprite" ) == NULL || + strstr( ext, "GL_ARB_vertex_buffer_object" ) == NULL ) + { + vtkWarningMacro(<<"Initializing ARB extensions failed"); + return false; + } + + this->ExtensionsInitialized = 1; + return true; +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::InitPointSprites() +{ + glEnable( GL_POINT_SPRITE_ARB ); + glEnable( GL_VERTEX_PROGRAM_POINT_SIZE_ARB ); + + glPushAttrib( GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT ); + + glDepthFunc( GL_LESS ); + glEnable( GL_DEPTH_TEST ); + + glEnable( GL_BLEND ); + glBlendFunc( GL_SRC_ALPHA, GL_ONE ); + + glEnable( GL_ALPHA_TEST ); + glAlphaFunc( GL_GREATER, 0.0 ); + + glDisable( GL_LIGHTING ); + + glDisable( GL_COLOR_MATERIAL ); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::CleanupPointSprites() +{ + glPopAttrib(); + + glDisable( GL_VERTEX_PROGRAM_POINT_SIZE_ARB ); + glDisable( GL_POINT_SPRITE_ARB ); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::InitTextures() +{ + if( !this->ImageData.GetPointer() ) + return; + + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); + glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + + int* aSize = this->ImageData->GetDimensions(); + unsigned char* dataPtr = (unsigned char*)this->ImageData->GetScalarPointer(); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, aSize[0], aSize[1], 0, + GL_RGBA, GL_UNSIGNED_BYTE, dataPtr ); + + //glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glEnable( GL_TEXTURE_2D ); + glTexEnvf( GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE ); + glBindTexture( GL_TEXTURE_2D, this->PointSpriteTexture ); +} + +//----------------------------------------------------------------------------- +void VTKViewer_PolyDataMapper::RenderPiece( vtkRenderer* ren, vtkActor* act ) +{ + bool isUsePointSprites = this->MarkerEnabled && this->MarkerType != VTK::MT_NONE; + if( isUsePointSprites ) + { + this->InitExtensions(); + this->InitPointSprites(); + this->InitTextures(); + } + + MAPPER_SUPERCLASS::RenderPiece( ren, act ); + + if( isUsePointSprites ) + this->CleanupPointSprites(); +} + +//----------------------------------------------------------------------------- +// Definition of structures and fuctions used in Draw() method +namespace VTK +{ + //----------------------------------------------------------------------------- + struct TVertex + { + GLfloat r, g, b, a; + GLfloat vx, vy, vz; + }; + + //----------------------------------------------------------------------------- + struct TColorFunctorBase + { + vtkFloatingPointType myAlpha; + + TColorFunctorBase( vtkProperty* theProperty ) + { + myAlpha = theProperty->GetOpacity(); + } + + virtual + void + get( TVertex& theVertex, vtkIdType thePointId, vtkIdType theCellId ) = 0; + }; + + //----------------------------------------------------------------------------- + struct TPropertyColor : TColorFunctorBase + { + vtkFloatingPointType myColor[3]; + + TPropertyColor( vtkProperty* theProperty ): + TColorFunctorBase( theProperty ) + { + theProperty->GetColor( myColor ); + } + + virtual + void + get( TVertex& theVertex, vtkIdType thePointId, vtkIdType theCellId ) + { + theVertex.r = myColor[0]; + theVertex.g = myColor[1]; + theVertex.b = myColor[2]; + theVertex.a = myAlpha; + } + }; + + //----------------------------------------------------------------------------- + struct TColors2Color : TColorFunctorBase + { + vtkUnsignedCharArray* myColors; + + TColors2Color( vtkProperty* theProperty, + vtkUnsignedCharArray* theColors ): + TColorFunctorBase( theProperty ), + myColors( theColors ) + {} + + virtual + void + get( TVertex& theVertex, vtkIdType thePointId, vtkIdType theCellId ) + { + vtkIdType aTupleId = GetTupleId( thePointId, theCellId ); + unsigned char* aColor = myColors->GetPointer( aTupleId << 2 ); + + theVertex.r = int( aColor[0] ) / 255.0; + theVertex.g = int( aColor[1] ) / 255.0; + theVertex.b = int( aColor[2] ) / 255.0; + theVertex.a = myAlpha; + } + + virtual + vtkIdType + GetTupleId( vtkIdType thePointId, vtkIdType theCellId ) = 0; + }; + + //----------------------------------------------------------------------------- + struct TPointColors2Color : TColors2Color + { + TPointColors2Color( vtkProperty* theProperty, + vtkUnsignedCharArray* theColors ): + TColors2Color( theProperty, theColors ) + {} + + virtual + vtkIdType + GetTupleId( vtkIdType thePointId, vtkIdType theCellId ) + { + return thePointId; + } + }; + + //----------------------------------------------------------------------------- + struct TCellColors2Color : TColors2Color + { + TCellColors2Color( vtkProperty* theProperty, + vtkUnsignedCharArray* theColors ): + TColors2Color( theProperty, theColors ) + {} + + virtual + vtkIdType + GetTupleId( vtkIdType thePointId, vtkIdType theCellId ) + { + return theCellId; + } + }; + + //----------------------------------------------------------------------------- + template < class TCoordinates > + void DrawPoints( TCoordinates* theStartPoints, + vtkCellArray* theCells, + TColorFunctorBase* theColorFunctor, + TVertex* theVertexArr, + vtkIdType &theCellId, + vtkIdType &theVertexId ) + { + vtkIdType* ptIds = theCells->GetPointer(); + vtkIdType* endPtIds = ptIds + theCells->GetNumberOfConnectivityEntries(); + + while ( ptIds < endPtIds ) { + vtkIdType nPts = *ptIds; + ++ptIds; + + while ( nPts > 0 ) { + TVertex& aVertex = theVertexArr[ theVertexId ]; + vtkIdType aPointId = *ptIds; + + TCoordinates* anOffsetPoints = theStartPoints + 3 * aPointId; + aVertex.vx = anOffsetPoints[0]; + aVertex.vy = anOffsetPoints[1]; + aVertex.vz = anOffsetPoints[2]; + + theColorFunctor->get( aVertex, aPointId, theCellId ); + + ++theVertexId; + ++ptIds; + --nPts; + } + + ++theCellId; + } + } + + //----------------------------------------------------------------------------- + template < class TCoordinates > + void DrawCellsPoints( vtkPolyData* theInput, + vtkPoints* thePoints, + TColorFunctorBase* theColorFunctor, + TVertex* theVertexArr ) + { + vtkIdType aCellId = 0, aVertexId = 0; + + TCoordinates* aStartPoints = (TCoordinates*)thePoints->GetVoidPointer(0); + + if ( vtkCellArray* aCellArray = theInput->GetVerts() ) + DrawPoints( aStartPoints, aCellArray, theColorFunctor, theVertexArr, aCellId, aVertexId ); + + if ( vtkCellArray* aCellArray = theInput->GetLines() ) + DrawPoints( aStartPoints, aCellArray, theColorFunctor, theVertexArr, aCellId, aVertexId ); + + if ( vtkCellArray* aCellArray = theInput->GetPolys() ) + DrawPoints( aStartPoints, aCellArray, theColorFunctor, theVertexArr, aCellId, aVertexId ); + + if ( vtkCellArray* aCellArray = theInput->GetStrips() ) + DrawPoints( aStartPoints, aCellArray, theColorFunctor, theVertexArr, aCellId, aVertexId ); + } +} // namespace VTK + +//----------------------------------------------------------------------------- +int VTKViewer_PolyDataMapper::Draw( vtkRenderer* ren, vtkActor* act ) +{ + if( !this->MarkerEnabled || this->MarkerType == VTK::MT_NONE || !this->ImageData.GetPointer() ) + return MAPPER_SUPERCLASS::Draw( ren, act ); + + vtkUnsignedCharArray* colors = NULL; + vtkPolyData* input = this->GetInput(); + vtkPoints* points; + int noAbort = 1; + int cellScalars = 0; + vtkProperty* prop = act->GetProperty(); + + points = input->GetPoints(); + + if ( this->Colors ) + { + colors = this->Colors; + if ( (this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_DATA || + this->ScalarMode == VTK_SCALAR_MODE_USE_CELL_FIELD_DATA || + !input->GetPointData()->GetScalars() ) + && this->ScalarMode != VTK_SCALAR_MODE_USE_POINT_FIELD_DATA) + cellScalars = 1; + } + + { + vtkIdType aTotalConnectivitySize = 0; + + if ( vtkCellArray* aCellArray = input->GetVerts() ) + aTotalConnectivitySize += aCellArray->GetNumberOfConnectivityEntries() - aCellArray->GetNumberOfCells(); + + if ( vtkCellArray* aCellArray = input->GetLines() ) + aTotalConnectivitySize += aCellArray->GetNumberOfConnectivityEntries() - aCellArray->GetNumberOfCells(); + + if ( vtkCellArray* aCellArray = input->GetPolys() ) + aTotalConnectivitySize += aCellArray->GetNumberOfConnectivityEntries() - aCellArray->GetNumberOfCells(); + + if ( vtkCellArray* aCellArray = input->GetStrips() ) + aTotalConnectivitySize += aCellArray->GetNumberOfConnectivityEntries() - aCellArray->GetNumberOfCells(); + + if ( aTotalConnectivitySize > 0 ) { + VTK::TVertex* aVertexArr = new VTK::TVertex[ aTotalConnectivitySize ]; + + int* aSize = this->ImageData->GetDimensions(); + glPointSize( std::max( aSize[0], aSize[1] ) ); + + int aMode = 0; // to remove + { + VTK::TColorFunctorBase* aColorFunctor = NULL; + if( colors && aMode != 1 ) { + if ( cellScalars ) + aColorFunctor = new VTK::TCellColors2Color( prop, colors ); + else + aColorFunctor = new VTK::TPointColors2Color( prop, colors ); + } else { + aColorFunctor = new VTK::TPropertyColor( prop ); + } + if ( points->GetDataType() == VTK_FLOAT ) + VTK::DrawCellsPoints< float >( input, points, aColorFunctor, aVertexArr ); + else + VTK::DrawCellsPoints< double >( input, points, aColorFunctor, aVertexArr ); + + delete aColorFunctor; + } + + if( this->ExtensionsInitialized ) { + GLuint aBufferObjectID = 0; + vglGenBuffersARB( 1, &aBufferObjectID ); + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, aBufferObjectID ); + + int anArrayObjectSize = sizeof( VTK::TVertex ) * aTotalConnectivitySize; + vglBufferDataARB( GL_ARRAY_BUFFER_ARB, anArrayObjectSize, aVertexArr, GL_STATIC_DRAW_ARB ); + + delete [] aVertexArr; + + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 ); + vglBindBufferARB( GL_ARRAY_BUFFER_ARB, aBufferObjectID ); + + glColorPointer( 4, GL_FLOAT, sizeof(VTK::TVertex), (void*)0 ); + glVertexPointer( 3, GL_FLOAT, sizeof(VTK::TVertex), (void*)(4*sizeof(GLfloat)) ); + + glEnableClientState( GL_VERTEX_ARRAY ); + glEnableClientState( GL_COLOR_ARRAY ); + + glDrawArrays( GL_POINTS, 0, aTotalConnectivitySize ); + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + + vglDeleteBuffersARB( 1, &aBufferObjectID ); + } else { // there are no extensions + glColorPointer( 4, GL_FLOAT, sizeof(VTK::TVertex), aVertexArr ); + glVertexPointer( 3, GL_FLOAT, sizeof(VTK::TVertex), + (void*)((GLfloat*)((void*)(aVertexArr)) + 4)); + + glEnableClientState( GL_VERTEX_ARRAY ); + glEnableClientState( GL_COLOR_ARRAY ); + + glDrawArrays( GL_POINTS, 0, aTotalConnectivitySize ); + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + + delete [] aVertexArr; + } + } + } + + this->UpdateProgress(1.0); + return noAbort; +} diff --git a/src/VTKViewer/VTKViewer_PolyDataMapper.h b/src/VTKViewer/VTKViewer_PolyDataMapper.h new file mode 100644 index 000000000..2cc14d8c6 --- /dev/null +++ b/src/VTKViewer/VTKViewer_PolyDataMapper.h @@ -0,0 +1,121 @@ +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +#ifndef VTKViewer_POLYDATAMAPPER_H +#define VTKViewer_POLYDATAMAPPER_H + +#include "VTKViewer.h" +#include "VTKViewer_MarkerDef.h" + +#ifdef WNT +#include +#endif + +#include + +#include + +#include + +class vtkImageData; + +#ifndef VTK_IMPLEMENT_MESA_CXX +#include +#define MAPPER_SUPERCLASS vtkOpenGLPolyDataMapper +#else +#include +#define MAPPER_SUPERCLASS vtkMesaPolyDataMapper +#endif + +//---------------------------------------------------------------------------- +//! OpenGL Point Sprites PolyData Mapper. +/*! + * VTKViewer_PolyDataMapper is a class that maps polygonal data + * (i.e., vtkPolyData) to graphics primitives. It is performing the mapping + * to the rendering/graphics hardware/software. It is now possible to set a + * memory limit for the pipeline in the mapper. If the total estimated memory + * usage of the pipeline is larger than this limit, the mapper will divide + * the data into pieces and render each in a for loop. + */ +class VTKVIEWER_EXPORT VTKViewer_PolyDataMapper : public MAPPER_SUPERCLASS +{ +public: + static VTKViewer_PolyDataMapper* New(); + vtkTypeRevisionMacro( VTKViewer_PolyDataMapper, MAPPER_SUPERCLASS ); + + //! Set point marker enabled + void SetMarkerEnabled( bool ); + + //! Set standard point marker + void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale ); + + //! Set custom point marker + void SetMarkerTexture( int, VTK::MarkerTexture ); + + //! Get type of the point marker + VTK::MarkerType GetMarkerType(); + + //! Get scale of the point marker + VTK::MarkerScale GetMarkerScale(); + + //! Get texture identifier of the point marker + int GetMarkerTexture(); + + //! Implement superclass render method. + virtual void RenderPiece( vtkRenderer*, vtkActor* ); + + //! Draw method for OpenGL. + virtual int Draw( vtkRenderer*, vtkActor* ); + +protected: + VTKViewer_PolyDataMapper(); + ~VTKViewer_PolyDataMapper(); + + //! Initializing OpenGL extensions. + bool InitExtensions(); + + //! Activate Point Sprites. + void InitPointSprites(); + + //! Deactivate Point Sprites. + void CleanupPointSprites(); + + //! Initializing textures for Point Sprites. + void InitTextures(); + +private: + int ExtensionsInitialized; + + GLuint PointSpriteTexture; + + vtkSmartPointer ImageData; + + bool MarkerEnabled; + VTK::MarkerType MarkerType; + VTK::MarkerScale MarkerScale; + int MarkerId; + + typedef std::map< int, vtkSmartPointer > ImageDataMap; + ImageDataMap StandardTextures; + ImageDataMap CustomTextures; +}; + +#endif diff --git a/src/VTKViewer/resources/VTKViewer_images.ts b/src/VTKViewer/resources/VTKViewer_images.ts index 7dd350280..dc3652782 100644 --- a/src/VTKViewer/resources/VTKViewer_images.ts +++ b/src/VTKViewer/resources/VTKViewer_images.ts @@ -23,6 +23,42 @@ --> @default + + ICON_VERTEX_MARKER_1 + marker_1.png + + + ICON_VERTEX_MARKER_2 + marker_2.png + + + ICON_VERTEX_MARKER_3 + marker_3.png + + + ICON_VERTEX_MARKER_4 + marker_4.png + + + ICON_VERTEX_MARKER_5 + marker_5.png + + + ICON_VERTEX_MARKER_6 + marker_6.png + + + ICON_VERTEX_MARKER_7 + marker_7.png + + + ICON_VERTEX_MARKER_8 + marker_8.png + + + ICON_VERTEX_MARKER_9 + marker_9.png + ICON_VTKVIEWER_VIEW_GLOBALPAN vtk_view_glpan.png diff --git a/src/VTKViewer/resources/VTKViewer_msg_en.ts b/src/VTKViewer/resources/VTKViewer_msg_en.ts index 6efdc4267..85986d2dc 100644 --- a/src/VTKViewer/resources/VTKViewer_msg_en.ts +++ b/src/VTKViewer/resources/VTKViewer_msg_en.ts @@ -165,6 +165,44 @@ Back View + + VTKViewer_MarkerDlg + + SET_MARKER_TLT + Set Point Marker + + + + VTKViewer_MarkerWidget + + STANDARD_MARKER + Standard + + + CUSTOM_MARKER + Custom + + + TYPE + Type: + + + SCALE + Scale: + + + CUSTOM + Texture: + + + BROWSE + Browse... + + + LOAD_TEXTURE_TLT + Load Texture + + VTKViewer_ViewManager diff --git a/src/VTKViewer/resources/marker_1.png b/src/VTKViewer/resources/marker_1.png new file mode 100755 index 0000000000000000000000000000000000000000..8bbaa854e234d7a1d13ac8dc60d02098178db461 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hUudb&7bP0l+XkKJNr5W literal 0 HcmV?d00001 diff --git a/src/VTKViewer/resources/marker_2.png b/src/VTKViewer/resources/marker_2.png new file mode 100755 index 0000000000000000000000000000000000000000..f0d21091d88a83773e7979511c1ff6200b48b3d4 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTzd%8G=RNPAX^Z&m+vnqo^!;BA}r%q@InaBc}5*jQFj4m4)F^D4^U2aKE(y}&{ zHS+~sm{|mvPcXzpM7ce*x2qIj<51|@%OKz&B8^G(OnK(kz_92BD+41NgMzQk)H8b{ RPXe96;OXk;vd$@?2>?nQL0td< literal 0 HcmV?d00001 diff --git a/src/VTKViewer/resources/marker_3.png b/src/VTKViewer/resources/marker_3.png new file mode 100755 index 0000000000000000000000000000000000000000..345d8abc1696d7d04621512e5b0ad84df816da0f GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTr@N{tuskoK&=l_3uW>p4-h8Z6`Po2;bGLZ!`B{WzV7>~Gg_1<{G$kf3o!geAe z%I%@OqL~pJhXPwplfls!CT2VW4m~@P7;oS?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hU8c)B=-RNPAX^Z&m+vnqo^L&OHoQzx{NX8d~cvDPgoi;<~=b+%hhSK&!U76IlH z+zL9ni$BO8JJx>jDo{X}xfQ6zW0UM`Z3d=}Byk27fun4w#6=DP2a(-CRT2|FGg)d1 v0vQ`q)q*}TIWQOo&5{P1|Hy!W!+?SN`^u?H9{2D7-NfMO>gTe~DWM4f^qWmT literal 0 HcmV?d00001 diff --git a/src/VTKViewer/resources/marker_5.png b/src/VTKViewer/resources/marker_5.png new file mode 100755 index 0000000000000000000000000000000000000000..a994c1100412a856d0609296d30fa92a841f1fa2 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTTc)B=-RNPAX^Z&m+vnqo^!wd-x76wKZa|gGui5klntY+p=V4EPG5E13}(B4R1 zHhD5Thr%L}hr%E#=g@Pb1_q@UF;4fGfXagY_Vh6_btH*1um~JYWDsx=InLz35IBdA zfvIB&!{KFo3JnsPXMGqLT?*5H>brOuI1CuLgpN0+)LE$j-NNAM>gTe~DWM4fhCxL{ literal 0 HcmV?d00001 diff --git a/src/VTKViewer/resources/marker_6.png b/src/VTKViewer/resources/marker_6.png new file mode 100755 index 0000000000000000000000000000000000000000..967b93ecc25181d1b2fea151d283eed958c8eedc GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTr^mK6yskoK&=l_3uW>p4-hKLQEr%q@k&G_}?W35|G79&#!>uk52uELXyECS3Y zxD|AC7k`jHcC7v4RiJ<{b1P7b$0pg?+6+t`N#YDF0&&b6j?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTr@N{tuskoK&?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hU0^K@|xskoK&=l_3uW>p4-hKLQEr%q@k&G_}?W35|G79&#!;}a%{Y10CK@Ez_VQG^To`ZIA#t7wU~3QJ6V>W z4PXGO-=UH)>q90RV*|sXOomO|A0$D7ElfP|2bvfh7#{Li#N>QoU?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hTL@^op4-h6sn2o;8pDtM|V*KE&c!Q_}k4lYyNBgJDAq!=Xz? zT>mF#mh^bbDKu=*I@G%HBr}V^Q9T9@g*9rE53zG7sO2bfb16hPEMhmX0*b1|2pKqk z$Yf(|U^tY?;A6Z^!K*2>8Vhl_jk4hK>97J{l?Urz4QLSVI(wb*` hf$EMpC^B#uFx+uYQBZVc>j1iz!PC{xWt~$(6999WRk;8F literal 0 HcmV?d00001 diff --git a/src/VTKViewer/textures/texture1.dat b/src/VTKViewer/textures/texture1.dat new file mode 100644 index 000000000..eb5e52c94 --- /dev/null +++ b/src/VTKViewer/textures/texture1.dat @@ -0,0 +1,284 @@ +000000000 +000000000 +000000000 +000000000 +000010000 +000000000 +000000000 +000000000 +000000000 + +00000000000 +00000000000 +00000000000 +00000000000 +00000110000 +00000110000 +00000000000 +00000000000 +00000000000 +00000000000 +00000000000 + +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000001100000 +0000001100000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 +0000000000000 + +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000011000000 +000000011000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 +000000000000000 + +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000001110000000 +00000001110000000 +00000001110000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 +00000000000000000 + +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000011110000000 +0000000011110000000 +0000000011110000000 +0000000011110000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 +0000000000000000000 + +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000111100000000 +000000000111100000000 +000000000111100000000 +000000000111100000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 +000000000000000000000 + +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000001111000000000 +00000000001111000000000 +00000000001111000000000 +00000000001111000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 +00000000000000000000000 + +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000111110000000000 +0000000000111110000000000 +0000000000111110000000000 +0000000000111110000000000 +0000000000111110000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 +0000000000000000000000000 + +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000001111110000000000 +000000000001111110000000000 +000000000001111110000000000 +000000000001111110000000000 +000000000001111110000000000 +000000000001111110000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 +000000000000000000000000000 + +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000011111100000000000 +00000000000011111100000000000 +00000000000011111100000000000 +00000000000011111100000000000 +00000000000011111100000000000 +00000000000011111100000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 +00000000000000000000000000000 + +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000111111000000000000 +0000000000000111111000000000000 +0000000000000111111000000000000 +0000000000000111111000000000000 +0000000000000111111000000000000 +0000000000000111111000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 +0000000000000000000000000000000 + +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000001111111000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 +00000000000000000000000000000000 diff --git a/src/VTKViewer/textures/texture2.dat b/src/VTKViewer/textures/texture2.dat new file mode 100644 index 000000000..431f780d4 --- /dev/null +++ b/src/VTKViewer/textures/texture2.dat @@ -0,0 +1,284 @@ +000010000 +000010000 +000010000 +000010000 +111111111 +000010000 +000010000 +000010000 +000010000 + +00000100000 +00000100000 +00000100000 +00000100000 +00000100000 +11111111111 +00000100000 +00000100000 +00000100000 +00000100000 +00000100000 + +0000001000000 +0000001000000 +0000001000000 +0000001000000 +0000001000000 +0000001000000 +1111111111111 +0000001000000 +0000001000000 +0000001000000 +0000001000000 +0000001000000 +0000001000000 + +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +111111111111111 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 +000000010000000 + +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +11111111111111111 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 + +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +1111111111111111111 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 + +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +111111111111111111111 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 + +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +11111111111111111111111 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 + +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +1111111111111111111111111 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 + +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +111111111111111111111111111 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 + +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +11111111111111111111111111111 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 + +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +1111111111111111111111111111111 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 + +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +11111111111111111111111111111111 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 diff --git a/src/VTKViewer/textures/texture3.dat b/src/VTKViewer/textures/texture3.dat new file mode 100644 index 000000000..21683f19a --- /dev/null +++ b/src/VTKViewer/textures/texture3.dat @@ -0,0 +1,284 @@ +000010000 +000010000 +110010011 +001111100 +000010000 +001111100 +110010011 +000010000 +000010000 + +00000100000 +00000100000 +10000100001 +01100100110 +00011111000 +00000100000 +00011111000 +01100100110 +10000100001 +00000100000 +00000100000 + +0000001000000 +0000001000000 +0000001000000 +1100001000011 +0011001001100 +0000111110000 +0000001000000 +0000111110000 +0011001001100 +1100001000011 +0000001000000 +0000001000000 +0000001000000 + +000000010000000 +000000010000000 +000000010000000 +100000010000001 +011000010000110 +000110010011000 +000001111100000 +000000010000000 +000001111100000 +000110010011000 +011000010000110 +100000010000001 +000000010000000 +000000010000000 +000000010000000 + +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 +11000000100000011 +00110000100001100 +00001100100110000 +00000011111000000 +00000000100000000 +00000011111000000 +00001100100110000 +00110000100001100 +11000000100000011 +00000000100000000 +00000000100000000 +00000000100000000 +00000000100000000 + +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 +1000000001000000001 +0110000001000000110 +0001100001000011000 +0000011001001100000 +0000000111110000000 +0000000001000000000 +0000000111110000000 +0000011001001100000 +0001100001000011000 +0110000001000000110 +1000000001000000001 +0000000001000000000 +0000000001000000000 +0000000001000000000 +0000000001000000000 + +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +110000000010000000011 +001100000010000001100 +000011000010000110000 +000000110010011000000 +000000001111100000000 +000000000010000000000 +000000001111100000000 +000000110010011000000 +000011000010000110000 +001100000010000001100 +110000000010000000011 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 +000000000010000000000 + +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +10000000000100000000001 +01100000000100000000110 +00011000000100000011000 +00000110000100001100000 +00000001100100110000000 +00000000011111000000000 +00000000000100000000000 +00000000011111000000000 +00000001100100110000000 +00000110000100001100000 +00011000000100000011000 +01100000000100000000110 +10000000000100000000001 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 +00000000000100000000000 + +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +1100000000001000000000011 +0011000000001000000001100 +0000110000001000000110000 +0000001100001000011000000 +0000000011001001100000000 +0000000000111110000000000 +0000000000001000000000000 +0000000000111110000000000 +0000000011001001100000000 +0000001100001000011000000 +0000110000001000000110000 +0011000000001000000001100 +1100000000001000000000011 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 +0000000000001000000000000 + +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +100000000000010000000000001 +011000000000010000000000110 +000110000000010000000011000 +000001100000010000001100000 +000000011000010000110000000 +000000000110010011000000000 +000000000001111100000000000 +000000000000010000000000000 +000000000001111100000000000 +000000000110010011000000000 +000000011000010000110000000 +000001100000010000001100000 +000110000000010000000011000 +011000000000010000000000110 +100000000000010000000000001 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 +000000000000010000000000000 + +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +11000000000000100000000000011 +00110000000000100000000001100 +00001100000000100000000110000 +00000011000000100000011000000 +00000000110000100001100000000 +00000000001100100110000000000 +00000000000011111000000000000 +00000000000000100000000000000 +00000000000011111000000000000 +00000000001100100110000000000 +00000000110000100001100000000 +00000011000000100000011000000 +00001100000000100000000110000 +00110000000000100000000001100 +11000000000000100000000000011 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 +00000000000000100000000000000 + +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +1000000000000001000000000000001 +0110000000000001000000000000110 +0001100000000001000000000011000 +0000011000000001000000001100000 +0000000110000001000000110000000 +0000000001100001000011000000000 +0000000000011001001100000000000 +0000000000000111110000000000000 +0000000000000001000000000000000 +0000000000000111110000000000000 +0000000000011001001100000000000 +0000000001100001000011000000000 +0000000110000001000000110000000 +0000011000000001000000001100000 +0001100000000001000000000011000 +0110000000000001000000000000110 +1000000000000001000000000000001 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 +0000000000000001000000000000000 + +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +10000000000000010000000000000010 +01100000000000010000000000001100 +00011000000000010000000000110000 +00000110000000010000000011000000 +00000001100000010000001100000000 +00000000011000010000110000000000 +00000000000110010011000000000000 +00000000000001111100000000000000 +00000000000001111100000000000000 +00000000000110010011000000000000 +00000000011000010000110000000000 +00000001100000010000001100000000 +00000110000000010000000011000000 +00011000000000010000000000110000 +01100000000000010000000000001100 +10000000000000010000000000000010 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 +00000000000000010000000000000000 diff --git a/src/VTKViewer/textures/texture4.dat b/src/VTKViewer/textures/texture4.dat new file mode 100644 index 000000000..3d6964107 --- /dev/null +++ b/src/VTKViewer/textures/texture4.dat @@ -0,0 +1,284 @@ +000111000 +011000110 +010000010 +100000001 +100000001 +100000001 +010000010 +011000110 +000111000 + +00001110000 +00110001100 +01000000010 +01000000010 +10000000001 +10000000001 +10000000001 +01000000010 +01000000010 +00110001100 +00001110000 + +0000111110000 +0001000001000 +0010000000100 +0100000000010 +0100000000010 +1000000000001 +1000000000001 +1000000000001 +0100000000010 +0100000000010 +0010000000100 +0001000001000 +0000111110000 + +000001111100000 +000110000011000 +001000000000100 +010000000000010 +010000000000010 +100000000000001 +100000000000001 +100000000000001 +100000000000001 +100000000000001 +010000000000010 +010000000000010 +001000000000100 +000110000011000 +000001111100000 + +00000011111000000 +00001100000110000 +00010000000001000 +00100000000000100 +01000000000000010 +01000000000000010 +10000000000000001 +10000000000000001 +10000000000000001 +10000000000000001 +10000000000000001 +01000000000000010 +01000000000000010 +00100000000000100 +00010000000001000 +00001100000110000 +00000011111000000 + +0000000111110000000 +0000011000001100000 +0001100000000011000 +0010000000000000100 +0010000000000000100 +0100000000000000010 +0100000000000000010 +1000000000000000001 +1000000000000000001 +1000000000000000001 +1000000000000000001 +1000000000000000001 +0100000000000000010 +0100000000000000010 +0010000000000000100 +0010000000000000100 +0001100000000011000 +0000011000001100000 +0000000111110000000 + +000000001111100000000 +000000110000011000000 +000011000000000110000 +000100000000000001000 +001000000000000000100 +001000000000000000100 +010000000000000000010 +010000000000000000010 +100000000000000000001 +100000000000000000001 +100000000000000000001 +100000000000000000001 +100000000000000000001 +010000000000000000010 +010000000000000000010 +001000000000000000100 +001000000000000000100 +000100000000000001000 +000011000000000110000 +000000110000011000000 +000000001111100000000 + +00000000011111000000000 +00000011100000111000000 +00000100000000000100000 +00011000000000000011000 +00010000000000000001000 +00100000000000000000100 +01000000000000000000010 +01000000000000000000010 +01000000000000000000010 +10000000000000000000001 +10000000000000000000001 +10000000000000000000001 +10000000000000000000001 +10000000000000000000001 +01000000000000000000010 +01000000000000000000010 +01000000000000000000010 +00100000000000000000100 +00010000000000000001000 +00011000000000000011000 +00000100000000000100000 +00000011100000111000000 +00000000011111000000000 + +0000000000111110000000000 +0000000111000001110000000 +0000011000000000001100000 +0000100000000000000010000 +0001000000000000000001000 +0010000000000000000000100 +0010000000000000000000100 +0100000000000000000000010 +0100000000000000000000010 +0100000000000000000000010 +1000000000000000000000001 +1000000000000000000000001 +1000000000000000000000001 +1000000000000000000000001 +1000000000000000000000001 +0100000000000000000000010 +0100000000000000000000010 +0100000000000000000000010 +0010000000000000000000100 +0010000000000000000000100 +0001000000000000000001000 +0000100000000000000010000 +0000011000000000001100000 +0000000111000001110000000 +0000000000111110000000000 + +000000000001111100000000000 +000000001110000011100000000 +000000110000000000011000000 +000001000000000000000100000 +000010000000000000000010000 +000100000000000000000001000 +001000000000000000000000100 +001000000000000000000000100 +010000000000000000000000010 +010000000000000000000000010 +010000000000000000000000010 +100000000000000000000000001 +100000000000000000000000001 +100000000000000000000000001 +100000000000000000000000001 +100000000000000000000000001 +010000000000000000000000010 +010000000000000000000000010 +010000000000000000000000010 +001000000000000000000000100 +001000000000000000000000100 +000100000000000000000001000 +000010000000000000000010000 +000001000000000000000100000 +000000110000000000011000000 +000000001110000011100000000 +000000000001111100000000000 + +00000000000011111000000000000 +00000000011100000111100000000 +00000001100000000000010000000 +00000010000000000000001100000 +00001100000000000000000010000 +00001000000000000000000001000 +00010000000000000000000001000 +00100000000000000000000000100 +00100000000000000000000000010 +01000000000000000000000000010 +01000000000000000000000000010 +01000000000000000000000000010 +10000000000000000000000000001 +10000000000000000000000000001 +10000000000000000000000000001 +10000000000000000000000000001 +10000000000000000000000000001 +01000000000000000000000000010 +01000000000000000000000000010 +01000000000000000000000000010 +00100000000000000000000000010 +00100000000000000000000000100 +00010000000000000000000001000 +00001000000000000000000001000 +00001100000000000000000110000 +00000010000000000000001000000 +00000001100000000000110000000 +00000000011100000111000000000 +00000000000011111000000000000 + +0000000000000111110000000000000 +0000000001111000001111000000000 +0000000010000000000000100000000 +0000001100000000000000011000000 +0000010000000000000000000100000 +0000100000000000000000000010000 +0001000000000000000000000001000 +0001000000000000000000000001000 +0010000000000000000000000000100 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +1000000000000000000000000000001 +1000000000000000000000000000001 +1000000000000000000000000000001 +1000000000000000000000000000001 +1000000000000000000000000000001 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0010000000000000000000000000100 +0001000000000000000000000001000 +0001000000000000000000000001000 +0000100000000000000000000010000 +0000010000000000000000000100000 +0000001100000000000000011000000 +0000000010000000000000100000000 +0000000001111000001111000000000 +0000000000000111110000000000000 + +00000000000001111110000000000000 +00000000001110000001110000000000 +00000000110000000000001100000000 +00000001000000000000000010000000 +00000110000000000000000001100000 +00001000000000000000000000010000 +00001000000000000000000000010000 +00010000000000000000000000001000 +00100000000000000000000000000100 +00100000000000000000000000000100 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +10000000000000000000000000000001 +10000000000000000000000000000001 +10000000000000000000000000000001 +10000000000000000000000000000001 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +00100000000000000000000000000100 +00100000000000000000000000000100 +00010000000000000000000000001000 +00001000000000000000000000010000 +00001000000000000000000000010000 +00000110000000000000000001100000 +00000001000000000000000010000000 +00000000110000000000001100000000 +00000000001110000001110000000000 +00000000000001111110000000000000 diff --git a/src/VTKViewer/textures/texture5.dat b/src/VTKViewer/textures/texture5.dat new file mode 100644 index 000000000..221e1e986 --- /dev/null +++ b/src/VTKViewer/textures/texture5.dat @@ -0,0 +1,284 @@ +100000001 +010000010 +001000100 +000101000 +000010000 +000101000 +001000100 +010000010 +100000001 + +10000000001 +01000000010 +00100000100 +00010001000 +00001010000 +00000100000 +00001010000 +00010001000 +00100000100 +01000000010 +10000000001 + +1000000000001 +0100000000010 +0010000000100 +0001000001000 +0000100010000 +0000010100000 +0000001000000 +0000010100000 +0000100010000 +0001000001000 +0010000000100 +0100000000010 +1000000000001 + +100000000000001 +010000000000010 +001000000000100 +000100000001000 +000010000010000 +000001000100000 +000000101000000 +000000010000000 +000000101000000 +000001000100000 +000010000010000 +000100000001000 +001000000000100 +010000000000010 +100000000000001 + +10000000000000001 +01000000000000010 +00100000000000100 +00010000000001000 +00001000000010000 +00000100000100000 +00000010001000000 +00000001010000000 +00000000100000000 +00000001010000000 +00000010001000000 +00000100000100000 +00001000000010000 +00010000000001000 +00100000000000100 +01000000000000010 +10000000000000001 + +1000000000000000001 +0100000000000000010 +0010000000000000100 +0001000000000001000 +0000100000000010000 +0000010000000100000 +0000001000001000000 +0000000100010000000 +0000000010100000000 +0000000001000000000 +0000000010100000000 +0000000100010000000 +0000001000001000000 +0000010000000100000 +0000100000000010000 +0001000000000001000 +0010000000000000100 +0100000000000000010 +1000000000000000001 + +100000000000000000001 +010000000000000000010 +001000000000000000100 +000100000000000001000 +000010000000000010000 +000001000000000100000 +000000100000001000000 +000000010000010000000 +000000001000100000000 +000000000101000000000 +000000000010000000000 +000000000101000000000 +000000001000100000000 +000000010000010000000 +000000100000001000000 +000001000000000100000 +000010000000000010000 +000100000000000001000 +001000000000000000100 +010000000000000000010 +100000000000000000001 + +10000000000000000000001 +01000000000000000000010 +00100000000000000000100 +00010000000000000001000 +00001000000000000010000 +00000100000000000100000 +00000010000000001000000 +00000001000000010000000 +00000000100000100000000 +00000000010001000000000 +00000000001010000000000 +00000000000100000000000 +00000000001010000000000 +00000000010001000000000 +00000000100000100000000 +00000001000000010000000 +00000010000000001000000 +00000100000000000100000 +00001000000000000010000 +00010000000000000001000 +00100000000000000000100 +01000000000000000000010 +10000000000000000000001 + +1000000000000000000000001 +0100000000000000000000010 +0010000000000000000000100 +0001000000000000000001000 +0000100000000000000010000 +0000010000000000000100000 +0000001000000000001000000 +0000000100000000010000000 +0000000010000000100000000 +0000000001000001000000000 +0000000000100010000000000 +0000000000010100000000000 +0000000000001000000000000 +0000000000010100000000000 +0000000000100010000000000 +0000000001000001000000000 +0000000010000000100000000 +0000000100000000010000000 +0000001000000000001000000 +0000010000000000000100000 +0000100000000000000010000 +0001000000000000000001000 +0010000000000000000000100 +0100000000000000000000010 +1000000000000000000000001 + +100000000000000000000000001 +010000000000000000000000010 +001000000000000000000000100 +000100000000000000000001000 +000010000000000000000010000 +000001000000000000000100000 +000000100000000000001000000 +000000010000000000010000000 +000000001000000000100000000 +000000000100000001000000000 +000000000010000010000000000 +000000000001000100000000000 +000000000000101000000000000 +000000000000010000000000000 +000000000000101000000000000 +000000000001000100000000000 +000000000010000010000000000 +000000000100000001000000000 +000000001000000000100000000 +000000010000000000010000000 +000000100000000000001000000 +000001000000000000000100000 +000010000000000000000010000 +000100000000000000000001000 +001000000000000000000000100 +010000000000000000000000010 +100000000000000000000000001 + +10000000000000000000000000001 +01000000000000000000000000010 +00100000000000000000000000100 +00010000000000000000000001000 +00001000000000000000000010000 +00000100000000000000000100000 +00000010000000000000001000000 +00000001000000000000010000000 +00000000100000000000100000000 +00000000010000000001000000000 +00000000001000000010000000000 +00000000000100000100000000000 +00000000000010001000000000000 +00000000000001010000000000000 +00000000000000100000000000000 +00000000000001010000000000000 +00000000000010001000000000000 +00000000000100000100000000000 +00000000001000000010000000000 +00000000010000000001000000000 +00000000100000000000100000000 +00000001000000000000010000000 +00000010000000000000001000000 +00000100000000000000000100000 +00001000000000000000000010000 +00010000000000000000000001000 +00100000000000000000000000100 +01000000000000000000000000010 +10000000000000000000000000001 + +1000000000000000000000000000001 +0100000000000000000000000000010 +0010000000000000000000000000100 +0001000000000000000000000001000 +0000100000000000000000000010000 +0000010000000000000000000100000 +0000001000000000000000001000000 +0000000100000000000000010000000 +0000000010000000000000100000000 +0000000001000000000001000000000 +0000000000100000000010000000000 +0000000000010000000100000000000 +0000000000001000001000000000000 +0000000000000100010000000000000 +0000000000000010100000000000000 +0000000000000001000000000000000 +0000000000000010100000000000000 +0000000000000100010000000000000 +0000000000001000001000000000000 +0000000000010000000100000000000 +0000000000100000000010000000000 +0000000001000000000001000000000 +0000000010000000000000100000000 +0000000100000000000000010000000 +0000001000000000000000001000000 +0000010000000000000000000100000 +0000100000000000000000000010000 +0001000000000000000000000001000 +0010000000000000000000000000100 +0100000000000000000000000000010 +1000000000000000000000000000001 + +10000000000000000000000000000001 +01000000000000000000000000000010 +00100000000000000000000000000100 +00010000000000000000000000001000 +00001000000000000000000000010000 +00000100000000000000000000100000 +00000010000000000000000001000000 +00000001000000000000000010000000 +00000000100000000000000100000000 +00000000010000000000001000000000 +00000000001000000000010000000000 +00000000000100000000100000000000 +00000000000010000001000000000000 +00000000000001000010000000000000 +00000000000000100100000000000000 +00000000000000011000000000000000 +00000000000000011000000000000000 +00000000000000100100000000000000 +00000000000001000010000000000000 +00000000000010000001000000000000 +00000000000100000000100000000000 +00000000001000000000010000000000 +00000000010000000000001000000000 +00000000100000000000000100000000 +00000001000000000000000010000000 +00000010000000000000000001000000 +00000100000000000000000000100000 +00001000000000000000000000010000 +00010000000000000000000000001000 +00100000000000000000000000000100 +01000000000000000000000000000010 +10000000000000000000000000000001 diff --git a/src/VTKViewer/textures/texture6.dat b/src/VTKViewer/textures/texture6.dat new file mode 100644 index 000000000..caf5163f9 --- /dev/null +++ b/src/VTKViewer/textures/texture6.dat @@ -0,0 +1,284 @@ +000111000 +011000110 +010000010 +100000001 +100010001 +100000001 +010000010 +011000110 +000111000 + +00001110000 +00110001100 +01000000010 +01000000010 +10000110001 +10000110001 +10000000001 +01000000010 +01000000010 +00110001100 +00001110000 + +0000111110000 +0001000001000 +0010000000100 +0100000000010 +0100000000010 +1000001100001 +1000001100001 +1000000000001 +0100000000010 +0100000000010 +0010000000100 +0001000001000 +0000111110000 + +000001111100000 +000110000011000 +001000000000100 +010000000000010 +010000000000010 +100000000000001 +100000011000001 +100000011000001 +100000000000001 +100000000000001 +010000000000010 +010000000000010 +001000000000100 +000110000011000 +000001111100000 + +00000011111000000 +00001100000110000 +00010000000001000 +00100000000000100 +01000000000000010 +01000000000000010 +10000000000000001 +10000001110000001 +10000001110000001 +10000001110000001 +10000000000000001 +01000000000000010 +01000000000000010 +00100000000000100 +00010000000001000 +00001100000110000 +00000011111000000 + +0000000111110000000 +0000011000001100000 +0001100000000011000 +0010000000000000100 +0010000000000000100 +0100000000000000010 +0100000000000000010 +1000000011110000001 +1000000011110000001 +1000000011110000001 +1000000011110000001 +1000000000000000001 +0100000000000000010 +0100000000000000010 +0010000000000000100 +0010000000000000100 +0001100000000011000 +0000011000001100000 +0000000111110000000 + +000000001111100000000 +000000110000011000000 +000011000000000110000 +000100000000000001000 +001000000000000000100 +001000000000000000100 +010000000000000000010 +010000000000000000010 +100000000111100000001 +100000000111100000001 +100000000111100000001 +100000000111100000001 +100000000000000000001 +010000000000000000010 +010000000000000000010 +001000000000000000100 +001000000000000000100 +000100000000000001000 +000011000000000110000 +000000110000011000000 +000000001111100000000 + +00000000011111000000000 +00000011100000111000000 +00000100000000000100000 +00011000000000000011000 +00010000000000000001000 +00100000000000000000100 +01000000000000000000010 +01000000000000000000010 +01000000000000000000010 +10000000001111000000001 +10000000001111000000001 +10000000001111000000001 +10000000001111000000001 +10000000000000000000001 +01000000000000000000010 +01000000000000000000010 +01000000000000000000010 +00100000000000000000100 +00010000000000000001000 +00011000000000000011000 +00000100000000000100000 +00000011100000111000000 +00000000011111000000000 + +0000000000111110000000000 +0000000111000001110000000 +0000011000000000001100000 +0000100000000000000010000 +0001000000000000000001000 +0010000000000000000000100 +0010000000000000000000100 +0100000000000000000000010 +0100000000000000000000010 +0100000000000000000000010 +1000000000111110000000001 +1000000000111110000000001 +1000000000111110000000001 +1000000000111110000000001 +1000000000111110000000001 +0100000000000000000000010 +0100000000000000000000010 +0100000000000000000000010 +0010000000000000000000100 +0010000000000000000000100 +0001000000000000000001000 +0000100000000000000010000 +0000011000000000001100000 +0000000111000001110000000 +0000000000111110000000000 + +000000000001111100000000000 +000000001110000011100000000 +000000110000000000011000000 +000001000000000000000100000 +000010000000000000000010000 +000100000000000000000001000 +001000000000000000000000100 +001000000000000000000000100 +010000000000000000000000010 +010000000000000000000000010 +010000000001111110000000010 +100000000001111110000000001 +100000000001111110000000001 +100000000001111110000000001 +100000000001111110000000001 +100000000001111110000000001 +010000000000000000000000010 +010000000000000000000000010 +010000000000000000000000010 +001000000000000000000000100 +001000000000000000000000100 +000100000000000000000001000 +000010000000000000000010000 +000001000000000000000100000 +000000110000000000011000000 +000000001110000011100000000 +000000000001111100000000000 + +00000000000011111000000000000 +00000000011100000111100000000 +00000001100000000000010000000 +00000010000000000000001100000 +00001100000000000000000010000 +00001000000000000000000001000 +00010000000000000000000001000 +00100000000000000000000000100 +00100000000000000000000000010 +01000000000000000000000000010 +01000000000000000000000000010 +01000000000011111100000000010 +10000000000011111100000000001 +10000000000011111100000000001 +10000000000011111100000000001 +10000000000011111100000000001 +10000000000011111100000000001 +01000000000000000000000000010 +01000000000000000000000000010 +01000000000000000000000000010 +00100000000000000000000000010 +00100000000000000000000000100 +00010000000000000000000001000 +00001000000000000000000001000 +00001100000000000000000110000 +00000010000000000000001000000 +00000001100000000000110000000 +00000000011100000111000000000 +00000000000011111000000000000 + +0000000000000111110000000000000 +0000000001111000001111000000000 +0000000010000000000000100000000 +0000001100000000000000011000000 +0000010000000000000000000100000 +0000100000000000000000000010000 +0001000000000000000000000001000 +0001000000000000000000000001000 +0010000000000000000000000000100 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000111111000000000010 +1000000000000111111000000000001 +1000000000000111111000000000001 +1000000000000111111000000000001 +1000000000000111111000000000001 +1000000000000111111000000000001 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0100000000000000000000000000010 +0010000000000000000000000000100 +0001000000000000000000000001000 +0001000000000000000000000001000 +0000100000000000000000000010000 +0000010000000000000000000100000 +0000001100000000000000011000000 +0000000010000000000000100000000 +0000000001111000001111000000000 +0000000000000111110000000000000 + +00000000000001111110000000000000 +00000000001110000001110000000000 +00000000110000000000001100000000 +00000001000000000000000010000000 +00000110000000000000000001100000 +00001000000000000000000000010000 +00001000000000000000000000010000 +00010000000000000000000000001000 +00100000000000000000000000000100 +00100000000000000000000000000100 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000001111111000000000010 +01000000000001111111000000000010 +10000000000001111111000000000001 +10000000000001111111000000000001 +10000000000001111111000000000001 +10000000000001111111000000000001 +01000000000001111111000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +01000000000000000000000000000010 +00100000000000000000000000000100 +00100000000000000000000000000100 +00010000000000000000000000001000 +00001000000000000000000000010000 +00001000000000000000000000010000 +00000110000000000000000001100000 +00000001000000000000000010000000 +00000000110000000000001100000000 +00000000001110000001110000000000 +00000000000001111110000000000000 diff --git a/src/VTKViewer/textures/texture7.dat b/src/VTKViewer/textures/texture7.dat new file mode 100644 index 000000000..a75e7bb12 --- /dev/null +++ b/src/VTKViewer/textures/texture7.dat @@ -0,0 +1,284 @@ +000111000 +011010110 +010010010 +100010001 +111111111 +100010001 +010010010 +011010110 +000111000 + +00001110000 +00110101100 +01000100010 +01000100010 +10000100001 +11111111111 +10000100001 +01000100010 +01000100010 +00110101100 +00001110000 + +0000111110000 +0001001001000 +0010001000100 +0100001000010 +0100001000010 +1000001000001 +1111111111111 +1000001000001 +0100001000010 +0100001000010 +0010001000100 +0001001001000 +0000111110000 + +000001111100000 +000110010011000 +001000010000100 +010000010000010 +010000010000010 +100000010000001 +100000010000001 +111111111111111 +100000010000001 +100000010000001 +010000010000010 +010000010000010 +001000010000100 +000110010011000 +000001111100000 + +00000011111000000 +00001100100110000 +00010000100001000 +00100000100000100 +01000000100000010 +01000000100000010 +10000000100000001 +10000000100000001 +11111111111111111 +10000000100000001 +10000000100000001 +01000000100000010 +01000000100000010 +00100000100000100 +00010000100001000 +00001100100110000 +00000011111000000 + +0000000111110000000 +0000011001001100000 +0001100001000011000 +0010000001000000100 +0010000001000000100 +0100000001000000010 +0100000001000000010 +1000000001000000001 +1000000001000000001 +1111111111111111111 +1000000001000000001 +1000000001000000001 +0100000001000000010 +0100000001000000010 +0010000001000000100 +0010000001000000100 +0001100001000011000 +0000011001001100000 +0000000111110000000 + +000000001111100000000 +000000110010011000000 +000011000010000110000 +000100000010000001000 +001000000010000000100 +001000000010000000100 +010000000010000000010 +010000000010000000010 +100000000010000000001 +100000000010000000001 +111111111111111111111 +100000000010000000001 +100000000010000000001 +010000000010000000010 +010000000010000000010 +001000000010000000100 +001000000010000000100 +000100000010000001000 +000011000010000110000 +000000110010011000000 +000000001111100000000 + +00000000011111000000000 +00000011100100111000000 +00000100000100000100000 +00011000000100000011000 +00010000000100000001000 +00100000000100000000100 +01000000000100000000010 +01000000000100000000010 +01000000000100000000010 +10000000000100000000001 +10000000000100000000001 +11111111111111111111111 +10000000000100000000001 +10000000000100000000001 +01000000000100000000010 +01000000000100000000010 +01000000000100000000010 +00100000000100000000100 +00010000000100000001000 +00011000000100000011000 +00000100000100000100000 +00000011100100111000000 +00000000011111000000000 + +0000000000111110000000000 +0000000111001001110000000 +0000011000001000001100000 +0000100000001000000010000 +0001000000001000000001000 +0010000000001000000000100 +0010000000001000000000100 +0100000000001000000000010 +0100000000001000000000010 +0100000000001000000000010 +1000000000001000000000001 +1000000000001000000000001 +1111111111111111111111111 +1000000000001000000000001 +1000000000001000000000001 +0100000000001000000000010 +0100000000001000000000010 +0100000000001000000000010 +0010000000001000000000100 +0010000000001000000000100 +0001000000001000000001000 +0000100000001000000010000 +0000011000001000001100000 +0000000111001001110000000 +0000000000111110000000000 + +000000000001111100000000000 +000000001110010011100000000 +000000110000010000011000000 +000001000000010000000100000 +000010000000010000000010000 +000100000000010000000001000 +001000000000010000000000100 +001000000000010000000000100 +010000000000010000000000010 +010000000000010000000000010 +010000000000010000000000010 +100000000000010000000000001 +100000000000010000000000001 +111111111111111111111111111 +100000000000010000000000001 +100000000000010000000000001 +010000000000010000000000010 +010000000000010000000000010 +010000000000010000000000010 +001000000000010000000000100 +001000000000010000000000100 +000100000000010000000001000 +000010000000010000000010000 +000001000000010000000100000 +000000110000010000011000000 +000000001110010011100000000 +000000000001111100000000000 + +00000000000011111000000000000 +00000000011100100111100000000 +00000001100000100000010000000 +00000010000000100000001100000 +00001100000000100000000010000 +00001000000000100000000001000 +00010000000000100000000001000 +00100000000000100000000000100 +00100000000000100000000000010 +01000000000000100000000000010 +01000000000000100000000000010 +01000000000000100000000000010 +10000000000000100000000000001 +10000000000000100000000000001 +11111111111111111111111111111 +10000000000000100000000000001 +10000000000000100000000000001 +01000000000000100000000000010 +01000000000000100000000000010 +01000000000000100000000000010 +00100000000000100000000000010 +00100000000000100000000000100 +00010000000000100000000001000 +00001000000000100000000001000 +00001100000000100000000110000 +00000010000000100000001000000 +00000001100000100000110000000 +00000000011100100111000000000 +00000000000011111000000000000 + +0000000000000111110000000000000 +0000000001111001001111000000000 +0000000010000001000000100000000 +0000001100000001000000011000000 +0000010000000001000000000100000 +0000100000000001000000000010000 +0001000000000001000000000001000 +0001000000000001000000000001000 +0010000000000001000000000000100 +0100000000000001000000000000010 +0100000000000001000000000000010 +0100000000000001000000000000010 +0100000000000001000000000000010 +1000000000000001000000000000001 +1000000000000001000000000000001 +1111111111111111111111111111111 +1000000000000001000000000000001 +1000000000000001000000000000001 +0100000000000001000000000000010 +0100000000000001000000000000010 +0100000000000001000000000000010 +0100000000000001000000000000010 +0010000000000001000000000000100 +0001000000000001000000000001000 +0001000000000001000000000001000 +0000100000000001000000000010000 +0000010000000001000000000100000 +0000001100000001000000011000000 +0000000010000001000000100000000 +0000000001111001001111000000000 +0000000000000111110000000000000 + +00000000000001111110000000000000 +00000000001110010001110000000000 +00000000110000010000001100000000 +00000001000000010000000010000000 +00000110000000010000000001100000 +00001000000000010000000000010000 +00001000000000010000000000010000 +00010000000000010000000000001000 +00100000000000010000000000000100 +00100000000000010000000000000100 +01000000000000010000000000000010 +01000000000000010000000000000010 +01000000000000010000000000000010 +01000000000000010000000000000010 +10000000000000010000000000000001 +11111111111111111111111111111111 +10000000000000010000000000000001 +10000000000000010000000000000001 +01000000000000010000000000000010 +01000000000000010000000000000010 +01000000000000010000000000000010 +01000000000000010000000000000010 +00100000000000010000000000000100 +00100000000000010000000000000100 +00010000000000010000000000001000 +00001000000000010000000000010000 +00001000000000010000000000010000 +00000110000000010000000001100000 +00000001000000010000000010000000 +00000000110000010000001100000000 +00000000001110010001110000000000 +00000000000001111110000000000000 diff --git a/src/VTKViewer/textures/texture8.dat b/src/VTKViewer/textures/texture8.dat new file mode 100644 index 000000000..7ffdbf0f1 --- /dev/null +++ b/src/VTKViewer/textures/texture8.dat @@ -0,0 +1,284 @@ +000111000 +011010110 +110010011 +101111101 +100010001 +101111101 +110010011 +011010110 +000111000 + +00001110000 +00110101100 +11000100011 +01100100110 +10011111001 +10000100001 +10011111001 +01100100110 +11000100011 +00110101100 +00001110000 + +0000111110000 +0001001001000 +0010001000100 +1100001000011 +0111001001110 +1000111110001 +1000001000001 +1000111110001 +0111001001110 +1100001000011 +0010001000100 +0001001001000 +0000111110000 + +000001111100000 +000110010011000 +001000010000100 +110000010000011 +011000010000110 +100110010011001 +100001111100001 +100000010000001 +100001111100001 +100110010011001 +011000010000110 +110000010000011 +001000010000100 +000110010011000 +000001111100000 + +00000011111000000 +00001100100110000 +00010000100001000 +00100000100000100 +11000000100000011 +01110000100001110 +10001100100110001 +10000011111000001 +10000000100000001 +10000011111000001 +10001100100110001 +01110000100001110 +11000000100000011 +00100000100000100 +00010000100001000 +00001100100110000 +00000011111000000 + +0000000111110000000 +0000011001001100000 +0001100001000011000 +0010000001000000100 +1010000001000000101 +0110000001000000110 +0101100001000011010 +1000011001001100001 +1000000111110000001 +1000000001000000001 +1000000111110000001 +1000011001001100001 +0101100001000011010 +0110000001000000110 +1010000001000000101 +0010000001000000100 +0001100001000011000 +0000011001001100000 +0000000111110000000 + +000000001111100000000 +000000110010011000000 +000011000010000110000 +000100000010000001000 +001000000010000000100 +111000000010000000111 +011100000010000001110 +010011000010000110010 +100000110010011000001 +100000001111100000001 +100000000010000000001 +100000001111100000001 +100000110010011000001 +010011000010000110010 +011100000010000001110 +111000000010000000111 +001000000010000000100 +000100000010000001000 +000011000010000110000 +000000110010011000000 +000000001111100000000 + +00000000011111000000000 +00000011100100111000000 +00000100000100000100000 +00011000000100000011000 +00010000000100000001000 +10100000000100000000101 +01100000000100000000110 +01011000000100000011010 +01000110000100001100010 +10000001100100110000001 +10000000011111000000001 +10000000000100000000001 +10000000011111000000001 +10000001100100110000001 +01000110000100001100010 +01011000000100000011010 +01100000000100000000110 +10100000000100000000101 +00010000000100000001000 +00011000000100000011000 +00000100000100000100000 +00000011100100111000000 +00000000011111000000000 + +0000000000111110000000000 +0000000111001001110000000 +0000011000001000001100000 +0000100000001000000010000 +0001000000001000000001000 +0010000000001000000000100 +1110000000001000000000111 +0111000000001000000001110 +0100110000001000000110010 +0100001100001000011000010 +1000000011001001100000001 +1000000000111110000000001 +1000000000001000000000001 +1000000000111110000000001 +1000000011001001100000001 +0100001100001000011000010 +0100110000001000000110010 +0111000000001000000001110 +1110000000001000000000111 +0010000000001000000000100 +0001000000001000000001000 +0000100000001000000010000 +0000011000001000001100000 +0000000111001001110000000 +0000000000111110000000000 + +000000000001111100000000000 +000000001110010011100000000 +000000110000010000011000000 +000001000000010000000100000 +000010000000010000000010000 +000100000000010000000001000 +101000000000010000000000101 +011000000000010000000000110 +010110000000010000000011010 +010001100000010000001100010 +010000011000010000110000010 +100000000110010011000000001 +100000000001111100000000001 +100000000000010000000000001 +100000000001111100000000001 +100000000110010011000000001 +010000011000010000110000010 +010001100000010000001100010 +010110000000010000000011010 +011000000000010000000000110 +101000000000010000000000101 +000100000000010000000001000 +000010000000010000000010000 +000001000000010000000100000 +000000110000010000011000000 +000000001110010011100000000 +000000000001111100000000000 + +00000000000011111000000000000 +00000000011100100111100000000 +00000001100000100000010000000 +00000010000000100000001100000 +00001100000000100000000010000 +00001000000000100000000001000 +00010000000000100000000001000 +11100000000000100000000000111 +00110000000000100000000001110 +01001100000000100000000110010 +01000011000000100000011000010 +01000000110000100001100000010 +10000000001100100110000000001 +10000000000011111000000000001 +10000000000000100000000000001 +10000000000011111000000000001 +10000000001100100110000000001 +01000000110000100001100000010 +01000011000000100000011000010 +01001100000000100000000110010 +00110000000000100000000001110 +11100000000000100000000000111 +00010000000000100000000001000 +00001000000000100000000001000 +00001100000000100000000110000 +00000010000000100000001000000 +00000001100000100000110000000 +00000000011100100111000000000 +00000000000011111000000000000 + +0000000000000111110000000000000 +0000000001111001001111000000000 +0000000010000001000000100000000 +0000001100000001000000011000000 +0000010000000001000000000100000 +0000100000000001000000000010000 +0001000000000001000000000001000 +1001000000000001000000000001001 +0110000000000001000000000000110 +0101100000000001000000000011010 +0100011000000001000000001100010 +0100000110000001000000110000010 +0100000001100001000011000000010 +1000000000011001001100000000001 +1000000000000111110000000000001 +1000000000000001000000000000001 +1000000000000111110000000000001 +1000000000011001001100000000001 +0100000001100001000011000000010 +0100000110000001000000110000010 +0100011000000001000000001100010 +0101100000000001000000000011010 +0110000000000001000000000000110 +1001000000000001000000000001001 +0001000000000001000000000001000 +0000100000000001000000000010000 +0000010000000001000000000100000 +0000001100000001000000011000000 +0000000010000001000000100000000 +0000000001111001001111000000000 +0000000000000111110000000000000 + +00000000000001111110000000000000 +00000000001110010001110000000000 +00000000110000010000001100000000 +00000001000000010000000010000000 +00000110000000010000000001100000 +00001000000000010000000000010000 +00001000000000010000000000010000 +00010000000000010000000000001000 +10100000000000010000000000000110 +01100000000000010000000000001100 +01011000000000010000000000110010 +01000110000000010000000011000010 +01000001100000010000001100000010 +01000000011000010000110000000010 +10000000000110010011000000000001 +10000000000001111100000000000001 +10000000000001111100000000000001 +10000000000110010011000000000001 +01000000011000010000110000000010 +01000001100000010000001100000010 +01000110000000010000000011000010 +01011000000000010000000000110010 +01100000000000010000000000001100 +10100000000000010000000000000110 +00010000000000010000000000001000 +00001000000000010000000000010000 +00001000000000010000000000010000 +00000110000000010000000001100000 +00000001000000010000000010000000 +00000000110000010000001100000000 +00000000001110010001110000000000 +00000000000001111110000000000000 diff --git a/src/VTKViewer/textures/texture9.dat b/src/VTKViewer/textures/texture9.dat new file mode 100644 index 000000000..01fa9ee22 --- /dev/null +++ b/src/VTKViewer/textures/texture9.dat @@ -0,0 +1,284 @@ +100111001 +011000110 +011000110 +100101001 +100010001 +100101001 +011000110 +011000110 +100111001 + +10001110001 +01110001110 +01100000110 +01010001010 +10001010001 +10000100001 +10001010001 +01010001010 +01100000110 +01110001110 +10001110001 + +1000111110001 +0101000001010 +0010000000100 +0101000001010 +0100100010010 +1000010100001 +1000001000001 +1000010100001 +0100100010010 +0101000001010 +0010000000100 +0101000001010 +1000111110001 + +100001111100001 +010110000011010 +001000000000100 +010100000001010 +010010000010010 +100001000100001 +100000101000001 +100000010000001 +100000101000001 +100001000100001 +010010000010010 +010100000001010 +001000000000100 +010110000011010 +100001111100001 + +10000011111000001 +01001100000110010 +00110000000001100 +00110000000001100 +01001000000010010 +01000100000100010 +10000010001000001 +10000001010000001 +10000000100000001 +10000001010000001 +10000010001000001 +01000100000100010 +01001000000010010 +00110000000001100 +00110000000001100 +01001100000110010 +10000011111000001 + +1000000111110000001 +0100011000001100010 +0011100000000011100 +0011000000000001100 +0010100000000010100 +0100010000000100010 +0100001000001000010 +1000000100010000001 +1000000010100000001 +1000000001000000001 +1000000010100000001 +1000000100010000001 +0100001000001000010 +0100010000000100010 +0010100000000010100 +0011000000000001100 +0011100000000011100 +0100011000001100010 +1000000111110000001 + +100000001111100000001 +010000110000011000010 +001011000000000110100 +000100000000000001000 +001010000000000010100 +001001000000000100100 +010000100000001000010 +010000010000010000010 +100000001000100000001 +100000000101000000001 +100000000010000000001 +100000000101000000001 +100000001000100000001 +010000010000010000010 +010000100000001000010 +001001000000000100100 +001010000000000010100 +000100000000000001000 +001011000000000110100 +010000110000011000010 +100000001111100000001 + +10000000011111000000001 +01000011100000111000010 +00100100000000000100100 +00011000000000000011000 +00011000000000000011000 +00100100000000000100100 +01000010000000001000010 +01000001000000010000010 +01000000100000100000010 +10000000010001000000001 +10000000001010000000001 +10000000000100000000001 +10000000001010000000001 +10000000010001000000001 +01000000100000100000010 +01000001000000010000010 +01000010000000001000010 +00100100000000000100100 +00011000000000000011000 +00011000000000000011000 +00100100000000000100100 +01000011100000111000010 +10000000011111000000001 + +1000000000111110000000001 +0100000111000001110000010 +0010011000000000001100100 +0001100000000000000011000 +0001100000000000000011000 +0010010000000000000100100 +0010001000000000001000100 +0100000100000000010000010 +0100000010000000100000010 +0100000001000001000000010 +1000000000100010000000001 +1000000000010100000000001 +1000000000001000000000001 +1000000000010100000000001 +1000000000100010000000001 +0100000001000001000000010 +0100000010000000100000010 +0100000100000000010000010 +0010001000000000001000100 +0010010000000000000100100 +0001100000000000000011000 +0001100000000000000011000 +0010011000000000001100100 +0100000111000001110000010 +1000000000111110000000001 + +100000000001111100000000001 +010000001110000011100000010 +001000110000000000011000100 +000101000000000000000101000 +000010000000000000000010000 +000101000000000000000101000 +001000100000000000001000100 +001000010000000000010000100 +010000001000000000100000010 +010000000100000001000000010 +010000000010000010000000010 +100000000001000100000000001 +100000000000101000000000001 +100000000000010000000000001 +100000000000101000000000001 +100000000001000100000000001 +010000000010000010000000010 +010000000100000001000000010 +010000001000000000100000010 +001000010000000000010000100 +001000100000000000001000100 +000101000000000000000101000 +000010000000000000000010000 +000101000000000000000101000 +001000110000000000011000100 +010000001110000011100000010 +100000000001111100000000001 + +10000000000011111000000000001 +01000000011100000111100000010 +00100001100000000000010000100 +00010010000000000000001101000 +00001100000000000000000010000 +00001100000000000000000101000 +00010010000000000000001001000 +00100001000000000000010000100 +00100000100000000000100000010 +01000000010000000001000000010 +01000000001000000010000000010 +01000000000100000100000000010 +10000000000010001000000000001 +10000000000001010000000000001 +10000000000000100000000000001 +10000000000001010000000000001 +10000000000010001000000000001 +01000000000100000100000000010 +01000000001000000010000000010 +01000000010000000001000000010 +00100000100000000000100000010 +00100001000000000000010000100 +00010010000000000000001001000 +00001100000000000000000101000 +00001100000000000000000110000 +00010010000000000000001001000 +00100001100000000000110000100 +01000000011100000111000000010 +10000000000011111000000000001 + +1000000000000111110000000000001 +0100000001111000001111000000010 +0010000010000000000000100000100 +0001001100000000000000011001000 +0000110000000000000000000110000 +0000110000000000000000000110000 +0001001000000000000000001001000 +0001000100000000000000010001000 +0010000010000000000000100000100 +0100000001000000000001000000010 +0100000000100000000010000000010 +0100000000010000000100000000010 +0100000000001000001000000000010 +1000000000000100010000000000001 +1000000000000010100000000000001 +1000000000000001000000000000001 +1000000000000010100000000000001 +1000000000000100010000000000001 +0100000000001000001000000000010 +0100000000010000000100000000010 +0100000000100000000010000000010 +0100000001000000000001000000010 +0010000010000000000000100000100 +0001000100000000000000010001000 +0001001000000000000000001001000 +0000110000000000000000000110000 +0000110000000000000000000110000 +0001001100000000000000011001000 +0010000010000000000000100000100 +0100000001111000001111000000010 +1000000000000111110000000000001 + +10000000000001111110000000000001 +01000000001110000001110000000010 +00100000110000000000001100000100 +00010001000000000000000010001000 +00001110000000000000000001110000 +00001100000000000000000000110000 +00001010000000000000000001010000 +00010001000000000000000010001000 +00100000100000000000000100000100 +00100000010000000000001000000100 +01000000001000000000010000000010 +01000000000100000000100000000010 +01000000000010000001000000000010 +01000000000001000010000000000010 +10000000000000100100000000000001 +10000000000000011000000000000001 +10000000000000011000000000000001 +10000000000000100100000000000001 +01000000000001000010000000000010 +01000000000010000001000000000010 +01000000000100000000100000000010 +01000000001000000000010000000010 +00100000010000000000001000000100 +00100000100000000000000100000100 +00010001000000000000000010001000 +00001010000000000000000001010000 +00001100000000000000000000110000 +00001110000000000000000001110000 +00010001000000000000000010001000 +00100000110000000000001100000100 +01000000001110000001110000000010 +10000000000001111110000000000001 -- 2.39.2