From 490a2712d17af09205df061e9f1163523886df97 Mon Sep 17 00:00:00 2001 From: Anna Sobiepanek Date: Tue, 10 Aug 2010 13:56:58 -0400 Subject: [PATCH] fixed spaces/superfluous valOf added illegal path check removed special handling of m [#798 state:peer-review-requested] --- examples/seneca/loadShape/S.svg | 13 +++ examples/seneca/loadShape/T.svg | 13 +++ examples/seneca/loadShape/loadShape10.html | 62 ++++++++++++++ examples/seneca/loadShape/loadShape9.html | 62 ++++++++++++++ examples/seneca/loadShape/s.jpg | Bin 0 -> 28558 bytes examples/seneca/loadShape/ssmall.svg | 13 +++ examples/seneca/loadShape/t.jpg | Bin 0 -> 27832 bytes examples/seneca/loadShape/tsmall.svg | 13 +++ processing.js | 90 ++++++++++++--------- 9 files changed, 229 insertions(+), 37 deletions(-) create mode 100644 examples/seneca/loadShape/S.svg create mode 100644 examples/seneca/loadShape/T.svg create mode 100644 examples/seneca/loadShape/loadShape10.html create mode 100644 examples/seneca/loadShape/loadShape9.html create mode 100644 examples/seneca/loadShape/s.jpg create mode 100644 examples/seneca/loadShape/ssmall.svg create mode 100644 examples/seneca/loadShape/t.jpg create mode 100644 examples/seneca/loadShape/tsmall.svg diff --git a/examples/seneca/loadShape/S.svg b/examples/seneca/loadShape/S.svg new file mode 100644 index 000000000..ed22a3887 --- /dev/null +++ b/examples/seneca/loadShape/S.svg @@ -0,0 +1,13 @@ + + + + + +]> + + + + + diff --git a/examples/seneca/loadShape/T.svg b/examples/seneca/loadShape/T.svg new file mode 100644 index 000000000..0526bd64f --- /dev/null +++ b/examples/seneca/loadShape/T.svg @@ -0,0 +1,13 @@ + + + + + +]> + + + + + diff --git a/examples/seneca/loadShape/loadShape10.html b/examples/seneca/loadShape/loadShape10.html new file mode 100644 index 000000000..be21f221c --- /dev/null +++ b/examples/seneca/loadShape/loadShape10.html @@ -0,0 +1,62 @@ + + + + Processing.js SVG LoadImage() bot.svg + + + + + + + + +
The actual shape:
+ + + diff --git a/examples/seneca/loadShape/loadShape9.html b/examples/seneca/loadShape/loadShape9.html new file mode 100644 index 000000000..d5c0bdfca --- /dev/null +++ b/examples/seneca/loadShape/loadShape9.html @@ -0,0 +1,62 @@ + + + + Processing.js SVG LoadImage() bot.svg + + + + + + + + +
The actual shape:
+ + + diff --git a/examples/seneca/loadShape/s.jpg b/examples/seneca/loadShape/s.jpg new file mode 100644 index 0000000000000000000000000000000000000000..35e98227b78bf29250990b363423da4043834823 GIT binary patch literal 28558 zcmd?R2RPOJ|37|&kT{W%c@kxXtVB3bW=VFARb+?k%#$RMk(Cf9dy}0lWMuE`z4tyi z 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 + + + + +]> + + + + + diff --git a/examples/seneca/loadShape/t.jpg b/examples/seneca/loadShape/t.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d6878f27918f3bc9adeb093b701e0e124e48796c GIT binary patch literal 27832 zcmeFZ2{_eT-#7jXUxF{nlC$FHWuA!-=eN{)-h2jH866v+n4FrP zSzcLPTi@73Z*A}HivS|}x~(5O`(s}Rz`h8HiHV3wclSj==nP&&2Z%|IoZLertx9Ta zd+?}`HyQ2u;JEB^a`sbdOLW)mn)e>!5FX}S-rd@lo&CLy-TOy7`?0Z~`|5!xi3ou5 zhz>w-XnJmbK96BvygRWdQX+&b#9@%-c2M)EiH)A!$$HX!@eaq1v|(oPh=RAd&1xEF zZsI;Y7{Z>vp1fq+=$&h{JuZrSddbj9mjmtlDyNn*@n~tJ+SPEGz9;e@6ki`6y6d|3 zGE78GC34PDD|L=Xrh=!SZy`c|$%KtR*Q7U)_Y@w=osD~>&~hvA22#GcpJ9)dffON` zB$>EHd7kHa@y2~-QBNOP)3pxt^@bOCAJM)j&nVlrw{VZ_B;#c0``VK3n^Lf9;X9h0 zmnhSdiD7()ePmo@qg`KCQW$F9Xd5XV#zS3hrdR?86o$SM4^_1wjHk=iNLmm}M$~xd zphkGNgUX!3wc@g8=48!%(zdP~<#&A(1`_MJrS&}$sGkQ%U!Oo_-s{mU%rD5#E6h;{ zx%6>k6*ks){-#Qlc3|~0HuQqMt@$<{(#1o;>E_kF{e#+!n1V;+weY3@6z zmtQ!{61^mphp1Lj#%NBJ&Zz=d8k%IEw=|OCckOcL@KDAbK?|xD zT!A3MGrnvhHFpP}w)CLjm+O`Ug;sqWW;ms@foGtohJIF!QE~?v_?ul>khZ{= z^uEYq!vK!+W|G5ETmviP8EaKYowzmg6dp!-x&yXG_Pv|Z>5X4nD#xBF3EWbPSJ~3; z6D~Ia+6!a{+Ix*yrfsE)z!EwjF^9?lp437w9}6<=OO!>eWWA+yGFl`5F&~d97?rU* zDjyGFWR92{o9j0gD*D35jcgJv;Zt-8h@m%wc<4bA>o{hk(;pBiI}tnwwrfhTR*>=<;q5O>)R6%wmW-`K9r80V^+sQCrWnL6~4PJ0e-~KrMzk`xlF~G5L7}U*f4!|GT1ORZzIlI?3+%xSJLs&)IlK6 zd}`d$@PM-@n+;(+6y{m!Q4HTE0TTN<8Ko0yZ7q zp%o0y>qi9cXp~kb&Rh4p)Lm&?c2TZB?920`y!+ko&?nff#EqG z1n-XjRx_eWbQkpoW#ELLi#?8q>VCFWnH0|^_DT8*jvLv!o#l^4)CunPy}8?04H1uM z`q|WA_e{#<>Er$m3BZw4gKIx_rHTs#OZo{AAt29hD(nVG{<+`By}!N!(2DH|Sds755P7O7cCfz7laCOd zXN`1tb6~Q(9f{dc4Ea1V(s`xe?bC+iw%ME-V=L)r>WNA?G*WvuPO~?!DU2PcjCV0q zpq7yz;lQyOXqB`IlMC~uwq9sa4U8`e%YHy7PR?+|t?iJ#u8#f%Au2-^E^!*!2U-1m zT|qV3Rw47kdU-;1r@KFp^&uuBU+NxCR$f%s)$?TJ3f}W5e)y_49-^6&MD!;q9140; zoavh&{~_T%lLwz^*Lra;%&$B{(Bvrm=V|I z(0jGSLETU^tg2)E6?bACupf}5(w~(ywG0HA5h``Flwv3F(6iG($M>e-=%{!Bq{*?6 z65`@fE4GfHUUood;DBY^?vpc6IMEdD1^V=gxalb*!*7!r)B>9o{`7)O@ z3qs8fpV&(~T4IY@dS-64I-86bEJUEkVP9JF-&!wcvg9zt1)PBTh~F_2(tBWD*Ukhsf3FuT%0Sp5wpk%o4p;OB8*hXGb!?{213x5t$>8dm8(U53xb2LF%>wn$v^6q{U zaf82flgoaxE0^cOFS8K^3uTin-=wFCE&EL$hjGnu6P9Wnf*1~Zqt)r};@>@L_hxaP z$KhWT%=Y0tt~nm`(-QqR{iLz+a-TYnM#=2zw;$1%=#Txfy7(Qh$uHX2#mlag!Oxl> zxO_ARQILuFMYmS^Kr`RRbk!liRzHrZlf5$PRYz^v{{oh8s{Xq5xf}3#UbdTWcQM_FZSH5=d=fMN7$yv7q4`e)Ofk$OkjKQg0DUCA`i+y*}S9i^(+ zJovA=_1W#_6_SFu)A$Q`=OY0V{1`HKLlEo&Ve1tNe)YQb*6Qwdzx*oVj?&jryW2p0 zRc*wovR3-y{KKESRmJ9f{mrl2c={061avFIsi$3+dB?(;DDk^sQ%N6KbtZmSP4Zj< z7xJaU-PZC<3mna*#-HaJfTEymbsBh|-yr(*;WqYQ(wSsX8QzDKPj0O2CxMTG@Pdc9{S3;iQto0zkL$l zT^I5A<(jGHc=fbB+Nf_=FA{Idrf2cc9(p*&uFx8-xcD23!iSHy!6!SFzte1{PUMaU z+$8nHIdoqE7x9S(Y<)TDVLX&RCu@e&Fj`y1L*ARaGr`f9M5wpcTgw*vfN&#lH2oLA z(!SjW@!{7u&|bCL<1%WL-^8sTY1)SY4Hy@AtS?XEgeb49e2m8PwFZTr?Vu_z~N=6GHmW+27#TNx+m~~}$ z%rCcP&Tk)V+>y$;IPFzw8hib%^{ukP!&vE%Bo8u0-d9JH+GQ9tAsc9pG|>*V6mAat zakV>W(ci*D3I)Y3EuvvYc1ce6GC$VXx%S2;XJ{O4Yu^b~%Q)K-R+N4dNtU;vpLZ?;MWhw8X*TI6QRuIUbU$ z*S}eYahJgj;WVS2O%2)6wj3`5_%1x=PK#1XaNceRj844oOn;!NTIKL5$ab+o2AdIw zXyO9bU3mavIjSRuvAyhQ$zzM_Jk15UPK6|N@Qr+5-~+|T0qF4Hp_<#cj;6AygDH4u zs2YxLuvizvLm$!cuz5=Osuwlp0e31O^IXAg;u$#lqzdko+@IsOV-Vw*D~Q{GE1xeR z#-wFbeqRFox6y3?vVtQ%I~S-igTRM5x|bI*Z%G0CT_lcD9S=Qj{(Z1ive6cT7S_Xn zn83ic_N#&}7Pmnpq7AWh9fi4t{C(`#wZFhMRpKGhAt3&H0jM3l^T0V#jt9u11?N&2 z@!R;+PMlFS>4qO{tBe$PkyZl__4LqV2_0b=2B0#=_&-N`DwnO`xZ$}c@K6I9zH<0w z^6%n<{XTpKTrLsI(%3kEoOL+}qWxR(!_>1dWdYRxzYu;5Hg$Lu#9QW-5c3`Ycgia&!T|0UUtbG4?_k4O{!z{kB%~7?Z6`k%^IIug zuPQw=5YM3a9uN6OE`^t+3vvUq|dr;-UPeJ^XZec!=WEuqc*dy9~REhk9@S?{fY_>D)m*G$MbV z>7DLH1l!Sl>asJ;;!mp5{&JJI77v*U19du(k67QQKl3>)rDrnd!jamsK&|U4e%e(O zaHjN&YdZ>L@a1t`XgnpeN02~g<^ql*mZxQ%a)nTy8h1}O#SjBuW_`lH0h1(MJ~v#Z zT$Tvg(`tlDi{xg|E=#BhY6L3=qnU#4?&W^@^);U>xOFHU(GQF*IR$+sryhFDBPaO6 zN5Jt338mcI&((3PDobT`t1)n#bbi@-HT=oTz@Kj;L;DtRtkEulmGE`okW6jyJt@FL z$lGOoun$Fe$RD-Bi8jR*qOdSdyF=+5QEw5T$z)oUtl;Cm z?`dk$d^f05$}<=Q)?zg7J2DwGPxU_1E8P67BUNa;mT4YPk;xRJ)Z8jZuNAs!7!$aY zrZblbas(gbOQaXX_q+Sd@G=!7es+}HH_@VAn!P!@m|c6;96zt#QLkSk&c9E zrD~Lne|nm_y0i?fmTXODRpZuSHyHN59Ihh^%0i%l{m4Om0S~=?0EoPOh!#?n`Dd>e zPo#J_#QTADeThz!g!20NWe(R_;I9Bo(`$ht0aEGV&Psbiz%{X^x^WkKQ;oZ>BlEpZY4_63e zXs-|$WP&^VXg_l24M52>UqEIjxa5MZYO&pjHHW7W)i8B)L}ehESAvs1tk#jFZzpjFZpeIcWzlXF^nE z=;G?k(DpdlKz3XixcQr^?HoH?es52Y4_b_G$4XglNFiQ;5!10J{;4{^ID(SlC#sHm zp_}Y)Zb*%HYf!hL-nVJSalpI9IK*rjir(HVELvAZ_Q!2P;qXO*o}Af=>NfRPJyH=w z3au|g`)6oXW$an~{^uaGyEly|7dRWLY|i_Rhuu3GlwLKoH>gB?$p1dQ)-p3X^vabe z<-nbm1u5-kl)&D)iyd7v(uLNt9v-n=5DtWUP4lN$WMknQy2EKIRZKavZsYAcH;yA$ zcyP2V+!)_m-*mrgzx~wx!^}Zx*s{`9)W%Ib)ZB6fuuN1X+EEfV=2`=sk;A=4+astt zRoP$OOF!>hqxNT)B3OuRYJM=}cc%Qie+QcH#OL}tKI&?3 zqTxSm8+-~m!oCyWwjC>J%NCj-+X2qG+moBw#1BSEsq8Az+RbuK^G){Z1BRE};m-w{ zpuG=#_6CUY2EEtbBS`n5@JQjzwG&pB8nOKnbxGk06RwGNE8>T4nS?0Jm_1cBlwR_eUXs>zciH`V| zwG@iFzIt|>U_mF7E`(GY0hiA^_EeYFs{PZtb|!G))&nb*FeiAEvxIgrI$&0LX~N%n zsEitu?-Y;az2X|KoXl0&$Tdimr&z0qHXYtr>h#xZXiIWVel1AU-$d?VfS5hWTF&^57L?_&7+&P7qn&vj5^;BZVoZW`kty2BGmVUXR z?y*hAV}$k56qTm9$bwzgxb&Sh%Fx#f(TL$3;JAPUk6ek(j~hxu&dEUweN;h)Rx`Q= z2=S=t#+1=Z*ILw(Dql?Ff?4n$CL{IOcbi*(!nrtNlYpfG zz5MpdI=?j3=#xRc1FnjxZoWo~W)I=QB?I6zUPoY=IVnbwsTOGaHAL{ZE&}6YiI@#Q z9FbxA`Ifk(@d{eM5bZo%34k*QfFtSJ|J~!AHrg8jr^1LKrhzLwHJK&y!x~Bwf3E2@ z16*O=$N$4zl(7S+PS~F@kjLIzRq5bVkCZa*8p2lNq1!m9O(T`beC5{DROR%-YnivE zdki{~`S^J=$u*(kcGv@a|o#;@Bt#%8ij7VhndTi%#f?H|mm zQn02qvovM=k)K7vg>y@E^T+-NnUY&M)v?5_h!{;Iz!HrU}0#b$9Qy2i?-5 z;c~-}lGxyf9NDVQH}}|8^bxKl{-Z&8^FExo?^Ys3S#vR0<)S!bimxz6p7k|kz(SrwvI>>RE9j8|A zikY_IeDZD>&Ct6g_VycoUcHRfK~71M=4pL%=YFwGOZX}&P(*sL4FUMtov?|#Y1|=w z^d1ly%eDp7b|V=UBo%MfmOO=r*z1Jx(AJ(FV9(Iv&IkO~IJYTjF?^=65>5@Ed}t<$#{=zwx1de5!QH!tr_ta9(LIT%Y=_#Q+bR+ie6++Dt z_~qhuu9Lde#kczws(58f(`)Za<)vD`kh?|P)BEl$qu!aiRTLJOt7$Mp&*HXC-KU}N z^IzA5=gZsWH;oB+>Ph6dM|aYB+%ZlNF^%{8IH^7m`)HY!rt5ZsC(?3!WxdD|+XuKk zbq3L6{eEAbvd)cIt#C6Y1(xxc&k9lrt=w715*0L@LnS|G#3@R=)&kgkvAdbyz}EAp zB~G^pGK#-msy}a}e`^V3P69`rLIe*ni}lIDx^iE5xzG9@kzai6Xus_ie2(R2Mq>4P zn^yi41<9(6{4+1rKGil6bd)4l4DLDZ;4Z(O^??2ov8PF^2_h03odsW_!>Fhl$i@!P zqAl)h#4;2ZT+lMkx0Lk|Z6g$S7a&a)`DD%%Hj(DkDcVUbk&J$}#&*|%sOt);bf!y( zMX_e9@NN3bEhYvJDG&4TP1!cNQ+E_9{sPQj9jX$Q3LhN*94Rgm029#TN51BFB58Vh zXx@&7P1np&Z|_>6I+8QR%2M&Rc8TInfF{L$a^o*FdDuP1)EkLW8=!}+0dLZZBh%}L zVb;F{T#^8jiox|S-=y<>M=&qqp!hPPB6$kjyjsbz{}cAQ)}3^Lbv|#BXlmhS^?Svr z)!YacTr%F~Vnr1W_X(M6``~oqq%NBF`wMvbkrt+#clvTJo^oR_4@12zz2)>guHXFR z^LuJN^~!8BR{P!e&3XDMSyVfkB?vUIonBq`D}6={j_X@7S*b{CuXf#q?U8L6_lKgE z%&O4d6iGTc$bD~?p{9ra%EEZndb6bRga3TMz7d!X1`5*`@>kgJ>&qc0{m-sphp$n9ogj?g$g33sh99C1l)x!135YJw&>2r)? z)D?}CE{7QMU<`e=sWUEAY^eSHOeh<#&Gy%&HR&!sHAO*hQMZtXoFGd*7i9ugA5e{< zOqyq(qr_j;DBL0uQut9kI>fU<=)XU6Gr~TgRv}P)8qi=!q1*IYC}?JUZ6;z=*X5L` z?(=+9U z%GIsOV#x5lb9EQZSXF6rvfpbma&%y%*aE7^MGB*i%^Z(A{0T82$&Rr@bf@v8NGBh8 zBzw2_hH+-JUkr$p8@-o|U>obO1-5mF#itCUwIafG&UmG&WTt3~K2t>0-8#FcD%?q@ zF_>CbD$}iS6Yj?wNUI&&Yc;p7p`rN%_=wFUrJw&aXTZ8YAA+Z^T z1pmEBOxJ=|d2e`hIi?ONpMC2-i-MzIJtabG!P8GA&s`vR$cPvt)+?2Dbas2j?&$lK zm)4tZ)M+<1p(~_OXue_k2Ofs0PE*1S+<`SKWcdieSc-@KNtMbMcQm8Ru0w+dhrUwi^ccG;7$9zRuj+ zwU(QlI%B+2e@VB<_2Bt!CvbWXqrF-k;NuJ9duV}K1e0FBgG$thbx~UXS5c*Z&vy`JeauZu_6!@w@}ilZ-6ro4d{OLk;@syspNb|AY`2 zSf7((L$g~X_SU{~*;ET^fxQz(!vt`jDz^l@Ufz|6KeyD8GxBKpX1v*|K?6pQ^n*|P zv!(bMi|#d}`)tfhk58JjiMAcuSY!@WF5tT5Nqv40J+<92-x-*(R!lvYMK=9<+KKPI z<2lxn<*uD*l-uY;tX^c4*|_UX`*7#$3Q}WDq^fByGYcc_4p=tgmfWtIwtzko%hE_z z($`pvP>#^h`ag`EzY@y#&-h-p!pC4q2w=Iad4zrLlu1I=!NHmK24=t(uTeEj!_l~u z2{nueu9?O|D^wsCkjaDbr8WDdK__>rZ|0pK&|}s zDVF~r+U(@zQ_VGqJ*YTNT2(zZv*h8%Ehb^)Hr5{xU7)M))cK>G9O0Q2G2^mT(6xp0 zmZ8;7aw-22(xAKkxn}lCp`QC0j#%|N4gF|0l=R{Sr}n^O{lSJASIr8dq9>U7oFm_V zv}EC4zwScRx2$*ac8^muk-0X^Vz;hCPkW1YTOtNd(%7cH;Ha>0_)zox{2Wp~OQ^@E zZ_{L<3gtGO5p>_dFMaLy%{;CQCHfH#w_9O}kNZCqg@O8m@Dthlc|e`Yc3HCxyhk`9 zDy(58!A>aQ0I+WFagsB6(%PceUp>{1RLh+aua9kDkrd-?0?xOV?9W~N`ykDK>ZPmr zF9G>$N;u(y)Tg54K*3h|YzDZg)}C7%TraU_r7DWu4NNNrNb}v{ zd!|q3j#-A_Y%ak^yiC@H-1d&I^XuXv?ZQ)o{R$E>1#I+P`+SyO?2GYGi9>7E=MEB2 zpXiBWa4$S4fWxc|YQcT&v?B_1eLw0Os&K4|YCF}Z{0;j3m5O)Y7xACMNpG8CsJ~>S z=N)uSF+OXJXc!0peK8HRn1^?x%`8^GL>YgLIBM8Seop&q$QED(;3KNTt#gCh>YUf~ zK<+-*Xn}hCYAZT&Y839H(zKh`Knk}mO=1F>U@6GgsblRNdQN%S506_i7{By6Ym4i3w5}R$+B=dF zcwabZ7rE`c7LxQM(ro^w$(WwJ#^)e69C1mOQZA?dLspX&TrmpN2^CoAT^-HIk-Sz= zM}=GF67WiBXX5*m_8?Vz#57xuLJ?V!w*ZWR>kj`}sOxKJ>~F>^dDFy6u3S2J7aEIN zDvz0_2_^#47Y@+ooO}=62sMlwhI?=0@|XrK zf{NIl?U``*-f1bVvn`nE+Gbi)636XF`lpVg?Uk8glj5mT^f6shwJe^r1Pc}ib(RmM zW+|28#$yORRJ}WjC0(CA$J`+ryKjkDcCfCK59m zCuZnXcwmlVyjW;R%kiIOZ+1iR+P_gQUrgpBK)+ACK!%72#K~7Q$^xWPW-2{I-~g8F zfvtFGjM)MhuIgKRxqof&2ALLiqm7L{VdpHI1o!FJ)TSEc*86N}pZsY}coBo-i#nKR z*8#Jr*B}2LzY2ptj6s(TtFP_WY^XQ>jTpfrce8~_dH%Q%v*=+pk>gc61V2KeJu3j& z=Xpa01}sv)KwA47q_yV6Nb-XF)B7z!JC&5L zLrbM`y|H@Jtvv;4fyq?tX=hVzwwqh<(~oF9lFom#mFJ!gER%>!T2x%k&%;zOE<2k3 zZ9Qk0dMX&^ET0*Nuq-@5-iv^yKz(~$LF z^mowJ0Yuh{7(#4IDNb6rE8WpG^TFaFkgmCej-Lri7p+vs2(FxE{mVFg%7l9i!W%xO zxm336boH!gpZ$qf!$0sk{~fPSrH(m|fGUKqq^ly4m((8!*UTy5d8hX|WbU)5yMmE zTGs<*`RY0ys}r1+>DnAaPR2^MIn10HvQU(042|kMnI#}If7aS0<|R0tm+#Ed?{dS2tSqykL;*e-18DcT?B)02$bqkt3M-Mi0@7VJZ9Ghnjc=J-<*bJK_u z2=mIVtJ^%N-{<&E4A>aKiT@{ssRH&_P-U=Qyoy_|giQdkqrQsWmzMgF#oe))eSmA5 z>A(XC!rF)NuTBWFEeswlp|jPKMq#y5ZLL%+(hNy4W8c+vJ^oP(y80Y3M^0ROu`sh9JLtOmy$Ye z#Q`gt^p%-g;zsB&zu0F%DkDR~%EGpi9OA%7r^(LLpRpP!v54rs6zywhBUzmIx$vy-F)X=88U zay+hlG5hs1s_g@H3lJfq;$#-03FK};g+ea|IMDY^48iFEky9K|0a_dIDn;!GHFi%t zI520xvzzc?7Yqm;zGy?BNr7c|;2diihMj2>OOOT1Sy{^}kZ4&E@VJo?2zZDid~IP% z@4OC!17{8gA^?vc#pCFaRj_R;IgrY>0SRPU0+9Fn-zEI76#k#V0*uNcty8uQPGJgf ziMJ%Zs#20LDA>_oyOt^X2X^U%Je-$jqGM#cu~9AXDQ=>Kkct(-_3+T-o#tT8y7KZ_ zjceFA4-5K1q~dd2ksiqLG+ottY?P~<%3TvbT*5nxZ2`t#oYjjxs@fyy{$b|IK$Z6o z_qpZe#G|kz@R-{dMyc<+l@f%iwy+l01=%2|hOX=(q3iBJt5-&CVjg)3WEVfdcCmIM zMhNOap`p27;t+iQ^otxF<_ERQy{vdB*{J32*&-eTCQctM_-+{MH8!ZX`X(m|yOEbawH#0%}rqxu4L4u^3* z?B+PnsH05A{x;3IgC|RlbNs1!R0!ebp}G^tSjVJi`%<=phTL2(8+D~_#!873l_*|n zXQ}>&MFGIVf}Yr&5mr6Nw1MMniwnFSrCD;<=4i2zFu@f0Rs@bv#xP(~rmfVVA+e9` z-uWBe$elq~IP0LQemkA-Wf8IG@vnk}^7vz8P37E^`?`c4j#j+=WXD4pLak|B4pU6K zViwik5tTtkF8MsV-a?dn0QU;f!yuBunU~ieZ!~>po)D4g{rN^gW7cLwv;PRe?6`Kt zhw$R~o=OvABc;gmMRWV0ErZ7o4I8qhx}g^>cUG9Ipv`HoRTN+AAmb$a z6IZ%%7>yUx0Gj#A!3y2ki-mW34T5Y3O-AEQ;-=)--$E>`|8bqgSECi;*e_j9*FI%L z^Uip<j2H23cqx1RaFl9?L&ID^F zYnj0q*5ui6{#3NMwvT%L;=bh)&*E!4C-#(@W>7Kfw_zkx5^{z3jaWV)BM5iG3ZOCho5E<Iezr^QsV_kNgCH0r#@;4Q( zJ1Ok<(^9`jw!o8ng=D9fc9~GJKiXJCh9tQ_+S^7fLK?fM$?6s~Qs~wjBdMMtx=l4;}C9+%P=LNJ$N>e6pc{3>m6p={3)lr=}OL-*b1#6Q}F7 zINQ@~dW;;ZS4p;UN7|SNidTy6wMJczxm!?1cs#U10S_G?T(XjS+$JWhCTx{xprA#X zO*ec!WrwHxPGe&Eh-994Nyn%~#?s_Nezppgedr*%;$|z^3J%7Vob6GGh^Npw*jzjK^^bg#iar^zQla*S(|WSDb97SphOF5z8QKMpVMuM$|hl(^D; zWAZ~|vWN5N?x7f@!7=usk1bo@iOF1JPHHHro4n;pHfD>u(1fhILW*ks=N>KOaCSHA zO(kJLjTARWBcOMeay&9T#581wgI=^~r?~7| z-UR>PMR-q|nB_oIz>H)5K_mVlBKjw_cDC4wE5P_=>(|e4=p^;>e_1%gA1mY)Dvt=J zo18eXN&Bu*oj2^2qLd6T_se&o{d;FHr$#JXEIFGTr?eI?7Ll-WFu!{TlCijcIgt;l z=U5i28vR72D2teaVs#fQH#ryt2>QoOU!H}kZZ#~r0?B$BisCv z)Z7e?d|Acsrue%&`YSw=UHfh48295u?7;(MNF_lW>6b!a`wjc(WaMHThh>D4m!y0M z99QCadYMeC=43OQ3?`G~Yhupt-zVmhmb&?qT^t{BM2DzgJ?gLKf3H8)>hvocV;pXb z15YtW@*Vn-mHY5(qS)NE{8tStrq>OJ1-yyAw~tKt>6JZ!{jbnrmz#N$-s~|TC0y-u zQ<%pX8NSOVQ6SzgN6gm#CSB8q=ZJS5drAhybIs+Wk?ebm>R7zr7lS82P}}sKU-1<= zHu_qkGgZl=oh5@df$n-b+2J9do{*9YReS$!!OFLX0e1brYE zw!Fnz+$B5PF%~v$el7*b3azjUG?C+X9_|fc zI;-)0G@8xru4~>ugce)jj#$+V^g}1~h~()DsPtgutbvCRd1)>8)QV!|GPoEKraLBP z79%B&eusLRuV0w4`HWbj!_1n1_y&^d)K}2`hACL`Ustp5CVP{YfZhDi)L#ntrXW@J zqb}9H61GCIG}(lQrZ0#2|4Cd_e-hXCdXYrpRKO}@2NVEv_2~&dJjmzUp<&x)fK=Ii zhCI&GZRJyXkZM~R53t02^q?owq{Pk{e2*NKc_}TG%w&n!NV?XfLfr8Xy_ehenaf6k zg_1}vR__VyxJZ_U-BYz9VXL|s&8I`D42QSXv|qV+{|f29@t&lFw{Au^FY$@^#Z}%z zxGAns^gas<&0_lPy#AKQ$KT{|ujwzr2?G2pZMXK%FvZ($xOhB6Vuhd5VGp`uNG=%4 zN;yX%O$I(pue92GB6d?Ich@SuCw_{M6zD{Uu7sAnt6GaPg(RGQ(r*t-%Cpv{;32Mv zmv>K=a(f6`?|s{`cHZipxZMTz)IQ7lsdV?OcrVh}Qd1*Yw089cMH;iBr`Km?3rUXo zcG_HV;UH>r3tE5gp@P;QV1)Pfkc)b;yshN>GL(FwG!V_^dYH}RZ|wbdf~T`rY&Go= zahDWoyX9UO!cbehpLDnZa&H9Xro*ggs)^U#wiyQWjI#x2V18Yzc!)5u6+T)CKn7yC zz-Lk)p?q?+G-9|{ia+rlFI-L z)e{0og5!f3InHbD4o^Ay+%S9C_irC~tpfi$M@!m?`W|=pq`rN-DT9Nd4;(=ZX`Tvs ztdBZBOnR0(qdVD=e#0x+Bx&twR!=5r{99%X?0&(Knw%Mn;#6zvV@1y~?_W5bup#+jGH$+UgM;Yf_q_h!`ODYoMd;!t zjyhn7j#{&P(>#1Uy%KrSdveL3c1FgPDNX#<(ePVmAj%MnX`S5RAwl15Yd>j<6!7?X zg5msZ=tt^i?LM9t`z$ouINBZc(x$yIEA+K5=HLY0x>0(F7t`_GUy2GEI|ib=d@gPF z|1635cJuQ5H!PXDRExRyPJ9gxvaQBHvaNch^dLE=?e7(chZ2Rf=)N0&z|)WQJB1d; zl7o%6t={`i4}bBOis!ltjcoRZauG-7>ybeub*u*(H+S|dHf@M}{7Cymaar+k$PwNT zl_c^rWEtiyA>0@_n(9;OZf~I1pKA%n_C1))aiSWGo3m)DxW46CKj-Q)M-5-(S?n$R zpsEtZ$Uot7D=D&!-@1rrF3Tx2#bwtBSfB3e+kQ2=X|_dEiydD} zU!=Y&V{6YjKVp^rhEM_I5I)M{$Uvl1ZjI7iV^dpbz~H03xK+5eKy6>=b0j#k0-c{W zgg!}?wqqXLei^XRc;m0Iz?ZO85RlL`=6)%q`g53VSZsfdEH&|6m+3a=OsfDWZW%u8 z;db0;Db&S8REiBXaZ}}4Pw4hsqgOw5+0)KuwnNJrMU;)!HmKX+F(IA#t{c|?z=LAs zF6bkwKw@Uu?DS+c8+fonVF`nWB!ZKVb;2`0EzgutL9UX2>(qkecj(}Nw5i3xOSa58o3lzo5R1J~GVF@lI`fe%m{7s%xfxCOVL6l525%InZ zl)wb)orcW_XZ=^7B>%tjNkH)FFREM${zXv?sCSj5G+i>=rU6fzrB434R63Iii{Vl4 zYcb)HntQqgSca5IFWO@l%8^YQ>=99nmR|wKkOuyzGJqHJ(iB<*_n!~n+!t)FnsQY@ zf9Nu){FqdUj~D6V15?H)Jz~c;B;Hw(qBfsyVm_+{gt&0#$I5dBf@B!))aWkgQ)W9P z4*$w$f4)zyKG?u31FA{q=rm<79eht1X>jZj^@fsn2M0sZGhru1x2#(cOXG5-DoY)j zuU=iTyVb^B)J}Uq1g#|1!OC=qSTAIAU-D6f#(~MVMnzKhH`8ahvk2AftS)aqlRnRT zvKt6Q?aIH(&uYsIThl4M&=)=>*dyGH)0yuL_9;Kib}FcUHsGuA%xpP*wXb-&EWmOtMU;baRUnDz!AsK6bxG1fy7^L(_IYPLw6lWdBgIzQix2$$ zuAM}WCU+jYd$vJE6{XddTv~YN<0&htyG}%1`*;(9W{~wv@~$X+!z{%TECVDeEvIp zCah!JIdsV)Sw4@fjlblh4F^$z9jr;z%0Ec%l&!T$M%5D)X1U{cG@JeQ2KVGyDBKrY zFVY>5&o+{cE~RWZP}Gdkk9Nh^tVtjQvy1kY_UB*{$eAI{t>-jtC*WzKhLD z%$5$u_o!qH3y0?Z(kxL`>(y&;wx`Q`XUWm>`l8HC)fz1o-_)a`W8orvHK&SYZW3-q z2zhU+Hz9JBA-3dMT`}M3(qf_e2QI$gP!*JKvUw%tvpTD8`0Nh9x_qw9a#imFr(x)& zreNHMHQ2*No%P|7v>l!4H&RFvzm5H!&Tqk){^0a)O%n$|p-Q#>RsnCeHV(3=Sh*5A z)NSG%8=KGV$0(zXtSxU3@Gk{yZ6EIrad)Xv%3e5!n@qvMl2s08#YqT`JVNa=WFZoH z`cB2l?Zi5p|5m5?vgoky8y(R{7`9TUU;)F4j*|`93mORLHUxF+3(}x}6(Q1iBF+D4 zxtth?=fuT}jK`~nAW3`G&bJ`K1=0{x=iGj4(-o>Y({lT{>j z1&Z+4^8@N5{7N1lQ#HnF#IC_)>WKzzGleo|dSYs_QyV-Tx>8!QO90cCi}(p zM*XNMEQ0L?PS=kwVt;(`1{51MeJ?iDjkWn#%<{+Q1TQ^eoVt%M-ng2@ZjfJK{hmG7 z4z{o@x`Y+8*FN3atzU0xe^5r)GOyW>Oe9tJtdCxP(1&fAfEkfq3nwfz&*HyR>JPX> zeCcheik-WcTx4LmyUKw2;ObdjUW;OdIje-cqK7Y|PWMbzJ~3xn-;_9(5f9Fm_iy)s z<7pejHM0s+hIT>rEjf3WtBxC{un;^{Qf;uWg3kq>Z#_!A_jK=7y@VB{DzX-L?78SAdZ4$;K%$_ji%O80@*2#UOp?)_%2UqtVxGQGlYed~!Q?wkl#;|sYMZuLv z{DSiVpT!^*W0W~~cnKZsm{vD`Ttg;N2PrVXY4Bpm#0h>*oVq4+wo?q@E6m_QKfD-D zM!J1t2-8w#qmn9#AZWV&_QQ`yh4|ce!%LFi!b|B)gRO|skKg^W->PKm%zi11{V!Fr zvmSh)N*3|0N;cE&N7!iU9nY^{{H*f+@8U`SMtgf6+!lGRkzE#iy)e+JX8^tw)Liyz z8#cVHeb&{~*4UXdqfLo+IVLl(O)Knnn%?Z8RAa=^Y6%m|j8O#X4)shd0B=~oZ?!vo z7rf5{%Xv#NQi7kxZ>KIEUl86Y6$n@fjpZQp_`Oh{$#gPCj*+ z7TNgYq59$%jID_D6-m#`rOh-nQKwE(X}7F(uUm}e-G4Q9$dzT-M7sUi2BbBPZDZ4L zIz$j&(HHaFk4bxx-5sS|NmzLDD(WV)oRjm=>)0Os7PR(=T#DiI?#koWx!F}&_NR^r zvqHEVn;cQ8GIS$Wo-|s`za5{yV{2Num{xUqF_*1g$BySdJ9tiIA3Sa|U5uO1=%Ep1 zhG06!GScVZr#BuY{f{j^aTW6h`Lw$`vN$a3ZWC1+a=u&YM@JErk{(tfkT`?$Z|X3u zListlC84+;zhh)@HzirT!)|z8QYXyaJv`l9}p1jIMZe@ZbAtuVBl-22WB9ie(<^Hi49)it)tCz8r4dAB?ymjVka5&MvI z7EOCPty(R^(t?cD#DhM`sdw47Mb(y-6}BxVy(@lFFOgCB3=bWdKSx)8y!u&)LOoXr z=P#jWgFVkd1E>>7wp{aJp9`C5J$^lQc8eMqIYDWL^ z>8}-sf7fCA&C2@53{-UPp1RG)MaYTmYEJhIh+=X;Jswtl-6%=MJ|bV6$+IuKK=s+g zw|kRq0cY zz0@?l_KM=<7mqnbUe161|I~8zQB7S*oCSC3q8M#KlojF;ZP=!msvv>~Bg+A_ETpLz zJ}g+QXb=&hti=R)R$8!Pjfg_!D-9o-v_y8#@?9`1A0A}aLJ*`4A_imw*bspL3CVlz zyo3aG(RF*;|B~E!bMKq^&1CMqGZWso)4imPA-&OlKD`XYnh3cokb^QSvzY2$**BID zajdg^n^WDn0%_+@OS2-^wg#u3h%b0EP7J%eI5w*=d1IcpwKO0gK0aI4*|_|(z>n|> z+h-3Oo)6An^j*lcR9%>CVx25ByKeK3+}9K1Py(;)u%l^zGY8=MeF5ogl8wD8kHU^v zIYeMY(mQ6zs&nL~NB#9~1KZjyM@2!Hx^ODdcqEo%cR&3l})Ec+L zs@}6aEHOQh{m-mVI~_kAa8VKmLjs>mOiW+}1B#CWv~@|eL2hAh=758}?fUdt?Ob7w z%}Y)pYQ;!*6m?3n4}B}U)>yA76eC?D|MlztxvN{qP1!EL6)X7hN&&ydKXpaVfdh?5 zU0>T9>c80Ckd>Dmb$(P`S$DQX(92(=Tr;yM{WSIQWMZBO5{vpIZ|CTSk&toEZ|zA?&E$Owsz6hKV6tF=vm*YUuFf>#21p ztZ6abOcOgPZ zJTuvpd$P7FMqIV%uUQkVqK;YH)}oUXt&b`;a=_nx->Sqd?*yNkk+29~*_XAM`-}yN z=!zCCMHTD%<&;ldLtiW})UGFJRd4;dq{{6zqih2InxY9?Q~!9ZXoGO?TZ!3gQ$lPy zG_&^IwFBH$Ui^>^my3Ec$iG7$j-Foj-QVstnN{r~b#*MVe|y~7Roqm}92Z{CIB4o^ zYss5_ywt-yLWR1$yFl?lT^JejWW~-E7j!2`g0!cU{UuyOD zT`~#tbpNE2hT7?~fb*$0@GRi1PqpZH>LXvqF1VY4U4^Hw!De72u(Gw+P+$?ZvOeR_ zA4Pw%R#Nf$cb?>Y2eMmA@Z;AG9&Hfq?0sK+Im3B&`TqD_E1GlLHs;3gt5`1UeJUME zbnk0pH`iNNqQyl>dzd+78Ux2siq?jx<(AR)pFLwprJF4lhsN@$E3 zgOiqEVzEe8l?t8Jdg&)1?_QJo!+TIDB-V&I-bWB7vwyPJQ!5luE1VIv{A-NS6%NcE zOj}W9$`s`RdT77I)>k{-fshZ=z!d?zud_jV+|8$Zi`g!L-`YvIN7rUe-N@OIf$Bg&;Dk*7USGMYfDBnelVhA6pL9~ z<))oZc_<;wbA1rVMB0bZ;g+IGkSSL$Q-m2s)yo-|?!fhOP*sz{C(K%a@&In2s)?#n ztfLc=T}xFP-eputm1(ytBk7?ci7ibp3Sh}mKQgLmw!x?aL6>vk9b7rC8ZX$B7D@<1 zG2SvQXN>SI+{1AnYs8nmqhK9~ZXJBA;|>*Iq29Y2Zp$;#MkA*R24^}AlEMwzbX`cB zU5xZzWxra^OJQ^+i~RBFYz))Q!7$mHhw`q-(4#O%;4S{hN_8m?BBL%r@SB)IE)HYX zFu=HyC~>D~r#cWt-ZMlS`M(YkX*%so-CJt@Ey-xdRotjoF^f!BD7n%++$y*d+t}wZ zNX0Qol*47I&K8K07r=C$gfcHs<4n+6?*3T`*>7H1zVp!6Q4xdSMxH92Dc*9X6QBXD zW^r`^It@A$;8>EP;puQL4b0lev{zuZ>CByZW^|MX{#%E>qDjnm#=LtNX;&o=|Es71 zdP_QsjNqLEjSea|rdWDQbQDtMmK41dK$-@-ec9pxe_XvC;4Vv=Y*_m!*;nHQyHFi! z1H!!g6dUI4z~HYgdmpj%_0f&&7F8tBzz(1n1g~SOcM*J{;wcwFM@zrf zQ^Mby1yBynQ!<5+)Zk=h@Fp)KCG$Ixhi_a>hRO+XC$x>G5b$Ng{5V&?@?}4?m}u7B z?b-c}{M6$8rJnMFd`I3NYsoFbcf)VylMZKQMSV*;9`6pZ_!o2C`-OQiYg(eMK0L;^ znXuZk`pAe2Cj1}+9fXvsi!Z5tU--E3#kKOkG`%&n(Sr*fli{E-PAP=j#3w)g2Yux~ AnE(I) literal 0 HcmV?d00001 diff --git a/examples/seneca/loadShape/tsmall.svg b/examples/seneca/loadShape/tsmall.svg new file mode 100644 index 000000000..751842fb2 --- /dev/null +++ b/examples/seneca/loadShape/tsmall.svg @@ -0,0 +1,13 @@ + + + + + +]> + + + + + diff --git a/processing.js b/processing.js index 2a93987b4..d127c31a1 100644 --- a/processing.js +++ b/processing.js @@ -1801,7 +1801,7 @@ } return shape; }, - parsePath: function(){ + parsePath: function() { this.family = p.PATH; this.kind = 0; var pathDataChars = []; @@ -1829,15 +1829,16 @@ var str = ""; var tmpArray =[]; var flag = false; - while ( i< pathData.length -1) { + while (i< pathData.length) { valOf = pathData[i].valueOf(); - if ((valOf >= 65 && valOf <= 90) || (valOf >= 97 && valOf.valueOf() <= 122)) { // if its a letter + if ((valOf >= 65 && valOf <= 90) || (valOf >= 97 && valOf <= 122)) { // if its a letter // populate the tmpArray with coordinates j = i; - i++; + i++; + if (i < pathData.length) { // dont go over boundary of array tmpArray = []; valOf = pathData[i].valueOf(); - while (!((valOf >= 65 && valOf <= 90) || (valOf >= 97 && valOf.valueOf() <= 100) || (valOf >= 102 && valOf.valueOf() <= 122)) && flag === false) { // if its NOT a letter + while (!((valOf >= 65 && valOf <= 90) || (valOf >= 97 && valOf <= 100) || (valOf >= 102 && valOf <= 122)) && flag === false) { // if its NOT a letter if (valOf === 32) { //if its a space and the str isn't empty // somethimes you get a space after the letter if (str !== "") { @@ -1862,12 +1863,13 @@ str += pathData[i].toString(); i++; } - if ( i === pathData.length) { + if (i === pathData.length) { // dont go over boundary of array flag = true; } else { valOf = pathData[i].valueOf(); } } + } if (str !== "") { tmpArray.push(parseFloat(str)); str = ""; @@ -1878,8 +1880,8 @@ cx = tmpArray[0]; cy = tmpArray[1]; this.parsePathMoveto(cx, cy); - if (tmpArray.length > 2 ) { - for( j = 2; j < tmpArray.length - 2; j+=2) { + if (tmpArray.length > 2) { + for (j = 2; j < tmpArray.length - 2; j+=2) { // absolute line to cx = tmpArray[j]; cy = tmpArray[j+1]; @@ -1890,18 +1892,12 @@ break; case 109: // m - move to (relative) if (tmpArray.length >= 2 && tmpArray.length % 2 === 0) { // need one+ pairs of co-ordinates - if ( j !== 0 ) { - // If a relative moveto (m) appears as the first element of the path, - // then it is treated as a pair of absolute co-ordinates - cx = cx + tmpArray[0]; - cy = cy + tmpArray[1]; - } this.parsePathMoveto(cx,cy); - if (tmpArray.length > 2 ) { + if (tmpArray.length > 2) { for (j = 2; j < tmpArray.length - 2; j+=2) { // relative line to - cx = cx + tmpArray[j]; - cy = cy + tmpArray[j + 1]; + cx += tmpArray[j]; + cy += tmpArray[j + 1]; this.parsePathLineto(cx,cy); } } @@ -1920,8 +1916,8 @@ case 108: // l if (tmpArray.length >= 2 && tmpArray.length % 2 === 0) { // need one+ pairs of co-ordinates for (j = 0; j < tmpArray.length; j+=2) { - cx = cx + tmpArray[j]; - cy = cy + tmpArray[j+1]; + cx += tmpArray[j]; + cy += tmpArray[j+1]; this.parsePathLineto(cx,cy); } } @@ -1936,7 +1932,7 @@ case 104: // horizontal lineto relative for (j = 0; j < tmpArray.length; j++) { // multiple x co-ordinates can be provided - cx = cx + tmpArray[j]; + cx += tmpArray[j]; this.parsePathLineto(cx, cy); } break; @@ -1950,7 +1946,7 @@ case 118: for (j = 0; j < tmpArray.length; j++) { // multiple y co-ordinates can be provided - cy = cy + tmpArray[j]; + cy += tmpArray[j]; this.parsePathLineto(cx, cy); } break; @@ -2106,23 +2102,35 @@ } }, parsePathQuadto: function(x1, y1, cx, cy, x2, y2) { - this.parsePathCode(p.BEZIER_VERTEX); - // x1/y1 already covered by last moveto, lineto, or curveto - this.parsePathVertex(x1 + ((cx-x1)*2/3), y1 + ((cy-y1)*2/3)); - this.parsePathVertex(x2 + ((cx-x2)*2/3), y2 + ((cy-y2)*2/3)); - this.parsePathVertex(x2, y2); + if (this.vertices.length > 0) { + this.parsePathCode(p.BEZIER_VERTEX); + // x1/y1 already covered by last moveto, lineto, or curveto + this.parsePathVertex(x1 + ((cx-x1)*2/3), y1 + ((cy-y1)*2/3)); + this.parsePathVertex(x2 + ((cx-x2)*2/3), y2 + ((cy-y2)*2/3)); + this.parsePathVertex(x2, y2); + } else { + throw ("Path must start with M/m"); + } }, parsePathCurveto : function(x1, y1, x2, y2, x3, y3) { - this.parsePathCode(p.BEZIER_VERTEX ); - this.parsePathVertex(x1, y1); - this.parsePathVertex(x2, y2); - this.parsePathVertex(x3, y3); + if (this.vertices.length > 0) { + this.parsePathCode(p.BEZIER_VERTEX ); + this.parsePathVertex(x1, y1); + this.parsePathVertex(x2, y2); + this.parsePathVertex(x3, y3); + } else { + throw ("Path must start with M/m"); + } }, parsePathLineto: function(px, py) { - this.parsePathCode(p.VERTEX); - this.parsePathVertex(px, py); - // add property to distinguish between curContext.moveTo or curContext.lineTo - this.vertices[this.vertices.length-1]["moveTo"] = false; + if (this.vertices.length > 0) { + this.parsePathCode(p.VERTEX); + this.parsePathVertex(px, py); + // add property to distinguish between curContext.moveTo or curContext.lineTo + this.vertices[this.vertices.length-1]["moveTo"] = false; + } else { + throw ("Path must start with M/m"); + } }, parsePathMoveto: function(px, py) { if (this.vertices.length > 0) { @@ -7443,10 +7451,10 @@ } if(!close){ - p.CLOSE = false; + //p.CLOSE = false; } else{ - p.CLOSE = true; + //p.CLOSE = true; fillVertArray.push(vertArray[0][0]); fillVertArray.push(vertArray[0][1]); @@ -7497,6 +7505,10 @@ b[3] = [vertArray[i+1][0], vertArray[i+1][1]]; curContext.bezierCurveTo(b[1][0], b[1][1], b[2][0], b[2][1], b[3][0], b[3][1]); } + // close the shape + if (close === p.CLOSE){ + curContext.lineTo(vertArray[0][0], vertArray[0][1]); + } executeContextFill(); executeContextStroke(); curContext.closePath(); @@ -7564,6 +7576,10 @@ curContext.bezierCurveTo(vertArray[i][0], vertArray[i][1], vertArray[i][2], vertArray[i][3], vertArray[i][4], vertArray[i][5]); } } + // close the shape + if (close === p.CLOSE){ + curContext.lineTo(vertArray[0][0], vertArray[0][1]); + } executeContextFill(); executeContextStroke(); curContext.closePath(); @@ -7968,7 +7984,7 @@ } } } - if(p.CLOSE){ + if(close === p.CLOSE){ curContext.lineTo(vertArray[0][0], vertArray[0][1]); } executeContextFill();