From 70e20c75e8e1fad3b73a8a5b56c8afcd9f13dcb4 Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Tue, 7 Mar 2023 15:41:35 +0000 Subject: [PATCH 1/6] add pom and cleanup --- SubdivisionSurfaces/.gitignore | 29 +++++++ SubdivisionSurfaces/{src => bin}/typescript | 0 SubdivisionSurfaces/pom.xml | 28 ++++++ SubdivisionSurfaces/script | 80 ------------------ SubdivisionSurfaces/site.zip | Bin 321991 -> 0 bytes .../src/com/sweta/basic/PolygonMesh.java | 16 ++-- 6 files changed, 66 insertions(+), 87 deletions(-) create mode 100644 SubdivisionSurfaces/.gitignore rename SubdivisionSurfaces/{src => bin}/typescript (100%) create mode 100644 SubdivisionSurfaces/pom.xml delete mode 100644 SubdivisionSurfaces/script delete mode 100644 SubdivisionSurfaces/site.zip diff --git a/SubdivisionSurfaces/.gitignore b/SubdivisionSurfaces/.gitignore new file mode 100644 index 0000000..fa96b5b --- /dev/null +++ b/SubdivisionSurfaces/.gitignore @@ -0,0 +1,29 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# Eclipse +.classpath +.project +.settings/ +/target/ diff --git a/SubdivisionSurfaces/src/typescript b/SubdivisionSurfaces/bin/typescript similarity index 100% rename from SubdivisionSurfaces/src/typescript rename to SubdivisionSurfaces/bin/typescript diff --git a/SubdivisionSurfaces/pom.xml b/SubdivisionSurfaces/pom.xml new file mode 100644 index 0000000..887fe4b --- /dev/null +++ b/SubdivisionSurfaces/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + com.sweta + subdivisionsurfaces + 0.0.1-SNAPSHOT + Subdivision Surfaces + Implementations of subdivision surfaces using - Catmull-Clark, Doo-Sabin , Loop, Root 3 and Midpoint subdivision schemes + + src + + + src + + **/*.java + + + + + + maven-compiler-plugin + 3.8.1 + + 8 + + + + + \ No newline at end of file diff --git a/SubdivisionSurfaces/script b/SubdivisionSurfaces/script deleted file mode 100644 index 2233d35..0000000 --- a/SubdivisionSurfaces/script +++ /dev/null @@ -1,80 +0,0 @@ -cd ./output -rm -r * -mkdir catmull -mkdir doo -mkdir midpoint -mkdir loop -mkdir root -cd ../bin - -echo "Catmull" -java SubD "../input/cube.s3d" "../output/catmull/cube.C1.s3d" C 1 -java SubD "../input/cube.s3d" "../output/catmull/cube.C2.s3d" C 2 -java SubD "../input/cube.s3d" "../output/catmull/cube.C3.s3d" C 3 -java SubD "../input/cube.s3d" "../output/catmull/cube.C4.s3d" C 4 -java SubD "../input/icosa.s3d" "../output/catmull/icosa.C1.s3d" C 1 -java SubD "../input/icosa.s3d" "../output/catmull/icosa.C2.s3d" C 2 -java SubD "../input/icosa.s3d" "../output/catmull/icosa.C3.s3d" C 3 -java SubD "../input/icosa.s3d" "../output/catmull/icosa.C4.s3d" C 4 -java SubD "../input/cube_hole.s3d" "../output/catmull/cube_hole.C1.s3d" C 1 -java SubD "../input/cube_hole.s3d" "../output/catmull/cube_hole.C2.s3d" C 2 -java SubD "../input/cube_hole.s3d" "../output/catmull/cube_hole.C3.s3d" C 3 -java SubD "../input/cube_hole.s3d" "../output/catmull/cube_hole.C4.s3d" C 4 -java SubD "../input/torii.s3d" "../output/catmull/torii.C1.s3d" C 1 -java SubD "../input/torii.s3d" "../output/catmull/torii.C2.s3d" C 2 -java SubD "../input/torii.s3d" "../output/catmull/torii.C3.s3d" C 3 -java SubD "../input/torii.s3d" "../output/catmull/torii.C4.s3d" C 4 - -echo "Doo" -java SubD "../input/cube.s3d" "../output/doo/cube.D1.s3d" D 1 -java SubD "../input/cube.s3d" "../output/doo/cube.D2.s3d" D 2 -java SubD "../input/cube.s3d" "../output/doo/cube.D3.s3d" D 3 -java SubD "../input/cube.s3d" "../output/doo/cube.D4.s3d" D 4 - -echo "Midpoint" -java SubD "../input/cube.s3d" "../output/midpoint/cube.M1.s3d" M 1 -java SubD "../input/cube.s3d" "../output/midpoint/cube.M2.s3d" M 2 -java SubD "../input/cube.s3d" "../output/midpoint/cube.M3.s3d" M 3 -java SubD "../input/cube.s3d" "../output/midpoint/cube.M4.s3d" M 4 - -echo "Loop" -java SubD "../input/cube.s3d" "../output/loop/cube.L1.s3d" L 1 -java SubD "../input/cube.s3d" "../output/loop/cube.L2.s3d" L 2 -java SubD "../input/cube.s3d" "../output/loop/cube.L3.s3d" L 3 -java SubD "../input/cube.s3d" "../output/loop/cube.L4.s3d" L 4 -java SubD "../input/icosa.s3d" "../output/loop/icosa.L1.s3d" L 1 -java SubD "../input/icosa.s3d" "../output/loop/icosa.L2.s3d" L 2 -java SubD "../input/icosa.s3d" "../output/loop/icosa.L3.s3d" L 3 -java SubD "../input/icosa.s3d" "../output/loop/icosa.L4.s3d" L 4 - -echo "Root" -java SubD "../input/cube.s3d" "../output/root/cube.R1.s3d" R 1 -java SubD "../input/cube.s3d" "../output/root/cube.R2.s3d" R 2 -java SubD "../input/cube.s3d" "../output/root/cube.R3.s3d" R 3 -java SubD "../input/cube.s3d" "../output/root/cube.R4.s3d" R 4 -java SubD "../input/icosa.s3d" "../output/root/icosa.R1.s3d" R 1 -java SubD "../input/icosa.s3d" "../output/root/icosa.R2.s3d" R 2 -java SubD "../input/icosa.s3d" "../output/root/icosa.R3.s3d" R 3 -java SubD "../input/icosa.s3d" "../output/root/icosa.R4.s3d" R 4 - -echo "Venus" -java SubD "../input/venus.s3d" "../output/catmull/venus.C1.s3d" C 1 -java SubD "../input/venus.s3d" "../output/loop/venus.L1.s3d" L 1 -java SubD "../input/venus.s3d" "../output/root/venus.R1.s3d" R 1 -java SubD "../input/venus.s3d" "../output/catmull/venus.C2.s3d" C 2 -java SubD "../input/venus.s3d" "../output/loop/venus.L2.s3d" L 2 -java SubD "../input/venus.s3d" "../output/root/venus.R2.s3d" R 2 -java SubD "../input/venus.s3d" "../output/catmull/venus.C3.s3d" C 3 -java SubD "../input/venus.s3d" "../output/loop/venus.L3.s3d" L 3 -java SubD "../input/venus.s3d" "../output/root/venus.R3.s3d" R 3 - -echo "Teddy" -java SubD "../input/teddy.s3d" "../output/catmull/teddy.C1.s3d" C 1 -java SubD "../input/teddy.s3d" "../output/loop/teddy.L1.s3d" L 1 -java SubD "../input/teddy.s3d" "../output/root/teddy.R1.s3d" R 1 -java SubD "../input/teddy.s3d" "../output/catmull/teddy.C2.s3d" C 2 -java SubD "../input/teddy.s3d" "../output/loop/teddy.L2.s3d" L 2 -java SubD "../input/teddy.s3d" "../output/root/teddy.R2.s3d" R 2 -java SubD "../input/teddy.s3d" "../output/catmull/teddy.C3.s3d" C 3 -java SubD "../input/teddy.s3d" "../output/loop/teddy.L3.s3d" L 3 -java SubD "../input/teddy.s3d" "../output/root/teddy.R3.s3d" R 3 diff --git a/SubdivisionSurfaces/site.zip b/SubdivisionSurfaces/site.zip deleted file mode 100644 index 8b765ffe1f2da2b0c1519206cbda675646241cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321991 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 z 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 z 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�feyCCEa)6dq_H00fEM#GaHrB29hmJBv~Q zQNLOVU%)8DTd>0+#UKu`v3K##Epw#z0&_r5A(d|XYOMEG^QYuh+h0kH?WHKP#;WAx zUNl|koGMS{P2Qs6P-r_xp~lN|b|>@5!StQKg2u5IWx^R6y zzo0&S$3&mEmT8v9hf??-vMXaAvR9Vca)i(TsNqFplw9i$_5`pG(2yL%R12U-`jHqd zZUOD3W|vjt*}kcT-HK@Qz7;aKt|IeX0cO-$uh`dUzh3df9x!;Rlz8)>#qy&+x$aD9 z3u-=|#QyW!;xI_sp>FHqNz>*5`2ulleRH(LU&)+; z6nLlFrzID_^#iF&Gd*=wZneX6eq&$!_FtoyM%csTVqkU@J)QwquU50**3~G{H^felhb5b@ zBL$~OWjKMHGF_U20D5vs;!&hu7=fQK(h#7ACqP=C%XJh1AMcNwOYV~#`BV7bZE6a; z7xPtoYwi~TFQ@jb11dA*kk)<^%s5bFU-?+#O;^PfOb{dr{-DinK0aW8LO@sziiDIR z)7oe`gthhXesK47YcQT!Wp#-{y36~HsI2nJrXY$RW~4~kL?jdA97H^hFg{JUWmZuqWnH^6|V1W=0T$R$QnHIt+xMm(N|n?2kTN z??d+_>uwSpL?j40D5ps2H?fg!7aw(hnh5?)XntCJ5gQ!}kN5Y}z>m!KCF&;UnTwo? zuJ?1{GHlcm>KL-Ql3Es<2uKKj=1)jdSwI3NJn z>v2FPg5aR}@Aujjg~YUQ{xq6wsV$kH*hz+DR&Vn_C^-9bWA}J}Yi%xd-KJ>Wrr$Qg z8k<&YKzGNXKx&^WN1SH+67acXP>$H)U}2`o)$UY7I0_;$li6u$t%>oksqhZ5@cOcg z>I@s)>f0Q22#PFbw?R2b02as<+!WJStkLfipsKF5_bICq*|daV@J(ow_;&KbTSzH! zw>VaM@1Bkx>uCR7-n`0zSw#^Z2D*W$#aLhspZoy$#q zBob&2h81I9_8)Jd+ zU^|bETh88wMOjvEZfB+9Ueh`rfN7ncAxaLKb6mbvUe`;hS%?P_ry2r;^X}(bGV6;p z?Go!NqtZB8`!$Hgq0_o)qbClK7ba2}3mI`gYxk^32MozjCVrfLEDV400eKf|>U|6) zC$9CAw)C>UpE9&Ep|t1;ISB&T0B#Q2H=QrZVo|TmNHUhHIW8eW!da z_Wc1u@0yDD(M{Y{w-J}REunn;Uqe&^W0X2=MKwX#4ATsjf9#WFbS|`R>ko>W)+h^3 z2b9p6v%L8sLxy4Z$Kx?%(pGPD6;yiX*2H@$hzpPyPh6lwwRXBV0T*| zMn6nMtSA&zM1Kkvgwk%1-5_P2sGCIy$K`DDT#Dnh=Y4y-T3*hP-q9}3kbJ{G-iIEl z>q9Oz&&v724w**3gC+%v%aOk1u%q?M6?aBQVAm90>8q&sVQV@EwNL#fwW*P;y>(Jj zyEeI&w7fWUXd@~yz4Z!d6FI#=&ayB7D0TGL>8J?y_Tq!Fy&Po>RtVb9Z9EOT*gg?< zd-DL98)AG$1O|!9C&mLZ&*K<~`P?_4zVh31l{o@WQyJzSKgX zInw#8r6qtMDT&KVooM<-Lg}`!G|fptPThcs$FCv5K{Jpq=@t6pm1?|Wc`V}F_vMFK ziK6t=n4knVxRQLO+A+7^`+61*|E18S%M*p-W8@2Hka4I@-J z6&#sV?z(VwxbhKdwR-@;l5%vqcwxsK1Lv=LWNRGv#Z2O1?{SMlGfRm8rruKq<)oRj zob{l_Dw}ZVr%LDVnL+u_MSO4M0h=Gf61?|2i}+nO5Fv|n(EUJoRA?`hNa)SW`ynZB z1E)ds`)CRo3Z!8%LZ6rc)5fasrQ*D!wOW%HpO_)-{D{^XglnLZz(I=VBVvL?H`-oY4z-GeUO* zst!lQc3+s{=cG+HL=HNHAD_>kUpjy%Z7+)~bSL(v$;j%E?Y@aHDjjG$a8HafB3fjb z&AdTNANR8}eEyv`b+=uW=2^ocFQpO%O zu?1g9{=VI~YsbHVur{^HxQ~vqNVT7Sh+90*E;=b4HJP1*C=}eT7GFt+w?#~7LK9u_ zkWN3p4LR0_~w{pB&@GN0G7pcry6Ya(-Z6z{$gL6JBUB;dlPU>LiAxc60 zRMT-FsoNuu{F^Km#QN+cdei%a269)u_)m_yM8XhQhyWzPj06%y*UTwCSS9@CRHP7P zuc_k(plvttOe=+42xH>zNDrETD`-j^IZEc|)Rt)xjY&%n_zFwgUp;KkWwnLfgg(8j(8iip9zV|i@cpLy4*8O7tLOdR3Z=_f*iljwr$nEjY zpk8k{P#*7OmHW4zc~)9#se(3}>1D0}1c4ujSs0TrAZJ~K(?162w?qfU@8b+-BJF1X z?SsS=0E$x@K*Wfz!aj31<91A)TvcZhqF%K=0DM5KjOoKppJ(C0B1Bk6qS@>;7hIPF z&Qu^MLXSL1hf#Z(_}iX!cuHwJ$O$0|uH#u5Yn{E#8Ud85;YD_-)~5cQ-~j~6Nx&kR z-{px+EEAow$l+IR!&4dqXj^qG6-Oc_w;9DC(gN%i1=C=`^ei9s;7C0dKv!ga`Ldb zG%g8$r&Hyym~9}TWoXeGbDeYQ3>r0;ALq18YgRVXkEJq@?ENW(W{kJsc^Tau6kN2p zb_@rxR!+D|8UHw+22Dgk&mz4?sm=t_BM`(4$im7&0P+Bm+|?J6pc>@cL~eDNuztpH zGpmVvl_0xsHoW9m8+CK7{GnV?1gHT403hi23h#YkyD;w-(!W-FAq>2eDi>O2cRzPi zhXZzzevIsttkPjMDK_z=w8y`+FpLQLB1w5=vI$!dMWH4gBXCSuneaf>pxRPc*#6oa zWz%g~0BLSyz{5Px{t9QS-|z&BtVdI(3nb<(h;;+-8xU(MUY zOl*u1WosMaFNpKld4P-a7qg5~mvqTPDDc+Fic=1PLN=+yLJ>8r&&B!e7beGmg$1;! z_|5K{v(9wF$ueb$s+Ec#9r@X!au{FkQi(bF;X2IOYY4xDKFVQii#u9;;I192`32JP zVPW#*BOVk{xsw*_;2{m?luBF(SfFzd6Ms?|6Ms%k*O%HCyrQ>{DCZ`akvy?#CUX~Ls0$nL0ulS zdtzDLE!_??f1f;Ww3^)-G~t%cJz8p;g|}Uu6G_HkPk`#>*z|FC;=BT-B z*Li^2&7V!xr~yH(h0s2=)CUbPh3k)1q)1SL)9ptoXE=c}T5lUG6|2kA!82kx6)S>VI7~e7$rA-*6n?SNYNtMALctTWn z{SSUe1VwM-wRH=w@JBD?>S=jqXwP}!QWx6=7$+KMP-Xrv(8+@z@12CV2D2!GNyI ztEx6%`hQKuT$qXO_IZj$1x9pR$W6AIP=%%Lz6sKwQA(d+kQA~~FK4GvmYy;iT14VL z6nDUS#tdgJ_OJEqieWdZm{=4r6d2fonIwPW(+XPAp|ai?$Mv@PB$cLwgf@C9t>nm) zB6^S-BLhgeJXuW1q~_lj4ZL@Qhw0Ken|}0LOuzF~|GLHy(+xFhK0mS=dGA=^PgeIW969Y&G$&mycEXgDhLh z#ihUAWMB(#D(fayCatbZ%Dx5?1{yd{hoQ@rO0`ADhg{FDYg}BCEWm6A57Kn+L>s7U z3gxpf>3Sq8m$4WTq19t^Ds;fkkxBH6My2_2NLVrs2*wY??^Bm#(G^FuDRE#7%i~U9@_J`d zb_Dw^^LZ@%l*7g&LkREx0s`7@UJ~jcAd=cch)jQ0 z%CW9+2GCm;d%*n(MNVribNcFA+`>KfIMPE?nP7mq#EJw!&@Bqwf+h@TE&}T&ARNJ* zYD*6^_+Xj)DY%WN{eq|;*z1MW9MAC?HN%nnV@+nwu`<}dqY5VP>rv5l0afGvZxAG` zqsEHrQ=%}1oqqrJJ-q7a-*gU)mlzMU4wrQ{95G)e*fNpjB?cg0XhL%J<$Z%l<#AU@ zzDO>lv?5_ZuEo@k9evGNvsFPEn8BVssg90ON(%1P^Mz0*jqb)0 z`l6x(J=Ss>Xxom?*WViu;tzFm;t00XzW&R>+WUd>PwM<7Q>=(#FCIr0YqoeFAm4lr z^#vSlwx)G*zPME_3Z)fIJYRVrmuOc0`b{LtaEJ#Elv+^TkgH#wP<43k_q2uItv@Id z5&@7ha&`$U=U8Xp6gdvVD6|&dOGGHZ6yG10h6S=N-0RJ&Hz zeMvw~4ZmaQZbU;0N7B&w;f8a;FeMyn>zm`Hj9`hSN+n%k<@wnfBTH`sh6a$(cftQQ z34Q9q5`gPRN{zWhn#< zB~YdN(yae`DYkBK`!J*i2kd3A@i_1as6oGCKp--BVR2BLtX$Pk4aTX2Aa^Sb| zL5SR6ZNJMqKm)$d?Q1yvcKfox4~FMZ_tWU@yIZmD`+Mu>0pHh6QJLFDc z>;AF(AHN7gN;55BRP^aY?LqsI{<7{V)IAEJ1xiT66Z-nE#VkZpK{H_)1s-b;oQ4fg zhu+$TlnJ#*cKFDL2pq6i@MF;337u(9V;VbH!C8gUQJWhs{}gViF{!mxO{l*!L9g@q zU9F?;^*mU(91p+$I!gL_k?nf(x!95}ge(3>z;{hP%X-ya`QHCYv;Ar*lkB%k_$}`! zaQNqS7bCkbya9Wh(7;5{s_M9UaFqy~dkb+C{V)Y$hWz4D;Aa67DH;lF+)hPB9yu_p zDeE!V!9@<+hc0X9P!i~u*_2t@bAE}~E*@zFLS#kR527Yw@N$l8;(?8@{?a}z zK_c`I(d6T0!jh)lfWw^0r*e&pzVz!*kX0$tqrc#qtlQ~qDl3mVD8`P8J3V>BRJ6_A zO5QRhr{u2t8|C`(+Fy+4c|M^MbR92K;r;HL83pL%yT`6aretiyGAgVeoOG(!ZV<^Q zkEWXgulT9*U|#ZjVRFTm)Rjd3oMASIxJNs#S5oA&~hN`nN`e@wzk=ajaP2_NUN% z#zw^qufzJs*(>VHMg91=4h1aJ&;Rchr_&~ff!ogFO03hsg9ItUGl!E%kRVzP1p!Ne>M04!B1`{+f?O(91PXv17n|=G?LH?@T;FY@z}-Jn;vlyLi%4my4zXlAxm-Q6tsp?Xk~r} zhnrtv7E(k6+cXCa-+pqqwAp{^`HiojPIruX@a#~43breuv<$;s7@Hfrn^&lHSyn|+ zU*I`N2RojdBi)kT6z-;iPKz%DQ2$ERPKj8eLf)m$hU&-0u(e`l75txBW$k z-Sd|QdxyHLf-HIQi5G^0aZ@#Q-82geURUSkT&e__4bR`Te0DPcHTNV72;OTbQ1 z9aN2BCZdY@a;YmuD(UJV`bYoa&exx9eGcJfxBSWX4_fUEn;YnL(C(lt!Hg_}*52ul zBZOhk>ZLHaG_GPnXvnP8pfQP*;`p*O zBBHw1lTqFjm7e5M>*3*W+?XqcR^*#gLLmxcN7__nl@euvRN$gN8rOP!^_sPofxM_6 zyRhBYc5JL9sx92+3VVc;V*nUyEqG^G9Mrzk&@ktQuT)wRAo=&7 z@BV}T_Z@Eten%j@=j7<8ztunpto9%!Ivs=|iqcnz1R;(P1iqalih8R(F&GAfp|)*B z_uhN?rLFGhM(gI8>7l3BUf9XreaG%rX$#BD7#S|y246uFV^b+59l`HtWI@C%jnS6R zm)bBjjEUii<&ojB;Y+0+HKw+#h=icR*lU&EuI)(M(lUTp5CNKf7ryJ*ZWsf@FO}x| zH(Hw6FptMYS=LphOKlosthH66t48nV<)ASHatg!ApCs&S{^d`f{MVnp^$lc2oI@BX z{x9CWA9h=aBJ{exq@Jc=Mt?A$YjI;PjfN1tZdMJ3Yk{~}>6Q?8-M$kfJTW}dTw2_esFoycxzSb$0?5dcuk<&gF z$PHJ<27;{10QfuryCpv$5Ye?tA2g<`#Kp>3z_=0(iX*bpJ{riNO#;tgrU$U=#wH*)VM`m!~!c&%C^BZp>TF z+Xva7e);rMS32koCZZ;wW~Bc3W29{-5J&orJ~6# zmzEpG*zmQ+K60u3fByS>M){k9A%6}b5&o<9AGDJQTI1|#zmQx>jK{v^*);~v5}ORL z1p`WTR(q|({>4gXk`h62R^5HawZloUf7p2?CwnlCAAS1dW9OGIjnwMu$OwJd@Yrx} zd8nCyULYeWQz>I5U7NKK$h945<34RBsG}$%62xQ63^YK)s2CGtM}~9DHG?e-qp&QA zQbDI9^b)@9^{Bb>;eyAUcdF#P*3TrDk6ECB2^_Sr-AtH1f4KV$v!uYdU2_uhIK6S;f3 z6o`O)DaSqI)--f1ugy`CFF~ZP^Jp!zwoJYZ#FB`Bk+ywp^Mzi*W4-1R%ZHj9=2(!6 zlRo)E_h0?NU2hUH?ymqLvdCQe`KNmun-nO#^Ij0)rZZlxOmg4I>^K1r`g5OQF!VF; zM8)|_NfK#op4#a@yM3sn=xg57hJ@WY$R2un?Xypuncj$3x*Z}6n)_}!_{;CV(2BG% zaz%-yfM%R_L^u(u6-CT!93i@EJz~q2D)k*7sC<;usRbyd3ykQsy zgZq=vYNZHUgYfZ}drw_h9!}D)R!#8;gaAJO-#v5Ri6rc{@s7I@M>w(J$5x22vp1)e z+qwoYtTTr^XN6Qszxc8e1R?e(<(Dq+=EfSvZewdk4WpF#%romO>?2RF6QOS8U=jf^ zhQ@h3_hA4)-f?FC=f3y3i9xDpGYV2-83vgWV{JR@%TcFw;_L~&bQMyvl3A}4t}i1? zJvGD59*DNL_v^u!j3&#(jI!2RM}Zm=?T(63t*ct^)MjGr*jPanOD5vMC_Ws=fArYq z;}_Q8dw}LAtesY;S0^8R@Y3xkM~xP2L?lSMkRNE6&6GsZ`Z^+7LWIPnYay3hlX>cD z_U}G(^OfDK(XVyc#c>G#r;okxvma0*3~<*uY_6lz_NzSr9QNmp%;U+tcpXRBKb*Tc zLZT?Jy^GNVM3!+rubvxK*QzF7a1=|+xn;XB7bb}y%x^z@bKmNRpWF;c{Iw51`vd2S zWhHu{R76n}o<6+}X6*Oz(GR&a35FvKh8PUz#SJ^H7IoWD3dW*8z;NWw;+5_Fs%ij~ z)(&bDOp|+sAooeL&LS@FTAw$&wu~U*Mj142=6*EdgQ;p+)CQ$v~kNBtSsa7Nq=kl z1D`2%CU9@xx1a?Id4bWy7Yc#^b&aY90gc9_(4+C;!KeZ%<|{?hZ_GhsGT}2F4CEHo zw00UvJ`<~@kaA<69h(&;@6N)2Xl-*j4uf%j)RjU+A-?M`;)!Q)aEMk4r4WV~O?;i! zy^w1gtQ%C7=S%V7p}5o^?G+UPV{ONpyNddTcN?2){Nf+n{Pg+t>u#tJQh)S)7v6R2 z{+%7LAqHAXoQ|cQRzTTuJBg~gi3tHw!CV>cDk%ts@yWcEG&(GsQKLaLF}7i7#$Kbr z^jn`l`H4qPzPdK0<5l~;arPbWxN=JxP#l3Rw8r|HZ|=)l^GFf!>s4G|tlL)XislYi zGbKlgBay_}sg2y&yfG2crlJRz(@+o?iip6eq(qP;vS5J5n$KnN7y5NuiJRgemefij zTU3+5xDy3|Qd$M#;$_s0uk|~Z$~9rs4eAEkpwVcWS(B2t+zeRT4T4k%3ufkiV<(nJ znn%Wtt^KaM54+v`>Rv00Oct5EidK4)?|T3FANh_K&TZuH$RvRnxH%2(ZAFO`k`NQM zLV0du>Fjd*R2m7QO556)jVQ>JXpAKxmZIR?Qr4DoIZ$9QxFbbRi6tdYMrx$(9jAty z%jFB(Sy`*sDunA}lSkT41x+4uDNvmPNKp@3( zmK;v%&86j` z;ZUF@NDWgN*UkW#8prQmK5q*AUdx0eG&gv~e@R<#tg5vk=c z03Zdm;;^5WLdw?Cbn}+$0I+<#RrMGftm8p2`qaz}YgIc-S9+aR+O=jWj+l`u*^*+fHp?MC_U`T9dup|6)N6tez@MJ)eBXW7HUfz# z^rSv++ffwFyR97)h#Mn{BE&Jm5Op=jOilS9#f*5FptYaD^nEVE@A$A*bX!rNx^Z|q z2~AzUl-FnDpcg1fR2oY}bz=Z@mOD~Rd!@$Zk$OGRk^N1x#U<`MMbRR~{qzYGNpWi$ z?pC@mtcW7QH+SQ{wnB)%dUkaqR+8x2q+H%u**LR_NlwN{A;NZ+-gA2(r&Li4G#XLp zBWbrMb2!Fm0x6KDHVUG(rEp_KWrXlD@2=YX8hI3hwfCFH2; z+AU-$vJ_PbA{I2Bl!LOlTIsu6abfx8yy`_Nn$9Vsbm0N} zUO-BO0iqDC6zy#8D-dD7kBwDqt|N&=6w)F)Er29OT~8Y)Wuj!N$Qlz$e&F`~$1ivG zN71W?5WpWlxB5Nrx_oOl#yCe+;pC<8B>C8TT93qYp zC&1ZT47K zqa$B8cEJH8%iL1pY!>Cl9yYqP=qQ4eSn9^7HrmTwe^L(zxa}sKI^o~0DCRHgc4NA4 z7X|=fb7~P?Grtf=2*<7U71?PIdn*Vojq+5Au9WxPvHi%4OQRxq^$-&HKVE2m@Q$tZ zBmy%oUq!c#DDuhf#be&eFrLiW%i0+RLrfzlU!1Bc2;n!4JI3u}J3s*l;zpMT!CVQHF&f=`c9b{YHdPd1gxH8*h4=U2%j!c`7GB2r|Y3kVL1FkeM4} zJKff~58R)1+rpWWKp{}L=`@mPnp`yVJ+;%6=CD97aNC$16OS~5B(@yOP}W+*k|%vAm=V=H6U zvslb}%N&G@V^C^J%I;(uc*T8PPW`%F2-D_&0@>+|U`vVJO53LCbX(z!XiNw^a6kHe ze})`UV_6>gQVvCJjwsBs!s(MZeG;8Esv1GyAMVNS7Uj9yuOM4#SI{W00G5JJpXfjI z^xCV35WvIdd+)q`YgL(696}1PMSp-G@ZL>PqSN*ygRW)BQJBxR%XwBo_S4eGrYWRE zEA#o)sseD~!qrDF?Vb#!1v-IjDcM+VtYu&&iKDsT`iUoxRv_oEISX=xfVgg#jI&#d z)akM3=$i?mgFO=1t#olX*tqpHti{q2?!E&;U^4NYDAvLn--fd2bw?3`0HM1TF_gr{ znkObZ=pQZ5Opjm`VKDT%EeOI^+8K|MK#d!-(XB>?pS{|B^$<2jymS!XebY{v7ri7B zBq&rk>?4X0M<@#9g-6laBa^XV2;Iyb2S?PUoB7y79DDX=A&|z9^6}3-acx+v1`>os ziltD_y1zpyddbld01}8pZEjVa3B zN)IPC{MYOcQP*I`>I#w=2mJ+lXz~$fmU?%=eY?6r6rrl71#^N_2t%J0aW2?W&og?u zo5N5|b5j-#YJ1nI;isPKeFdZVpWYU8^)UY3r&d1tt{pDRR^4!8WVeOU2$KnxmoS;2 zC_NRr)^j1#dfxOl+kX_ts2jvFvUFh&0pZE#Mi;O4CuJl_5F#l$fm|Fn*~qT*usaLu z4;MqgV~9EnZ4AQjc-uHF$Y>YWu?ZeT{x1GUYi2e|3E06+*eQd1z z-LZ%L1)pfDJgeI8vzdLovP71ll_HK1N01VEj-{So0UpOlVq__XW2bvXsPtguR?&=W zbN8A4e|YTVD-|jKObdVVTK(#y>kr zTvcdg==IR;;LPbc*S3_{+QD<@0X)Bb=sb`}kn>;2w;S=vRzkCT5hw%!;_x`7^Gwd@ zx^e9&gqz*HQE%P+?}4H~a#77n_h}#-V=ZvunTmJ2+ zh>1Xqs`eg}lu!~{V>m>w<0*>AV?T-K`u_p6+t^&k-T{~)6@?+?g>7^s#D1+eQk`b` z=U!p#^v}Ap$yo7QkFDKt+t#U!A_A3_Afn+2JA23y42P&|q{-YBBtQxTA+i*k>qrxy zB4GA>h)sjZ#65F&zdtG}ra68yd$F3vq2obU5^*%$F{*ALg4aVh=X)bxvN-189CKWy zM41Oy0!AzB&wLu~J0c?rh&?r&%6r1X6+c45l5l_4+i+o5i_D=$r=#^(ilAr&!wPT+m;f; zMjw9Z$rIml|9r$;2$UrTBY&#Ay;w*rIBn?&J6&984X$n@kbbYbBkxRNEHC++6UP_~ zQI-Hh2;_wnB8kJpq5|{#?!ERKkDR_Y26Aywth%=4;F*u~rF^&d9Iy z&>vuD51Z>C!f*^@rY2!36K*lJlZNpGb=~Y8zIZUy%z;2#NoFuO3xie^bfU1+Yu_MF zS8~4W2}kKeos>H@E06vnPce3r!;2oxqA7L5>4c_kh$xg|+-LxbXk6*tM;}|g?=Bff zo{zNM#>c5V|!>|tZgmwp`A&LRVX zbL*AF<*VrTx3~5yZKR;(CMbQc2xt*J@lE8xS$U8Z&(9()xq%^qGo4Vr>;WyMCYI?tzc!XCKK8oezhe z+tCrc)eWSYE`bLC^oKaL=@a+HdgdLekjB_Q1Q3QnQIyMp+&9gmFD)Mv#8`tA(fQy&=*Y+l(Jd)y;UaK92 zX{bUe7d)3>p7UJ1qVNWlQ6f*n_DXcFeAHx0=>wj{A^O=%HQF^&8DkWQabo~Pf(F`h zQ4Y>uTzl6&K7%NwpIHzB%S+fjKvAKp{ZFR#V3eiLVL5-t6%1zYs11fAY^-~KFiWws z>$h<#g|dV(+E_53J307gpFVr6BK?|HP);iKhfl6uEBVgThvQNwf+A}@W7m}}5Mw;S zXpF&ly3c_S1bF0&xVD3Kw)etCDa2|L1=sIGbD93dRL;yJT@+1gktFDKu+&4E`Zm`a zqR7`lF2uaPcuZY48q88jYb{$Vi3(!@q*BzDtHG$abaiQOpPqgWPdq$|?N-8-^6)n`Es%b^KYH)QM-IlkAY&{Ekp!_Xrv}Y_90+Sp{g1M+_VnIRi zxeMK|8idZrdG>1O`Tg+ZdS6mQjMNx_C{P$p(Cv6C!(JCvj-@UxybQ)*INts8GjX7LVE{laPKYk1 zI*;i?Ytd<8bs4?x5jyW<5Mt5uw66%E3;ELoVdyu=F3PS;VNb)4AP7Q1hehpLiU}AR zE7*3TPzkzdY4iTORktmK+}`WAl@NrNOFcA9K%q_5=;bsbZHb83?&Vd$ES<~RXheZe z$hl_SQz!g%coO^WBx6w3u#84$QvUz#eQA)T*IC~4o^!tK?!7NF(~?Fr+GSa`>_)Ktcs$a3Bc;LIJk1i5*CQSl%sJv1D7;$o5DY zjb`bdncna1yM6mPZ+@KbF5S~JvNh9#rovbAqcytI_ulXQ&bvPE^Ypcunr#2Yv-88R zbe-jxFKm}T{oK_2Ogr#Ht-0O`VE;d5k7F zzK6pLn3>uoyL=TB+G(>Ho6+-_@svcR0&mdoX22Wk!VlX5*$AlNI4aNbL>s#ou#x71 z2+R%7{qot>TW>!seXq0Cl2P2uv^J~>so}&xGqw}miqoAmKh+7B`|(X0I6V22!l0d8*A)C0Gel4Y&epr_N1yPQz6j zscz@SvXg7T6%=dJ%e5;+F=u3Wf|Q^{o1W%Yv$IeyBT12F==9)wAc0(?7Zwr0wn~&j zoM<)z{Gk(#VW;MxMA1Kea;7oSTWCc6G*>`rdSYvRyHTs0Ila>GoT{saO{{%PC?%#R zG1NQEQM_-OVRE7%)wLlxPVESRv}Vn5o`3Si>ZNuO4i8Wi{n!8U_+sVxHyrLy zM)KlwXABUAu_P)fksFr#rv5~zl(2MYG~C#?874%ra;0Am1Z{zL3-d4rVR&V+Q8`it zo1Q|uQwYiEWZb;4u@eHAP;x!XPxlf6#U@*K)jhXN{riv9-v5cp_)fw7cU-)C zsX1FuZmpPwT2@se%s9-Mfs2WramAz(im2U>TFv&vWDNxLdV}sU!Er{_g<+dsF=M)% zU;lJw-|Lenr@#B2)_fUjVPcY036aD}!&QPnL}YWBk$$$1Y8j3*>LXtcdL3`AS$>&u zyIy|H&thg84#Uu(~di5i^CdOk`>o!$Eh!=n;W|@OrX^$JuU@J zPJi$V7%JxhW@EejjWg3vJvaa8iG`0ob?8)EQV^vo^@uz{k>MPO4EHp@wAo&&_$tZ3 zOgbNoVi-GZ5J4McIkYCjnbv>!)%tSFyAdV?aQjqz+gwxf_8$vd*RKX}TK z^}zK7jkC2bN7 z_g$~qnpTc|0;he)-mah&2r2h5iJc~1=^7WVw0Co2qWI&wMX8sYD{csl2fR{%av4!H zz*LU;(jlPIHk~at>9P@V$x)8Lr6{#y505A^$QZ4ze{SoWWx_~Pb>fBjvzz5xZri9z zV$g*sH9Ef(rEVCP`yu+Fje-{V8YbDLIQoyDUW^8OnFsDj4^KuVA?(JwUFIXAa-}S! z7!&cl0vO^dd8SgBn!?f&8jUffQ9wzQy#4#Dmv_>o#GwV$YI~jSIEIQD$8H<##_qnR zO8&Ix48jEJl5*z1{nq7gZRo>v?!v?`|Nfi)$Foxr=~ix5Q^UY|FNCpeBL=fJ23fuy z#qayv>~`P1agOvSAHH; z=*-IGUw--Uo9?^RHrgSyQr&Q5oNKL(BSn;?t5Nc?lcit!#M1R|b6@59u{W&Emh-X{ znlW1ms^u{(lb!esOMAMi3AM&V0}BgiH1=u@j@x6rQJ@Bd`FsVW#kgt9C6odr=`MFV zN??4X*=Rpx%-`m@t_!*trxx8&BI;-ynutGs;uSKiKYnsv`sv(k$A{E;PR2MuoMjC9 z!)N`U|DQ*%!_@v;x_f@cxe49y`}TxrAB`fd|il>kdgxNAa&(MyowSGYf%=QmCWyqcyW39v6C~$j&3HDmxR#FB=CFB`2YM*k6sh}>6KkS`<=@HNneOL-}M|R z4DSk5mz&VuouPv*1vq>NOk#xcrwln94Y1lS6RyJkyP4M;St(kqJdgvq@q1OjFn@% z75ijES1_;LyT~=N{gA=KQ(LbU4UzG7x$PNggFBDmh10`$$%coN53jA4zOdcXV0&8+ zxng0ex4K=rhWn@A_u&T{)wt7hud*C-pcyHB=N&E0R8qnfR2V|ZT@!%I^H1y9Zod^% z6Z;h4z({^=ba3~0qANE6l#5y&jT&5a#dBOL?H_BkM!%0n4aaUBJx*h@Wl3~bHNXI3 zUsrVJT>qNyA@6j(t1mYlY*BIVp{_QlJF@6u+09T}r4H}QuDj1zoGaYsm8y%&+hcnS zxo^Va2k`vjOb@pmq}a#n0>z+U*PS#4w+=I=CQ&U9Oqh>*kU3vf2AvBAe*Sx3I%q$4 z;HU6`!(E5OklQ66-=f|SL9k-HqC_ z60B6QoHepvv}+&gj@!|wnae;riRL4|QiE5zM6Zm8NnGaGhRc81VDHIw zaCi~*v05UEuGTe8uPiM$ylIY$as^WD|9gbob#rZh%mV4`f`k=hvuC;&?&Iz6xSe-T zR0!y0IRi7EwDD1}SekC%#3n2`1x#UY0y&!9Xc&XpY0OR+nEByl*_^I)?W+Jh{N+XM zpLzB1E@+dFm`8=iR>4wqQ24itd-?Ss2e1t#$Wxbaq$PabIRu{IYY8JtbhS(GPc(C3XdO{Oawk z_CzTtIS!3gMs_k2NQyPz#3r1sq&7V)#EyZIQf5dwV#_jXs&TP&&mC>VcYFJc8k9m% zDl{01B_Mf4LzI&WX@)4;$LiBlqX&x_t=8_=or8YlN>TURLUDSaoKumaR!MGR zM@oY?=;sDN*>MDrXZe_Jsxvaxo`zQ77fp_FcPa>_V6@pZULan@koRa{w~K4&B71Jw3S8w&Bka(j9zBA~M=8h@jYawTu+wVyokILYBezQS$d6!~^>* zwG0h8UV!diVt7xdsj`Y39UBD z!CuO+3u}X8D&eY7>rCsqBN&!g9rECF(t|T0H@lu;1X2uSEqJ^*)LCAv1T&*j8Z}&) zAtb6*OisX21y|+JB>VcMs}v8mY80Y~h?ZJp-$QwIAY_uD*#v-Eb%a#z_6Mo8vW?b_ zPTyL*=7@w11Djp(_aef?PxP_LYQd42Ys@wFaeDiVmc}XpyFOxt6)%r=dsYmYcLD78 zT$WXDPx?cIiL*-zclhb0rTNK5r5gCPT4{tN^Zlz$fUPkMkL1d~+0Vx#Qt0s< zScqLrCKoR5?E_dHlVOiZdD?Z;W@o526q^Feosqc#>dXgdLJep}%%;r33J|7-KhcU; zQk@z~nePfD0f~VD%S@kqapk$wD>j52cI6Me?wG1p>8)=nZm1PgypkcMe0e{4HA9Yd z-fI=KyTuz_S{>tSr%^FFWReYhI4WIPt2!#yI@Ts1fob3oKsUJ~wY6WML?_E7(MqDv zB^n@?pn>y=sY@ye2vE;(S<-|c1C*6qEIG-_s+1f2^%v}IrNaxDouP%(EvFY|fF64A5E?I)l1 zdi&td5@Qm>v(=LAx@phN`cXl_ zUsk=*6-)lHb}jO3Z;NNVHKPyQg!*XoJr7;@c|zq^rjCMG`rE35D+`Z@qi--EY2lXW-mZsZIM10Z=ky zeB@&1>2|c8X(h-dvUu5)c`M_@up+8TN(?K(1WYJl7ll%icTQGj0|z@h`1}*N?{3UY z@3L8^SMZ|jAC2{3eyewN25d87yM?nWIDH0TWc#0)peSP{sG(%TRZngAYK}Z!^(R~< zfJ_@^JioECRQ3rFL@Qx(tQruoon&Gl@8uEsg8t;`*&Co*xsPVkwOsFdNt3SSTa zUx>s&5~h`Sz7uam>FwYBHuxUWv>4eB4_}fNocZI2Z)iWI;CXOexGt7gaN!baWz0-r zqF$V1fQfdJv^YjmT0=}Yl8Bl~#=vTnttWad%`--3xFo5c>x{9T=~kv4A_g2$_-iTn zS3bQMX7Xk+q4=Axzw{kygOuu1121q1MM`oUyVVVnQrFh z#eRA|))x}p%*|?|=UhpED~JFly!Z37kDqDWfTH61nDAY1yztYHtR4%TKnSbt>5w4c z@Kn8Em7SX@IxKpim&XikCT1q@zx%f7IDB%WLqrmAiHOkFJnM+Eq#PVGdWMOxo|%dy z)$MJZzjVuM?kc7bwz{y}HvK+!cCfR9G)0yojuFQQL-hNIBJ{(8etD;ZC@JWsiI8WT z+wB)GZU{gRR*}a|2w>V(LWrF-2OtTqpv15wk_168fQ^DPt`tNm%=;gk{p}|fa6_)^ zlFo>qd&_3kDdzH;A&H0(D49kHDd|l5$TGNYQJuvx90!g!lnA+NY3|=t{TDmYhfl9F zo77-RiPg+ZNHM9zjy5$(G2@Ucb~G<~XkA(d8zdPR=yZ|9MeoMec0=hz%Xi?p@I5#V zj0O>w4x>@W`ITg=m8V&^7j5*SRBIxV1jF3VwIcEr?)KBt{lo7#_wZ6wR*DFgE3oQFUkL&nB4=ib z3K8?Hpv(^ZVmEB~n3qbl-JJ5>x7{*R6?CQ(g_>P~vZRbbpopP}`vw(3u|Zvl?N0y5 z;*2?Qk|rC7lR+U*BVJ_;h+N|Yae_Xj&43DfN)kF^Q45rmSU(C}JnGQc6YLZkyx3)@W$HJeQR%pcu@8+cu-38m8i z>4(mjq;v#1LbyVBQUrFFkf<~_CG2h{5e_dDx;MjatwXr?+f+;C*WkrR&W8)N71WkC#-C6y&@WhOKn8BQ5(&3%KE(KF1# z{L-J@**y3$@AWj{z4PJs-nU&=LXl8{N{*VZ1cKSGl*{!BxeE0p_}cRr#6$cnVV2^!l+2f8Log~c8E$+ga&~?MQ61mi*jZPQbOnZ%=zqg zi$$w?F4`UR`e^NdIn4CddQ%D-E|gZ3$e6oXu?OM{VUO38BP~&YqJrAQ5mZyu)ocKl z;0ZDe4M-q1xNWKV^_RXi8PLC46N(>t=;HnJaZM=#N{*VVmW*Klu2m;XQXF2y@!N|m z(Vi743y}aGjBi{Q04XUNHMuxvI=xfPUPYj(IcK&VZ~%!Zrr|_L437G;?ki>Ic_fNd zWh8e=s8?Ya+SsWc`)=>Tdb1y0xUlj3`PFo=wK@Q~P=7Gqs!BOXKGE0ae3ZF_Q&GN| z@p58zaw9-WP|ln&6v5U%8At+BnxLG%a8+gXS5-PA{=pkJefAtdjui9Nl70GJ--9+# z4ByAxY%$5Jlo7`TNMdmT?e^XVw3Ns)a+Ldq*L?r%ij50ta_V8yh?>iYPh>|b2}^7@WLU?3L)hFeCvf&`$5rd$#vdbzPHF$A=7 z^R;f0F(2`yAlwls0FmLZ^s?nd&p1K?DPub~1o(m!p<}oz==DdpH(M)@fAz>sV8S=v zzL{xJmQ+%5c4h)#7$a=WU^naQHN$2)?Jez;ilg!G1mF-&I5IVSHp(ue~R*8<`$gnRc zAZluk4Bq^ji(h+jw%zk?fC;Y&oRc#=feBa5TEeA5P*4^F*d#@{RIDiEIRYP^hwUbG z4jyn26z6Y@Ufo7YL5ubBBe%{fDwaMwnyu@VKtmD;jlfN^JWBFGlkBp2k`Qne0AAlj zo>v@Y5AmKg2hAu;!9ZeoHO@AZe8v&4tGaKhc@I|Ig}~j=yq1}ZnKr<*A_r6wPy|U( zgo>mEN6b4y5g2GlYDkfTf9l7-MD(hk7fMDTXrU4mo4Qs_$?&K?10#yy&A}KnTSa@i z*}~Km0F(lB^8vnHjF1+CYW>@eOs{pK$JaX<5F1mGqNjO6vLvh|I_`y)#hIWw*sm~L zJPNy&wDe9Vj#HbPY~`k%n_E2P2@De%10=?5hq(CuSxrT`migRLeUg)B$AT`(7v%V>9s<0xgZ_AVuY0R0f_o3EXzt?u;Br0f#z z2;`;I7$9LBaYaxqd5$caXBHAZOk}LwP?jM#l9^m5>_=bkrE95i1+34tjd*6(j7dlO zLTskFFNgl3{!*B1Cb=E6yBIgzptD)B=aZK!(cBwTBz)cDQ42bQA-GN*T;Jw1{r6`1>q_ zBMU3ePJ=n<#foT3p`9BE_=1>Wz>9$@mHepF4=neA=dv+uQ=2dzYQ`{wwT9y;Pd~cc zE(;2XtRo%foHlv!1kHQOE)JxI4RcwE$e2_!5gZ{px%p~4Iv=KvAOhxH2_QFUX1ty2 zX3k{++pUlSfuNLmj-79R=-k=msq`S5-PdG7!_;tO3b{GRYl{jB(T#D~XZ7J+qDe+V)hVnsxhm zn)lmXC50deA}i)<7>O}SAYFIPhT`y~90=AN@;f`+3 zV_Q8x)h;mON@jGlX=Z#T$%m;#P11H|0B$JZfF!{u%9!u1^Ew_2iR$&9~Ig)mck&wn|u#tUa=UMZQ^L7H&VXJ3jS%b^W&4VMbuN4w)$E}`2;qXuKp?V&G< zo%-R;7KAWFR4RZlL4ZQW6D##+1ZsTX2^0(G(ff-6JS$lq9h3_75E<5Aj^@aMKDt; zTiary@0u!ov6Fg48FL_TJaDX3mJ-y<3}7;5W@xY^e(&e!ZNVN$VT}Ao-@ejJMXcG1 zLfG;p5R@@9sK{S{DbJZK`4i>fLc8Bj^W`Xiq7~Z6aJw&`?q}y>O@J8V@GyWwbgM_2 z(b3%2Y+sNWP8n)2it<6LI{U7-p87wZx$9MDLM2ePIg9HQu_cT#9gOOVO1Vf=hwA99 z9aPF7QJ}qPP+*5)p`7OXz9a#X0!tO!nTH_qJ@=VTycTE0>1%~YaWCQWW?QKLcZMR5>tu$qzlXIHMub-XZ z{b}W{lrI$gefAS*uw=VtRivZ0RsvrM23Eu5*=8>_=B3z7NHTx{`kFmKmI>&vCm*P| zWg*Td`Nc$Ur+Giqhh0%8Xk%O=7UU7?QoNz!#w0ReD@wcC%sFy7F@NtpPkr=%zjl4I zetlD$Yck=p>+TQU>4H$G09yY!j%N`9I~_O>j-FL&F$V^#l-sz2boA`qU~>OZ#CyTucs zaenZ7p8d+ROJ6y0X@THQUJ@(|W>va~d$%HRltT&^LxoWlGU$U55 zqYLu+VWntUt!=eXs56f(?%Jt>??W53+E8-T{sxfeJ#922BmKm)w_Zaa;hnxCfP~p6 zn1TdAOnI&n^p$3p2zEiBuh|ojf+i&`d1|H-ER@`CoaSi;&zm^5RKN9*u%6$NCRloL z!)Ugk4axzkWgK28pgPQ8t}))RINMv@+*xlbK{Ib^U0Pp%>D=sfiHp}{!rysv?pJ@{ zV$oztQq*fO1|)Vh&+Q)e>N;*YT%52GO&X6+eG6rjPH$xU<%{s$bq>pt&b9m#FU|w6 zm=BB3U23GS*$4mzQO%yeJ%S*ChkiJcuC;=0LrEAr$IntYs;DJwqps7nvGZ%2oq0$6 z=Pw<(2Kxa(tM6)NW2NW_o}jfjn=bihdWj=wCDA#fBuEiv9BIG|Iy6-WfJfelg}K61 z0214M&5JKvDq(xO=qPE8UT>sb$pFN-q-kTK){p{Gd`p9_S895#_<%qAMlF8VhTLcd z$8Q;(sx;dxab^b;wMyY&({xZl0&L*ONg%EO00(zTL_t(IyCll(FWG8B>$PUIomEsE zPu!*lf(0Mk-2=hhVFuUW5Zr@%aCg@*Sg;_22m9mh?(Xgm!I#~0zPsJaz3A&c-Bn#( zRlm2M$3t+AR-9g|(rw`{u|O%QI3Oq@P@OX%T2&XgI2t3ri**Vb3V3l=@f|t2YJQHk zR3bLhaccdGDwl^NCfECUS)U--9^V>)Hj&s0O|?}G$ZUHfthm);+_EB9N!+$xpHWR* zX81BY+u`+$*WjU27Q_6jkeXe^Mq)(aFB@XFOxt%Pt51K#oEPRdpNi1f4pvlq`lNG& zvWmvJMH*C3mxifL@8JpiHIrZt_XY4k0beMPYU6xHPA;IDuz>%be|Aa#0FOq2c)sMj z*&qVObEGqHxd=wJ*FZQue1F(?7TG8^34Vq!+_XUFpQqadIa)Y2PN*A_N!e#1ZT6SNh9a)QtLX0= z2m9^sfoOsh(eZ8OzLWtf!dm>D!AnpuuFjO5WI)nS@m z3hyqTx_aZ!FRuqY^NF?K^dVMMBFh3_aTW$`GT z#_n#%y+}5}Sf~l>rS`r4_6OtH0Qu#EFppij|5^5!*<-#|Rrig`HA*Z^S&3u{J;WKe zPCTQFy7x0IEU=rPUQS$kaka+S)Xvk5iOv6Q?(t+rU8w2%dqdNi&ICWH1!OOW>$^t2 z!Phb6xzF@8#&s$H(Z$kCoRXJYcR`P{*O!`*mKY#0H`%B_!UkB8b{YG3Z&R7kL2XDImgcl-~ zVFdDw2$uN$x-Xge4Yc_byy&^WJgk4USJr! zX;4Mb6HwRg)HQ0J>9ZMO66%t9wFMxI)6}bJJt~=o*L~Q~tu!;D@umOjto`Pgn=)Xc zRb6lcYr{oai-z!Xf}&kWK++&b@}6g!ylKgISWYhdKj4hKwLYcd%Mz!T>FcMNk#%w( z>;2|*NV_lvEF%x6~a0 z%0>cts&PycPJe05PxZXQNrVq#*tlBq#zRYE$kH7-p@GLL-}{>uT}KU>&wlYQ`L@Ac zo4+IhNNU(dc!8GNG!xFaeP%bO**t8UYDwVX+NpT`wWml?uS25%NMEm+S zU@78da%^Ms_T_wh<0m%kCadA)#%nkV`J3RcAE4FvLAUZ!W|{8G0Ky52l^>%ur>_64 zB#+%I`yCRXp9)shzaGpFH;%ixh+zpas(u!OwVgx(N`-nd&z0+EE|VVEN(RA60@#cz zd3)-TA!1bKJMvz}wYP^iu^T=n0%Lm#)3-)BgC}h^qJF9RH>;w)=Z=BXji#DIvhy+1 zr9(t1Bz7rFyDYNC3MAm)0()&Y4{7M*Hic_IAzv<(m zahmy>!yq$!bNyz^02v+sOUUs8PZox+dC{+u-=1cQ36D3)*aw*+_NQ(EbaieA@of!{ z8-9iQ_ff`8^K=TeIrDR!Whp^Hl0$Trub5fy*9Vs<{$4BMD--)L7taH~eYJd{66viM zeEI(&t?0x#=1wW3{ISm2>nAYfO7uI;dY3k|^VxU3`?j(o{H^Gd@DKk`IykY)Y4U%1 zHX9yVyMnN}Gz-QVk8)UvhAcg7uo%XudH#>J|3c$Qg{|__wh*7M!nM|)<0{Q^n$A?j z<;-AuL0Kn$X%Exik=hpvuz$U%>78HrIJwsn=MreN=~faObx(P}4hw4eAID}x3%G79 zQfBpwzkgYYQ7@j#^mo}B8A&C6+#^oi-4*pL-DYCFT@-+`!Y1YGmE|5$8xdo zvDZ6`g4P;UMQkkrC{*`5P`?kOo|^DoxzDckm1dAUzwldnZj2u{`0>p9b|U(d;e}Py z>rF;79KJX8BXY${y4{-SG|KA-#DM{%v3#8p$ zt(E}5|Gxeo4k3>JZw?_G#&P6-*8h_g{67w%@B)y+wD8dqZheW@@(n!F4a@t-@M3o=5 zf|H#R$RQk)iW{QLTuHFKf1B6s*jsnG9%$3JGpOaKb_$D@!6hS_yE~q{&i20FcqE1O zBXh_nW_g>Vjz3I%e|tRJ&-A_VNpWZ~eVX##_o!_AsMLt}U)m;X6aKSL_!GZ(gRUgniWAI}cHOPx9+QtcA*M^jvGy}wbvE-9mbz4+yS zj-n-fu;uMOao>C2ytpcs)x93d75QKk$yxYEyzu)!_HoPAY zvKQs3PScK{jGbAtiAV~VFrSbkI+w#6D&M;=(D7@fVCAvwuqqc zI4Y$wf@Qx(Z3j2{Y>vN$U;KVsPu}<$ASe11IP$*h?a}D<$;FF!MNdVM93cP;H4sVh zlLjhtd3|_6yr_?F!Sl<*`*ya24G`m#eZuE% z;e7|+?-GBaO%^m*^{&VC&r+l{cr*y9pDqw+ggT4``2+-{(8kE_bB*BX$b<=bACRt& z^zi;nc-!|dXs&R4rRvFzzvITtV^-b&Fe*_^s4$=Fg)>VUA>oQDSf76%VSQkM2Xx7NCw{3-vvHzJ$!#hSfyNZ zd%6rfgW7yv(Q_mmhBXfy?IPIakAn3?KTt_KOkqHAmAmz#kU%>0n7Vkq3-5VY^Z&<# zyLB`MEDNlsfOSbyQU6OY&Y*%b1l;EzhJ~u+CR4+ehqe<@*Mqmm2KC@?s?%DJ{6b-6#i-#whSDT4o-ssb}U@|)%%t7@ZIEQW$2 z6AqAI0bk{lEToFz*uB=0gWuLx-sXG*&gzFsF{m{^Xu8KmgX^VJWg+$ei|v0;3OF-t(l>(rXo!=p0VNu{y0 zBRDYD?be$@my~orwJt_hRNjUX8B=}g%fiUx3Qv~!C7EYfvv`gvkFs&}AeDf=8IC!G z20u6(XNnKAy5_CzfxGJbi~nW&T1@piOQIzkU8wq~BVJfMY(5XuSmoB*^8I{kJAc?m3S)LV_II!0~WK!%81 z`yc8&#woS#1{zjX5+9KG4~_5aSWf6@?YXsmwCuIK09a`{yV%`;k=${ljMtT z^CghdFP3jA|3j(<${a06`iM1+?oZ{X`9HO8=dEBY#EhW{!YbL)9vllx@L`di)KE)H zckeeS!k}+S&9y3mkp@u^=h;VE!({&IS17}xz%r;)Q0mWXJEOpoiv_qO05l>VbG-Wj zYscX*B5yLy*&F4&0ckfE$d+>E_wzV+;zhN88ybH3AeC0Ss2EKu!&3kh zlTUdJGDJD#_mnuPtSe>x|7_ zIv^9~%bFGRHa3Wc!xgsj{m9^8s!ExqGY89%at4FuFd4a!2&rh5a3Z8tNKJ8y`qqw#=>W+IA?tx8TY9WmjV{-u9oi zYl!TPAFM3MkyQ?9J5aSnCw89d?qL$A|e71 zt2+qF2dJlL%yD1?KN(CVMZm!9^i1L3qc`JMZMffe_j{A|l3E(+Lw{@FW(gYb2yBy_ zAUsp^g+p`xT{dtR{wFeAHFs9`tA*IR50ZRIHgDoj{@eT3WbVVUw9akIv0%Q|6BQy_U;DslqjU*QtWucWku80_}_w%HB_Ej=J@Z;8Sy9**7 z`&I2XSDYHLMRo?Q*R#d#Y@aZ)*+DiCmUI{bI@pLof&wuLOwNHqmRiPdX35Q70P&C6 zi%#lE?j{ zd&l@AHK2hzBwKf5oT~TD_%Zy~8Ka=!`*!MpL9<09%6{BlP!k&}*kB)IW=foW^i$GQ zXP6)BiM~b^Svc(|N>50_Ouhc@(ty|@(rdh1Tw}lvnr?Y&A)fR4V%j5}^WV<8%SUlk zJosynv_=8c2o>p)3<@XImf1lF`X^;<2{1xf5^5UJNX1SKTj10qILFmlV!7eqg_v4u zwV&-J*z50ZLV~$V^>E%}QzsT5Wct{m=G-_GAO%94^K3wP5xoIMRDQiJn z&vhAVZU(U>d-j$Q9AJj9$fabyc1ZN?_1tB_%fXNZ?s9OaQTXx|pHpQZBahoA^h9b> zwHHS1bP>2%*bm+Zz%!&4{vu*@c0oskXQ!cg31M2sb4!+k%V@?l`+(49@XW@daSYmu z)`q)%2{45Q3AMRQK93fF4@x=7y+o0$bZ5DdpaL0V_6qYG^Ir&f-KfkZA=CnVoUK@>l)z3^6x?YWR$US?pGz@v48DMRFAAK>)Ne%P% z)RYS7o7X)C5+QK50;GRX$-g(YO1hqQnO8}|LnFl27q1Se4?bADcR;ubL*uwu@eUMn zGlSA$i$rd5DMg!Xn62$|E1nj|hesDjO^ya z)i2k7NAqMg*$G%y6E99Y!;I27Y@VEMdFz`1={Wcf6nDP&lXo-w-$a zu1pUwlvBYAf4Pg)%w$cQ&65nPS|o(c2_xc5)~>W&85^v&?SZ*pdkJBbpe4kk`$)!j zK0SvI-gssB$2@QyM8&8vS z+$YGA8W?$!(0Y+IAVe67e2I(!h@SxfK6>$yq9~fO(RuOAAuF=(<`$3@_);oI~-h|OA~){pm!i^caP48vvDCe!6}57|V=FYHOD z?$zxG0!ajXzv$+#NwTpZk``OcrT2F4jqP%=w5wZFTOF_$}r zN^(Xb6fHPcym?+-gkaM9eDyhY;A4v37>sn(@mPcMArxNIw3xs2+5#9YDrV>-kdDZ~%GM(DQ`i1RKfQ<}b#* z?I*)Lu#>k&>c2)=`Zbw35KoL)vO-6;Z%5_!J<+X*M0_7vl(3=scV8GxKBx=(8eS(t z!Eg}-2f0WhW}_8{N5-`^Jg>7e^y{6I`)-(&@3S8IJ`bf{hd&DjNr1TUd+1PtTWt3g zep|cF3=Q?}n0#%0CpsMXVJr(uPE*Vk1$kfnb)9jE@+>NPP#;HMYw2W9R#I$HXfJwU zH(N6;6wH-rZY3SXfL_e($vW25^1!p44}@oCP`dt=<)*u@mN2Py{v ztK52*!eOuF9Oi%RAwaKbkNYdu7)k{Li_2H2>k9lFPBxTH<6 zBb@YTgb|VM?kDQHhn#;h?|@SsAW}sw{m1IRS>}*S={pAg_xpn_Es;%0#8-xVj-x_R z%YeccZNSUleMrhXUsKZ#Yd;WuzB=;f{w|BP;#;B~U<{}K!(UabK-f2>w_n{9_9EkH z?2YZ&Aom`btLy5bu{uA*vNcZjHe~2|9ZSUPW4BSC9E!0aOlHxKX-)^rz+B$N2Br9u z&N<ccaIF^(GH5)2B47Ey0O6x&4^Z15_Zy9s;%MFZ?Gm9;OqWuiXbxl__Hj znU-mM#-0_oAAX8&8=o4DPaY-%M}6&UZBJYOatDQbB`a4n59ee3B~>}dUmTUC6FAxY zzT0Bx^JPxvvF8B8JFI1%BXNi`>WyyVTLC@KZ~+onOY!q6^5$)QF@9QyFrL}hzePX4 z+w+IwOc6_G;<95LrA)$V#4ZW>Hc%;(d;3Nlp^hG=Eed{cvC~=+C)s`M7u((H*lN!( zMCwp-*$M%InNqh@G3JDfbu7)wQ=A{+>|wqmQD3~? zE(PPiZ?aTym^4L_^SUMOs3>ek4?7r!Pju{RZBtY}|IU3iYt#4{BJeT0T_Fm`aDDQc z8jSBKte^7xJYPbf`!q_z>wSu}HPi)GWr`+WY{qw204fLqMLE zs*~Fb8{9#t0)=BRKt<;>{yM72hKP3?LT!Oaaamr?5HDV z^9|3q;@^Fwme`kU2>GB(vR8u)Y8;*2gjS;bc*MSN(^Fdc(Qp?lJ&I1pw;X-tEzF}t+OfB2mKQ?DxG=b=nvz?Gm9Dz%a6 z{8RQ;dSGTSmkfziP4a6PB~8caRnR6cYWHsh>1?0cG2YF>kA*#aq0VxQlNR`nT#n{w zYB@KVK05u{0LxiUiEF71klc-Ef6Zx|5bb#TfHE1@wyFRRcHfj zhibdRe)6Q9s*bJOKNGSEa{Kf57t5leHI(x0{a@K|Q^<=~63W86Z7{j=Oq&%Cu z95pL`Oc5J_f0ZA`5P=26W>-CvwEqu{gP%aFq4 zHAPhQM0@yvt>ti9ogNP%$Je`Zj}A@Ubap@;70KC00@w)H6)e5gI>i~8n@H1Vz973p z$O}B8fO=zlI&Fgozbtv6Jx*CJ`_b z%oBTl2gI?rSlIPTLX3K+NtUQeSv z!D-=1Tvvdv&u7r=`q3IkRbun8J8+Gk!=FB912IpahISeciJ05_T0#S8x&t z=Pvm%dXTO#B^cZ$xw;51BmoG-Q2@e&<4Wk--bSNWvZsY#+EdG-5zGX@E0s~As%=Fx z)IKV#7_I6sRX^-@UQc$>AM3r>=>B$;6y;m(sPTPm7Asa2=(CHyB0xlB6o?>=A%O9U zKYE#t{e;OccZ&ZyYT`nA^2yf0*yWR6=8^JzI3VwiqI;QWd@b&8Z*{zjWuoN~0I1GA zzYh7RS8^jN`{EkD$#LY3fF-Zo(n1@da-KhiUvaULg0RTJ#Q!=ECP>~O3*DZRZulsfn>z)S1{qGMp=I5q#WT_aLh7BeUC!w%x+pVS8LlgD9X1@m<`R5%KbI{CBu)Ctu@vbDY! zj>hO0bzF%67lPa4U{#gar&XwX0X7o~s@G>v(kY7?5@xnj4R+j)fxpw70Fg_Uk~4RfFALsAGh!)BM!yynPtp8N~CGGO^_uo%+9XAW;u-3@i#Zi6BgK3fz5GKe>aCsbyuA4+dv{qa z9FYNn-UO(VBkZU2`AHzLV0h*HAZnS;+$u+OIFcB)%w%J9@klP*NpE62u1A*k^6+!Y* z)GUQn$AT*O3)7?=S8oKnI~;^PGp}-Hww?r-*K6gT0pPZnQu+qpRTc%sw+@PcGU#f+ zsLYkkTf|g4X{d^W5o>}d*Mqg^AxFuCOpX1bbWoD z6*W=G;t&UCi&Oh2kK|eY z1?*H_u3S#4EdBgZfLKSq^p@n_3wQLDt`0GOPj+lQj*kW2)qKmP4M=?6+rm-lp@KL2 zW{@wPGyJ;o_DxKhp#fKLE}8v?c&cPLpScU<6fBVie@LS7<@eC77Qr5De)>zY!!<0BECZy(jTXy15j+f#8p>y_oZy;+hejAt6PzXMKylk0x@O#9#SSEgzm9DOg z{fq2XVXu5piM+MkDl#_&Gd+K@9`U5_EKSrzl|IIvN$pbloe-svGN2PAY*RTaVu=jp zB=4^%Cym2mYPCziXLN`jNu^U8{bGjRMn)r{!7uF07gqA~0=x|u0I2vuJsfgW9%jXq z6KTSs2dKo+2z_K9hlgl_kaLlZw07%IyPIn1c-hT)J{xF!JCyhE)8B>;FHZ__{{h&RzKf8*-JwT8#nuSXY zU4$B6zY&)dCP_@*x5rJ5;C#G2q>yi;!R{|6Sj2~-oj`{HNYvgp8a2bFJ2v|&Q&&?3rA^^mhwHqmQUk3)&0q$9xE_W zkDRRbK5M&v-yjb;f@T!d?g|EO`;zvH?15q`*JQO!Fe4_lL3q1jRMFo!5;4Zgy?!jS z89~%liOS9A6+TKhAKbZAhZD7Ee*yWs>gF&EBp7eRk`*=xhohY)b_viL{E6*hnW>1% zvLS3u9AlJSLuP-=v2{6wqiT|C`bj%K{kfX6s?Dm*tKf6}=C^|P6Nfe7G6OB9^a83~ z<@eDY%P`5?7J}Pq9WkK8cJ(r> z5>xF!2*wN#D#|Yj{HRC60!7IYHvvA8u%azk9WZQ)0Fl~wN^bRd63E1NTlU2`%pxKb?=paSla;=ijQ#^t2YeEEtaC$NPDp& z1AFhA5zEhKuAE| z-sF>N!ks~z@A2l*ulbiRtc{gK9&RSMo7MKjssm=}zk+dv{wE8d z_Ti%|(>%eWRH4C-#dVb1?bI5$>7nDxk15e0`&ok$NNTaas{2d-dqGM1D4X6t2}}!@Iv9oayMkuY z#`Q9+>W!!De#E}OUvyRPQ}2&t8eRn;8PUg&T*l=($r}22R{!#H5(|HqC0Y-E&n*2v z9+HN?>vrcN{&yqF*|%@FXZ`YmuZZWX7pZnqy&*ODn9M++ZemaWf;iQM`>c!xT7^TA zi)hs!`-li1in+-;t7Yi{w+Y7p4z??kNc7{d&VdgEW`+w;Xx4NvEjKyx&0dCd=I$~nfYG01|9RP67_ zG=zr@m$N3DwWC{H{Py>^onrFVXI)+lHSrA<7J+*zG2?Uw{=wk>#{2-U#9U}VR0PIZ ztNnic@3B~8>(^AKStzj1IugB2d)pI9(9PR?oo&W%CmZgwan+S6xj_c^gfjHxX5Z^W zIb0Ha-q`gCc2*qb2dM1_3z68vZM2d_dv?1 zrLp6>GxXQ|2IhKnD$@H=e0%lMnUQaV+6n_QTp+uZ9zmE%{q0Of>mYC2Z=QCnv5NNR zm%9Ux;U3is-1dOCEiI)S|AAQXqXQT@bq?-)Y*yeFmRgsT*|8)wtcryUj(EL>9e5@8 zruhzfL!p&n1VOUGA)EraVu94EohK?`d6NIWGDcr2&Nu3 z#=4cF=1gol{O(4CBL<)oud2_(v(vz(iPCkYTaIXmiY(EJ3DV3b*S!FkatM2gZa)QBaJ1dOT!CKe>b%6>!;foWB!q>+#@xT2)k@IU$i?p>57 zWv4>jw>xAQxO9ZODA`V#+qTzMn-bjYaLi8@s@nalC*mj46%JtB^q+*@gx+g6+ZwEm z&TdNYkF35%57oWIUV2fJFKh9wT%#>c`dq_QTlV^4OFn@-lOUf;IMW16$iqqqU5H$Y z7=75?qj#mxR^-gj(2{cd(+l6DIDGWKW696sQ82N=H4gmF(zwsKzAGatTj9OhoylLA@%dKZ9r)=?6U0gvNC3i^_tX zIk1%=`m%6R&UK$wsxnM9@|?#HuTDcDXf{f|;=Q8E_N}|alYSkpQRAD_O782XP9XcD zw!BLPpTv_DzDstU)p%sCp1^^U^`(J@IJ48%ZX1Sy-~F|tfH&=K;QHdlTUUYQeQ@3B z^Q&Ac(Z}efIj3rSoDZx36RT1Ur&FgbU~)4FOIo6=m^aVL{3!vo!BVKgiG8MA7yrn$ zM78B>)&UXWVyOjC1+W=tzYqmTO)=?$E7Cs`^{G1^)|(!Vcdr^YBQ{q$EOC6^gpY+9 zCRFo&G)OjGOzrhz4cryky?(-k50DmB{%afg*u(`8D|3A4Me=6P1Dq2qS1 zC7`OUEsHm7Mo>9c^i5b9ZHUToBMF{RLaHv65Mf(8jCOaF5c?C%F)lD+Dgv1eW6@5M zmIyokrw~gbrL6!SxQnX}2azAQ1Y|m`9^GI2@jXZc!1Sd!F=45LoiKNG!S4eXt2eWK zvApq@_IO(@<8l56#b530P#v97JhJ+RunADH(rfM1SZ^IujTmNMCUK&n5>iQ9 zhw2W{9P7m0WFXTL$Zh&40*LRBRneOBX|AF5o%Bnz_?dt3A?g?8x1w&R4}T z{NHOYyO!rEdTQ}xgq%f_7d(6-X62n$-zq!BH%_suv5e2Vso$5h&Np;>o-pZo95;j+ z*d{A{?GAfN3S58tC9 zHUDnb%U`0`vmWa$zXDlQe@*F^D0R(pww}kq#5nh;jN#vDNOPeXdjd_RO}5SH1W=CS zZSAKFOi@y*$?ujOp6?5lNAKR`p2sWaOCt=%w>V|!rl|EMcsAO;C6Y9&I*~p;Jlslt`L=4rkh#uKt;S5y9IfW1&WZY1G`*jSCZLmU97RAAsx#b1~VE=u({;< z+$5j9(N=vg9lw@yov3$+ywNWFbaml%zJ3Nl=IjbYrEEU?cRFY>9D-E94GNRd=-F

I~=z9il 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 diff --git a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java index dc6771e..385580b 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java @@ -1,24 +1,26 @@ package com.sweta.basic; import java.util.HashMap; +import java.util.Map; +import java.util.Set; import com.sweta.basic.Polygon.Edge; public class PolygonMesh { - public final MyHashSet faces = new MyHashSet(); + public final MyHashSet faces = new MyHashSet<>(); - public final MyHashSet edges = new MyHashSet(); + public final MyHashSet edges = new MyHashSet<>(); - public final MyHashSet points = new MyHashSet(); + public final MyHashSet points = new MyHashSet<>(); - public final HashMap> pointFaces = new HashMap>(); + public final Map> pointFaces = new HashMap<>(); - public final HashMap> edgeFaces = new HashMap>(); + public final Map> edgeFaces = new HashMap<>(); - public final HashMap> pointEdges = new HashMap>(); + public final Map> pointEdges = new HashMap<>(); - public PolygonMesh(final MyHashSet polySet) { + public PolygonMesh(final Set polySet) { for (final Polygon poly : polySet) { this.faces.add(poly); this.edges.addAll(poly.getEdges()); From 5e5b1d4b3d3f7a3967dddf01c74286ca30ce92bc Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Tue, 7 Mar 2023 15:42:12 +0000 Subject: [PATCH 2/6] source clean --- SubdivisionSurfaces/src/SubD.java | 35 +++-- .../src/com/sweta/basic/ConvexHull.java | 52 ++++--- .../src/com/sweta/basic/InputFile.java | 16 ++- .../src/com/sweta/basic/MyHashSet.java | 33 +++-- .../src/com/sweta/basic/Point.java | 3 +- .../src/com/sweta/basic/Polygon.java | 130 ++++++++++-------- .../src/com/sweta/basic/PolygonFactory.java | 62 ++++----- .../src/com/sweta/basic/PolygonMesh.java | 59 ++++---- .../src/com/sweta/basic/Triple.java | 17 ++- .../src/com/sweta/basic/Vector.java | 3 +- .../basic/algo/CatmullClarkAlgorithm.java | 66 +++++---- .../sweta/basic/algo/DooSabinAlgorithm.java | 75 +++++----- .../com/sweta/basic/algo/LoopAlgorithm.java | 72 ++++++---- .../sweta/basic/algo/MidpointAlgorithm.java | 35 +++-- .../com/sweta/basic/algo/Root3Algorithm.java | 54 ++++---- .../basic/algo/TriangulateAlgorithm.java | 5 +- 16 files changed, 404 insertions(+), 313 deletions(-) diff --git a/SubdivisionSurfaces/src/SubD.java b/SubdivisionSurfaces/src/SubD.java index 7396f15..6f05f21 100644 --- a/SubdivisionSurfaces/src/SubD.java +++ b/SubdivisionSurfaces/src/SubD.java @@ -43,19 +43,19 @@ public static void main(final String[] args) { } final String algoString = args[2]; - if (algoString.equalsIgnoreCase("T")) + if (algoString.equalsIgnoreCase("T")) { algo = Algos.TRIANGULATE; - else if (algoString.equalsIgnoreCase("C")) + } else if (algoString.equalsIgnoreCase("C")) { algo = Algos.CATMULL_CLARK; - else if (algoString.equalsIgnoreCase("D")) + } else if (algoString.equalsIgnoreCase("D")) { algo = Algos.DOO_SABIN; - else if (algoString.equalsIgnoreCase("M")) + } else if (algoString.equalsIgnoreCase("M")) { algo = Algos.MIDPOINT; - else if (algoString.equalsIgnoreCase("L")) + } else if (algoString.equalsIgnoreCase("L")) { algo = Algos.LOOP; - else if (algoString.equalsIgnoreCase("R")) + } else if (algoString.equalsIgnoreCase("R")) { algo = Algos.ROOT3; - else { + } else { System.out.println("Invalid algorithm selection!"); return; } @@ -78,15 +78,13 @@ else if (algoString.equalsIgnoreCase("R")) System.out.println("Using subdivision level = " + level); final String outputFilePath = args[1]; - System.out.println("Writing to output file '" + outputFilePath - + "' ...\n"); + System.out.println("Writing to output file '" + outputFilePath + "' ...\n"); final File outFile = new File(outputFilePath); try { - final BufferedWriter bw = new BufferedWriter( - new FileWriter(outFile)); + final BufferedWriter bw = new BufferedWriter(new FileWriter(outFile)); - MyHashSet polySet = new MyHashSet(); + MyHashSet polySet = new MyHashSet<>(); polySet.addAll(inFile.polygons); for (int i = 1; i <= level; i++) { @@ -94,18 +92,19 @@ else if (algoString.equalsIgnoreCase("R")) final PolygonMesh mesh = new PolygonMesh(polySet); AbstractSubdivisionAlgorithm algorithm = null; - if (algo == Algos.TRIANGULATE) + if (algo == Algos.TRIANGULATE) { algorithm = new TriangulateAlgorithm(mesh); - else if (algo == Algos.CATMULL_CLARK) + } else if (algo == Algos.CATMULL_CLARK) { algorithm = new CatmullClarkAlgorithm(mesh); - else if (algo == Algos.DOO_SABIN) + } else if (algo == Algos.DOO_SABIN) { algorithm = new DooSabinAlgorithm(mesh); - else if (algo == Algos.MIDPOINT) + } else if (algo == Algos.MIDPOINT) { algorithm = new MidpointAlgorithm(mesh); - else if (algo == Algos.LOOP) + } else if (algo == Algos.LOOP) { algorithm = new LoopAlgorithm(mesh); - else if (algo == Algos.ROOT3) + } else if (algo == Algos.ROOT3) { algorithm = new Root3Algorithm(mesh); + } polySet = algorithm.run(); } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java b/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java index 81e44ee..37822bd 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java @@ -7,27 +7,24 @@ public class ConvexHull { - public static ArrayList getConvexHullOrderedPoints( - final MyHashSet points) { + public static ArrayList getConvexHullOrderedPoints(final MyHashSet points) { final int n = points.size(); - if (n == 3) + if (n == 3) { return ConvexHull.getConvexHullOrderedPointsTriangle(points); - else if (n == 4) + } else if (n == 4) { return ConvexHull.getConvexHullOrderedPointsQuad(points); - else - throw new RuntimeException( - "Only triangles and quads are supported!"); + } else { + throw new RuntimeException("Only triangles and quads are supported!"); + } } - private static ArrayList getConvexHullOrderedPointsTriangle( - final MyHashSet points) { - final ArrayList retVal = new ArrayList(); + private static ArrayList getConvexHullOrderedPointsTriangle(final MyHashSet points) { + final ArrayList retVal = new ArrayList<>(); retVal.addAll(points); return retVal; } - private static ArrayList getConvexHullOrderedPointsQuad( - final MyHashSet points) { + private static ArrayList getConvexHullOrderedPointsQuad(final MyHashSet points) { final Point[] pts = points.toArray(new Point[0]); final Edge[] edges = new Edge[6]; @@ -45,14 +42,15 @@ private static ArrayList getConvexHullOrderedPointsQuad( Edge diag2 = null; for (int i = 4; i >= 0; i--) { diag2 = edges[i]; - if (!diag1.meets(diag2)) + if (!diag1.meets(diag2)) { break; + } } final Point[] diag1Pts = diag1.getEnds().toArray(new Point[0]); final Point[] diag2Pts = diag2.getEnds().toArray(new Point[0]); - final ArrayList retVal = new ArrayList(); + final ArrayList retVal = new ArrayList<>(); retVal.add(diag1Pts[0]); retVal.add(diag2Pts[0]); retVal.add(diag1Pts[1]); @@ -60,21 +58,19 @@ private static ArrayList getConvexHullOrderedPointsQuad( return retVal; } - public static MyHashSet getConvexHullEdges( - final ArrayList points) { + public static MyHashSet getConvexHullEdges(final ArrayList points) { final int n = points.size(); - if (n == 3) + if (n == 3) { return ConvexHull.getConvexHullEdgesTriangle(points); - else if (n == 4) + } else if (n == 4) { return ConvexHull.getConvexHullEdgesQuad(points); - else - throw new RuntimeException( - "Only triangles and quads are supported!"); + } else { + throw new RuntimeException("Only triangles and quads are supported!"); + } } - private static MyHashSet getConvexHullEdgesTriangle( - final ArrayList points) { - final MyHashSet retVal = new MyHashSet(); + private static MyHashSet getConvexHullEdgesTriangle(final ArrayList points) { + final MyHashSet retVal = new MyHashSet<>(); final Point[] pts = points.toArray(new Point[0]); retVal.add(new Edge(pts[0], pts[1])); retVal.add(new Edge(pts[1], pts[2])); @@ -82,8 +78,7 @@ private static MyHashSet getConvexHullEdgesTriangle( return retVal; } - private static MyHashSet getConvexHullEdgesQuad( - final ArrayList points) { + private static MyHashSet getConvexHullEdgesQuad(final ArrayList points) { final Point[] pts = points.toArray(new Point[0]); final Edge[] edges = new Edge[6]; edges[0] = new Edge(pts[0], pts[1]); @@ -98,11 +93,12 @@ private static MyHashSet getConvexHullEdgesQuad( Edge diag2 = null; for (int i = 4; i >= 0; i--) { diag2 = edges[i]; - if (!diag1.meets(diag2)) + if (!diag1.meets(diag2)) { break; + } } - final MyHashSet retVal = new MyHashSet(); + final MyHashSet retVal = new MyHashSet<>(); retVal.add(edges[0]); retVal.add(edges[1]); retVal.add(edges[2]); diff --git a/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java b/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java index be07b85..edb4bc2 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java @@ -9,28 +9,30 @@ public class InputFile { - public MyHashSet polygons = new MyHashSet(); + public MyHashSet polygons = new MyHashSet<>(); public InputFile(final String filePath) throws ParseException, IOException { - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); // final MyHashSet points = new MyHashSet(); final File file = new File(filePath); final BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while ((line = br.readLine()) != null) { final String[] tokens = line.split(" "); - if (tokens.length != 4) + if (tokens.length != 4) { continue; + } final float a = Float.parseFloat(tokens[1]); final float b = Float.parseFloat(tokens[2]); final float c = Float.parseFloat(tokens[3]); - if (tokens[0].equalsIgnoreCase("P")) + if (tokens[0].equalsIgnoreCase("P")) { points.clear(); - else if (tokens[0].equalsIgnoreCase("v")) + } else if (tokens[0].equalsIgnoreCase("v")) { points.add(new Point(a, b, c)); - else if (tokens[0].equalsIgnoreCase("E")) + } else if (tokens[0].equalsIgnoreCase("E")) { this.polygons.add(PolygonFactory.fromOrderedPoints(points)); - // this.polygons.add(PolygonFactory.fromPointsConvex(points)); + // this.polygons.add(PolygonFactory.fromPointsConvex(points)); + } } br.close(); } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java b/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java index e3ace89..7ffd32c 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java @@ -14,38 +14,47 @@ public String toString() { while (iterator.hasNext()) { final E e = iterator.next(); builder.append(e.toString()); - if (iterator.hasNext()) + if (iterator.hasNext()) { builder.append(", "); + } } builder.append("]"); return builder.toString(); } public MyHashSet union(final MyHashSet s) { - final MyHashSet retVal = new MyHashSet(); - for (final E e : this) + final MyHashSet retVal = new MyHashSet<>(); + for (final E e : this) { retVal.add(e); - for (final E e : s) + } + for (final E e : s) { retVal.add(e); + } return retVal; } public MyHashSet intersection(final MyHashSet s) { - final MyHashSet retVal = new MyHashSet(); - for (final E e : this) - if (s.contains(e)) + final MyHashSet retVal = new MyHashSet<>(); + for (final E e : this) { + if (s.contains(e)) { retVal.add(e); - for (final E e : s) - if (this.contains(e)) + } + } + for (final E e : s) { + if (this.contains(e)) { retVal.add(e); + } + } return retVal; } public MyHashSet complement(final MyHashSet s) { - final MyHashSet retVal = new MyHashSet(); - for (final E e : this) - if (!s.contains(e)) + final MyHashSet retVal = new MyHashSet<>(); + for (final E e : this) { + if (!s.contains(e)) { retVal.add(e); + } + } return retVal; } } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Point.java b/SubdivisionSurfaces/src/com/sweta/basic/Point.java index 06cfd75..c4c6569 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Point.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/Point.java @@ -22,8 +22,7 @@ public Point times(final float k) { return new Point(k * this.x, k * this.y, k * this.z); } - public static Point linearCombination(final Point P0, final Point P1, - final float a0) { + public static Point linearCombination(final Point P0, final Point P1, final float a0) { final float x = a0 * P0.x + (1 - a0) * P1.x; final float y = a0 * P0.y + (1 - a0) * P1.y; final float z = a0 * P0.z + (1 - a0) * P1.z; diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java b/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java index 40d9a4e..474fbd6 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java @@ -7,14 +7,15 @@ public class Polygon { public static class Edge implements Comparable { - private final MyHashSet ends = new MyHashSet(); + private final MyHashSet ends = new MyHashSet<>(); public Edge(final Point endA, final Point endB) { - if (endA == null || endB == null) + if (endA == null || endB == null) { throw new NullPointerException(); - if (endA.equals(endB)) - throw new IllegalArgumentException("Invalid edge! endA=" - + endA.toString() + " endB=" + endB.toString()); + } + if (endA.equals(endB)) { + throw new IllegalArgumentException("Invalid edge! endA=" + endA.toString() + " endB=" + endB.toString()); + } this.ends.add(endA); this.ends.add(endB); } @@ -23,8 +24,7 @@ public Edge(final Point endA, final Point endB) { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + (this.ends == null ? 0 : this.ends.hashCode()); + result = prime * result + (this.ends == null ? 0 : this.ends.hashCode()); return result; } @@ -35,18 +35,20 @@ public String toString() { @Override public boolean equals(final Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) - return false; - if (this.getClass() != obj.getClass()) + } + if ((obj == null) || (this.getClass() != obj.getClass())) { return false; + } final Edge other = (Edge) obj; if (this.ends == null) { - if (other.ends != null) + if (other.ends != null) { return false; - } else if (!this.ends.equals(other.ends)) + } + } else if (!this.ends.equals(other.ends)) { return false; + } return true; } @@ -61,14 +63,14 @@ public float length() { public Point midPoint() { final Object[] arr = this.ends.toArray(); - return Point - .linearCombination((Point) arr[0], (Point) arr[1], 0.5f); + return Point.linearCombination((Point) arr[0], (Point) arr[1], 0.5f); } public boolean isEnd(final Point p) { final Object[] arr = this.ends.toArray(); - if (p.equals(arr[0]) || p.equals(arr[1])) + if (p.equals(arr[0]) || p.equals(arr[1])) { return true; + } return false; } @@ -82,28 +84,27 @@ public boolean meets(final Edge other) { } } - private final ArrayList points = new ArrayList(); + private final ArrayList points = new ArrayList<>(); - private final MyHashSet edges = new MyHashSet(); + private final MyHashSet edges = new MyHashSet<>(); private final Vector normal; private final Color color; - public Polygon(final ArrayList argPoints, - final MyHashSet argEdges, final Vector argNormal, - final Color argColor) { - if (argPoints == null || argEdges == null || argNormal == null) - throw new NullPointerException( - "Non-null normal and sets of points and edges required!"); + public Polygon(final ArrayList argPoints, final MyHashSet argEdges, final Vector argNormal, final Color argColor) { + if (argPoints == null || argEdges == null || argNormal == null) { + throw new NullPointerException("Non-null normal and sets of points and edges required!"); + } final MyHashSet edgeEnds = Polygon.validateEdges(argEdges); - if (edgeEnds == null) + if (edgeEnds == null) { throw new IllegalArgumentException("Invalid set of edges!"); - final MyHashSet pointsSet = new MyHashSet(); + } + final MyHashSet pointsSet = new MyHashSet<>(); pointsSet.addAll(argPoints); - if (!pointsSet.equals(edgeEnds)) - throw new IllegalArgumentException( - "Invalid set of points and edges!"); + if (!pointsSet.equals(edgeEnds)) { + throw new IllegalArgumentException("Invalid set of points and edges!"); + } this.points.addAll(argPoints); this.edges.addAll(argEdges); this.normal = new Vector(argNormal).normalize(); @@ -111,47 +112,58 @@ public Polygon(final ArrayList argPoints, } public boolean isVertex(final Point point) { - for (final Point p : this.getPoints()) - if (point.equals(p)) + for (final Point p : this.getPoints()) { + if (point.equals(p)) { return true; + } + } return false; } public boolean isEdge(final Edge e) { - for (final Edge edge : this.getEdges()) - if (e.equals(edge)) + for (final Edge edge : this.getEdges()) { + if (e.equals(edge)) { return true; + } + } return false; } private static MyHashSet validateEdges(final MyHashSet edges) { - if (edges.size() < 3) + if (edges.size() < 3) { return null; + } - final MyHashSet points = new MyHashSet(); - for (final Edge e : edges) + final MyHashSet points = new MyHashSet<>(); + for (final Edge e : edges) { points.addAll(e.ends); - if (points.size() < 3) + } + if (points.size() < 3) { return null; + } - final HashMap pointDegrees = new HashMap(); - for (final Point p : points) + final HashMap pointDegrees = new HashMap<>(); + for (final Point p : points) { pointDegrees.put(p, 0); - for (final Edge e : edges) + } + for (final Edge e : edges) { for (final Point p : e.ends) { int d = pointDegrees.get(p).intValue(); pointDegrees.put(p, ++d); } + } - final MyHashSet degreeSet = new MyHashSet(); + final MyHashSet degreeSet = new MyHashSet<>(); degreeSet.addAll(pointDegrees.values()); final Integer[] degreeArr = degreeSet.toArray(new Integer[0]); - if (degreeArr == null || degreeArr.length != 1) + if (degreeArr == null || degreeArr.length != 1) { return null; + } final int degInt = degreeArr[0].intValue(); - if (degInt != 2) + if (degInt != 2) { return null; + } return points; } @@ -161,9 +173,9 @@ public String toString() { final Vector n = this.normal; final StringBuilder builder = new StringBuilder(); builder.append("P " + this.points.size() + " 0 0\n"); - if (this.color != Color.DEFAULT) - builder.append("d " + this.color.x + " " + this.color.y + " " - + this.color.z + "\n"); + if (this.color != Color.DEFAULT) { + builder.append("d " + this.color.x + " " + this.color.y + " " + this.color.z + "\n"); + } for (final Point p : this.points) { builder.append("n " + n.x + " " + n.y + " " + n.z + "\n"); builder.append("v " + p.x + " " + p.y + " " + p.z + "\n"); @@ -176,32 +188,34 @@ public String toString() { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + (this.getPoints() == null ? 0 : this.getPoints().hashCode()); - result = prime * result - + (this.getEdges() == null ? 0 : this.getEdges().hashCode()); + result = prime * result + (this.getPoints() == null ? 0 : this.getPoints().hashCode()); + result = prime * result + (this.getEdges() == null ? 0 : this.getEdges().hashCode()); return result; } @Override public boolean equals(final Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) - return false; - if (this.getClass() != obj.getClass()) + } + if ((obj == null) || (this.getClass() != obj.getClass())) { return false; + } final Polygon other = (Polygon) obj; if (this.getEdges() == null) { - if (other.getEdges() != null) + if (other.getEdges() != null) { return false; - } else if (!this.getEdges().equals(other.getEdges())) + } + } else if (!this.getEdges().equals(other.getEdges())) { return false; + } if (this.getPoints() == null) { - if (other.getPoints() != null) + if (other.getPoints() != null) { return false; - } else if (!this.getPoints().equals(other.getPoints())) + } + } else if (!this.getPoints().equals(other.getPoints())) { return false; + } return true; } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java b/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java index d37d6ec..020c537 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java @@ -10,12 +10,11 @@ public static Polygon fromPointsConvex(final MyHashSet points) { return PolygonFactory.fromPointsConvex(points, Color.DEFAULT); } - public static Polygon fromPointsConvex(final MyHashSet points, - final Color color) { - final ArrayList pts = ConvexHull - .getConvexHullOrderedPoints(points); - if (!PolygonFactory.validateInput(pts)) + public static Polygon fromPointsConvex(final MyHashSet points, final Color color) { + final ArrayList pts = ConvexHull.getConvexHullOrderedPoints(points); + if (!PolygonFactory.validateInput(pts)) { throw new IllegalArgumentException("Invalid set of points!"); + } final MyHashSet edges = ConvexHull.getConvexHullEdges(pts); // final MyHashSet edges = new MyHashSet(); // for (int i = 0; i < pts.size() - 1; i++) @@ -29,44 +28,45 @@ public static Polygon fromOrderedPoints(final ArrayList points) { return PolygonFactory.fromOrderedPoints(points, Color.DEFAULT); } - private static Polygon fromOrderedPoints(final ArrayList points, - final Color color) { - if (!PolygonFactory.validateInput(points)) + private static Polygon fromOrderedPoints(final ArrayList points, final Color color) { + if (!PolygonFactory.validateInput(points)) { throw new IllegalArgumentException("Invalid set of points!"); - final MyHashSet edges = new MyHashSet(); - for (int i = 0; i < points.size() - 1; i++) + } + final MyHashSet edges = new MyHashSet<>(); + for (int i = 0; i < points.size() - 1; i++) { edges.add(new Edge(points.get(i), points.get(i + 1))); + } edges.add(new Edge(points.get(points.size() - 1), points.get(0))); - final Vector normal = Vector.cross(points.get(0), points.get(1), - points.get(2)); + final Vector normal = Vector.cross(points.get(0), points.get(1), points.get(2)); return new Polygon(points, edges, normal, color); } - public static MyHashSet triangulateCentroid( - final ArrayList points, final Color color) { - if (points.size() < 3) + public static MyHashSet triangulateCentroid(final ArrayList points, final Color color) { + if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); - final MyHashSet triangles = new MyHashSet(); + } + final MyHashSet triangles = new MyHashSet<>(); // if (points.size() == 3) // triangles.add(PolygonFactory.createTriangle(points, color)); // else // { Point centroid = new Point(); - for (final Point p : points) + for (final Point p : points) { centroid = centroid.add(p); + } centroid = centroid.times(1.0f / points.size()); final Point[] pts = points.toArray(new Point[0]); for (int i = 0; i < pts.length - 1; i++) { - final ArrayList triPts = new ArrayList(); + final ArrayList triPts = new ArrayList<>(); triPts.add(centroid); triPts.add(pts[i]); triPts.add(pts[i + 1]); triangles.add(PolygonFactory.createTriangle(triPts, color)); } { - final ArrayList triPts = new ArrayList(); + final ArrayList triPts = new ArrayList<>(); triPts.add(centroid); triPts.add(pts[pts.length - 1]); triPts.add(pts[0]); @@ -76,14 +76,14 @@ public static MyHashSet triangulateCentroid( return triangles; } - public static MyHashSet triangulateFan( - final ArrayList points, final Color color) { - if (points.size() < 3) + public static MyHashSet triangulateFan(final ArrayList points, final Color color) { + if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); - final MyHashSet triangles = new MyHashSet(); + } + final MyHashSet triangles = new MyHashSet<>(); final Point[] pts = points.toArray(new Point[0]); for (int i = 1; i < pts.length - 1; i++) { - final ArrayList triPts = new ArrayList(); + final ArrayList triPts = new ArrayList<>(); triPts.add(pts[0]); triPts.add(pts[i]); triPts.add(pts[i + 1]); @@ -92,12 +92,12 @@ public static MyHashSet triangulateFan( return triangles; } - public static Polygon createTriangle(final ArrayList points, - final Color color) { - if (points.size() != 3) + public static Polygon createTriangle(final ArrayList points, final Color color) { + if (points.size() != 3) { throw new IllegalArgumentException("Invalid set of points!"); + } final Point[] pts = points.toArray(new Point[0]); - final MyHashSet edges = new MyHashSet(); + final MyHashSet edges = new MyHashSet<>(); edges.add(new Edge(pts[0], pts[1])); edges.add(new Edge(pts[1], pts[2])); edges.add(new Edge(pts[2], pts[0])); @@ -109,8 +109,9 @@ public static Polygon createTriangle(final ArrayList points, private static float PLANARITY_CHECKING_MAX_DOT_PRODUCT_SIZE = 1e-3f; private static boolean validateInput(final ArrayList points) { - if (points.size() < 3) + if (points.size() < 3) { return false; + } if (PolygonFactory.PLANARITY_CHECKING) { final Point[] pts = points.toArray(new Point[0]); @@ -121,8 +122,7 @@ private static boolean validateInput(final ArrayList points) { final Vector PS = new Vector(pts[0], pts[i]); final float dotProduct = Triple.dotProduct(PS, cross); if (Math.abs(dotProduct) > PolygonFactory.PLANARITY_CHECKING_MAX_DOT_PRODUCT_SIZE) { - System.out.println("Dot product = " + dotProduct - + " is too large to continue!"); + System.out.println("Dot product = " + dotProduct + " is too large to continue!"); System.out.println("Points are: " + points.toString()); return false; } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java index 385580b..7216517 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java @@ -28,69 +28,78 @@ public PolygonMesh(final Set polySet) { } for (final Point p : this.points) { - final MyHashSet set = new MyHashSet(); - for (final Polygon poly : this.faces) - if (poly.isVertex(p)) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon poly : this.faces) { + if (poly.isVertex(p)) { set.add(poly); + } + } this.pointFaces.put(p, set); } for (final Edge e : this.edges) { - final MyHashSet set = new MyHashSet(); - for (final Polygon poly : this.faces) - if (poly.isEdge(e)) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon poly : this.faces) { + if (poly.isEdge(e)) { set.add(poly); + } + } this.edgeFaces.put(e, set); } for (final Point p : this.points) { - final MyHashSet set = new MyHashSet(); - for (final Polygon.Edge edge : this.edges) - if (edge.isEnd(p)) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon.Edge edge : this.edges) { + if (edge.isEnd(p)) { set.add(edge); + } + } this.pointEdges.put(p, set); } } public String describe() { - return this.faces.size() + " faces, " + this.edges.size() + " edges, " - + this.points.size() + " points."; + return this.faces.size() + " faces, " + this.edges.size() + " edges, " + this.points.size() + " points."; } public boolean isEdgeOnHole(final Edge e) { - if (!this.edges.contains(e)) + if (!this.edges.contains(e)) { throw new IllegalArgumentException("Edge not in mesh!"); - return this.edgeFaces.get(e) != null - && this.edgeFaces.get(e).size() == 1; + } + return this.edgeFaces.get(e) != null && this.edgeFaces.get(e).size() == 1; } public boolean isPointOnHole(final Point p) { - if (!this.points.contains(p)) + if (!this.points.contains(p)) { throw new IllegalArgumentException("Point not in mesh!"); - return this.pointFaces.get(p) != null - && this.pointEdges.get(p) != null - && this.pointFaces.get(p).size() != this.pointEdges.get(p) - .size(); + } + return this.pointFaces.get(p) != null && this.pointEdges.get(p) != null + && this.pointFaces.get(p).size() != this.pointEdges.get(p).size(); } public boolean hasOnlyTriangles() { - for (final Polygon face : this.faces) - if (face.getPoints().size() != 3) + for (final Polygon face : this.faces) { + if (face.getPoints().size() != 3) { return false; + } + } return true; } public boolean hasOnlyTrianglesAndQuads() { - for (final Polygon face : this.faces) - if (face.getPoints().size() != 3 && face.getPoints().size() != 4) + for (final Polygon face : this.faces) { + if (face.getPoints().size() != 3 && face.getPoints().size() != 4) { return false; + } + } return true; } public PolygonMesh triangulate() { - final MyHashSet newFaces = new MyHashSet(); - for (final Polygon face : this.faces) + final MyHashSet newFaces = new MyHashSet<>(); + for (final Polygon face : this.faces) { newFaces.addAll(face.triangulateCentroid()); + } return new PolygonMesh(newFaces); } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Triple.java b/SubdivisionSurfaces/src/com/sweta/basic/Triple.java index a09934d..4f10422 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Triple.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/Triple.java @@ -32,19 +32,22 @@ public int hashCode() { @Override public boolean equals(final Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) - return false; - if (this.getClass() != obj.getClass()) + } + if ((obj == null) || (this.getClass() != obj.getClass())) { return false; + } final Triple other = (Triple) obj; - if (Float.floatToIntBits(this.x) != Float.floatToIntBits(other.x)) + if (Float.floatToIntBits(this.x) != Float.floatToIntBits(other.x)) { return false; - if (Float.floatToIntBits(this.y) != Float.floatToIntBits(other.y)) + } + if (Float.floatToIntBits(this.y) != Float.floatToIntBits(other.y)) { return false; - if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) + } + if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) { return false; + } return true; } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Vector.java b/SubdivisionSurfaces/src/com/sweta/basic/Vector.java index faa5172..896f9f1 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Vector.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/Vector.java @@ -55,8 +55,7 @@ public static Vector proj(final Vector u, final Vector v) { public static Vector projPlane(final Vector u, final Vector n) { final Vector proj = Vector.proj(u, n); - final Vector retVal = new Vector(u.x - proj.x, u.y - proj.y, u.z - - proj.z); + final Vector retVal = new Vector(u.x - proj.x, u.y - proj.y, u.z - proj.z); return retVal; } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java index d784278..d472895 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java @@ -12,11 +12,11 @@ public class CatmullClarkAlgorithm extends AbstractSubdivisionAlgorithm { - private final HashMap facePoints = new HashMap(); + private final HashMap facePoints = new HashMap<>(); - private final HashMap edgePoints = new HashMap(); + private final HashMap edgePoints = new HashMap<>(); - private final HashMap newVertices = new HashMap(); + private final HashMap newVertices = new HashMap<>(); public CatmullClarkAlgorithm(final PolygonMesh mesh) { super(mesh); @@ -42,8 +42,9 @@ private Point getNewVertex(final Point p) { private Point getAverageMidEdges(final Point p) { final MyHashSet edges = this.mesh.pointEdges.get(p); Point retVal = new Point(); - for (final Edge e : edges) + for (final Edge e : edges) { retVal = retVal.add(e.midPoint()); + } retVal = retVal.times(1.0f / edges.size()); return retVal; } @@ -52,40 +53,45 @@ private Point getAverageMidBoundaryEdges(final Point p) { final MyHashSet edges = this.mesh.pointEdges.get(p); Point retVal = new Point(); int n = 0; - for (final Edge e : edges) + for (final Edge e : edges) { if (this.mesh.isEdgeOnHole(e)) { retVal = retVal.add(e.midPoint()); n++; } - if (n > 0) + } + if (n > 0) { retVal = retVal.times(1.0f / n); + } return retVal; } private Point getAverageFacePoint(final Point p) { final MyHashSet faces = this.mesh.pointFaces.get(p); Point retVal = new Point(); - for (final Polygon poly : faces) + for (final Polygon poly : faces) { retVal = retVal.add(this.facePoints.get(poly)); + } retVal = retVal.times(1.0f / faces.size()); return retVal; } private Point getFacePoint(final Polygon face) { Point retVal = new Point(); - for (final Point p : face.getPoints()) + for (final Point p : face.getPoints()) { retVal = retVal.add(p); + } return retVal.times(1.0f / face.getPoints().size()); } private Point getEdgePoint(final Edge edge) { - if (this.mesh.isEdgeOnHole(edge)) + if (this.mesh.isEdgeOnHole(edge)) { return edge.midPoint(); - else { + } else { final MyHashSet faces = this.mesh.edgeFaces.get(edge); Point retVal = new Point(); - for (final Polygon face : faces) + for (final Polygon face : faces) { retVal = retVal.add(this.facePoints.get(face)); + } retVal = retVal.times(1.0f / faces.size()); retVal = retVal.add(edge.midPoint()); retVal = retVal.times(1.0f / 2); @@ -98,54 +104,64 @@ public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the facepoints - for (final Polygon face : this.mesh.faces) + for (final Polygon face : this.mesh.faces) { this.facePoints.put(face, this.getFacePoint(face)); + } // Filling the edgepoints - for (final Edge edge : this.mesh.edges) + for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); + } // Get the new vertices - for (final Point p : this.mesh.points) + for (final Point p : this.mesh.points) { this.newVertices.put(p, this.getNewVertex(p)); + } - final MyHashSet set = new MyHashSet(); - for (final Polygon face : this.mesh.faces) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon face : this.mesh.faces) { set.addAll(this.getNewFaces(face)); + } System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } private MyHashSet getNewFaces(final Polygon face) { - if (face.getPoints().size() < 3) + if (face.getPoints().size() < 3) { throw new RuntimeException("Invalid polygon!"); + } final Point[] points = face.getPoints().toArray(new Point[0]); - final MyHashSet retVal = new MyHashSet(); - for (final Point p : points) + final MyHashSet retVal = new MyHashSet<>(); + for (final Point p : points) { retVal.add(this.getNewFaceForVertex(face, p)); + } return retVal; } private Polygon getNewFaceForVertex(final Polygon face, final Point p) { - if (!face.isVertex(p)) + if (!face.isVertex(p)) { throw new RuntimeException("Invalid vertex!"); + } - final ArrayList incidentEdges = new ArrayList(); - for (final Edge e : face.getEdges()) - if (e.isEnd(p)) + final ArrayList incidentEdges = new ArrayList<>(); + for (final Edge e : face.getEdges()) { + if (e.isEnd(p)) { incidentEdges.add(e); + } + } - if (incidentEdges.size() != 2) + if (incidentEdges.size() != 2) { throw new RuntimeException("Invalid vertex!"); + } final Point a = this.newVertices.get(p); final Point b = this.edgePoints.get(incidentEdges.get(0)); final Point c = this.facePoints.get(face); final Point d = this.edgePoints.get(incidentEdges.get(1)); - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); points.add(a); points.add(b); points.add(c); diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java index 85d9f25..808785f 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java @@ -26,42 +26,44 @@ public FaceVertex(final Point vertex, final Polygon face) { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + (this.face == null ? 0 : this.face.hashCode()); - result = prime * result - + (this.vertex == null ? 0 : this.vertex.hashCode()); + result = prime * result + (this.face == null ? 0 : this.face.hashCode()); + result = prime * result + (this.vertex == null ? 0 : this.vertex.hashCode()); return result; } @Override public boolean equals(final Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) - return false; - if (this.getClass() != obj.getClass()) + } + if ((obj == null) || (this.getClass() != obj.getClass())) { return false; + } final FaceVertex other = (FaceVertex) obj; if (this.face == null) { - if (other.face != null) + if (other.face != null) { return false; - } else if (!this.face.equals(other.face)) + } + } else if (!this.face.equals(other.face)) { return false; + } if (this.vertex == null) { - if (other.vertex != null) + if (other.vertex != null) { return false; - } else if (!this.vertex.equals(other.vertex)) + } + } else if (!this.vertex.equals(other.vertex)) { return false; + } return true; } } - private final HashMap facePoints = new HashMap(); + private final HashMap facePoints = new HashMap<>(); - private final HashMap edgePoints = new HashMap(); + private final HashMap edgePoints = new HashMap<>(); - private final HashMap newVertices = new HashMap(); + private final HashMap newVertices = new HashMap<>(); public DooSabinAlgorithm(final PolygonMesh mesh) { super(mesh); @@ -71,12 +73,15 @@ public DooSabinAlgorithm(final PolygonMesh mesh) { } private Point getNewVertex(final Point p, final Polygon face) { - final MyHashSet edges = new MyHashSet(); - for (final Edge e : face.getEdges()) - if (e.isEnd(p)) + final MyHashSet edges = new MyHashSet<>(); + for (final Edge e : face.getEdges()) { + if (e.isEnd(p)) { edges.add(e); - if (edges.size() != 2) + } + } + if (edges.size() != 2) { throw new RuntimeException("edges.size() != 2"); + } final Edge[] edgeArr = edges.toArray(new Edge[0]); final Point a = p; final Point b = this.edgePoints.get(edgeArr[0]); @@ -89,8 +94,9 @@ private Point getNewVertex(final Point p, final Polygon face) { private Point getFacePoint(final Polygon face) { Point retVal = new Point(); - for (final Point p : face.getPoints()) + for (final Point p : face.getPoints()) { retVal = retVal.add(p); + } retVal = retVal.times(1.0f / face.getPoints().size()); return retVal; } @@ -104,38 +110,44 @@ public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the facepoints - for (final Polygon face : this.mesh.faces) + for (final Polygon face : this.mesh.faces) { this.facePoints.put(face, this.getFacePoint(face)); + } // Filling the edgepoints - for (final Edge edge : this.mesh.edges) + for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); + } // Get the new vertices - for (final Polygon face : this.mesh.faces) + for (final Polygon face : this.mesh.faces) { for (final Point p : face.getPoints()) { final FaceVertex fv = new FaceVertex(p, face); final Point pt = this.getNewVertex(p, face); this.newVertices.put(fv, pt); } + } - final MyHashSet set = new MyHashSet(); + final MyHashSet set = new MyHashSet<>(); - for (final Polygon face : this.mesh.faces) + for (final Polygon face : this.mesh.faces) { set.add(this.getNewFFace(face)); + } - for (final Edge edge : this.mesh.edges) + for (final Edge edge : this.mesh.edges) { set.add(this.getNewEFace(edge)); + } - for (final Point vertex : this.mesh.points) + for (final Point vertex : this.mesh.points) { set.add(this.getNewVFace(vertex)); + } System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } private Polygon getNewFFace(final Polygon face) { - final MyHashSet points = new MyHashSet(); + final MyHashSet points = new MyHashSet<>(); for (final Point p : face.getPoints()) { final FaceVertex fv = new FaceVertex(p, face); points.add(this.newVertices.get(fv)); @@ -153,7 +165,7 @@ private Polygon getNewFFace(final Polygon face) { // } private Polygon getNewEFace(final Edge edge) { - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); final MyHashSet ends = edge.getEnds(); final Point[] endsArr = ends.toArray(new Point[0]); @@ -161,8 +173,9 @@ private Polygon getNewEFace(final Edge edge) { final Point end1 = endsArr[1]; final MyHashSet faces = this.mesh.edgeFaces.get(edge); - if (faces.size() != 2) + if (faces.size() != 2) { throw new RuntimeException("faces.size() != 2"); + } final Polygon[] facesArr = faces.toArray(new Polygon[0]); final Polygon face0 = facesArr[0]; final Polygon face1 = facesArr[1]; @@ -176,7 +189,7 @@ private Polygon getNewEFace(final Edge edge) { } private Polygon getNewVFace(final Point vertex) { - final MyHashSet points = new MyHashSet(); + final MyHashSet points = new MyHashSet<>(); for (final Polygon face : this.mesh.pointFaces.get(vertex)) { final FaceVertex fv = new FaceVertex(vertex, face); points.add(this.newVertices.get(fv)); diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java index 2562258..9ee2dac 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java @@ -12,29 +12,29 @@ public class LoopAlgorithm extends AbstractSubdivisionAlgorithm { - private final HashMap edgePoints = new HashMap(); + private final HashMap edgePoints = new HashMap<>(); - private final HashMap newVertices = new HashMap(); + private final HashMap newVertices = new HashMap<>(); public LoopAlgorithm(final PolygonMesh mesh) { super(mesh); if (!mesh.hasOnlyTriangles()) { - System.out - .println("\tmesh is not composed of only triangles! Triangulating mesh."); + System.out.println("\tmesh is not composed of only triangles! Triangulating mesh."); this.mesh = mesh.triangulate(); } - if (mesh.faces.size() <= 1) + if (mesh.faces.size() <= 1) { throw new RuntimeException("mesh mush have > 1 triangle!"); + } this.edgePoints.clear(); this.newVertices.clear(); } private static float s(final int n) { - if (n < 3) + if (n < 3) { throw new IllegalArgumentException("n must be >= 3"); - else if (n == 3) + } else if (n == 3) { return 3.0f / 16; - else { + } else { float a = (float) Math.cos(2.0f * Math.PI / n); a = 1.0f / 4 * a + 3.0f / 8; a = 5.0f / 8 - a * a; @@ -45,29 +45,33 @@ else if (n == 3) private Point getEdgePoint(final Edge edge) { final MyHashSet polySet = this.mesh.edgeFaces.get(edge); - final MyHashSet points = new MyHashSet(); - for (final Polygon poly : polySet) + final MyHashSet points = new MyHashSet<>(); + for (final Polygon poly : polySet) { points.addAll(poly.getPoints()); + } points.removeAll(edge.getEnds()); Point a = edge.midPoint(); a = a.times(3.0f / 4); Point b = new Point(); - for (final Point p : points) + for (final Point p : points) { b = b.add(p); + } b = b.times(1.0f / 8); return a.add(b); } private Point getNewVertex(final Point p) { final MyHashSet edges = this.mesh.pointEdges.get(p); - final MyHashSet points = new MyHashSet(); - for (final Edge e : edges) + final MyHashSet points = new MyHashSet<>(); + for (final Edge e : edges) { points.addAll(e.getEnds()); + } points.remove(p); final int n = points.size(); Point sumNeighbour = new Point(); - for (final Point pt : points) + for (final Point pt : points) { sumNeighbour = sumNeighbour.add(pt); + } final float s = LoopAlgorithm.s(n); Point retVal = p.times(1.0f - n * s); @@ -80,48 +84,57 @@ public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the edgepoints - for (final Edge edge : this.mesh.edges) + for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); + } // Get the new vertices - for (final Point p : this.mesh.points) + for (final Point p : this.mesh.points) { this.newVertices.put(p, this.getNewVertex(p)); + } - final MyHashSet set = new MyHashSet(); - for (final Polygon face : this.mesh.faces) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon face : this.mesh.faces) { set.addAll(this.getNewFaces(face)); + } System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } private MyHashSet getNewFaces(final Polygon face) { - if (face.getPoints().size() != 3) + if (face.getPoints().size() != 3) { throw new RuntimeException("Invalid polygon!"); - final MyHashSet retVal = new MyHashSet(); - for (final Point p : face.getPoints()) + } + final MyHashSet retVal = new MyHashSet<>(); + for (final Point p : face.getPoints()) { retVal.add(this.getNewFaceForVertex(face, p)); + } retVal.add(this.getNewFaceForFace(face)); return retVal; } private Polygon getNewFaceForVertex(final Polygon face, final Point p) { - if (!face.isVertex(p)) + if (!face.isVertex(p)) { throw new RuntimeException("Invalid vertex!"); + } - final ArrayList incidentEdges = new ArrayList(); - for (final Edge e : face.getEdges()) - if (e.isEnd(p)) + final ArrayList incidentEdges = new ArrayList<>(); + for (final Edge e : face.getEdges()) { + if (e.isEnd(p)) { incidentEdges.add(e); + } + } - if (incidentEdges.size() != 2) + if (incidentEdges.size() != 2) { throw new RuntimeException("Invalid vertex!"); + } final Point a = this.newVertices.get(p); final Point b = this.edgePoints.get(incidentEdges.get(0)); final Point c = this.edgePoints.get(incidentEdges.get(1)); - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); points.add(a); points.add(b); points.add(c); @@ -131,15 +144,16 @@ private Polygon getNewFaceForVertex(final Polygon face, final Point p) { private Polygon getNewFaceForFace(final Polygon face) { final MyHashSet edges = face.getEdges(); - if (edges.size() != 3) + if (edges.size() != 3) { throw new RuntimeException("Invalid face!"); + } final Edge[] edgeArr = edges.toArray(new Edge[0]); final Point a = this.edgePoints.get(edgeArr[0]); final Point b = this.edgePoints.get(edgeArr[1]); final Point c = this.edgePoints.get(edgeArr[2]); - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); points.add(a); points.add(b); points.add(c); diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java index abc244d..ef755d1 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java @@ -11,7 +11,7 @@ public class MidpointAlgorithm extends AbstractSubdivisionAlgorithm { - private final HashMap edgePoints = new HashMap(); + private final HashMap edgePoints = new HashMap<>(); public MidpointAlgorithm(final PolygonMesh mesh) { super(mesh); @@ -27,16 +27,19 @@ public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the edgepoints - for (final Edge edge : this.mesh.edges) + for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); + } - final MyHashSet set = new MyHashSet(); - for (final Polygon face : this.mesh.faces) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon face : this.mesh.faces) { set.add(this.getNewFaceForFace(face)); + } for (final Point point : this.mesh.points) { final Polygon newFace = this.getNewFaceForVertex(point); - if (newFace != null) + if (newFace != null) { set.add(newFace); + } } System.out.println("\tOutput set has " + set.size() + " faces.\n"); @@ -44,12 +47,14 @@ public MyHashSet run() { } private Polygon getNewFaceForFace(final Polygon face) { - if (face.getPoints().size() < 3) + if (face.getPoints().size() < 3) { throw new RuntimeException("Invalid polygon!"); + } - final MyHashSet points = new MyHashSet(); - for (final Edge e : face.getEdges()) + final MyHashSet points = new MyHashSet<>(); + for (final Edge e : face.getEdges()) { points.add(this.edgePoints.get(e)); + } return PolygonFactory.fromPointsConvex(points); } @@ -64,17 +69,21 @@ private Polygon getNewFaceForFace(final Polygon face) { // } private Polygon getNewFaceForVertex(final Point p) { - if (!this.mesh.points.contains(p)) + if (!this.mesh.points.contains(p)) { throw new RuntimeException("Invalid vertex!"); + } final MyHashSet edges = this.mesh.pointEdges.get(p); - if (edges.size() < 3) + if (edges.size() < 3) { return null; + } - final MyHashSet points = new MyHashSet(); - for (final Edge e : edges) - if (e.isEnd(p)) + final MyHashSet points = new MyHashSet<>(); + for (final Edge e : edges) { + if (e.isEnd(p)) { points.add(this.edgePoints.get(e)); + } + } return PolygonFactory.fromPointsConvex(points); } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java index 31c4745..5e07d96 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java @@ -12,15 +12,14 @@ public class Root3Algorithm extends AbstractSubdivisionAlgorithm { - private final HashMap facePoints = new HashMap(); + private final HashMap facePoints = new HashMap<>(); - private final HashMap newVertices = new HashMap(); + private final HashMap newVertices = new HashMap<>(); public Root3Algorithm(final PolygonMesh mesh) { super(mesh); if (!mesh.hasOnlyTriangles()) { - System.out - .println("\tmesh is not composed of only triangles! Triangulating mesh."); + System.out.println("\tmesh is not composed of only triangles! Triangulating mesh."); this.mesh = mesh.triangulate(); } this.facePoints.clear(); @@ -28,9 +27,9 @@ public Root3Algorithm(final PolygonMesh mesh) { } private static float a(final int n) { - if (n <= 0) + if (n <= 0) { throw new IllegalArgumentException("n must be > 0"); - else { + } else { float a = 2.0f - (float) Math.cos(2.0f * Math.PI / n); a *= 2.0f / 9; return a; @@ -39,24 +38,28 @@ private static float a(final int n) { private Point getFacePoint(final Polygon face) { Point sum = new Point(); - for (final Point p : face.getPoints()) + for (final Point p : face.getPoints()) { sum = sum.add(p); + } sum = sum.times(1.0f / face.getPoints().size()); return sum; } private Point getNewVertex(final Point p) { - if (!this.mesh.points.contains(p)) + if (!this.mesh.points.contains(p)) { throw new RuntimeException("Invalid vertex!"); + } - final MyHashSet neighbours = new MyHashSet(); - for (final Edge e : this.mesh.pointEdges.get(p)) + final MyHashSet neighbours = new MyHashSet<>(); + for (final Edge e : this.mesh.pointEdges.get(p)) { neighbours.addAll(e.getEnds()); + } neighbours.remove(p); Point b = new Point(); - for (final Point pt : neighbours) + for (final Point pt : neighbours) { b = b.add(pt); + } final int n = neighbours.size(); final float a = Root3Algorithm.a(n); return p.times(1.0f - a).add(b.times(a / n)); @@ -67,14 +70,16 @@ public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the facepoints - for (final Polygon face : this.mesh.faces) + for (final Polygon face : this.mesh.faces) { this.facePoints.put(face, this.getFacePoint(face)); + } // Get the new vertices - for (final Point p : this.mesh.points) + for (final Point p : this.mesh.points) { this.newVertices.put(p, this.getNewVertex(p)); + } - final MyHashSet set = new MyHashSet(); + final MyHashSet set = new MyHashSet<>(); for (final Polygon face : this.mesh.faces) { final MyHashSet newFaces = this.getNewFaces(face); set.addAll(newFaces); @@ -85,36 +90,39 @@ public MyHashSet run() { } private MyHashSet getNewFaces(final Polygon face) { - if (face.getPoints().size() != 3) + if (face.getPoints().size() != 3) { throw new RuntimeException("Invalid polygon!"); + } - final MyHashSet retVal = new MyHashSet(); - for (final Edge edge : face.getEdges()) + final MyHashSet retVal = new MyHashSet<>(); + for (final Edge edge : face.getEdges()) { retVal.addAll(this.getNewFacesForEdge(face, edge)); + } return retVal; } - private MyHashSet getNewFacesForEdge(final Polygon face, - final Edge edge) { - if (!face.isEdge(edge)) + private MyHashSet getNewFacesForEdge(final Polygon face, final Edge edge) { + if (!face.isEdge(edge)) { throw new RuntimeException("Invalid edge!"); + } - final MyHashSet retVal = new MyHashSet(); + final MyHashSet retVal = new MyHashSet<>(); final MyHashSet faces = this.mesh.edgeFaces.get(edge); faces.remove(face); final Point[] ends = edge.getEnds().toArray(new Point[0]); - for (final Polygon f : faces) + for (final Polygon f : faces) { for (final Point end : ends) { final Point a = this.facePoints.get(face); final Point b = this.newVertices.get(end); final Point c = this.facePoints.get(f); - final ArrayList points = new ArrayList(); + final ArrayList points = new ArrayList<>(); points.add(a); points.add(b); points.add(c); retVal.add(PolygonFactory.fromOrderedPoints(points)); } + } return retVal; } diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java index 5e11176..b369755 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java @@ -13,9 +13,10 @@ public TriangulateAlgorithm(final PolygonMesh mesh) { @Override public MyHashSet run() { System.out.println("\tInput mesh has " + this.mesh.describe()); - final MyHashSet set = new MyHashSet(); - for (final Polygon face : this.mesh.faces) + final MyHashSet set = new MyHashSet<>(); + for (final Polygon face : this.mesh.faces) { set.addAll(face.triangulateCentroid()); + } System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } From 47f5fe72ecb0dfc98538def8bc66a5c74044c53c Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Tue, 7 Mar 2023 15:45:51 +0000 Subject: [PATCH 3/6] rename package --- SubdivisionSurfaces/src/SubD.java | 22 +-- .../{basic => subdivisionsurfaces}/Color.java | 2 +- .../ConvexHull.java | 4 +- .../InputFile.java | 2 +- .../MyHashSet.java | 2 +- .../{basic => subdivisionsurfaces}/Point.java | 2 +- .../Polygon.java | 185 +++++++++--------- .../PolygonFactory.java | 4 +- .../PolygonMesh.java | 4 +- .../Triple.java | 2 +- .../Vector.java | 2 +- .../algo/AbstractSubdivisionAlgorithm.java | 8 +- .../algo/CatmullClarkAlgorithm.java | 14 +- .../algo/DooSabinAlgorithm.java | 14 +- .../algo/LoopAlgorithm.java | 14 +- .../algo/MidpointAlgorithm.java | 14 +- .../algo/Root3Algorithm.java | 14 +- .../algo/TriangulateAlgorithm.java | 8 +- 18 files changed, 159 insertions(+), 158 deletions(-) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/Color.java (90%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/ConvexHull.java (97%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/InputFile.java (96%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/MyHashSet.java (96%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/Point.java (95%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/Polygon.java (95%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/PolygonFactory.java (98%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/PolygonMesh.java (96%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/Triple.java (97%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/Vector.java (97%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/AbstractSubdivisionAlgorithm.java (53%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/CatmullClarkAlgorithm.java (93%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/DooSabinAlgorithm.java (94%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/LoopAlgorithm.java (92%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/MidpointAlgorithm.java (88%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/Root3Algorithm.java (90%) rename SubdivisionSurfaces/src/com/sweta/{basic => subdivisionsurfaces}/algo/TriangulateAlgorithm.java (72%) diff --git a/SubdivisionSurfaces/src/SubD.java b/SubdivisionSurfaces/src/SubD.java index 6f05f21..d37911a 100644 --- a/SubdivisionSurfaces/src/SubD.java +++ b/SubdivisionSurfaces/src/SubD.java @@ -4,17 +4,17 @@ import java.io.IOException; import java.text.ParseException; -import com.sweta.basic.InputFile; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Polygon; -import com.sweta.basic.PolygonMesh; -import com.sweta.basic.algo.AbstractSubdivisionAlgorithm; -import com.sweta.basic.algo.CatmullClarkAlgorithm; -import com.sweta.basic.algo.DooSabinAlgorithm; -import com.sweta.basic.algo.LoopAlgorithm; -import com.sweta.basic.algo.MidpointAlgorithm; -import com.sweta.basic.algo.Root3Algorithm; -import com.sweta.basic.algo.TriangulateAlgorithm; +import com.sweta.subdivisionsurfaces.InputFile; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.algo.AbstractSubdivisionAlgorithm; +import com.sweta.subdivisionsurfaces.algo.CatmullClarkAlgorithm; +import com.sweta.subdivisionsurfaces.algo.DooSabinAlgorithm; +import com.sweta.subdivisionsurfaces.algo.LoopAlgorithm; +import com.sweta.subdivisionsurfaces.algo.MidpointAlgorithm; +import com.sweta.subdivisionsurfaces.algo.Root3Algorithm; +import com.sweta.subdivisionsurfaces.algo.TriangulateAlgorithm; public class SubD { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Color.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Color.java similarity index 90% rename from SubdivisionSurfaces/src/com/sweta/basic/Color.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Color.java index 44f2072..6d974ba 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Color.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Color.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; public class Color extends Triple { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java similarity index 97% rename from SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java index 37822bd..a271722 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/ConvexHull.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java @@ -1,9 +1,9 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.util.ArrayList; import java.util.Arrays; -import com.sweta.basic.Polygon.Edge; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class ConvexHull { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/InputFile.java similarity index 96% rename from SubdivisionSurfaces/src/com/sweta/basic/InputFile.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/InputFile.java index edb4bc2..b42470b 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/InputFile.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/InputFile.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.io.BufferedReader; import java.io.File; diff --git a/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/MyHashSet.java similarity index 96% rename from SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/MyHashSet.java index 7ffd32c..35fdf58 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/MyHashSet.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/MyHashSet.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.util.HashSet; import java.util.Iterator; diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Point.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Point.java similarity index 95% rename from SubdivisionSurfaces/src/com/sweta/basic/Point.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Point.java index c4c6569..40c49bd 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Point.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Point.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; public class Point extends Triple { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java similarity index 95% rename from SubdivisionSurfaces/src/com/sweta/basic/Polygon.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java index 474fbd6..0cef33a 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Polygon.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java @@ -1,89 +1,11 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; public class Polygon { - public static class Edge implements Comparable { - - private final MyHashSet ends = new MyHashSet<>(); - - public Edge(final Point endA, final Point endB) { - if (endA == null || endB == null) { - throw new NullPointerException(); - } - if (endA.equals(endB)) { - throw new IllegalArgumentException("Invalid edge! endA=" + endA.toString() + " endB=" + endB.toString()); - } - this.ends.add(endA); - this.ends.add(endB); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (this.ends == null ? 0 : this.ends.hashCode()); - return result; - } - - @Override - public String toString() { - return "Edge [ends=" + this.ends.toString() + "]"; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (this.getClass() != obj.getClass())) { - return false; - } - final Edge other = (Edge) obj; - if (this.ends == null) { - if (other.ends != null) { - return false; - } - } else if (!this.ends.equals(other.ends)) { - return false; - } - return true; - } - - public MyHashSet getEnds() { - return this.ends; - } - - public float length() { - final Point[] ends = this.ends.toArray(new Point[0]); - return new Vector(ends[0], ends[1]).length(); - } - - public Point midPoint() { - final Object[] arr = this.ends.toArray(); - return Point.linearCombination((Point) arr[0], (Point) arr[1], 0.5f); - } - - public boolean isEnd(final Point p) { - final Object[] arr = this.ends.toArray(); - if (p.equals(arr[0]) || p.equals(arr[1])) { - return true; - } - return false; - } - - @Override - public int compareTo(final Edge o) { - return Float.compare(this.length(), o.length()); - } - - public boolean meets(final Edge other) { - return this.ends.intersection(other.ends).size() > 0; - } - } - private final ArrayList points = new ArrayList<>(); private final MyHashSet edges = new MyHashSet<>(); @@ -92,7 +14,7 @@ public boolean meets(final Edge other) { private final Color color; - public Polygon(final ArrayList argPoints, final MyHashSet argEdges, final Vector argNormal, final Color argColor) { + public Polygon(final List argPoints, final MyHashSet argEdges, final Vector argNormal, final Color argColor) { if (argPoints == null || argEdges == null || argNormal == null) { throw new NullPointerException("Non-null normal and sets of points and edges required!"); } @@ -168,6 +90,22 @@ private static MyHashSet validateEdges(final MyHashSet edges) { return points; } + public MyHashSet getEdges() { + return this.edges; + } + + public List getPoints() { + return this.points; + } + + public MyHashSet triangulateCentroid() { + return PolygonFactory.triangulateCentroid(this.points, this.color); + } + + public MyHashSet triangulateFan() { + return PolygonFactory.triangulateFan(this.points, this.color); + } + @Override public String toString() { final Vector n = this.normal; @@ -219,20 +157,83 @@ public boolean equals(final Object obj) { return true; } - public MyHashSet getEdges() { - return this.edges; - } + public static class Edge implements Comparable { + + private final MyHashSet ends = new MyHashSet<>(); + + public Edge(final Point endA, final Point endB) { + if (endA == null || endB == null) { + throw new NullPointerException(); + } + if (endA.equals(endB)) { + throw new IllegalArgumentException("Invalid edge! endA=" + endA.toString() + " endB=" + endB.toString()); + } + this.ends.add(endA); + this.ends.add(endB); + } + + public MyHashSet getEnds() { + return this.ends; + } + + public float length() { + final Point[] ends = this.ends.toArray(new Point[0]); + return new Vector(ends[0], ends[1]).length(); + } + + public Point midPoint() { + final Object[] arr = this.ends.toArray(); + return Point.linearCombination((Point) arr[0], (Point) arr[1], 0.5f); + } + + public boolean isEnd(final Point p) { + final Object[] arr = this.ends.toArray(); + if (p.equals(arr[0]) || p.equals(arr[1])) { + return true; + } + return false; + } + + public boolean meets(final Edge other) { + return !this.ends.intersection(other.ends).isEmpty(); + } - public ArrayList getPoints() { - return this.points; - } + @Override + public int compareTo(final Edge o) { + return Float.compare(this.length(), o.length()); + } - public MyHashSet triangulateCentroid() { - return PolygonFactory.triangulateCentroid(this.points, this.color); - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (this.ends == null ? 0 : this.ends.hashCode()); + return result; + } - public MyHashSet triangulateFan() { - return PolygonFactory.triangulateFan(this.points, this.color); + @Override + public String toString() { + return "Edge [ends=" + this.ends.toString() + "]"; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if ((obj == null) || (this.getClass() != obj.getClass())) { + return false; + } + final Edge other = (Edge) obj; + if (this.ends == null) { + if (other.ends != null) { + return false; + } + } else if (!this.ends.equals(other.ends)) { + return false; + } + return true; + } } } \ No newline at end of file diff --git a/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java similarity index 98% rename from SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java index 020c537..2986a89 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/PolygonFactory.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java @@ -1,8 +1,8 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.util.ArrayList; -import com.sweta.basic.Polygon.Edge; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class PolygonFactory { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java similarity index 96% rename from SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java index 7216517..8f8b216 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java @@ -1,10 +1,10 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; import java.util.HashMap; import java.util.Map; import java.util.Set; -import com.sweta.basic.Polygon.Edge; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class PolygonMesh { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Triple.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java similarity index 97% rename from SubdivisionSurfaces/src/com/sweta/basic/Triple.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java index 4f10422..937d39d 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Triple.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; public class Triple { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/Vector.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Vector.java similarity index 97% rename from SubdivisionSurfaces/src/com/sweta/basic/Vector.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Vector.java index 896f9f1..f3107f5 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/Vector.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Vector.java @@ -1,4 +1,4 @@ -package com.sweta.basic; +package com.sweta.subdivisionsurfaces; public class Vector extends Triple { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/AbstractSubdivisionAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java similarity index 53% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/AbstractSubdivisionAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java index 2474363..96839fe 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/AbstractSubdivisionAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java @@ -1,8 +1,8 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Polygon; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonMesh; public abstract class AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java similarity index 93% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java index d472895..0be2538 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/CatmullClarkAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java @@ -1,14 +1,14 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; import java.util.ArrayList; import java.util.HashMap; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Point; -import com.sweta.basic.Polygon; -import com.sweta.basic.Polygon.Edge; -import com.sweta.basic.PolygonFactory; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Point; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonFactory; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class CatmullClarkAlgorithm extends AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java similarity index 94% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java index 808785f..6094bb7 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/DooSabinAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java @@ -1,14 +1,14 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; import java.util.ArrayList; import java.util.HashMap; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Point; -import com.sweta.basic.Polygon; -import com.sweta.basic.Polygon.Edge; -import com.sweta.basic.PolygonFactory; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Point; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonFactory; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class DooSabinAlgorithm extends AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java similarity index 92% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java index 9ee2dac..b722802 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/LoopAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java @@ -1,14 +1,14 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; import java.util.ArrayList; import java.util.HashMap; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Point; -import com.sweta.basic.Polygon; -import com.sweta.basic.Polygon.Edge; -import com.sweta.basic.PolygonFactory; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Point; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonFactory; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class LoopAlgorithm extends AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java similarity index 88% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java index ef755d1..0d7b546 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/MidpointAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java @@ -1,13 +1,13 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; import java.util.HashMap; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Point; -import com.sweta.basic.Polygon; -import com.sweta.basic.Polygon.Edge; -import com.sweta.basic.PolygonFactory; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Point; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonFactory; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class MidpointAlgorithm extends AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java similarity index 90% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java index 5e07d96..bbafdf5 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/Root3Algorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java @@ -1,14 +1,14 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; import java.util.ArrayList; import java.util.HashMap; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Point; -import com.sweta.basic.Polygon; -import com.sweta.basic.Polygon.Edge; -import com.sweta.basic.PolygonFactory; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Point; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonFactory; +import com.sweta.subdivisionsurfaces.PolygonMesh; +import com.sweta.subdivisionsurfaces.Polygon.Edge; public class Root3Algorithm extends AbstractSubdivisionAlgorithm { diff --git a/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java similarity index 72% rename from SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java rename to SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java index b369755..470c361 100644 --- a/SubdivisionSurfaces/src/com/sweta/basic/algo/TriangulateAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java @@ -1,8 +1,8 @@ -package com.sweta.basic.algo; +package com.sweta.subdivisionsurfaces.algo; -import com.sweta.basic.MyHashSet; -import com.sweta.basic.Polygon; -import com.sweta.basic.PolygonMesh; +import com.sweta.subdivisionsurfaces.MyHashSet; +import com.sweta.subdivisionsurfaces.Polygon; +import com.sweta.subdivisionsurfaces.PolygonMesh; public class TriangulateAlgorithm extends AbstractSubdivisionAlgorithm { From 4f9c9d86470ab955c6dad0a60792b6d49c8f9e05 Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Tue, 7 Mar 2023 15:50:42 +0000 Subject: [PATCH 4/6] modify pom. delete SubD.java --- SubdivisionSurfaces/pom.xml | 86 ++++++++---- SubdivisionSurfaces/src/SubD.java | 126 ------------------ .../subdivisionsurfaces/PolygonMesh.java | 5 - .../algo/AbstractSubdivisionAlgorithm.java | 5 +- 4 files changed, 62 insertions(+), 160 deletions(-) delete mode 100644 SubdivisionSurfaces/src/SubD.java diff --git a/SubdivisionSurfaces/pom.xml b/SubdivisionSurfaces/pom.xml index 887fe4b..829602f 100644 --- a/SubdivisionSurfaces/pom.xml +++ b/SubdivisionSurfaces/pom.xml @@ -1,28 +1,60 @@ - - 4.0.0 - com.sweta - subdivisionsurfaces - 0.0.1-SNAPSHOT - Subdivision Surfaces - Implementations of subdivision surfaces using - Catmull-Clark, Doo-Sabin , Loop, Root 3 and Midpoint subdivision schemes - - src - - - src - - **/*.java - - - - - - maven-compiler-plugin - 3.8.1 - - 8 - - - - + + 4.0.0 + com.sweta + subdivisionsurfaces + 1.0.0 + Subdivision Surfaces + Implementations of subdivision surfaces using Catmull-Clark, Doo-Sabin, Loop, Root 3 and Midpoint subdivision schemes + + src + + + src + + **/*.java + + + + + + maven-compiler-plugin + 3.8.1 + + 8 + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + deploy + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + false + + + + attach-javadocs + + jar + + + + + + \ No newline at end of file diff --git a/SubdivisionSurfaces/src/SubD.java b/SubdivisionSurfaces/src/SubD.java deleted file mode 100644 index d37911a..0000000 --- a/SubdivisionSurfaces/src/SubD.java +++ /dev/null @@ -1,126 +0,0 @@ -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.text.ParseException; - -import com.sweta.subdivisionsurfaces.InputFile; -import com.sweta.subdivisionsurfaces.MyHashSet; -import com.sweta.subdivisionsurfaces.Polygon; -import com.sweta.subdivisionsurfaces.PolygonMesh; -import com.sweta.subdivisionsurfaces.algo.AbstractSubdivisionAlgorithm; -import com.sweta.subdivisionsurfaces.algo.CatmullClarkAlgorithm; -import com.sweta.subdivisionsurfaces.algo.DooSabinAlgorithm; -import com.sweta.subdivisionsurfaces.algo.LoopAlgorithm; -import com.sweta.subdivisionsurfaces.algo.MidpointAlgorithm; -import com.sweta.subdivisionsurfaces.algo.Root3Algorithm; -import com.sweta.subdivisionsurfaces.algo.TriangulateAlgorithm; - -public class SubD { - - private enum Algos { - TRIANGULATE("Triangulate"), // - CATMULL_CLARK("Catmull-Clark"), // - DOO_SABIN("Doo-Sabin"), // - MIDPOINT("Midpoint"), // - LOOP("Loop"), // - ROOT3("√3"); // - - final String name; - - Algos(final String name) { - this.name = name; - } - - } - - public static void main(final String[] args) { - final Algos algo; - - if (args.length != 4) { - System.out.println("4 args expected!\n"); - return; - } - - final String algoString = args[2]; - if (algoString.equalsIgnoreCase("T")) { - algo = Algos.TRIANGULATE; - } else if (algoString.equalsIgnoreCase("C")) { - algo = Algos.CATMULL_CLARK; - } else if (algoString.equalsIgnoreCase("D")) { - algo = Algos.DOO_SABIN; - } else if (algoString.equalsIgnoreCase("M")) { - algo = Algos.MIDPOINT; - } else if (algoString.equalsIgnoreCase("L")) { - algo = Algos.LOOP; - } else if (algoString.equalsIgnoreCase("R")) { - algo = Algos.ROOT3; - } else { - System.out.println("Invalid algorithm selection!"); - return; - } - - final String inputFilePath = args[0]; - System.out.println("\nReading input file '" + inputFilePath + "' ..."); - InputFile inFile = null; - try { - inFile = new InputFile(inputFilePath); - } catch (final ParseException | IOException e) { - e.printStackTrace(); - return; - } - final int n = inFile.polygons.size(); - System.out.println("Input file has " + n + " polygons."); - - System.out.println("Using " + algo.name + " subdivision algorithm."); - - final int level = Integer.parseInt(args[3]); - System.out.println("Using subdivision level = " + level); - - final String outputFilePath = args[1]; - System.out.println("Writing to output file '" + outputFilePath + "' ...\n"); - final File outFile = new File(outputFilePath); - - try { - final BufferedWriter bw = new BufferedWriter(new FileWriter(outFile)); - - MyHashSet polySet = new MyHashSet<>(); - polySet.addAll(inFile.polygons); - - for (int i = 1; i <= level; i++) { - System.out.println("\tRunning subdivision level " + i); - final PolygonMesh mesh = new PolygonMesh(polySet); - - AbstractSubdivisionAlgorithm algorithm = null; - if (algo == Algos.TRIANGULATE) { - algorithm = new TriangulateAlgorithm(mesh); - } else if (algo == Algos.CATMULL_CLARK) { - algorithm = new CatmullClarkAlgorithm(mesh); - } else if (algo == Algos.DOO_SABIN) { - algorithm = new DooSabinAlgorithm(mesh); - } else if (algo == Algos.MIDPOINT) { - algorithm = new MidpointAlgorithm(mesh); - } else if (algo == Algos.LOOP) { - algorithm = new LoopAlgorithm(mesh); - } else if (algo == Algos.ROOT3) { - algorithm = new Root3Algorithm(mesh); - } - - polySet = algorithm.run(); - } - - for (final Polygon poly : polySet) { - bw.append(poly.toString()); - bw.append("\n"); - } - - bw.close(); - System.out.println("Done.\n"); - - } catch (final IOException e) { - e.printStackTrace(); - return; - } - - } -} diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java index 8f8b216..3e9b085 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java @@ -9,15 +9,10 @@ public class PolygonMesh { public final MyHashSet faces = new MyHashSet<>(); - public final MyHashSet edges = new MyHashSet<>(); - public final MyHashSet points = new MyHashSet<>(); - public final Map> pointFaces = new HashMap<>(); - public final Map> edgeFaces = new HashMap<>(); - public final Map> pointEdges = new HashMap<>(); public PolygonMesh(final Set polySet) { diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java index 96839fe..177121a 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/AbstractSubdivisionAlgorithm.java @@ -1,6 +1,7 @@ package com.sweta.subdivisionsurfaces.algo; -import com.sweta.subdivisionsurfaces.MyHashSet; +import java.util.Set; + import com.sweta.subdivisionsurfaces.Polygon; import com.sweta.subdivisionsurfaces.PolygonMesh; @@ -12,5 +13,5 @@ public AbstractSubdivisionAlgorithm(final PolygonMesh mesh) { this.mesh = mesh; } - public abstract MyHashSet run(); + public abstract Set run(); } From 4934ca42876a2db0ea1d6e16652b976ef634bcb8 Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Tue, 7 Mar 2023 16:16:47 +0000 Subject: [PATCH 5/6] remove print statements in algo run() more generic collection input types --- .../sweta/subdivisionsurfaces/ConvexHull.java | 17 ++++++++------- .../subdivisionsurfaces/PolygonFactory.java | 21 ++++++++++--------- .../subdivisionsurfaces/PolygonMesh.java | 4 ++-- .../algo/CatmullClarkAlgorithm.java | 2 -- .../algo/DooSabinAlgorithm.java | 3 --- .../algo/LoopAlgorithm.java | 5 +---- .../algo/MidpointAlgorithm.java | 5 +---- .../algo/Root3Algorithm.java | 3 --- .../algo/TriangulateAlgorithm.java | 2 -- 9 files changed, 24 insertions(+), 38 deletions(-) diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java index a271722..9ec84b8 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/ConvexHull.java @@ -2,12 +2,13 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import com.sweta.subdivisionsurfaces.Polygon.Edge; public class ConvexHull { - public static ArrayList getConvexHullOrderedPoints(final MyHashSet points) { + public static List getConvexHullOrderedPoints(final MyHashSet points) { final int n = points.size(); if (n == 3) { return ConvexHull.getConvexHullOrderedPointsTriangle(points); @@ -18,13 +19,13 @@ public static ArrayList getConvexHullOrderedPoints(final MyHashSet } } - private static ArrayList getConvexHullOrderedPointsTriangle(final MyHashSet points) { - final ArrayList retVal = new ArrayList<>(); + private static List getConvexHullOrderedPointsTriangle(final MyHashSet points) { + final List retVal = new ArrayList<>(); retVal.addAll(points); return retVal; } - private static ArrayList getConvexHullOrderedPointsQuad(final MyHashSet points) { + private static List getConvexHullOrderedPointsQuad(final MyHashSet points) { final Point[] pts = points.toArray(new Point[0]); final Edge[] edges = new Edge[6]; @@ -50,7 +51,7 @@ private static ArrayList getConvexHullOrderedPointsQuad(final MyHashSet

retVal = new ArrayList<>(); + final List retVal = new ArrayList<>(); retVal.add(diag1Pts[0]); retVal.add(diag2Pts[0]); retVal.add(diag1Pts[1]); @@ -58,7 +59,7 @@ private static ArrayList getConvexHullOrderedPointsQuad(final MyHashSet

getConvexHullEdges(final ArrayList points) { + public static MyHashSet getConvexHullEdges(final List points) { final int n = points.size(); if (n == 3) { return ConvexHull.getConvexHullEdgesTriangle(points); @@ -69,7 +70,7 @@ public static MyHashSet getConvexHullEdges(final ArrayList points) } } - private static MyHashSet getConvexHullEdgesTriangle(final ArrayList points) { + private static MyHashSet getConvexHullEdgesTriangle(final List points) { final MyHashSet retVal = new MyHashSet<>(); final Point[] pts = points.toArray(new Point[0]); retVal.add(new Edge(pts[0], pts[1])); @@ -78,7 +79,7 @@ private static MyHashSet getConvexHullEdgesTriangle(final ArrayList return retVal; } - private static MyHashSet getConvexHullEdgesQuad(final ArrayList points) { + private static MyHashSet getConvexHullEdgesQuad(final List points) { final Point[] pts = points.toArray(new Point[0]); final Edge[] edges = new Edge[6]; edges[0] = new Edge(pts[0], pts[1]); diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java index 2986a89..2aa443f 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java @@ -1,6 +1,7 @@ package com.sweta.subdivisionsurfaces; import java.util.ArrayList; +import java.util.List; import com.sweta.subdivisionsurfaces.Polygon.Edge; @@ -11,7 +12,7 @@ public static Polygon fromPointsConvex(final MyHashSet points) { } public static Polygon fromPointsConvex(final MyHashSet points, final Color color) { - final ArrayList pts = ConvexHull.getConvexHullOrderedPoints(points); + final List pts = ConvexHull.getConvexHullOrderedPoints(points); if (!PolygonFactory.validateInput(pts)) { throw new IllegalArgumentException("Invalid set of points!"); } @@ -24,11 +25,11 @@ public static Polygon fromPointsConvex(final MyHashSet points, final Colo return new Polygon(pts, edges, normal, color); } - public static Polygon fromOrderedPoints(final ArrayList points) { + public static Polygon fromOrderedPoints(final List points) { return PolygonFactory.fromOrderedPoints(points, Color.DEFAULT); } - private static Polygon fromOrderedPoints(final ArrayList points, final Color color) { + private static Polygon fromOrderedPoints(final List points, final Color color) { if (!PolygonFactory.validateInput(points)) { throw new IllegalArgumentException("Invalid set of points!"); } @@ -41,7 +42,7 @@ private static Polygon fromOrderedPoints(final ArrayList points, final Co return new Polygon(points, edges, normal, color); } - public static MyHashSet triangulateCentroid(final ArrayList points, final Color color) { + public static MyHashSet triangulateCentroid(final List points, final Color color) { if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); } @@ -59,14 +60,14 @@ public static MyHashSet triangulateCentroid(final ArrayList poin final Point[] pts = points.toArray(new Point[0]); for (int i = 0; i < pts.length - 1; i++) { - final ArrayList triPts = new ArrayList<>(); + final List triPts = new ArrayList<>(); triPts.add(centroid); triPts.add(pts[i]); triPts.add(pts[i + 1]); triangles.add(PolygonFactory.createTriangle(triPts, color)); } { - final ArrayList triPts = new ArrayList<>(); + final List triPts = new ArrayList<>(); triPts.add(centroid); triPts.add(pts[pts.length - 1]); triPts.add(pts[0]); @@ -76,14 +77,14 @@ public static MyHashSet triangulateCentroid(final ArrayList poin return triangles; } - public static MyHashSet triangulateFan(final ArrayList points, final Color color) { + public static MyHashSet triangulateFan(final List points, final Color color) { if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); } final MyHashSet triangles = new MyHashSet<>(); final Point[] pts = points.toArray(new Point[0]); for (int i = 1; i < pts.length - 1; i++) { - final ArrayList triPts = new ArrayList<>(); + final List triPts = new ArrayList<>(); triPts.add(pts[0]); triPts.add(pts[i]); triPts.add(pts[i + 1]); @@ -92,7 +93,7 @@ public static MyHashSet triangulateFan(final ArrayList points, f return triangles; } - public static Polygon createTriangle(final ArrayList points, final Color color) { + public static Polygon createTriangle(final List points, final Color color) { if (points.size() != 3) { throw new IllegalArgumentException("Invalid set of points!"); } @@ -108,7 +109,7 @@ public static Polygon createTriangle(final ArrayList points, final Color private static boolean PLANARITY_CHECKING = false; private static float PLANARITY_CHECKING_MAX_DOT_PRODUCT_SIZE = 1e-3f; - private static boolean validateInput(final ArrayList points) { + private static boolean validateInput(final List points) { if (points.size() < 3) { return false; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java index 3e9b085..9cb864e 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java @@ -1,8 +1,8 @@ package com.sweta.subdivisionsurfaces; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import com.sweta.subdivisionsurfaces.Polygon.Edge; @@ -15,7 +15,7 @@ public class PolygonMesh { public final Map> edgeFaces = new HashMap<>(); public final Map> pointEdges = new HashMap<>(); - public PolygonMesh(final Set polySet) { + public PolygonMesh(final Collection polySet) { for (final Polygon poly : polySet) { this.faces.add(poly); this.edges.addAll(poly.getEdges()); diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java index 0be2538..d3a7c4a 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java @@ -101,7 +101,6 @@ private Point getEdgePoint(final Edge edge) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); // Filling the facepoints for (final Polygon face : this.mesh.faces) { @@ -123,7 +122,6 @@ public MyHashSet run() { set.addAll(this.getNewFaces(face)); } - System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java index 6094bb7..cd5fdfc 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java @@ -107,8 +107,6 @@ private Point getEdgePoint(final Edge edge) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); - // Filling the facepoints for (final Polygon face : this.mesh.faces) { this.facePoints.put(face, this.getFacePoint(face)); @@ -142,7 +140,6 @@ public MyHashSet run() { set.add(this.getNewVFace(vertex)); } - System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java index b722802..2b0b0e3 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java @@ -81,8 +81,6 @@ private Point getNewVertex(final Point p) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); - // Filling the edgepoints for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); @@ -97,8 +95,7 @@ public MyHashSet run() { for (final Polygon face : this.mesh.faces) { set.addAll(this.getNewFaces(face)); } - - System.out.println("\tOutput set has " + set.size() + " faces.\n"); + return set; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java index 0d7b546..5a6f543 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/MidpointAlgorithm.java @@ -24,8 +24,6 @@ private Point getEdgePoint(final Edge edge) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); - // Filling the edgepoints for (final Edge edge : this.mesh.edges) { this.edgePoints.put(edge, this.getEdgePoint(edge)); @@ -41,8 +39,7 @@ public MyHashSet run() { set.add(newFace); } } - - System.out.println("\tOutput set has " + set.size() + " faces.\n"); + return set; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java index bbafdf5..50b9bdf 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java @@ -67,8 +67,6 @@ private Point getNewVertex(final Point p) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); - // Filling the facepoints for (final Polygon face : this.mesh.faces) { this.facePoints.put(face, this.getFacePoint(face)); @@ -85,7 +83,6 @@ public MyHashSet run() { set.addAll(newFaces); } - System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java index 470c361..3e494fa 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/TriangulateAlgorithm.java @@ -12,12 +12,10 @@ public TriangulateAlgorithm(final PolygonMesh mesh) { @Override public MyHashSet run() { - System.out.println("\tInput mesh has " + this.mesh.describe()); final MyHashSet set = new MyHashSet<>(); for (final Polygon face : this.mesh.faces) { set.addAll(face.triangulateCentroid()); } - System.out.println("\tOutput set has " + set.size() + " faces.\n"); return set; } } From 8e6bae586772fa32b26726682785a60d1056b230 Mon Sep 17 00:00:00 2001 From: Michael Carleton Date: Wed, 8 Mar 2023 11:55:49 +0000 Subject: [PATCH 6/6] major PolygonMesh init speed improvements --- .../sweta/subdivisionsurfaces/Polygon.java | 63 +++++++------------ .../subdivisionsurfaces/PolygonFactory.java | 5 +- .../subdivisionsurfaces/PolygonMesh.java | 40 +++--------- .../com/sweta/subdivisionsurfaces/Triple.java | 13 +--- .../algo/CatmullClarkAlgorithm.java | 2 +- .../algo/DooSabinAlgorithm.java | 6 +- .../algo/LoopAlgorithm.java | 2 +- .../algo/Root3Algorithm.java | 2 +- 8 files changed, 43 insertions(+), 90 deletions(-) diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java index 0cef33a..43144da 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Polygon.java @@ -1,12 +1,13 @@ package com.sweta.subdivisionsurfaces; -import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; public class Polygon { - private final ArrayList points = new ArrayList<>(); + private final LinkedHashSet points = new LinkedHashSet<>(); private final MyHashSet edges = new MyHashSet<>(); @@ -33,22 +34,12 @@ public Polygon(final List argPoints, final MyHashSet argEdges, fina this.color = argColor; } - public boolean isVertex(final Point point) { - for (final Point p : this.getPoints()) { - if (point.equals(p)) { - return true; - } - } - return false; + public boolean hasVertex(final Point point) { + return points.contains(point); } - public boolean isEdge(final Edge e) { - for (final Edge edge : this.getEdges()) { - if (e.equals(edge)) { - return true; - } - } - return false; + public boolean hasEdge(final Edge e) { + return this.edges.contains(e); } private static MyHashSet validateEdges(final MyHashSet edges) { @@ -94,7 +85,7 @@ public MyHashSet getEdges() { return this.edges; } - public List getPoints() { + public Collection getPoints() { return this.points; } @@ -158,9 +149,10 @@ public boolean equals(final Object obj) { } public static class Edge implements Comparable { - + private final MyHashSet ends = new MyHashSet<>(); - + public final Point a, b; + public Edge(final Point endA, final Point endB) { if (endA == null || endB == null) { throw new NullPointerException(); @@ -170,30 +162,26 @@ public Edge(final Point endA, final Point endB) { } this.ends.add(endA); this.ends.add(endB); + this.a = endA; + this.b = endB; } - + public MyHashSet getEnds() { return this.ends; } - + public float length() { - final Point[] ends = this.ends.toArray(new Point[0]); - return new Vector(ends[0], ends[1]).length(); + return new Vector(a, b).length(); } - + public Point midPoint() { - final Object[] arr = this.ends.toArray(); - return Point.linearCombination((Point) arr[0], (Point) arr[1], 0.5f); + return Point.linearCombination(a, b, 0.5f); } - + public boolean isEnd(final Point p) { - final Object[] arr = this.ends.toArray(); - if (p.equals(arr[0]) || p.equals(arr[1])) { - return true; - } - return false; + return (p.equals(a) || p.equals(b)); } - + public boolean meets(final Edge other) { return !this.ends.intersection(other.ends).isEmpty(); } @@ -205,10 +193,7 @@ public int compareTo(final Edge o) { @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (this.ends == null ? 0 : this.ends.hashCode()); - return result; + return Float.floatToIntBits(b.y + a.y) ^ Float.floatToIntBits(b.x + a.x - 1); } @Override @@ -229,10 +214,8 @@ public boolean equals(final Object obj) { if (other.ends != null) { return false; } - } else if (!this.ends.equals(other.ends)) { - return false; } - return true; + return (other.a.equals(a) && other.b.equals(b)) || (other.a.equals(b) && other.b.equals(a)); } } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java index 2aa443f..5a2af04 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonFactory.java @@ -1,6 +1,7 @@ package com.sweta.subdivisionsurfaces; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import com.sweta.subdivisionsurfaces.Polygon.Edge; @@ -42,7 +43,7 @@ private static Polygon fromOrderedPoints(final List points, final Color c return new Polygon(points, edges, normal, color); } - public static MyHashSet triangulateCentroid(final List points, final Color color) { + public static MyHashSet triangulateCentroid(final Collection points, final Color color) { if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); } @@ -77,7 +78,7 @@ public static MyHashSet triangulateCentroid(final List points, f return triangles; } - public static MyHashSet triangulateFan(final List points, final Color color) { + public static MyHashSet triangulateFan(final Collection points, final Color color) { if (points.size() < 3) { throw new IllegalArgumentException("Invalid set of points!"); } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java index 9cb864e..89598f8 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/PolygonMesh.java @@ -21,36 +21,16 @@ public PolygonMesh(final Collection polySet) { this.edges.addAll(poly.getEdges()); this.points.addAll(poly.getPoints()); } - - for (final Point p : this.points) { - final MyHashSet set = new MyHashSet<>(); - for (final Polygon poly : this.faces) { - if (poly.isVertex(p)) { - set.add(poly); - } - } - this.pointFaces.put(p, set); - } - - for (final Edge e : this.edges) { - final MyHashSet set = new MyHashSet<>(); - for (final Polygon poly : this.faces) { - if (poly.isEdge(e)) { - set.add(poly); - } - } - this.edgeFaces.put(e, set); - } - - for (final Point p : this.points) { - final MyHashSet set = new MyHashSet<>(); - for (final Polygon.Edge edge : this.edges) { - if (edge.isEnd(p)) { - set.add(edge); - } - } - this.pointEdges.put(p, set); - } + + faces.forEach(poly -> { + poly.getEdges().forEach(e -> { + this.pointFaces.computeIfAbsent(e.a, (x -> new MyHashSet<>())).add(poly); + this.pointFaces.computeIfAbsent(e.b, (x -> new MyHashSet<>())).add(poly); + this.edgeFaces.computeIfAbsent(e, (x -> new MyHashSet<>())).add(poly); + this.pointEdges.computeIfAbsent(e.a, (x -> new MyHashSet<>())).add(e); + this.pointEdges.computeIfAbsent(e.b, (x -> new MyHashSet<>())).add(e); + }); + }); } public String describe() { diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java index 937d39d..77d937c 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/Triple.java @@ -38,17 +38,8 @@ public boolean equals(final Object obj) { if ((obj == null) || (this.getClass() != obj.getClass())) { return false; } - final Triple other = (Triple) obj; - if (Float.floatToIntBits(this.x) != Float.floatToIntBits(other.x)) { - return false; - } - if (Float.floatToIntBits(this.y) != Float.floatToIntBits(other.y)) { - return false; - } - if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) { - return false; - } - return true; + final Triple p = (Triple) obj; + return x == p.x && y == p.y && z == p.z; } public static float dotProduct(final Triple a, final Triple b) { diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java index d3a7c4a..5c8bb37 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/CatmullClarkAlgorithm.java @@ -139,7 +139,7 @@ private MyHashSet getNewFaces(final Polygon face) { } private Polygon getNewFaceForVertex(final Polygon face, final Point p) { - if (!face.isVertex(p)) { + if (!face.hasVertex(p)) { throw new RuntimeException("Invalid vertex!"); } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java index cd5fdfc..da2453c 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/DooSabinAlgorithm.java @@ -164,10 +164,8 @@ private Polygon getNewFFace(final Polygon face) { private Polygon getNewEFace(final Edge edge) { final ArrayList points = new ArrayList<>(); - final MyHashSet ends = edge.getEnds(); - final Point[] endsArr = ends.toArray(new Point[0]); - final Point end0 = endsArr[0]; - final Point end1 = endsArr[1]; + final Point end0 = edge.a; + final Point end1 = edge.b; final MyHashSet faces = this.mesh.edgeFaces.get(edge); if (faces.size() != 2) { diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java index 2b0b0e3..c317b94 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/LoopAlgorithm.java @@ -112,7 +112,7 @@ private MyHashSet getNewFaces(final Polygon face) { } private Polygon getNewFaceForVertex(final Polygon face, final Point p) { - if (!face.isVertex(p)) { + if (!face.hasVertex(p)) { throw new RuntimeException("Invalid vertex!"); } diff --git a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java index 50b9bdf..b03f8eb 100644 --- a/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java +++ b/SubdivisionSurfaces/src/com/sweta/subdivisionsurfaces/algo/Root3Algorithm.java @@ -99,7 +99,7 @@ private MyHashSet getNewFaces(final Polygon face) { } private MyHashSet getNewFacesForEdge(final Polygon face, final Edge edge) { - if (!face.isEdge(edge)) { + if (!face.hasEdge(edge)) { throw new RuntimeException("Invalid edge!"); }