From 3f6c94c6bd432ad7b7a55ad991d3b8223fb44f18 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Tue, 20 Feb 2001 04:48:45 +0000 Subject: [PATCH] r557: no message --- ChangeLog | 22 +++++++++++++------- doc/ctsim.prj | 30 +++++++++++++-------------- images/SplashScreen.psd | Bin 241524 -> 241098 bytes include/phantom.h | 4 ++-- include/reconstruct.h | 30 +++++++++++++-------------- include/scanner.h | 4 ++-- libctgraphics/ezplot.cpp | 18 ++++++++-------- libctsim/reconstruct.cpp | 42 +++++++++++++++++++++++--------------- libctsupport/syserror.cpp | 14 +++++++------ msvc/ctsim/ctsim.plg | 34 +++++++++++++++++++++++++----- src/dlgreconstruct.cpp | 15 +++++++++----- src/splash.xpm | 30 +++++++++++++-------------- src/views.cpp | 19 +++++++++-------- 13 files changed, 156 insertions(+), 106 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7c56ff6..b587ea8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,15 @@ -3.0.0 - Release 2/19/01 +3.0.1 - Released 2/19/01 + + * ctsim: Fixed dialog box for reconstruction so that + rotation angle setting will stay fixed in-between use + of the dialog box. + + * syserror: Fixed display bug for trace messages + + * ctsim: MSVC optimization bug work-around, compiler + options changed. + +3.0.0 - Released 2/19/01 * ctsim: Massive update/fix to online help and print manual. @@ -6,15 +17,12 @@ * ctsim: Reformated all dialog boxes, much nicer now. + * ctsim: Improved accelerator key handling + * global: Added Hanning filter. - * global: Improved default parameters so that all defaults give + * global: Improved default parameters to that all defaults give sensible output. - - * ctsim: Improved accelerator key handling - - * ctsim,pjrec: Changed rotation angle to be a fraction of - a circle rather than a multiple of pi. 3.0.0beta1 - Released 2/11/01 diff --git a/doc/ctsim.prj b/doc/ctsim.prj index bc831ae..3293f2c 100644 --- a/doc/ctsim.prj +++ b/doc/ctsim.prj @@ -5,34 +5,34 @@ 1 ctsim.tex 18 -5 -0 +8 +4 -ctsim-gui.tex -TeX -268447738 0 43 18 43 18 176 176 1253 763 mytitle.sty DATA 5243570 0 9 1 8 22 66 66 1143 653 -ctsim-appendix.tex -TeX -12282 0 12 1 0 1 44 44 1121 631 ctsim-textui.tex TeX -12282 0 289 27 96 48 198 198 1275 785 +12282 0 297 15 0 1 198 198 1275 785 ctsim-install.tex TeX -12282 0 34 10 34 66 110 110 1187 697 -ctsim-concepts.tex +12282 0 34 10 42 1 110 110 1187 697 +ctsim-web.tex TeX -268447738 0 363 20 363 77 110 110 1187 697 +12283 0 24 50 0 60 88 88 1165 675 ctsim.tex TeX -402665466 0 86 36 105 25 22 22 1099 609 -ctsim-web.tex +402665466 0 68 19 98 23 22 22 1099 609 +ctsim-appendix.tex +TeX +12282 0 12 1 0 1 44 44 1121 631 +ctsim-gui.tex +TeX +12282 0 38 28 38 69 176 176 1253 763 +ctsim-concepts.tex TeX -268447739 0 24 50 0 60 88 88 1165 675 +12282 0 213 1 0 1 110 110 1187 697 tex2rtf.ini DATA 273777330 0 0 1 17 8 22 22 938 609 diff --git a/images/SplashScreen.psd b/images/SplashScreen.psd index c282eb03c8bfa47b1f10a5b1d0f8c97c3aca7126..cddfa03c9c426bb4081e341240f104d3ec917c72 100644 GIT binary patch delta 27334 zcmeHwd2|%T_J2=D1e8U52(roUg0i`w?D!BBH$(wZRv(B9n}`q}0lEQM6j=nM*+SS7 zmJmXKWD)`-7)X!^VadLSKte*omSmDlGE?8rt?r)b8NyHBIlpuG$K#=EKDTc5R#ms| zy`QdFn%UrNT7%VXP5pw}1&O9whvUVere+@tf?&eGZ`FUM4+UW@em?f<;eHQ2R!bV4 z7vy`sTkY@H{W0j)gopD(U;bgOsh%~lRYTvAw<>Q|F=6v`t9`}bBk@VM(z@Dm_g2*I z`OwSJ&%9-s8XfTa@e>=Tj*^qJ-Z{Q%a>EOOrQhrxdO9X+cyjWrk)Fq{h7_K8*t|4r z!l=T2KR2)5;x{bo()2F_q}2YGIv-ix{h<*)|G6wYJLqf6YcHFheYttB9=!*AHF?~a zqV-3g_fI<%Qq?@s)*~XJ^t!c$ZP}C^Yb)!vl}h&RjmrvYT@^L(c9(CKmHGGb8F4tP zB&}R}EvwAdZhGxiIjyS_PGo&I|BRFwnwPn&^Rx-Qdbb+&Y7akU!Q7Fbubh+3 zUODGAaMQ%63g4D)|KL-(*HU$6Ys5|_%qhu#IRB-w%Lg2axn-X9OK|uXzs#DNQP8_| zojElwuao4*giFsQeDdMco$W0>dQY2KE_VKE=DQn5?Vp!eKaIz@C?z7wecvMQm;NUlo)W22P`r@kM-Wg07H8gf&Qh2!Zv+tef zzFhj8@=Vt*^)@UGJMzVhr6r4!Y;XMji`;uk_;>sI#Ln+u^l_6BH(NGbx4-n&)Z(;G z)5^=en`hk!w_C%C`rlDDHJ=zGt$JqJvF~tuOxP4xv?!=;(%^~qL+!fGZ0{`#QgPhS zM#{B=tuI;EMq5_&FAg01RSpw=Iktc4jnDhM6;&2gHSa|xY&e+Rw@#Ne@2nW}hBC)9 zDaf|`z2L0)Uec!h=BJhU-?#4DWJ%Yb@Amxatv;r{PtU_^Uit0**RH<$h}ZiQlchgi z@=t!n=h~~4U#p8rw#n)%~)PPa9AE^Pa`&V5g{y|SigPWr4aUv;ST zey7vd%htX3c2L_lei%G(=UT576Ta$J-g|;qp%;^c&rg&!?R9LlXP@(DH;uk|H6|=8 z(d**O7Oh_2`mi~4?xc`?V}{0DjtN{aZP5Fkk-ZaE70>Y+Q@uDpJ*I0>$-g3{e}C6B zv%BIq?#ipC&_(H=wdm9%czyneX(ukV7~7)dqt9Q<%=c69~(mkZsm8tzRv%I8@VG(7wZvXk=nSEy$haH((HR6f&N6*Dnp52<5TJ8C1 ztpxio6Q)SFt|ZuNy<0zN-1cnB5!=BsIgb6)8lICq3Vcj2IDs8h*ukN}( zI48Vi|M0+uO)F0{%&^$zjw`v4HQE1c%;Zx=!Q0Ojy-~H<_DN9Ru3eaJliyF zb<%_r;dN5xd2O22U~*haW>(3x%(#j-pWEmC>CHgDFGfZ+JYep-`{cP6snYpJ<`3-g z-stoHs{5qY$XruuqsJ!OTEzt( zX2RQXkt4H8Fg(jnO(#GbY9M7zq(&k9}XeiDE8za(;eni8L;K+`f!|HBXN0@_%3Q46iQl+x>82ts_3u8yxwzw)CDIwxzKD?UzR! zd1ZURg$9kKnZLfcZq>P$zO=6?Ufjh$KR)fwxRtrVVYQAZ4F&|A+dZTtVe#mfzbJdB zdstxOdj2tA_x6vPu=H-g)Rg)d9g~_LzWwLp=gyD+QJVX~*vDdSZ2Duvv$HzC zI{Lkj_BL$Qynf8ywFjGcR0ectxc2qbwLyh*r`O7!Kl!Kjd6#DI=n%THeR{}#{}tlk zPL)05C%iV|%9Jxdbn$N`3P2A2< zIWazIpy%PI{E}A2_IN3w)HcRv*Kn)!ewgL(o>`5W)$5p?92xs;gXw;rO{%8F&V1DN z?uo^n`|Z3QZEGDcd&IsX`=hr5!y>Q7j{D)vvq_aNNO>^J_8Ea|=DxY)$#^aQa{p}_gW$(zq7X5_O+#%-etbC+fRu)-MI9v zIkQ5-PftB^$&x&<^>v@gQ|Aq1f=}V4v-UqXw?EzN%>j+tNUuM2d{srK@{Y$Jz3XEu z{5*d8)SIWwP0RMB9WNU`zxVc_E_27s?_1TP|2t=&|2XiO{v8khv@pN!s*lpXo;rTz zXXQgD4L>(iy7EN&=w9C?e|PxXln+L2wM2w13BMFrx;3Nd(58L%e+MsLynI=mnEfN_ z2q&K&A6DfZTIF*z=H}sotp}n}uhdtlsiV;Kh-*ZjATe(CVdzrURu>^YCH2mv)=IA#oI=2lD zI#9Z)NB_qUwGc6?;4<xtq_% z3Zfu1%UrbeDf8B+Ous)S)~!_j)73Q2)Lr?#t7(O)yZOUzruHU4l&#Fab~k<9+VrB* zx{hhEvh5?&muCN=rul84*6BObTn}jhi)IU00{%UaQhHDq)~+i(uqRhM^{K2IMGwmEVAU&XYuiwBw^Z!AP{%D5&f1o$;&-{O|2I!yp zuUn!AQ~tC5KUf1a=>N;~Qv&yzeo$`7raH>hUSb{Pzx~7yls^`lnkX6l#2t##Tbxv@ ziO@u7szmk@TPwv2Of*;BzQL$PfPsKdca(M;Q#f3}qGYB}|tiz)OLvIkpRjftLW=40tiHont`=Lj8|S z6d3Sj$PWT9VkQAF9xxD)CL0YYK{%ksL4uHonI{MVs9eBIG{BMo_tyl`Sr~W8IQsKy zJAS2LA`8Mkj&1mr%2ILMTO+PUO&UwXaSyMTs_-+NrQ^7p3#|B+0ZSnWel_As)MTr3$KD!YoK563W@Fa_=yc^+XaufKy|c}&N!zp4P~KEaz^WRh40Z!Y`Ym9V7UH-OCuMRfF2>|7F7i8&B(ppmx3VH= z-auPH*uYA0hD5v(yS&{+Zh@wBndP9^$yJMZwZbYOxrjbwvagHW3JI+uOy13JrI=rS zJ>CJ6&tXt8d9RBcgHfhcMv(W>v%*Z!W5Cu!^DG82llMzn1-+2pF!p6ygakQ&zsp5v5{5;AKK8o)00R*#(K@v?yMmB458i^#Y zfE>n14&|e=gpnL(S*8_p2&|SIrd7~TrV0z5s|40tkdHDN=%tKmKyb)qcxyITM;mOv zAcq@jw*r^4G-bvN@n7{z(dTM|QkJ3oN}@6@BCQgZr3B3oo4%rod?32ZCuAkug>o1e zJItdX(5pJZ=Uo{FGtDkRzQb}A+YGVAD;6%oS|s1by)&3ghDCvn^bdwljzm*1GF)#v z@GW*tdH*{!E$1_yn%<(Z3QI~$J6)H4!AQy{X-MKu$TCpVn=D`Pb~fDsQ86D0)F2Pf zMNI|XGzt&GVC~5YkzNriP>QLkQAD$d8szexqhB<*P8phF5tcD~l)f{0Q?hX+D&+IS zjw|HQB!tmdn?}=I!Ao=M6)P*KsVdrqrUiT`)3s=(tJkN29%E>#=_wg%Q|bf~UFRd4 zu0_UxmKs_x1k997T-C~)dbgF%--|8kt0G^hPHiA}X?YLUwU%>iIgU6{{sVuv1&Cyi4rF+|0mBLi9 zT^+qfX|M+GtWz3Y;G%W`8g6tqSFAzula0M$`9#c2iG?HaA%pUN;!DX+4P$Hbg_+cZVv8Qy)#{&wa(N|Sw2U6 z#7#adLwsIYsp``#p=YNn7c6YrOJ7s!Ty;O-~&eX=<%_&Ev1s_%`0ireR-Gi#ge1+nQ>sl)!AdKfMhNHofC= zP@}v*|DF#0e7@KY4{uamJzsp%zX9ijw2IGA+1Cd0g;PqL;Q?bLN^lp zw5qMEP{u8AoK_dDb{CZ^Cl_EvaW$VlSH&k3J1+jIiyW7_43~>6n+-9F;4q_PdNp%R zkr5W^e12>6oAkKrsF`TptdCtNw(PE+UKN$$#A-vk_Dn{bPs^ttwk=xt-&wX zE{mlGZ4#O5!nr&pKC65cckO>5zaw1+Y- zlKP4|ZIRdnD=Kx5zV80I2)>yrBCULOM+sUawsaBQR#xYUEgH*z)Ue=3AgUu_&{3BE2y5r+(FFa7TQ!P`l#9?BUdg>J&1K>z zB^QTIPHxp{&B1YcWa@>p;SlLMM%PRC+WIdRo4r)QeL&se^S~*&)5Zh@$>b^O?w-+8 zT#knIU7SoMXff`*+{G2WxERA)6>YDmLN-Y7`^L!7vomfWje?8>1eE#0(FUAU8%yy4*diA~^+T z3Zf%5f5>1?sqNq)f1G%ZVQ$vJDslgh;K@#5+J|cQ#$Tq2REFXq&(ySb>Ew#1&8o>E})I>;%Hr^;PZ5O&DP;%;G5HgXxa zu+CQUoCO75YDF@$Vx-t)o4gnu&XCKwZO z7*||^`fDs#!U@!@4RR6?TmjazJPcVJCnj^Bi#Slv3R$3^%cE31jYMhDY}Bim;>R4A z8a)kF0evGz0taa+DH956-l`G}vRv|9Ovp6gDm2J65&ZKuu@bIYz2OOLy9_gd5YLl>FE7 zrD*>XPEYAjWFWMBsvW_gG2cq$fH5CS2?d_7m9&JdohM|^-~?(y*A92ZnDDjpgl;tI z)r7E}Cwxx>pTG_LiW{JW@G0O3V3l2PW}Mf-|Dc5O@2IDY^l!kFaXtzA$5YnpaRN$F zM?!&8+6pkGup@ve<-GxzQrsu-riirIgcDE-{21zyGe-{HhAHUGsc(UP0q{}ipGEyv z)KiW<6#A5t_W`CHyjg;PlJ?snxCTK88k`5-0Zd8!BdDjO|1Mxk`X2@+Qot8D2Uuqf zb^~Vt>#V{a;7s5H(5FQDKHzlV0GvMwct0{b#6n2^P$1eO017D(=(I*4Fwq)1?Gc0q ziNJn1K_>JM1IGjJ0?r0L0)3)Qb^u=i4gn@!WgGBS;85tt0dED)13n6TjwMK-BgnWA zkyDLVlc2E=(RkI>NO&dS)x%7pJ`$Lcen|77YogJY)nF%_%+V=eB8qfoDTY;XB54)$ z%bk=B6fpzLD5nS65;DvZtw13MBXGn+cUW z%Rqeq$11m$1FUjuD)*Mh%HiaZehJQ;hLyr1?D&Wa?&4=Q%&Y|lmK2IvDTYS{Qhpma zzRt3QTf$oYJC|J*%7x|pca4-KQIN7Sqn|i}6OU#Pk9ABM=~&oboJ>^XXl43-Q$uM1 z-iyk*f@+in*+DhJu>sYHC4ue+R3qF_P>o1a69(0Y1Ok$K@@9@fHOic7lpR!~%&A5s zi%B1^gC~h?vV&^mtFm2^HL6iov%Gfr0Q`Mxu7VwzS>7L-t6_(0!uw0}VeCkt@(z_X zsu9^yPBkJc%BeCG$E%N;hJ!&5!pIU zHNt!5R3qL8ry7y@;#4CtUYu%_HL4N0DNZ#a;^9;yQc0X@MA*ftM!Y|jYD7@XsYYZE zIMoPmg3mcwqZ(!6g)k?P-se=KOmh-*R@SISlzdV{&Z$P|@kx(%oNAP5lEWyVLparl z>u{ri>#9^E?u1(v+!?1D;Z<;|5k1DKMtBpPYD7%NsYW~*ryB93oN7dn#i>U0D5n~c zDCATlViQg^;!Sb0h&RWnMp>g8k>`x&R3mbzoN7c|z^O*0S-IUs`jzZ3Wo)@!M%Qqv zQ6@Wl5^{}dMAvb{j;`cXBfJ@I_>phsR3rMDFAV5=PBp@f=Tsw7*%GH3G1lp239`Df zkO$9K9t<8%HNsctR3nn>oNC12;!76>8>brKn)9U%4mhV8F&O#Mhr!9IMr8Z>(g=r} zQ;o7lHOe~Gh|$c~R*Y^=HNp|6#TtY=hz3qJ!Ub0)8rg{X;KYk@>l)bz*P4@!GDAJ( z+%>XM22@>aPB!vE1@c6K_5x^evJni6N;YCB!3V+AtO3H7V#HC1?jRd6_2JXV4zdv= z5Izv5IyEN;+=!9az=%x4k;q1A0VQEE)YEZvkc}9k8Nd#*(FIqchLer3Ep!1ys2IUn zI6BBij9_;RuMmV5=_4-0T+}dqa;6I4R>}^t5knqsC#W%MP>NriY;?ikU|{U19swPu zz*QW5IELYbF>uH5i$TGWJ}4th5fw{L0i0`@lZ|k+IN6AK14mruWFwp#D;OWC6!_yZy*(h+b(IE%fh=mzsBUm*AQ?O_S5(-W>3Y=_2{G(NH zImkwVlZ`wKA+7^4jLgYKfs>609}s3aQDkmEe&rs5elZ|l9jdBEMa3P3k;AA5V0bQPxjc_F>4bRC&ha7_s9);>~ zBWi-7Q1!{r=42y%>Y`TAa}(K!WnJ~K>0NTN5n^)jkhlOjuS)4{lNZ9tM)=p%Pn>MT zy(58vZdN^QRgP#Gaw2Is*(h+b5k?4d32%ooa`YJudEPV#cm>`vePF=JM)(}6oJP(j zTviR!nZU_L7%!4CtE5K$vNxD^)-s}$;O!74n9(=;Y?*)O_@%jQIxJC&Q0o~ z-OwUZa&WRvF=9<3QJLcD6p>agM857K&P_H~ij#4VoQA{-N2(SD1f|AuVilxMTR1b> zR?Vq9M4%)|L@Op~X0y zi$FDMjHRZ3l9fl2ISV#@q*aF>JA zbrMKx!AV0R?l33danN^1oGt9+CIU_PjGKrvgnct~hS1R(4B?AVwc~{JYBX}NLt_N9 zDgo-O;T$1d$|wRk_;k(6I!E}pYc<`rMiuJk(na71HO7zM9%+FbbQggad`jt-#rY$; z6TLOaL3(JT2)v+sYn>3p%IkbS{S-POSmVQULa=kTP6%qRt6Bje_?+8I0TcMFi-=Qz zbSuV=1NY}H0`1pA>5{{r&8Q0QueI|v8f!oSKCPXX`Y#Iu0^A?n5NYWmkbbTrs{+1H zA0w(3C;I5Noeep|rw=Y&ODFf>qc|vX?Lt-sqA5;USThj+<9?R2yHa9JnU7P`NpNCYXJG7aBK*EC;e& z(rT244_Iv1#O5EmtS&e?wZpfYoI`aiGqn6^3lnORp;FDysxL!SudZ>N%X^|R z5?ks5<*eb9UOR1-Q`gel3b?$sE+S6i(U&^3&g+YCt9-mHSJCVFVzZB3R(af*>dcdW zd#@Kz#5k9x#sTny$=}tr%5g2-%?O}taehy8S_+km5P_E?EzOTn&qcw8&dWJm77DjC zuSjWe9lRVT^blLAzSHXvb#`^TC@)H%w;_IYxLf4p>7E*RJB-^%%@Ly-&DT=`uj}-k z!y^QJ2jvLO;UmY?2d5<#kEzNe+6s}z;z9X1yjaR08oXF#NP*ZwW$w7L>iF9E*ZP#@ z*PUN#MozUiPU!ABt6W`8F1Lfl)4X)2ldiFQs#j0Jdn`^I3U^}?hH~jhL56J2_5YWYpDq*`S4C%17V7I3NZ-W17~W%Sv~}HuA#QZ^6}7| zI4a`zC^V-QoaaM7=QD}&>@>p+L?0?#!+(wF!$^Y9$3wG9o-WXMKFGoIVaV77n_%Gi zcq+n*Wx&AmVWg|+3XSKJG=YQY!&D*#cdQY8cmry}#KH495-J+cr(p-r2RlLMbMSny zK`K^xK1omMIEX$i1>_+5G^`SRnYaNro)0#gPDo>d^L!e1@O)ZIiULN?^I`QP{c2$F zd=gHmC%H7DPs0wP53U(Cu%kh$A!$bAne%#Dj?KaIX;|a=WHlkD@qGByS=}h0@qDsG zI|mlwR2tF8bA1k?Ps;?-tmH%=GU+ZnA3klSZ3_;bPs=nqcs?x`>EQYBX|oH@Cxf}7 zY^HkReLN%XgQ>-dK8zO1 zm>YOLa04zppX|o-@r=BI=i@1RC(kFTIei1s$8-J$q7R8&C(-AR8*tNCh{d4~bA0q7R8q2hm47A99f{JReerEUNsnHnp#5={Mw@N1)tNpL6pU^yIwAJ*}I_7+CKoN0s~vS9!0E&OM1;RD@U zsO~jff;C*F`znyBr$t=fTZlN+g7Cz+y^!dKJN%0l!xlq3D?;*?ya!3&XIRY&;5m~8 zA@6}g!YX`LKoqcHyP=h3Ar5pARkC!rE+ityL)~^*!II!VkqoIP)TZEA&MqOUP9C>^P5h zTxFqn1*C`28n*?v4{om+Vg4D&B!taK5oO_c6GAI;4-5FWs+=<9vNGhpbXhj^idd*{ z2k(e8g~-C{vLf89F3W-54d~^=Szo|EDpj{D7O*fO7YSp|BI12qk)TMzOdNF~I1=Q| z!-N!Ep3{kFa22wA$P)0}v}Wl07xUOr;R0T+F1yBSjta3zdg$90by*BtKV6mwy<8S9 zNYR>~ukU5N0%5dJA^c2q6fT*Mqbe&ER`L%t)jf>a>=^Xu6BLkNxZUeGsH$@9M!gf|n&#&%T%;3Uw!H+mO7g@5fkAHNj?o~`B3`PI#as_;i77ip-KP?iF7;S?G#z*M2e>X*m5%!)2@ms#*uNQT4+-qLB__73?G zxV%wTgaNC`B!}X47#tEJUxQ>=G;f@XnM>@WQI_q7vv4xxkYLYZc$>e%ncCLB)9eiN zr3ILJ>c&4+P%|bg5yk%C7syb_vi}K_={d>H^7iR?@eVBE^|}ZQIFiM>G|+Jx-W1uq z2(4bnC)l4{|L@}C>>SPi1wtx}1-<-Z5d6PzI6LoBe?Od}ri(!q$8mkaWX!|v#gdCc zD7#Q2PF8c?n9FLtj?L^M*Z(`1mYrZMLiB*7uVTqvpyDJ9JW@EqF7pO|7awNvF8Y6k z4@oS+r2#%~b6{FL@j0OjKFAXPCme{Sn4Xv(fX?TRkuz{rIKYx!8vGRwz@I5JUf_Sk z^ua}{%L$B_x*)(%Pk28|bLjsa><#ge;#zQxXPY4BHgFUxf3(^g6tuN6j2i;th7-iY31KT zqb;rYE{f|Drls5OKKP2ZjQb)2pc|4%Kr6JLCUD2O@CC@ZfLq2J)P%`#*{#)I#d=TJ zkKN?@HDU6IcB}Q0a1CA#3H;bC-heQ<5xX^<2Y<#LlZUvQ-RAoFaJ&8rlRvl{VGup> zbvP+bjP;)cE7zhgC1v6a&As6Xh2 z1Ca#fvZ?r&8xw_TH%<*C#{hvd9 zD91}+hSjY$p^!xjOW_}?TW!KPCQo18YIBt1pWwjie;Nt>|1*%021p{W09Fkp!Xh59C&N;ug5_)tLKWJ7pAQVseh8^RP=>YHpT;7}h#dP3i1 zLzse5eUlC0!-)6vO*ZB5pMw$BC1`tW@WJN=9?|NXY)B!@u*t>(2Rj_0mA=V_@NvT? z8^RHYg!D}|WpJ=hBGS?Syc^*t1SH`$Z|#~L=-5T>|Z z-(*t;2m2y<#mHp9qs7pTM@}SwW7=d>4V(f?N%geJ24olFD}9qqypS#I;B^?5Sb4lz zUs5cFi%D4v`u#s`tT8VvGDY@p)kx?nyezyRj1tBOV};?u$N29(VUjQzf3UlQGVTSj zug4vsTG{o2_)MKr{9j;9OtLG9FNmEUu?XUT@o^m2>nwJtTaKwtNKpEA7C)+6CI|ym zxTUi=%m8hj#o-1xu8a7d0fu%F-!Z_3U0vXpUB!WhT60%%Ox-HSh1zx#$JMh5Y=H3X zL(FHufX9>--NezgdAu|rSMl8D(b{xJY1>_FYVOuue58)~wVvX3k5+933IBPS+L;=g zUNki`d6=4*I+_NXI+=P19l8oQ;`J4-)_UtCJmgTU`F8 z>8dhdmH0z#Y~HsQSu9G_DsgsQ3wy{~ahu?v)#CTH%bBf6uvpB|tHl8knU7O~H8JjFwI)u*`KXqiP>dRKjlDBper z>z1fb(MVWkG5=hmJw+6%%t58vQ*d;)OnVBBOy$~B5K>xKs87MGo~hKHf}?>}?I}2# zTBSV&N5`tQr--VxzR~2UsN0q1JR5(CMnY7j(uVP;Sj@yh)E5^AdGNlt+iinI8TO_J z?~B-=PY5Qy>B0M=o3O!R{^TtWwJ%~(WuE`GhuRk$DT6)KzToKmJ05CZ5K@ZX_27NM zt4iPVQ2TJ;OM6hQAd3dTWeRh`LVHgE6s<8dQe|<6Jjfs;*UJ2 zFFyL%BdR~1qUBn83PF5~NfyOtEj@+s5N0yLw(ICAutp1##k^x3e+o=k~fvTW_ib`Zj z17R1!5|)Imfk48(MV7DyNFX6VLPA0ovM1g5eb2eo)m5Di_}=He@sBqjtW=$I&t2=@ zbI(2JTkXEoh9zejM%?M>5_eae(;-$Lb-w0k+D8cC!1YgcIbIcFG9DW}x4P4Hjee)~ zDT`ZpAT)Vz*H@I36M$XB}Kk;@SPki&79wp84qaN}!4~tkjtnJ5xOMCw?q1#uR zz44z8Jbi3^r|PCXmeq{h{L1&yZs%gpbQ(fBLKDJHwxDWNa)>Pl|(DcY= z4LaV|V)==XmPym^Onzs~;eDxjgL>DTYn40lvpXMeIl1)4JGFAO@MqS2GPqki zXGQGxJN9oM++bAissqoKeO%hHZ;z4@_vF=IT0H#mg_$Rx@7*K%Grd>(sE#i;lp=ZL zup=*~b2ju+<5xO z(&6W;QqSxvkm3(HBNMw1yJvG;n&&4pyT_Vm=d5Z~zEUQazB#Guy=}AWjm>T(nsn6; ziCdl@JpXX@SI6JkI8N`?>qG-jTi3|QPtQnEII2yF6fflV$i2Jg3z1JviwsXVsE7Uh zY1tepW*>Qf)u7X-6L-E|G3Cnkse328Tn%4&KJC;+pn97;U|Y*czx9F zosD|#9(`L#VVe#O$|CZox{qo@LX$lsq=-og8?SjEA9~lgS9%tIzI#GrDdH!D#Wvir zF{ka^yx2n>2Y>aio?#`679V}_{QGNT+YUPTUYQg*kM~O6E=AK0U9}EPGduM;ukD)X z$=v=`N$ZUdKJ?bG*6*y!-T!I+^+UUtw#b)aZ_LAc7N*Z?)#BE1?Y=F3`?GPMznyb; zep24vZL#Mf(%NQdgYMh4_rqg(&7}D7=klK%4ITSikG-ey)*G*XGOf{=8{UdYYVk_v zs$n%ZmQTz}l%i9ceq$ZiH5&PK)O}s=`RQeOm`C%jg^As=U7O}ac$#Y$-JvZ>_Gml12lA`hY20L129y-~3*`P-b^gmPm%`NYSUOYMZrqAM5 zXp3sD;BCI_Y4*{jVS`7XXgjKH^b6~|-_@egyFa?LwJY$Br;lotGe(N+#eLt%EgdF>|^*;DUew>bwAwtYHo>m5(JFBWN08J_e{kL?;)_~eEDahbz=9x7{j z!7Hht)ggVy};lB+nX;H{0lCoUTO!FQ`39@PD(A?w28azFm)@h6gE zKaU%q{nV3xejs^@HsaOwA5Ux2{?&xM$oLj{+Mx~M`NQY!|DvSj$*Ml-J&p}bFPyq$ z>8!UeuZ%u_YWqzq+#Sbn{iXQ{?Z8KIdp_7ZVfwarJG@jHktwPMv|rn#)q-{X8fhPY zHUjJ6Vz-y%5q_6<&zraQ$)Cq1y|kspyvFqslhdlIJAM2?M%z}|)lytqy!X0#u2+|h zf9vy`VgNw0-&tE(xqP*E<(07H6>Wkw}y)`1H8_J`Ykf9B`6=BEujdTCnO z`e))^Z5UtDG9ndkh*#&#=0$1m9GSguT28y&aSKw`Ps;AJ{KpSYruUy!)i=A1R@JV@ z=x^({DZWEXDZOpg@zC*)w_F#Qvc6GP!s*M}saCzCs@i2;`T$bzPq_8$^T%>FYhzyX z9BA1ps;XwtiIP`F4XGOZT={M3Lq?Z(*w$iW_A|xXT3q(rw&Y@5;`Db$-Lf=%*t*_Z zLU&b;`^2Tq&c5%dsQ0Hl`{hls|4eT&XU3(l+^{fDvo^h&g}mf=N$YU)gIx+9A0|bI z;oDqqRek+j%}eJduNg3SLHw4USx3T3j(z?2r}N)={rlHq9{ssZ>)|!Ig(uF|#HS8? zL96KccEu+*4$KaHE-c~Rb~p4d-9KReUtELlnbc?OF-;y-Z*#+nha2{*x2whe>k}tv z>(W1(+_L4Nvs;U@yZtdDZTAyVZL}uck9<%t{IJ&Xo_pT>SB!Jp4UwC=wrcs-x}Liy zet7g>N9NsJz5ltS0kL7_UsT*Ox#)7=Gv_~O{YcL)`@-T|Wrt-w_TJPkpIJ zYGcayW=phw?bcSmm|gY6>S2+CYw{ESeEV~6M0|hO2M-Ru{l^DizBu87pGFPI8MdO~ zXPxW!b9Fdy=lA`aS05a;u1&`_O@8_Jh~5#$-H+dUX2pxAJ3qQ^wrjtNZ{FlDZ#?|u<@Lw2Q^xe3R$efs;JJxeLmrf3+xr(j zT5&KV@ehBBe%$qd_os-rv>Cg-pJKWvr0nf<_w)T0OzQgaqlv4ZZ0vAoqaWKH>Y2at zwcYQ3Iw*Bxmr-9nA1=k%)j6YD#l28DtV7hGJ@fO=4f^w_UfJ!ddpG-Uc z_r3g3^Qw@h?>wBo{zUgRPo;PqZ{$Pabemdrljr`N&Cg!?Yu<||$A9W2&SW5@iFat{jSd6{(kmcR2n|1x882_A}L0?$`&r) zlzDP|zkU5jBt)iupV_R_MgdcPvYL>W#?k%_}dzyP_nad|B4$WWLz2(Zn zCyuYUXU!L%yc~I9<%ykl4EXM`mgxAzcD?F3mul; zegEyb55IeJt1d%-d8k9Dgg4d=_$+zQpi$fJxYT@0%hb2A@io{G6&9w|^lH9j(5aMX zqsN{4b6QH1&L?sP^{R^c;K<;}-ig(%y7in~ar2$;4$OKl{*%;RBW5j6nY_r`bxzp@ zE$5bpn)jdeTKkq$-`zi?dB&P?$9Kga{>KR^x?fza9V&^)d1Uak{1M$tw*EWx^3b`n z`fiBt^mXs1tB-kFU5qKw@*n%#oPp02%=P4H$GxlN$<-tOm~-RrP6%hS9h3jjvQ>jq zWI;Y~SvZAgdg03{E!|UEI<_@({{Asn&vuT!j!@V7c8(u#`{+?e3wQreM?Hrl)D2=> zE9avfT<`XBtekvhaATL&&@p!MgvXk?WM9X6_wU|tG;0O9*8g(+J46#Q9RH%^Z*H}u>9?Kgb))Bx?boP1~i`v04b0QLX3Y=HI~t$Ut)==guv|8J{+ zF#mtk2K;yZ|9AcWmLu@r{r~^(_5Z^EmC5JocGxk-HFt@ly{l;_XX}t##jUPCFLm4; za))T`8nV>Uyz%|wesQ1iuZ?IYLS6Ha?uuRNxbN9#MQ71oJT0CTf5QC<+dtwzB_7AW zQ06}k`bluwiw^krq^s9h$Ne`wfCAf!N5oy?9??qN>xvlbXdcp9+~JA{ciiuKb*bY9 z`cuy}BgXNFD&~V`jJj*5Er-ClU9YLg{G*^R1l&vHHPNuV#_j%T?Ma{EA^$9*H{c<}dt&cq$h zaue>mL7&B410fS2xC@L7+!H`2B4G#UGq~efZoz#!=+n64S#HIB8|XCL@hrFTJzS{;;l2U%5!~@ClW<=T`Y`TzmcQWc2AzyMp5=br*MUBS_b))m z17NHL;~?&M=KC7Z#0L)rd+=()IpZOwya6BAptBMsY(|f~JO} z(cF<0p!aBCpjX_}uAvQ?(yDvE-VZ}(_Fzkk?FWEKsx3RRE@w~63{B) zax?CDu0_-2n@{IYnvEcMHiBW&G+XC^#*D@K74jVJb3tQ9LwD7t&x1b)=^JpzGp~l( zps^wZRz@wFR?jRtf6{US!OLkDGWh6h@MmHQRqE@p1cd;NB`8D`2DehL#I+@We^yrM zIkFX0&|xkgXL^-BOhM|w3qS$g$@yymgqWiB#KCrzLy;YtqRUxw^%Tt}fZ zgn%q0g_uUFM&F9-cmTf`yv?{y$W@SotjxpR1y$zNH{eQ@nmwT$!ca&0X=o_{jW3|3 zgou=t;H|`!9>A{#5Bg9)D`O!CS=Mq>r3bu4xXuOey;A5u<2uh;5gJi5GB~BK&qIbR zUxF+^fm0wl3s*Ljs=zKGm^&4mC|nm!ZXq{P>O#&y8M$&fXz(yD)LWr@ z6W=2>y5+GB2a|O;iP8=y^n4qCIylwXu7rNs!QVpc4Fdb1ki@4ZR>(>C zTV(RD82obi6Zpk)DXo7nv6=90rqk9b^eb|y!7nlRrBE4HNZ08l*pLJ^S0O2lMyCX; z--A*-q}%jTTl#D+Ee-1F5-zAROL{5tYgE7$tZs=#BE=z4WpXhRkcer*TPoT~J42Z) z$3Y^c1)k&rm7Is|i3(JViwq7-J6hCK&N1Uo<$0By zW)q~fpo6%u^w0o@E*FA;2-Y;j zP(S1@8|l~zAxGv*fZPIzUF5|_)h6Mh`*CosrTL_;6DR|d6_o@?Re>g{Y+jmZl1BSG zx6M}=L|~iw#EOhm+UKYTDMpn(sfD1kuxwS8S+W|cTveMQ9a1OT&MrzTlM1?s=dt3s@LWh1;L26xDcHJ#)UDYRC0*((n>DkqDXBJT*Q*hZTQr(?Mq#PY z-Kww}^a~f+#L(kq{;J7NHKfyONiTwQreB%{&MZ5P%F}59`^r|*TDiZaByJ4a={m#> zXjfu>92fYX-&1I9xf>*{(L3cIor%&8?e-?2%A6Uex&w`{gP`Fb_ zX#5)L5x3?dbLx_>R2?nBM51*@7qpV*>v1~Ge4P#)sKQc>nN46eb9Z3T)SU?%1a|65 zZV7D?6{wCfsJ2mxssz)9E74SjDqrISW;*Q$l!HejqgEDM4mugp&Oi$GnmK5|s8Mv$ z>&uc(4XnDVsP;Figo~%uT8-(?4LfUV7_Dn+7>zzBt9q!$9H}$}sp~>tUTA22DHs|J zgf%nepdFdln=!)#tuE9{X*8=;)?hiQomW`y64gZS%$|{6F#YGNQlkd@#-&*0$zulW zE;QF)WnfNwMxGh8tT)GdaonY4(&is5 znY%zup*|xkmK%yQo@vskPTBL59L+9kSMss)$)Q4Tl3u$lUsq}r{by$6YS3{qtsU5b zS!+;z`P`y&w)R@GxrQV-{-}|Pp>e;4Fc(E*Ob&*6kf(yKm6yhilsSzmSrS3~_2lqGNAqrV=H^z>d4NtYq|d2EYJt?5$MuNI zakU2ZyL$4>e{*-N^M{5}y?>AEz`vcXv^rlGw-<*SZm&nJG-`4#CtNF=#H^$pl3vBt za*_p0u8Q65!|%0s(~FAu3)t2*NTpE2}`H4|-KWTS*&mIhHPYKKtcONI|k zENUMqO*$l9H5;8Xj7%EmqUm@^{th)EyV@75jr46t^g{SdYGk6Sq`2-Hxo9{@jx+`} zkxcenS&!d9Xo%141QJN#vuX7oEzbdCYCSwk)-QY;V6b&)vH0fGVCjWH4y7*Q6P(#%!-E2ko77 z7@$F;=Fo|*w(X{UjsUc3dAU^D1_hXv}xCe%WkAKsDuoPdsV^UkqPeG@1u%zpA9 z87k~NWT>#sEJaV6I>FG<3$@cI8iFM(m_UmWd<-;R8K2O6V(Nru5yRdHF-Wr*O5)O# z7@gh{XqWZ|ob@y^=cs9P*zy=U(V_4ZBvRQZ*K&eZRvH~&>CIB<+1x7Yd7G99 z6-`HcYVl4}f}$ltmK#HH|r|~0xYB)4`f%tQCZuO;PXpx`;$}=Hm?M$ z<#*+f)I3O$YbXTuOL$TsErWQ5=0c2IO&+`s52yP*Or*G|7;;&u;|S>u{Ks;BmlerT zIm!h_>8B0(Bj95GS$$x0z*0^%a!Z^gX$(9GR+@68V@ZyjbgJSDkRwrekl0D5d}<^& z8yw~EBZHWx7|j`yD~D$h+Fe6V5}XB=@*L9YC2O80nDQX9Amqrlr2?-YzCh_kxcqKN z-YV*JW75eC`8jnQ_&!H#3MF78U+EooIqBW3v0+9G+>jjR+M2CU|qxhprBBd?na=N+ z*h{+650J8&|VHOCn3LzPl_Q&8)VON5z8KZ~Q#Uc1@kl%_CAU(Yu>03cl zjGtm4NHZ}2c>i7w`qO0D34sh0umu8Spb?1REa*hgn?MuFAQJ^34RKt2WpKL6f5%X&gEw6hy8D#yT+8AOpc9E`eSPdNnc-j3OWO zYS3|@31@K`^eWIRAx}7rLeR0GNqZ7bgS@v$|95ihKg!3o`9Rr&7G{S*s z6yU-^ngc?o!JwcQjuC90q=T+P2H1!4XJj}Fx&}0?D>)DJInZ9nLm|sKpf7-i9ZqI} zoCP|Yku4tDt$}tSW%L!sPts;f8wZr!IC!gRYs3CR%Jv&jl7TT(K^MsHKr7&kLfZTw zt6^-Cyh7qc$SRzOi2f1sWr$B!<1f()lQR|c6{f#M#We_=R$*_abcF<(DYZ)Ieqwxy z0!R^6pjAXuPrT3rmFR_{$u+hTw89#xk=lSTVuq1kg2H#gfK4;#D|kMLE5)EM%MvJ@ zD}Yp}@^a*UvHw1UI4@5jvq}hpq9sh&=Z+?>pO!c}{%28PPrDk&IIfNgYwr3g#?imOYa;NuD?nkvVPU!j76$XB411PuXexEU!gLEPOb0AXx4^=%kJacFSeOo2 zm~MfEVb}NQ@M@_7@h)LDcyWp$8t+;sv%?D;g=kC$Hf6jpafrrb(HRz|o3JppvAnP) zDIJrIZ8Qnnjc80pJSi^Gn5>Y*6x5K77?{l{>RbFZVPP=8$AdOuVc4?)3)4+l7!0Mc zuycey6ZvODQo+J>9Tq6T!e9Y0EKHvZdOqk(&^U7G^FiaFgHt_LH@p}+tyY{b^)q0= z!GqHw!@_g}7N#!(4RwG4XIL2AQmig?0~UsXWObq&urPfYXs8?AfQ9KmGmtvc4Oke= zDpprI)RjiKFg*?o=rdR`3=0D$gY_NWF2llf=svPZVBs(($FMNu<1Gp0Ff0t^GAv9_(7?du6Lp;s6fh6PuP*2tR0iew;|j^|o*Ceq3JrTL3zGMBNU85pMH zxfTr*S|{@wMg=qgo8!<33=D${Cy>_Ieut)GAQ)6gZ8{qTF)$2v2^Jm>Vtio0Sq;E2 zY_65ChwOX+!?2TA!5)I40yV`46`g@$0>Cg>d?ugX{|ua0$gCvO5i1=kmrp!81H)h> zk)31b`}{2o4AXNVe+l^*7zSgF>>Owi3m-=?7-i&-f@K6f%D^z4fMFW>6v;}rC*X_+ zql&D3s3z!qJ{0N<48smj#|Aqehe#MrWdFd_g5u`GsLsGJSO{bX+4)|W60nKHd5sk# zojP$LgA>eo$iTobcup7srcVJECJ_vc6_6@0xKqK2!o|Qa<`yC~61f=|h7%v`Iyg%h z7>3@G-*FoLGBAw!h=mGH;Nv^apwQgdX8E{};Uo`TB>plm%;Zl8hy4Svi+u9M$TtHO zGcXJhwHVOgk^h0t^oU|j!e0i4G5?CeFV_eeCV&hB158+>yr02FivXX2VazWv_&%=) z#UHT^VN+#~2_`UcEWj{0+O6r>6H%H47-pnvR6r>Tq5^EdFf;*HF5ECGoeHQ03_}pb zDl-Q%L4jfDzfZ0VWs;l$3?o1oBg1e%0yYD~U^+11i*{}i6c~nqwm8M0A1G9X#fuk1 zlZ_p&d_hQTN&k97qq#ziIv zrX3b4_%>jehB;YV5G#}gX+(S(>~getf&#;EI`EZOiHb=sC@@T&Un(^;&@XoxO{S%Z z%@B76h8c2(7%U|$H!MJIR+4c)j=OT!s=|Cy%J;Yz1>rv^CBIY^nnqIDnhzNUWl44V z#UO&Cl_AD{HcF*)F5OdbQI$Tag`n#OhT(h`D2kOy1rZ>Okzu&2lF4UplaEHiHGp9( zUyTOi!tSW#*<+l8im%|Z0>iA*njvmLy-2*sFV4XVtGG^$xhgP>)vd27O8P3mFrm?G z_K7b-;S{9dmeXXVd1wWSap5)SCoXOZ#p4ZW6}q$n#ca}4b`YSL#<@ALghRE76w{UX zRe)l3OH;$M{SD{HmQ5O}2pbheavf5`n^EFcq!^21;TiERC2qV=i?jh0Go_J3r^2rR z6tl`}Mg|k|rQGVY__A>s(}u&6aG{w%vA|q)0>x~ZupwaQwgJU7a!F$DQ|yJKrJMl^ zgMy#194W&!fMRv$0BQici0X+IC}zo_`75C&U^n86-XD-+;AC)^iMnoYlnwHwLd#xh z2a1{1ASZW)LaY21RW($+Ru@tXE+18;H8bVF4vi+F7-MOuP`wJI(X1lWMev-#fMOc< zH!4--q;ArGfpt=QuLcz3p4Od_BX>c7V#uZiR%kNB!pmqQbb zXL<=1z?YdHayl&(Ym=@56cbCkQlscUGvluTiUq09QzuX?m@s#ahWHvlFqakL6iMJv7pI*pqOo# z)cdyr#eyYsdvT`W_67%vT_xL9fMT{>nr|{HJQhu5+D@>rY(OzH4=Eepl2VgHnSrLJ z%t3C(aMh88Mn5=EENBK=)HosX1_CaTH?6bqV*hLGfNRONiI;9;lL zW0mCtiUrGP0g44n=J}b6a!DD(G0O8M2hYa*v2Rj-1HlRuL%G-KIDkXH`30yfL}~d| zr*e4)RICnZ>L1zTG&Phw&)>Ri0R7^v1wkfaR|T8Y78=2-zNj*b5y zU@@DF?`T7XZRRR9dStK|pP1;FLWTKGOq6N|i`m4~sVx{-jKxrr?QmxYi?N7CGIV04 z8Uw&$W*L;O&Z0j>bk*VT((bG$zBC4W=fNHfTU}I z#e@YcMiO+C=I=DDU@EQVR>^Njdq_`FKED6Z`&Pb8ldIf8r+9&XbSzm(s-LsIjQFJB|H7%4tK zSS-L>G#6qvuo#rL&zl6rWxBCyfyFFtERv&gYJ;wnP4%BtQk(g0I(P~$t4=P?(-JTf?!av7!))ea!3yLG#6M4EQVC843!n=+VtVU zsEnCNC%34^AIw73mxz-ZC;EMqSS;JXNvuH9nHn13c@iewm@YeBj#@bi@_z11uz5k+Q4F9`+eUASWH8$)Ib_9 z8(1vBt!{$Cz{kd={P0$=82IEBrI|^7dndMYa=F81gL9n>9U3t5^qX)ojtpqh3=L2g z^4-H^L&vPa1UCH)K0Zq~gAbGg6&P_0YrMjQj0MCuCSe0Z|$gHiiiU*cftGa#V*rGrlMgU}KmXl|r-O z#yDhDg`c6Yz{cQYr!bQV8)JGs=qwZlKa3HlveOpW7}lu`HfF@Z4A_{40w^#Rj{?u3 zz)a8-IJ3aUj6j zhYq(Q!)atlLwW#gOjof;6E?=Q1vaJ!z{YS;3CHh=n6NS30vppfkW385jiJI6R2Tpo z`SimiCTz@zP@AwZBZ6(h#*7HJ2^%va;DC*3=+Pcjs6ymkA8gDBp_{NVBgAgP z#t`eL5WEQ+;~2dKHpVf03v7&I{1(_4V*m&?M!zjWxG@F^oB?AiXiOHw_HD2+1{qjj zV|oB=46%G0Y>ZJ17T6f094xRggzgzOrjcRHkyXZx!L7dz^cplM05+xvz{UuNVTFw$ zGH-*8ArNnajWN!{0vlr-2tuhQZcHbjhy^yL2f)VkbfjBgV|oB=Ob>vKA#NRxu9&bf zJpeYQGi*!~CT>gzZVcj4$b@}G4}gv70kAQ>SlVD?dI^G$7T6fVaW>ePUJ1C41vUmG z5W&VY6E~(yITH%egpC2CGtUkigC4NK#<1*curbVXD{KsaY(##p1{^CBvOVwz0oXBy z7SUw7CUi`9ojvRr=qfnu_@n!!BaSy6^mAR!Tq}<{I+?%TRnOJnnByi4b2$Fd*b+45 zKlRI9Gy(XByEN<;RQZ=sVzk-+hkm)s{NXOB855#~EqgqgVM4U9KmNb^fJ?%sSG?MfRTs>7!WOi zXA`xH-4>t}KdKiyFKc6HXx#sgez}Vxul(~=ngP)Q`u9Ki%U$LVcWFTX{_p&9m-;2I zU(oYpH24Vg5MjcSKp$or=5-m|5!N5?!r2n*ng(hw#EwD?mI98CdFV3`d)Q=g##1Qt z8kvKQ*8W3Y)$%+~3k(p&sTtm0CDT!m{Rh1&Wf~AUWY742)T=_Kz*e&VuvfV}4F9X| z$GtR#uP>Dcp$L3TA8#L4AY-}6ZAJzcjzc?f1hoIqSFzj%zWv9(isWV-d;)pv(QC5! z{6G3tpviU6J7aCX{B;?;YBApS>tDnx6W^OWn3%BF-J)1TFjyQkVZE4_FQ%G2n62o9 zTU-<~2=j%Wt4|_wRLEZw=Z{#PJnxC1A!B$M1xB(v`!7K)nfM&?ZVYwB&v-FJxIm<1) zG*So5BWHIq%blRLj()4}#tvbXgo`8iC_wSxBEYiVrh$2Y&NJ*YFqq)&qeB$)N^svV zw}ZEnCL5NT`l?Oww$N(};BBH&VO}ZjNpc7BVx{02G{LhB-YUEREs(i_LjWXL2En~p z@8MzzG#ER>Exc%Qj$7!36xkqH6h>?p@?48vpwLY8{&&jV$Y3z8LBl79FHH78{%0r{ zb_D)!(N)O5RqjRp`8a0d{Rc9F(Ocv`GXte7dLE4wxp6U>DBVvd$fRFOYh1u)`3o}4 z#oTAFJ2sH3)A9I}!73k|p5t?a1wF|I~0 zmg%NV6@n z2oN0&(bfOo^Y{>if3M);U zPqZc7Py08ch4LcuE1EVqEjoaqX#eiE5GHxJP&93w(Lw1&=GMAU=0aZ4v~@=Zr5F3Q zYz;lSgba#7`+sy$dWkQlfb=}b2dBw!S;Xl}+3+AbTINGOI9*8l{~{KMVe5sgp=fy- z85B)s)FP&rvAGmTlcBLl7C?SEn^@PP$sSxJ3n9OPO*e$O>24)~l*3e@7WJb7%V?#BNCX0Cqr>|mz7l=K|a0M9@17LGQpg9=ZZhXI{(w7%1(?AHkr*5z!v#(#*qrEK zqUa4iM?6$7r7N23#AWbrg^P`Ry7ANTK1V!MH>C&Cn_%Q)|4Byy%W;qm7n^ZNP#9B$!a3mhow>=+wBuY^Z0Tx{iYgx`jP!$`DG(DblGqJ!0Q7pM ze=)z`ra(-%*bf_D{en0JUdYskEV~OfGJQ~kZLfZUd?N}87l-I@!H$A>rjuc-tDi96 z#PngGBc7ZLI8N+E>Mo?fjUtX(zugwc=;*>f>79uCSR7a(XMDL$bPD@m$j#2qoU!60 z3~8T}N6Ig8>P4F21R^?>yW+%6&z$b8)l@>k4EV^ z>_&@21CPL}9xrk&Uv3kfhiT{ga+~OU*j$?L(`{lDU>*2A-L8_~h$1XJ->2I|7h@&+ zzT76d1e!zP2?*@`EgTflpnpaK5Zwb^0Z@bQ%Wa}7DLQI=xm_W@gOg*P2F5I8$c7*C zJDh3ffQ|y4!?fvwhb}9Z6MQasXvT8+11!fVNUJZm%jHDFajL%DhLat~6G~TKZkNd^ zI4=>6&t`FSE0Zq#jiUamPq#~D6t)-=z}L7qh?L4%*b#_UpKh1RxzN}|D_3!;T!2Oq z9gfROp?!2h(e&kZja&wGrD*!bUC3Cd8%3AM)zB3D{1<$qv;nJFC0xci*Y>%#!M}#f z-Q6b7u_dgQ8K&ox3tU-7PZPrNO9h@RqA@sapg3=|K#ZfNW5ctf!eogJN9dtF`H zI`98OnQ-wKtwxd`bj559U`XH6!$V%j?IX;2|TR?60hg*fNPP}hmJ z&ew@06VV^x?2KOkfBa$Rn++<(b*=FNgcl%_Ij)F@oo^8f$%>Wey8N*7l>pZBk2wDt zz={N`A(w@WD8CU3%X!54d_a{?wsXGI06#TnX;@S{XJ2BOtrxC(q0Ybm-t3=n{Ug-b z+TZ_)q0XkRxuMSM+>1k<&Kumz+B@fjw76e;dsc=9oIAB zefO)KokJb&)Q--c&TC61U86J?N|WxVUvU0%t-@M&aZY&gdIa&Sgs054>__M4e<+iV zihOULqsUv~YBSL}ynea7zACSUhan?{i zztEDY&YK(!xTrD|@1?R5Bb_Y+YCP|9KIdqFCRrNx@N^RMTAJ_fF~j+&<3@i6e~5DS z@pa#w7v=oZTSRRaXUkj<7OBBl*xK9J(XFt;wYW$P#`eaY)@=W#akmQB{l#i9{@(a3 zY97@1aHV^Gu`w8pyP>t)8-G*j-f_hkjI)hLqUVhVRk}}<7=r-;Vs)!@|Gvx^43p)$ zyIc*1$#LITVGPFE#^0d$LMrP|mBwKBYkarL7z|6pmR1{sVK(1=w1x-6?BMUcYA~q# z?hn1r7kFkQi3??}m46B0nGx5~8|oNPT;Y1;g%F+@NufOwlBR_YsBkTRA%thfkkAVl zj4`1nD%}sf7@}rI=m4}fDRf$;`>!vBsF`sgbOL%FI;PUyr%Q;M84w`WfJ%2n*AO)` zOqOfOUqg6im>l=AmqXOdxDYxG#TQdq+g=G#Gs9nFcDE2UGb{}Y?M`Bt8D{g{y%tDva@Ji=2}tUc-WQkQ^?B=%7mj|fmb>b8&!z%$U?`1 zu6HJdybM)$Jt+&)bQP|+Ni;6P360`qO;_n|I~n8BumTD#(ZiaqQk1*iEpoi+S}-NV z4K3w_#;YNHM+vtVJ9@e{O$|w=1n50VNTh_kVn=t^g~*VtfeEo!9Nks1_rDV+UjqyC>O5OGPG~P%#hvny_W8|`^@5T^9_S* R%4`}pHB#;?vqMrE{x3pb-^l;~ diff --git a/include/phantom.h b/include/phantom.h index 5aa840e..ae5ba45 100644 --- a/include/phantom.h +++ b/include/phantom.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: phantom.h,v 1.23 2001/02/09 14:34:16 kevin Exp $ +** $Id: phantom.h,v 1.24 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -174,7 +174,7 @@ class Phantom const std::string& name() const {return m_name;} const int id() const {return m_id;} -#if HAVE_SGP +#ifdef HAVE_SGP void show () const; void show (SGP& sgp) const; void draw (SGP& sgp) const; diff --git a/include/reconstruct.h b/include/reconstruct.h index 83d5476..54f19f0 100644 --- a/include/reconstruct.h +++ b/include/reconstruct.h @@ -8,7 +8,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: reconstruct.h,v 1.5 2001/01/29 23:11:32 kevin Exp $ +** $Id: reconstruct.h,v 1.6 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -37,20 +37,6 @@ class ProcessSignal; class Reconstructor { -public: - Reconstructor (const Projections& rProj, ImageFile& rIF, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* filterGenerationName, const char* const interpName, int interpFactor, const char* const backprojectName, const int trace, SGP* pSGP = NULL); - - ~Reconstructor (); - - bool fail() const {return m_bFail;} - const std::string& failMessage() const {return m_strFailMessage;} - - void plotFilter (SGP* pSGP = NULL); - - void reconstructAllViews (); - - void reconstructView (int iStartView = 0, int iViewCount = -1, SGP* pSGP = NULL, bool bBackprojectView = true, double dGraphWidth = 1.); - private: const Projections& m_rProj; ImageFile& m_rImagefile; @@ -63,6 +49,20 @@ public: std::string m_strFailMessage; double* m_adPlotXAxis; + + public: + Reconstructor (const Projections& rProj, ImageFile& rIF, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* filterGenerationName, const char* const interpName, int interpFactor, const char* const backprojectName, const int trace, SGP* pSGP = NULL); + + ~Reconstructor (); + + bool fail() const {return m_bFail;} + const std::string& failMessage() const {return m_strFailMessage;} + + void plotFilter (SGP* pSGP = NULL); + + void reconstructAllViews (); + + void reconstructView (int iStartView = 0, int iViewCount = -1, SGP* pSGP = NULL, bool bBackprojectView = true, double dGraphWidth = 1.); }; #endif diff --git a/include/scanner.h b/include/scanner.h index 162e896..fea4dc4 100644 --- a/include/scanner.h +++ b/include/scanner.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: scanner.h,v 1.17 2001/02/08 06:25:07 kevin Exp $ +** $Id: scanner.h,v 1.18 2001/02/20 04:48:45 kevin Exp $ ** ** ** This program is free software; you can redistribute it and/or modify @@ -140,7 +140,7 @@ class Scanner GRFMTX_2D m_rotmtxIncrement; -#if HAVE_SGP +#ifdef HAVE_SGP SGP* m_pSGP; // Pointer to graphics device double m_dXMinWin; // Extent of graphics window double m_dXMaxWin; diff --git a/libctgraphics/ezplot.cpp b/libctgraphics/ezplot.cpp index b59d92d..ed1ca23 100644 --- a/libctgraphics/ezplot.cpp +++ b/libctgraphics/ezplot.cpp @@ -6,7 +6,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: ezplot.cpp,v 1.30 2001/01/28 19:10:18 kevin Exp $ +** $Id: ezplot.cpp,v 1.31 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -36,14 +36,12 @@ static const int DEF_CURVE_CLR = C_RED; EZPlotCurve::EZPlotCurve (const double* xData, const double* yData, int n) -: x(NULL), y(NULL) +: x(new double[n]), y(new double[n]) { - x = new double [n]; - y = new double [n]; - - int copyCount = n * sizeof(double); - memcpy (x, xData, copyCount); - memcpy (y, yData, copyCount); + for (int i = 0; i < n; i++) { + x[i] = xData[i]; + y[i] = yData[i]; + } m_iPointCount = n; } @@ -94,7 +92,7 @@ EZPlot::addCurve (const float x[], const double y[], int num) } void -EZPlot::addCurve (const double x[], const float y[], int num) +EZPlot::addCurve (const double* const x, const float* const y, int num) { double* dy = new double [num]; @@ -108,7 +106,7 @@ EZPlot::addCurve (const double x[], const float y[], int num) void -EZPlot::addCurve (const double x[], const double y[], int num) +EZPlot::addCurve (const double* const x, const double* const y, int num) { if (num < 1) return; diff --git a/libctsim/reconstruct.cpp b/libctsim/reconstruct.cpp index e80cc4f..7bc6a83 100644 --- a/libctsim/reconstruct.cpp +++ b/libctsim/reconstruct.cpp @@ -8,7 +8,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: reconstruct.cpp,v 1.12 2001/02/11 04:56:37 kevin Exp $ +** $Id: reconstruct.cpp,v 1.13 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -91,7 +91,7 @@ Reconstructor::Reconstructor (const Projections& rProj, ImageFile& rIF, const ch return; } -#if HAVE_SGP +#ifdef HAVE_SGP m_adPlotXAxis = new double [m_rProj.nDet()]; double x = - ((m_rProj.nDet() - 1) / 2) * m_rProj.detInc(); double xInc = m_rProj.detInc(); @@ -112,7 +112,7 @@ Reconstructor::~Reconstructor () void Reconstructor::plotFilter (SGP* pSGP) { -#if HAVE_SGP +#ifdef HAVE_SGP int nVecFilter = m_pProcessSignal->getNFilterPoints(); double* adPlotXAxis = new double [nVecFilter]; @@ -183,35 +183,45 @@ Reconstructor::reconstructView (int iStartView, int iViewCount, SGP* pSGP, bool osXLength << "xlength " << dGraphWidth; ezplotProj.ezset ("clear"); - ezplotProj.ezset ("title Filtered Projection"); + ezplotProj.ezset ("title Raw Projection"); ezplotProj.ezset ("xticks major 5"); + ezplotProj.ezset ("yticks major 5"); ezplotProj.ezset ("xlabel "); ezplotProj.ezset ("ylabel "); - ezplotProj.ezset ("yticks major 5"); - ezplotProj.ezset ("yporigin 0.10"); + ezplotProj.ezset ("yporigin 0.55"); ezplotProj.ezset ("ylength 0.45"); ezplotProj.ezset (osXLength.str().c_str()); - ezplotProj.ezset ("box"); - ezplotProj.ezset ("grid"); - ezplotProj.addCurve (m_adPlotXAxis, adFilteredProj, m_nFilteredProjections); + ezplotProj.ezset ("box."); + ezplotProj.ezset ("grid."); +#if 0 // workaround c++ optimizer bug, now disabled by using /O1 in code + double* pdDetval = new double [m_rProj.nDet()]; + for (unsigned int id = 0; id < m_rProj.nDet(); id++) { + pdDetval[id] = detval[id]; + } + ezplotProj.addCurve (m_adPlotXAxis, pdDetval, m_rProj.nDet()); + delete pdDetval; +#else + ezplotProj.addCurve (m_adPlotXAxis, detval, m_rProj.nDet()); +#endif pSGP->setTextPointSize (12); ezplotProj.plot (pSGP); ezplotProj.ezset ("clear"); - ezplotProj.ezset ("title Raw Projection"); + ezplotProj.ezset ("title Filtered Projection"); ezplotProj.ezset ("xticks major 5"); - ezplotProj.ezset ("yticks major 5"); ezplotProj.ezset ("xlabel "); ezplotProj.ezset ("ylabel "); - ezplotProj.ezset ("yporigin 0.55"); + ezplotProj.ezset ("yticks major 5"); + ezplotProj.ezset ("yporigin 0.10"); ezplotProj.ezset ("ylength 0.45"); ezplotProj.ezset (osXLength.str().c_str()); - ezplotProj.ezset ("box."); - ezplotProj.ezset ("grid."); - ezplotProj.addCurve (m_adPlotXAxis, detval, m_rProj.nDet()); + ezplotProj.ezset ("box"); + ezplotProj.ezset ("grid"); + ezplotProj.addCurve (m_adPlotXAxis, adFilteredProj, m_nFilteredProjections); pSGP->setTextPointSize (12); ezplotProj.plot (pSGP); - } + +} #endif //HAVE_SGP } diff --git a/libctsupport/syserror.cpp b/libctsupport/syserror.cpp index d50471e..5b4e631 100644 --- a/libctsupport/syserror.cpp +++ b/libctsupport/syserror.cpp @@ -2,7 +2,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: syserror.cpp,v 1.20 2001/01/30 02:20:50 kevin Exp $ +** $Id: syserror.cpp,v 1.21 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -41,7 +41,7 @@ * Can take 24 byte transfer */ -static int s_reportErrorLevel = ERR_WARNING; // Set error reporting level +static int s_reportErrorLevel = ERR_TRACE; // Set error reporting level void sys_error (int severity, const char *msg, ...) @@ -62,7 +62,7 @@ void sys_error (int severity, const char *msg, ...) } else #endif - std::cout << strOutput; + std::cout << strOutput << "\n"; va_end(arg); } @@ -78,7 +78,9 @@ void sys_verror (std::string& strOutput, int severity, const char *msg, va_list std::ostringstream os; - s_nErrorCount++; + if (severity > ERR_TRACE) + s_nErrorCount++; + if (severity != ERR_FATAL) { if (s_nErrorCount > MAX_ERROR_COUNT) return; @@ -120,11 +122,11 @@ void sys_verror (std::string& strOutput, int severity, const char *msg, va_list strncpy (errStr, sizeof(errStr), "Error message not available on this platform."); #endif - os << errStr << "\n"; + os << errStr; strOutput = os.str(); if (severity == ERR_FATAL) { - std::cerr << strOutput; + std::cerr << strOutput << "\n"; throw std::runtime_error (strOutput); } diff --git a/msvc/ctsim/ctsim.plg b/msvc/ctsim/ctsim.plg index 804c781..687b9af 100644 --- a/msvc/ctsim/ctsim.plg +++ b/msvc/ctsim/ctsim.plg @@ -6,13 +6,29 @@ --------------------Configuration: ctsim - Win32 Release--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP151.tmp" with contents +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP267.tmp" with contents [ -/nologo /G6 /MT /W3 /GR /GX /O2 /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\include" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +/nologo /G6 /MT /W3 /GR /GX /O2 /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\include" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.1\" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c "C:\ctsim\src\ctsim.cpp" +"C:\ctsim\src\dialogs.cpp" +"C:\ctsim\src\dlgprojections.cpp" +"C:\ctsim\src\docs.cpp" +"C:\ctsim\src\views.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP151.tmp" -Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP152.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP267.tmp" +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP268.tmp" with contents +[ +/nologo /G6 /MT /W3 /GR /GX /O1 /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\include" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.1\" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +"C:\ctsim\src\dlgreconstruct.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP268.tmp" +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP269.tmp" with contents +[ +/nologo /G6 /MT /W3 /GR /GX /O2 /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\include" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.1\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +"C:\ctsim\src\graph3dview.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP269.tmp" +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP26A.tmp" with contents [ wsock32.lib tiff.lib jpeg.lib png.lib zlib.lib xpm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/ctsim.pdb" /machine:I386 /out:"Release/ctsim.exe" /libpath:"\wx2.2.5\lib" .\Release\ctsim.obj @@ -33,10 +49,18 @@ wsock32.lib tiff.lib jpeg.lib png.lib zlib.lib xpm.lib comctl32.lib kernel32.lib \wx2.2.5\lib\zlib.lib \wx2.2.5\lib\tiff.lib ] -Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP152.tmp" +Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP26A.tmp"

Output Window

Compiling... ctsim.cpp +dialogs.cpp +dlgprojections.cpp +docs.cpp +views.cpp +Compiling... +dlgreconstruct.cpp +Compiling... +graph3dview.cpp Linking... LINK : warning LNK4089: all references to "WSOCK32.dll" discarded by /OPT:REF diff --git a/src/dlgreconstruct.cpp b/src/dlgreconstruct.cpp index 1c467c1..9f1b950 100644 --- a/src/dlgreconstruct.cpp +++ b/src/dlgreconstruct.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: dlgreconstruct.cpp,v 1.16 2001/01/29 23:11:32 kevin Exp $ +** $Id: dlgreconstruct.cpp,v 1.17 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -169,18 +169,21 @@ ReconstructDialog::showView (int iViewNumber, bool bBackprojectView) m_pSGP->setViewport (0, 0, 1, 1); m_pSGP->setWindow (0, 0, 1, 1); m_pSGP->setTextColor (C_LTRED, -1); - double dCharHeight = m_pSGP->getCharHeight(); - m_pSGP->setTextSize (dCharHeight * 2); + m_pSGP->setTextPointSize (20.); m_pSGP->moveAbs(0., m_pSGP->getCharHeight()); m_pSGP->drawText (szProgress); - m_pSGP->setTextSize (dCharHeight); + m_pSGP->setTextPointSize (10.); int iXDialog, iYDialog; GetClientSize (&iXDialog, &iYDialog); double dGraphWidth = (iXDialog - m_nxImage) / static_cast(iXDialog); m_rReconstructor.reconstructView (iViewNumber, 1, m_pSGP, bBackprojectView, dGraphWidth); - + ::wxYield(); +::wxYield(); +::wxYield(); +::wxYield(); + ImageFileArrayConst v = m_rImageFile.getArray(); int xBase = m_nxGraph; int yBase = 0; @@ -214,6 +217,8 @@ ReconstructDialog::showView (int iViewNumber, bool bBackprojectView) m_pSGP->getDriver().idWX()->DrawBitmap(bitmap, xBase, yBase, false); delete imageData; } + + ::wxYield(); } bool diff --git a/src/splash.xpm b/src/splash.xpm index 9c3cb79..7aba63c 100644 --- a/src/splash.xpm +++ b/src/splash.xpm @@ -497,21 +497,21 @@ static char *splash[] = { "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", "88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", -"88888888888888888888888888888888888888888888888822278888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888722288888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888O>>$888888888888888>>;888888888888888>>;88888888888", -"8888888888#uuu#8885uuu68888888888888888888888888uuu#8888888888888888888883uuu.8888#uuuu8888888888888888uuuuuuu-.=888888888888888888888888888888888888888888888888888#uuu8888888888888888888888888888888888888888888888888888888#uuu-8888ryuuu#8888888882uuuuuu2Xr88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888@<48888888888888888888888888888888>@<<<>:&<;888888888><@9>4<@9>4888$q+;wqw8;%&<&,988$q+888O%&<&%O888+q$4e<4888888888<488888888", -"8888888888#uuu#1uu-r8888riuuuuuuu*83uu-8886uu288uuu#882uuyuuuuu38888888883uuyuu68-uyuuu8888888888888888uuu3888iuu18886uuuuuuu.888iuuuuuuu3886uuuuuuui888uuuyuuuuu#88#uuuyuuuuy=887yuuuuuuy=882uu2yuu386uuuuuuuu2888888888888888#uuuyu.8.uyuuu#8888888882uu288886uuu7888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888+<:8888,<;88w9@<>88><488O@<%4%<@O884<&ew4&<>88888888888888;@@O88888888;<<4O8;:<98888>88><4884<:888:<4884<%888888888888q@&%O888888888><488888<488888<48888:<488@&88888&@884<>8888<488888<488888<48888O&<&,4$888><4888888<488888<488888>>>>>>88><488888O:q&<<%88><4888888<4888888888$@<$8><488ee88888ee884<>8888<4888888888<488888888", -"8888888888#uuu#8#uuuy7882uui*88=X-888=uuuuu68888uuu#882uu388#uuu8888888883uu28888883uuu8882uu3888888888uuu388iuuu588#uuu#8=-uu383-6=886uuy8#uuu3=88*.388uuu#883uu288#uuur8#yuu38ryuu1788751882uu38888ryuuu2-uuu2888uuu#88888888#uuu888888#uuu#883uu28882uu-331uuuy7888uuu#88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888$<%e&8888+<,88888$88><48888$O88884<>8><488%<>888><%884<>888888888:+qq88><488884&w>>:&e88><488;&&:>+&&;884<>8888>w<&O888q<>888><@9>4888><@9>4<48888>@<<<<4888$e<<88888888+&<<8888+&<<>;8888888888888O>>;888888888888$>$8888888888888888888888888;>>O888888888888888>>;888888888888888>>;88888888888", +"88888888888888888888888888888888888888888888888822278888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888722288888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888O>>$888888888888888>>;88888888888888888888888888888", +"8888888888#uuu#8885uuu68888888888888888888888888uuu#8888888888888888888883uuu.8888#uuuu8888888888888888uuuuuuu-.=888888888888888888888888888888888888888888888888888#uuu8888888888888888888888888888888888888888888888888888888#uuu-8888ryuuu#8888888882uuuuuu2Xr88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888@<48888888888888888888888888888888>@<<<>:&<;888888888><@9>4+@<488888888888", +"8888888888#uuu#87yuu.88888888888888888888888888888888888888888888888888883uuuu388=uuuuu8888888888888888uuu2332uuu.88888888888888888888888888888888888888888888888888#uuu8888888888888888888888888888888888888888888888888888888#uuuu2888-uuuu#8888888882uu-331uuuu#888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888;888$q+;wqw8;%&<&,988$q+888O%&<&%O888+q$4e<4888888888888><488888888888", +"8888888888#uuu#1uu-r8888riuuuuuuu*83uu-8886uu288uuu#882uuyuuuuu38888888883uuyuu68-uyuuu8888888888888888uuu3888iuu18886uuuuuuu.888iuuuuuuu3886uuuuuuui888uuuyuuuuu#88#uuuyuuuuy=887yuuuuuuy=882uu2yuu386uuuuuuuu2888888888888888#uuuyu.8.uyuuu#8888888882uu288886uuu7888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888+<:8888,<;88w9@<>88><488O@<%4%<@O884<&ew4&<>88888888888888;@@O88888888;<488888888888", +"8888888888#uuu2uuy7888885uui*#1uu-8=uuu*881uu688uuu#882uuy.3yuu-8888888883uu2iu26uu5uuu8888888888888888uuu.##1uuu*88=uuu3#6yuu686uu-6##5-38=yuu3#6yuu688uuu-55uuu.88#uuui3.uuu.88iuu1#*iuu.882uuu-223ryuui*#1uu2888888888888888#uuu5uy7uu5uuu#8888888882uu28888ruuu3888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888O&@888O<<4O8;:<98888>88><4884<:888:<4884<%888888888888q@&%O888888888><488888<488888888888", +"8888888888#uuuuuuy=88888uuu=88ruuu782uu.8ruuy888uuu#882uu3886uuu8888888883uu26uu-u.3uuu8888888888888888uuuuuuuuu58885uui8885uui83uuy67888=83uu.8885uu188uuu#88.uu288#uuu8885uu-8#uu-888*uuy882uu388886uuyr883uu2888888888888888#uuu=uu-u-#uuu#8888888882uu288888uuu38888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888%<$88:<+88w<48888:<488@&88888&@884<>8888<488888<488888888888", +"8888888888#uuuuuuui8888#uuuuuuuuuu#86uuy8Xuu.888uuu#882uu388#uuu8888888883uu28yuuu73uuu8888888888888888uuuuuuuuX88882uu3888#uuu87uuuuuuiX882uuuuuuuuu288uuu#883uu288#uuu888#uuu83uuuuuuuuuu882uu388883uu28883uu2888888888888888#uuu81uuuX#uuu#8888888882uu28888ruuuX88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889<48888O&<&,4$888><4888888<488888<488888888888", +"8888888888#uuuX2uuu5888#uuu2222222788yuu*iuu7888uuu#882uu388#uuu8888888883uu285uui83uuu8888888888888888uuu.Xuuuyr8882uu3888#uuu88*-uuuuuu582uu-222222588uuu#883uu288#uuu888#uuu83uuy2222222882uu388883uu28883uu2888888888888888#uuu8*uuur#uuu#8888888882uu288886uuu788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888ee8;<%888q<>>>>>>>88><488888O:q&<<%88><4888888<488888888888", +"8888888888#uuu#ryuuu*88=uuu=8888888885uu2uui8888uuu#882uu388#uuu8888888883uu28=uu683uuu888633#888888888uuu385uuu2888.uu18886uu-8=88765-uuu8.uu.888888888uuu#883uu288#uuu888Xuui86uu-8888888882uu38888*uuu7885uu2888633*88888888#uuu88-u.8#uuu#88#3368882uu28887yuui888333=88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888w<$4<9888%<$88888888><4888888888$@<$8><488ee88888ee884<>8888<4888888888888><488888888888", +"8888888888#uuu#8#uuuy7882uui*88=X-888=uuuuu68888uuu#882uu388#uuu8888888883uu28888883uuu8882uu3888888888uuu388iuuu588#uuu#8=-uu383-6=886uuy8#uuu3=88*.388uuu#883uu288#uuur8#yuu38ryuu1788751882uu38888ryuuu2-uuu2888uuu#88888888#uuu888888#uuu#883uu28882uu-331uuuy7888uuu#88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888$<%e&8888+<,88888$88><48888$O88884<>8><488%<>888><%884<>888888888:<488888888888", +"8888888888#uuu#883uuuir87yuuuuuuuu8888iuuuyr8888uuu#882uu388#uuu8888888883uu28888883uuu8882uu3888888888uuu388=yuuu*88.uuuuuuuir83uuuuuuuu388.uuuuuuuu388uuu#883uu288#uuuuuuuu-r886uuuuuuuu2882uu3888886uuuuuyuu288#uu2888888888#uuu888888#uuu#883uu28882uuuuuuuuy#8888uuu#888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888@&+qq88><488884&w>>:&e88><488;&&:>+&&;884<>8888>w<&O888q<>888><@9>48888>>:<%>>O88888888", +"8888888888#uuu#8882uuu.88=.uuuuuy.88886uuu.88888uuu#882uu388#uuu8888888883uu28888883uuu8882uu3888888888uuu3888*uuuy7883yuuuu.r88#iuuuuu-*88886-uuuuui#88uuu#883uu288#uuu2uuu278888#2uuuuu-X882uu3888888#.2163uu2883uu*888888888#uuu888888#uuu#883uu28882uuuuuy2Xr88888uuu#888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888:<<$88888Ow<<<<48888>@<<<<4888$e<<88888888+&<<8888<<<<<<<>88888888", +"88888888888888888888888888887##=88888888888888888888888888888888888888888888888888888888888888888888888888888888888888887##88888888###=88888888r###8888888888888888888888=#=888888888###r8888888888888=r888r-uu588iu-88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888>>;8888888888888O>>;888888888888$>$8888888888888888888888888;>>O888888888888888>>;88888888888888888888888888888", "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883u-22uuuu=8ruu688888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", "8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888883uuuuuu-*88*u-888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", "888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888r#X333#8888=#=888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888", diff --git a/src/views.cpp b/src/views.cpp index 8721cd4..557bc2f 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: views.cpp,v 1.107 2001/02/19 20:23:17 kevin Exp $ +** $Id: views.cpp,v 1.108 2001/02/20 04:48:45 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -1901,7 +1901,7 @@ PhantomFileView::OnProjections (wxCommandEvent& event) return; } pProj->initFromScanner (theScanner); - m_dDefaultRotation /= PI; // convert back to PI units + m_dDefaultRotation /= TWOPI; // convert back to fraction of a circle Timer timer; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { @@ -2371,26 +2371,29 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) wxString optBackprojectName = dialogReconstruction.getBackprojectName(); m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str()); m_iDefaultTrace = dialogReconstruction.getTrace(); + if (m_iDefaultNX > 0 && m_iDefaultNY > 0) { const Projections& rProj = GetDocument()->getProjections(); - ImageFile* pImageFile = new ImageFile; pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY); - Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace); + Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), + m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), + optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace); Timer timerRecon; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild()); for (int iView = 0; iView < rProj.nView(); iView++) { ::wxYield(); - if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView)) { + if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView, true)) { delete pDlgReconstruct; delete pReconstructor; delete pImageFile; return; } ::wxYield(); + ::wxYield(); while (pDlgReconstruct->isPaused()) { ::wxYield(); ::wxUsleep(50); @@ -2399,9 +2402,9 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) delete pDlgReconstruct; } else { wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT); - for (int i = 0; i < rProj.nView(); i++) { - pReconstructor->reconstructView (i, 1); - if (! dlgProgress.Update (i + 1)) { + for (int iView = 0; iView < rProj.nView(); iView++) { + pReconstructor->reconstructView (iView, 1); + if (! dlgProgress.Update (iView + 1)) { delete pReconstructor; delete pImageFile; return; -- 2.34.1