From 1cffc33eed003adddf30c839fb8398bf8b5a88ab Mon Sep 17 00:00:00 2001 From: abe- Date: Fri, 9 Jun 2017 01:31:13 +0200 Subject: [PATCH] graficos --- docs/elements.html | 305 -- docs/generic.html | 11 - graficos/data/baleares.png | Bin 0 -> 3141 bytes graficos/data/capa-0.png | Bin 0 -> 14940 bytes graficos/data/capa-1.png | Bin 0 -> 23978 bytes graficos/data/capa-10.png | Bin 0 -> 1690 bytes graficos/data/capa-2.png | Bin 0 -> 19227 bytes graficos/data/capa-3.png | Bin 0 -> 1690 bytes graficos/data/capa-4.png | Bin 0 -> 18152 bytes graficos/data/capa-5.png | Bin 0 -> 20147 bytes graficos/data/capa-6.png | Bin 0 -> 18109 bytes graficos/data/capa-7.png | Bin 0 -> 23502 bytes graficos/data/capa-8.png | Bin 0 -> 8929 bytes graficos/data/capa-9.png | Bin 0 -> 7490 bytes graficos/data/capa-PGC-0.png | Bin 0 -> 11981 bytes graficos/data/capa-PGC-1.png | Bin 0 -> 17685 bytes graficos/data/capa-PGC-10.png | Bin 0 -> 3129 bytes graficos/data/capa-PGC-2.png | Bin 0 -> 16363 bytes graficos/data/capa-PGC-3.png | Bin 0 -> 5128 bytes graficos/data/capa-PGC-4.png | Bin 0 -> 13405 bytes graficos/data/capa-PGC-5.png | Bin 0 -> 15292 bytes graficos/data/capa-PGC-6.png | Bin 0 -> 15427 bytes graficos/data/capa-PGC-7.png | Bin 0 -> 14056 bytes graficos/data/capa-PGC-8.png | Bin 0 -> 7966 bytes graficos/data/capa-PGC-9.png | Bin 0 -> 6181 bytes graficos/data/cmap-cuencas.png | Bin 0 -> 40192 bytes graficos/data/cuencas.png | Bin 0 -> 73258 bytes graficos/data/duero.png | Bin 0 -> 7747 bytes graficos/data/ebro.png | Bin 0 -> 7550 bytes graficos/data/guadalquivir.png | Bin 0 -> 6770 bytes graficos/data/guadiana.png | Bin 0 -> 7364 bytes graficos/data/harvester_1046427_cc.png | Bin 0 -> 11591 bytes graficos/data/harvester_1046427_cc_p.png | Bin 0 -> 1520 bytes graficos/data/jucar.png | Bin 0 -> 6026 bytes graficos/data/norte.png | Bin 0 -> 7500 bytes graficos/data/pirineo.png | Bin 0 -> 4087 bytes graficos/data/segura.png | Bin 0 -> 3988 bytes graficos/data/sur.png | Bin 0 -> 4762 bytes graficos/data/tajo.png | Bin 0 -> 6455 bytes graficos/data/tractor_792349_cc.png | Bin 0 -> 16199 bytes graficos/data/tractor_792349_cc_p.png | Bin 0 -> 454 bytes graficos/expropiacion.html | 13 + graficos/expropiacion.js | 64 + graficos/grafica-0.1.0-mod.js | 5444 ++++++++++++++++++++++ graficos/grafica-0.1.0-mod.min.js | 5 + graficos/grafica-0.1.0.min.js | 5 + graficos/hidraulicas.html | 12 + graficos/hidraulicas.js | 112 + graficos/mecanizacion.html | 12 + graficos/mecanizacion.js | 101 + graficos/parcelas-old.js | 94 + graficos/parcelas.html | 12 + graficos/parcelas.js | 78 + 53 files changed, 5952 insertions(+), 316 deletions(-) delete mode 100755 docs/elements.html delete mode 100755 docs/generic.html create mode 100644 graficos/data/baleares.png create mode 100644 graficos/data/capa-0.png create mode 100644 graficos/data/capa-1.png create mode 100644 graficos/data/capa-10.png create mode 100644 graficos/data/capa-2.png create mode 100644 graficos/data/capa-3.png create mode 100644 graficos/data/capa-4.png create mode 100644 graficos/data/capa-5.png create mode 100644 graficos/data/capa-6.png create mode 100644 graficos/data/capa-7.png create mode 100644 graficos/data/capa-8.png create mode 100644 graficos/data/capa-9.png create mode 100644 graficos/data/capa-PGC-0.png create mode 100644 graficos/data/capa-PGC-1.png create mode 100644 graficos/data/capa-PGC-10.png create mode 100644 graficos/data/capa-PGC-2.png create mode 100644 graficos/data/capa-PGC-3.png create mode 100644 graficos/data/capa-PGC-4.png create mode 100644 graficos/data/capa-PGC-5.png create mode 100644 graficos/data/capa-PGC-6.png create mode 100644 graficos/data/capa-PGC-7.png create mode 100644 graficos/data/capa-PGC-8.png create mode 100644 graficos/data/capa-PGC-9.png create mode 100644 graficos/data/cmap-cuencas.png create mode 100644 graficos/data/cuencas.png create mode 100644 graficos/data/duero.png create mode 100644 graficos/data/ebro.png create mode 100644 graficos/data/guadalquivir.png create mode 100644 graficos/data/guadiana.png create mode 100644 graficos/data/harvester_1046427_cc.png create mode 100644 graficos/data/harvester_1046427_cc_p.png create mode 100644 graficos/data/jucar.png create mode 100644 graficos/data/norte.png create mode 100644 graficos/data/pirineo.png create mode 100644 graficos/data/segura.png create mode 100644 graficos/data/sur.png create mode 100644 graficos/data/tajo.png create mode 100644 graficos/data/tractor_792349_cc.png create mode 100644 graficos/data/tractor_792349_cc_p.png create mode 100644 graficos/expropiacion.html create mode 100644 graficos/expropiacion.js create mode 100644 graficos/grafica-0.1.0-mod.js create mode 100644 graficos/grafica-0.1.0-mod.min.js create mode 100644 graficos/grafica-0.1.0.min.js create mode 100755 graficos/hidraulicas.html create mode 100644 graficos/hidraulicas.js create mode 100644 graficos/mecanizacion.html create mode 100644 graficos/mecanizacion.js create mode 100644 graficos/parcelas-old.js create mode 100644 graficos/parcelas.html create mode 100644 graficos/parcelas.js diff --git a/docs/elements.html b/docs/elements.html deleted file mode 100755 index 22a46ef..0000000 --- a/docs/elements.html +++ /dev/null @@ -1,305 +0,0 @@ ---- -layout: page -title: Elements ---- -
-

Text

-

This is bold and this is strong. This is italic and this is emphasized. - This is superscript text and this is subscript text. - This is underlined and this is code: for (;;) { ... }. Finally, this is a link.

-
-
-

Heading with a Subtitle

-

Lorem ipsum dolor sit amet nullam id egestas urna aliquam

-
-

Nunc lacinia ante nunc ac lobortis. Interdum adipiscing gravida odio porttitor sem non mi integer non faucibus ornare mi ut ante amet placerat aliquet. Volutpat eu sed ante lacinia sapien lorem accumsan varius montes viverra nibh in adipiscing blandit tempus accumsan.

-
-
Heading with a Subtitle
-

Lorem ipsum dolor sit amet nullam id egestas urna aliquam

-
-

Nunc lacinia ante nunc ac lobortis. Interdum adipiscing gravida odio porttitor sem non mi integer non faucibus ornare mi ut ante amet placerat aliquet. Volutpat eu sed ante lacinia sapien lorem accumsan varius montes viverra nibh in adipiscing blandit tempus accumsan.

-
-

Heading Level 2

-

Heading Level 3

-

Heading Level 4

-
Heading Level 5
-
Heading Level 6
-
-
Blockquote
-
Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.
-
Preformatted
-
i = 0;
-
-while (!deck.isInOrder()) {
-  print 'Iteration ' + i;
-  deck.shuffle();
-  i++;
-}
-
-print 'It took ' + i + ' iterations to sort the deck.';
-
-
-

Lists

-
-
-
Unordered
-
    -
  • Dolor pulvinar etiam.
  • -
  • Sagittis adipiscing.
  • -
  • Felis enim feugiat.
  • -
-
Alternate
-
    -
  • Dolor pulvinar etiam.
  • -
  • Sagittis adipiscing.
  • -
  • Felis enim feugiat.
  • -
-
-
-
Ordered
-
    -
  1. Dolor pulvinar etiam.
  2. -
  3. Etiam vel felis viverra.
  4. -
  5. Felis enim feugiat.
  6. -
  7. Dolor pulvinar etiam.
  8. -
  9. Etiam vel felis lorem.
  10. -
  11. Felis enim et feugiat.
  12. -
-
Icons
- -
-
-
Actions
-
-
- - - - -
-
- - -
-
-
-
-

Table

-
Default
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionPrice
Item OneAnte turpis integer aliquet porttitor.29.99
Item TwoVis ac commodo adipiscing arcu aliquet.19.99
Item Three Morbi faucibus arcu accumsan lorem.29.99
Item FourVitae integer tempus condimentum.19.99
Item FiveAnte turpis integer aliquet porttitor.29.99
100.00
-
-
Alternate
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionPrice
Item OneAnte turpis integer aliquet porttitor.29.99
Item TwoVis ac commodo adipiscing arcu aliquet.19.99
Item Three Morbi faucibus arcu accumsan lorem.29.99
Item FourVitae integer tempus condimentum.19.99
Item FiveAnte turpis integer aliquet porttitor.29.99
100.00
-
-
-
-

Buttons

- - - - - - -
-
-

Form

-
-
-
- -
-
- -
-
-
- -
-
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- -
-
-
    -
  • -
  • -
-
-
-
-
-
-

Image

-
Fit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Left & Right
-

Morbi mattis mi consectetur tortor elementum, varius pellentesque velit convallis. Aenean tincidunt lectus auctor mauris maximus, ac scelerisque ipsum tempor. Duis vulputate ex et ex tincidunt, quis lacinia velit aliquet. Duis non efficitur nisi, id malesuada justo. Maecenas sagittis felis ac sagittis semper. Curabitur purus leo, tempus sed finibus eget, fringilla quis risus. Maecenas et lorem quis sem varius sagittis et a est. Maecenas iaculis iaculis sem. Donec vel dolor at arcu tincidunt bibendum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce ut aliquet justo. Donec id neque ipsum. Integer eget ultricies odio. Nam vel ex a orci fringilla tincidunt. Aliquam eleifend ligula non velit accumsan cursus. Etiam ut gravida sapien. Morbi mattis mi consectetur tortor elementum, varius pellentesque velit convallis. Aenean tincidunt lectus auctor mauris maximus, ac scelerisque ipsum tempor. Duis vulputate ex et ex tincidunt, quis lacinia velit aliquet. Duis non efficitur nisi, id malesuada justo. Maecenas sagittis felis ac sagittis semper. Curabitur purus leo, tempus sed finibus eget, fringilla quis risus. Maecenas et lorem quis sem varius sagittis et a est. Maecenas iaculis iaculis sem. Donec vel dolor at arcu tincidunt bibendum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce ut aliquet justo. Donec id neque ipsum. Integer eget ultricies odio. Nam vel ex a orci fringilla tincidunt. Aliquam eleifend ligula non velit accumsan cursus. Etiam ut gravida sapien.

-

Vestibulum ultrices risus velit, sit amet blandit massa auctor sit amet. Sed eu lectus sem. Phasellus in odio at ipsum porttitor mollis id vel diam. Praesent sit amet posuere risus, eu faucibus lectus. Vivamus ex ligula, tempus pulvinar ipsum in, auctor porta quam. Proin nec dui cursus, posuere dui eget interdum. Fusce lectus magna, sagittis at facilisis vitae, pellentesque at etiam. Quisque posuere leo quis sem commodo, vel scelerisque nisi scelerisque. Suspendisse id quam vel tortor tincidunt suscipit. Nullam auctor orci eu dolor consectetur, interdum ullamcorper ante tincidunt. Mauris felis nec felis elementum varius. Nam sapien ante, varius in pulvinar vitae, rhoncus id massa. Donec varius ex in mauris ornare, eget euismod urna egestas. Etiam lacinia tempor ipsum, sodales porttitor justo. Aliquam dolor quam, semper in tortor eu, volutpat efficitur quam. Fusce nec fermentum nisl. Aenean erat diam, tempus aliquet erat. Etiam iaculis nulla ipsum, et pharetra libero rhoncus ut. Phasellus rutrum cursus velit, eget condimentum nunc blandit vel. In at pulvinar lectus. Morbi diam ante, vulputate et imperdiet eget, fermentum non dolor. Ut eleifend sagittis tincidunt. Sed viverra commodo mi, ac rhoncus justo. Duis neque ligula, elementum ut enim vel, posuere finibus justo. Vivamus facilisis maximus nibh quis pulvinar. Quisque hendrerit in ipsum id tellus facilisis fermentum. Proin mauris dui.

-
diff --git a/docs/generic.html b/docs/generic.html deleted file mode 100755 index 8b1a488..0000000 --- a/docs/generic.html +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: page -title: Generic ---- -

Lorem ipsum dolor

-

Morbi mattis mi consectetur tortor elementum, varius pellentesque velit convallis. Aenean tincidunt lectus auctor mauris maximus, ac scelerisque ipsum tempor. Duis vulputate ex et ex tincidunt, quis lacinia velit aliquet. Duis non efficitur nisi, id malesuada justo. Maecenas sagittis felis ac sagittis semper. Curabitur purus leo, tempus sed finibus eget, fringilla quis risus. Maecenas et lorem quis sem varius sagittis et a est. Maecenas iaculis iaculis sem. Donec vel dolor at arcu tincidunt bibendum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce ut aliquet justo. Donec id neque ipsum. Integer eget ultricies odio. Nam vel ex a orci fringilla tincidunt. Aliquam eleifend ligula non velit accumsan cursus. Etiam ut gravida sapien.

-

Vestibulum ultrices risus velit, sit amet blandit massa auctor sit amet. Sed eu lectus sem. Phasellus in odio at ipsum porttitor mollis id vel diam. Praesent sit amet posuere risus, eu faucibus lectus. Vivamus ex ligula, tempus pulvinar ipsum in, auctor porta quam. Proin nec dui cursus, posuere dui eget interdum. Fusce lectus magna, sagittis at facilisis vitae, pellentesque at etiam. Quisque posuere leo quis sem commodo, vel scelerisque nisi scelerisque. Suspendisse id quam vel tortor tincidunt suscipit. Nullam auctor orci eu dolor consectetur, interdum ullamcorper ante tincidunt. Mauris felis nec felis elementum varius.

-
-

Feugiat aliquam

-

Nam sapien ante, varius in pulvinar vitae, rhoncus id massa. Donec varius ex in mauris ornare, eget euismod urna egestas. Etiam lacinia tempor ipsum, sodales porttitor justo. Aliquam dolor quam, semper in tortor eu, volutpat efficitur quam. Fusce nec fermentum nisl. Aenean erat diam, tempus aliquet erat.

-

Etiam iaculis nulla ipsum, et pharetra libero rhoncus ut. Phasellus rutrum cursus velit, eget condimentum nunc blandit vel. In at pulvinar lectus. Morbi diam ante, vulputate et imperdiet eget, fermentum non dolor. Ut eleifend sagittis tincidunt. Sed viverra commodo mi, ac rhoncus justo. Duis neque ligula, elementum ut enim vel, posuere finibus justo. Vivamus facilisis maximus nibh quis pulvinar. Quisque hendrerit in ipsum id tellus facilisis fermentum. Proin mauris dui, at vestibulum sit amet, auctor bibendum neque.

diff --git a/graficos/data/baleares.png b/graficos/data/baleares.png new file mode 100644 index 0000000000000000000000000000000000000000..aa19e048a80685d4c8e8fbed40f1b07e753f4695 GIT binary patch literal 3141 zcmeHJ`&U!f65c_90QFM6fS^E76CzSk>@CW(yi^VWBS=F8tO)o(NRX#cB(S)a788t| z@C>N6prw@n6*z%K5UedB70SJeAUQxlqR<5aK@ANNxSRe5?XTBa>#Tid*6f+t-#4?@ z&OdtO@CL&zh5&#Kh@WpT0PAc3(9tLALCe{?1JD5UqG*SG;R;3L)0PbvgA0DglL6RT zzxEM6-%@A^jru7_;6eRyJ>mzu^!j)0`4Ir4$B3_2NV;4#5?*urG(m4{5ucb+mg(0d zhFrPx?~s34_4L@d97PXq(hI5y+AJpoON=f%gyhcrr;CSDfBVTH-3 z7-tMm`wJODm#@U!<33LgXb;2{G%j*(RJ1RKt#%A_DCS;f4lb>(($>m+FYgifKR{s2 zCXWaJ(^!6$ymfK8JZ8|m3U!uT-9!N3Zfl4obGw{Pzh|HMX?%7fDzN=BnuaD*`&0o* zpP_hlO%4E^D9=%@&LeC6rNh-JGdE1Gi4dorM(qH(-j$gTqofP5`l(y3K3AY`l7Dyk zS4?kqoK}rZirpFCLYud)@);(+=u%fQ72lf=K+b1uaz?y={o8yj+}Fj`!CN0hHpihI zRE-a+6F8pMb~K6x&Q<;@*;-SzhQK%>YNDbHUJ{!6lDuWiq{I(8Fv5v zm;iFla(-G_#s+I2ti~nd|HL`1Dn5SWOcMc&y`uN*Z+4&V~qVt$`E zOY&qs=zFN?+mp899MO}ve2gTYbMNvRUF^s92bgKJiMTz^{&+h84VY2)>FXl$a6$jlbCZuiPV;e(&nuM25R95JzA^pl1ivKQJX-wUU{4roARC&AN#&dx9pVF^T!qn$qJ|7>C!mpJ#a+R@{w#aZbGH?jyteL8(g^3JZz4hbWH8AzNL(MbKGYo1C{cImzupGuy?Ubm6b{^ zQuo^`W82NX6G$B`DH@du;%WDO-%DD!jyPCGyPbOj8|1C&wZ)WJ_Id5QWi|evv~axs z&8t?iD)G<;$Zi6`xlN^zdkm{@Vf>~M=kix`vDz5i$n076G5jVr^2x+PA|0=ihv`7J z7>R@-d774!&BsCmZI>0SHkM+-NYeEZD-~x&<>@L7U%?#oUrrdkJLQ29a}IWTyIV5?5I-GD}a2LixMrUswm+WAWx& zV&LQymlQS1JsLWNq(yOi1bhH=Hu-m3ye{I$;rD~R*Hl{fin^)&=q~tQYuH`R%677| z8Kglv%2Ex6hSdUrVq_Q=^jG9Sh!5Ov6qlKZiV!v=&1NGc&Fq&631-}!^@HjLW-N9O z-3K$?Dk%tL(a&dk<0{t0H)9^u-OSc1I0`#S?oP5$K_#k`krN^!Uq2zkCroY2rKa{O zT4R;S_yRndX)!;L)giw8{KqzxNRT!Bv;IFGR1!f>>dg0KV~1016;kuF6q$Kd)H;Y> z zaZ tmGPb1`dFDf@?Sywz3+Pj{ssbL#QBq>WXEixtB||49XWW!x6V5<_kUWHD1iU~ literal 0 HcmV?d00001 diff --git a/graficos/data/capa-0.png b/graficos/data/capa-0.png new file mode 100644 index 0000000000000000000000000000000000000000..801ebbd9334b2d88c9cc9841222a4b599009c48e GIT binary patch literal 14940 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 literal 0 HcmV?d00001 diff --git a/graficos/data/capa-1.png b/graficos/data/capa-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ed7eb78585a7a1ab5f2f537733cc63d2509b2ee GIT binary patch literal 23978 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 literal 0 HcmV?d00001 diff --git a/graficos/data/capa-10.png b/graficos/data/capa-10.png new file mode 100644 index 0000000000000000000000000000000000000000..de0b838f8cf1855cd9101aa201338a866d229c50 GIT binary patch literal 1690 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU}EQB1B#@tvj7UPC3?CzhE&{od(e;(D0pbW zSN~l0`~^VfC>RZa(GVC7fzc2c4FU2)py4t@)ISEsgI#-jL56s``njxgN@xNASA!MK literal 0 HcmV?d00001 diff --git a/graficos/data/capa-2.png b/graficos/data/capa-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3bf39a112fde66a21ed1e828eb7e894d7709bd GIT binary patch literal 19227 zcmeIa`8$;T`v$Ih+83jwM8*u#Bs{c-88Ky0sY$j-g_J_}Z46IYCfgWmi+GojWS2cl zJ(jT)ktKT!p|NBc%P@Se+w&iMfA}89_c%U&=&0Mwec!M9eqGmfUgvpUJ-u>SYv;BD z+XMszc50J|WC4K1giv6f9 z!smqk(%5}QN8`+}x_-l%VcK7ZBa~`y$5}sY{L-=XK+XR8Q@i&`zbAgLoci&TQ_%L| zp~YBs_Ehr;H^ceW`PFrBiU0fgfAIu91t!f90{ze%k?&5*sLq=2#vp&~)%ANe$*V`D zc$ap`T*&bG7+Wo8gvp=)WQge~dEr^Rx46v&?>D(s*YajTwCHt%%hn0X+ z&rsVg8vq~iRZpQFkmfD&SVOx4X^Nk3m%ZfirfdpW0#m|RUctV;F7D+DbwT<#t6U!W zxS)b7<JPO2|t1a-GtuwbS1qlCA+B1y(0c|owEFV zz2%@s(KEf({M;2q=5m=!mJ9ylVV=j*%r7_A9%DG?mbCHD{iFG-*;Q@@WtZrJGtprZ zC(BCt?N3g&(XXU<7j-2IbWmmFJ~Hp%58Yaqqo%NOaVlHwWLk#J(GHqms_yurY26{V z+4{AcTQ>MoX`+A zbhM|pC`fzm2rs}m5*>3<_m^5v;O)E*`f@F}-cZFF5fdU<5p^y4^&Y09eB+A-*6V$chI@oeR=Ah`!nePQ7{Al<>vyhY#_^sYcz~lR~(WIs2`+17Si=mhNY%0kG;% z7PP3eP1;|(m68_Tz0eK+g-&F$3-+_^N`qQ72Dc|@FrB?)qZ-e{YOD7xSu`mx*uLH2 zlVBAmfjzJ3KrXT&5bH#wtbVh|u>uZmzgBJC`g&IqNcWcv{e&9>NlyeZyJ=i0r&|d^ z@XCK*3SYKc3MSdb@)smEV39vhXps5ta~3R~lH(^)^skRxlkJRJGqQygQQ^d58TBC@ z<;{Oo8Mx?ao}`;CgoW+*bWi?3#rNo=Xq1|2zIj(Uwm`#jF=C#Z=oZW4HMzNKAvEhmuo0ll$wDu4Z;EloVS zWUZ*-z7XPY=E>`b9<~=vcvtmlcEt_fXFlbNbR1ecf|0pB zhMdK zHaK66+e~sbe|Jn>JXVG2Ps-$@QsOQ;Zw((8x-;Cxu{U?#L}TMCw>)1?y3(w*k~uDb z!NY6OI*9(&wT*Er6GQ&+NdHCIwHpMxva|Qn(7yy60%~l%FmE!^eDhSe5hpPo@Aj_n zaZEG+@9#6bsh@AAc~_TCw;18`H`Ca&r|Vx$i(`!|{xKp9xK;-0(sl%Tm=U*aX2U+byQ=z?ofR(A|&X{XEe ze2$sAUG_fd*(r?UNDu6sr!iCgyRnL}-)H`Dp$VtrmtJS0b(`$i6*9z_Syc9}@Dd3w zSE~LFKWi7`l;T&VNS&# z6rPzfKL&R)-We=xUsyPHq2@>ZwoxDbqbD?nEk|CKoZ@Ib>znE?+@79L zH#Z`wj=U#PNd-)EmR`nvOvD~Y3mFf+<|7-X{)g}+6VI11{0e8 z&Ul7y&uY3by5mEF&SK9M`Z^6i1R@;4Q?@e3{_!UN?MyPE1{oL;b}i<@@@g%agLFUL zr4PX?geBMxdhmkH%r7&(yzU{-w5)C^;vH`p=2|TE7!j~Z>}>K`O6BCj;RCdJ6?~kK z@@~v2L%R0py%J}N$LDgc#qkbT$`50WBN7urZv6lUzVyWq9@T7lI)1yqey=l{@mod7 zG24S~8R9e0$7`BPXpEiq0-HZ*-&}^Q+{^Gc8eDpx};ro20PC8f02#24om)O>} zQectPpL!3sKR7%rxh#-0n(tONJ)E=Y@zAf}Ek#pSg_b)fV}7%iymy5MbzRk&dTn0o z9+F#*zim2dnHIGmgnhn^6UcrqvP-v*ZXNouDE@GgRG{}RA@eptJt6Xp>GrMTL5Ahw zx@xQPy&9F`lC6z%Iy2QjQ>PKg9sougDAF~}_dlXoPbOpT_HluFjukFtZj509kO#ogE*ewH>EvehwS27Y_w=f2C3X~neSAbyn58cg>q-u%P+ zpFXM%T(rB7A>VNlN)gwcR>6xKsveLFTlm|&_P0V&OR9g(lb)OVgjl@SjvITnHZ1&| zAc5WYa;_#?Nu`lW`E`wgl7yn07!)4Yps9d_;(Vhhrg=<;nBhDr_=%U@CxbWD804J7 zOfQtga;21R!F~|MDCcOsmzeMw<^--7R2rTo_22 zdA@`yI^%W|hYu(_65icWZj8iSo2#un)=s0+h#=D1PQUY=*AIxV+mAG{EK4pHA8_(T zVUSze0)_sbw{tH5zKo$uwA|&aWBA|YXAfV0&tYjq35f#0b>L|XC=gB1rhnt7RKIZo zKcZ@zHJH<%8&E}W2}`dFsomYA@HsNr|Gb=o&Lfn6xk9;uB^pOyay52@Iva*lV~W$%Znh$e9% z$U|7~FhD0oKBkTz6Rk$Bmv!=#B!-5zXqb$6U#flJ|VB3y-=6Tw)*3e;lp9g?$cTK zrhNIm>&f#k+8cEp>?3CJhi9Gmr{4)nwzmyf{X8G`W#xmu&D+SN-x)qrS5J$ar$Mr# zpCYPOX>~<9HBZl+8(m4bcYg&(c4W;hievW%U#(U#gSZQ|4rETEWi3bgl9{UsvP??# zJSyeJnW0tQ)UP@bEYnI!*CaM4RL)M1!Ep;)%%`fJexFO-Z{M!6N4{08zoGs>r`#w$ zfVLu1^M2}Tskof?YUEESKY~~o`C!-P*%Dq@MclF}4La822Q~oU$$MN$Ie+c;1=w!J+jmP5V-jsQ(pJK* zz2|6+j-8Xje`#Ok)TX11RV-#+WzNZEqCLK9y_&j>S0iS~cWoEqA2R}&8!rh^JfJ2^ z1Zy^@!MtoTlTy%(IfR;5krwsiAQ4sat{!_iwp+3R)$vVJTHEvFcGYUuNU$=F zY)Z(;sM1{xei$pD6j;;Rv4=bg=>dQGuzzA%I=WSN>aXq4#{SK=@bb%5^ZrORdbP6T z$ePz~jaWjZlpK`jW+p}ru-iTy9_7neY5Bq~dYIOd8Sg5F=B6eOc3#WlCQ_8Tt@w}j zVGU!u14%tk5}W6aoX6qo?k37Zn08bwNtZfhnwk}a(f{>LLpvZ4;%%k{^Wt{KKl|D+ z(6&KWcdy)vGPZ>=!EScyJ4+1m3QNgEOKBa2?>m*>$0$3Iw=*{f+@ ztJA4hb0Qdp+x6)KdbG!@6w-_1g;`WbffTXMx;26S&X_QALOm|H=9DL`@<5~3vklT- zzwLi>Sk6K1&=J;GZ)7JK_q<%p;II}jL)^qkk9;^DP%~*&jU{K#o+R3!&+B|9MZK%k zTBL;N<9luYqOlh;55TQTu4nQ`J?<~!nhhW?a$^C*Pk+U}QIvwL_!ai>{IKwibpyMx zPTA!0oIF}f=Bta&_m%D^Lmc>WK26(|IjGnZ%&2O;nT+UWgK`S8kVrZ2y* zc$>Ag)4dzQv&6)^6!W}dbtxz;r0^$O!{4O*Irz`(Rq74QG(8&cmhu3kriKDbec%fu@qT@%wO}F@4rqAF_MHtz)v>)t@=|x{oEnT)zYX(#oP}652 zla9G~L}L84_Smq+@i6h$~YA|#n_NBSR^kfHp_$odV-IY0h zJ!e*}E;8pIXe4*DfJVU)$P1TG2j8@bg zy%(q78^&dK&?^wA((%pVe)nnlot$LpkMbtdOM*{dRaH#z&iO(vBiK^hm+-FUVbKK9 zqqc-fvG#@QX@jAQ5?Gn<4CKp;w{murA6B*-@pwJeH56R7k#zamW8`{x2jZqxj|LCJ zN$LHQ8bjZCO?ifZrgS-r|84=SerY_~6s^hhlqa82uUpbP0Py7Hu~_L3JSxzw6)kbgzR??_6>2aKG{MebxRY4(r3kq=jdT)=%{trQutrrHGx0GWMTt(ta2d z)*kt}9PSk!J&?I#6>?1d3nl_ENoaDfCUfF^?(Dk^bY^7Is&?5ibyH30^L6`56tP3P zLUkOi@t52Ramin(CiIs1V(QV#zhGxLK1Hgl@S&c*gsJ7%Pu$pmwjD8TGWaiU4}RrX z=G$N#`|5d0CFUOd!)QI{r-Cy(`DuZqIDG}rn?#)eKpWHjY(P1VoMf3~sSDFQ)j*O> zyTXmBa|kA;E8z1p(FX0ac_LW$(h%?algYsj!C{_KRIU_0Kaf=QZ7c32eKw0Ke)T4y z?$E9qkO?w+bpOVGujKQDgdqpTc0qKnoA&aG30D< zg-bI*jnt4Lb3&Tt;5+>-?0&$rCq}d|6!s% zk`UXe4_5ASL>Uk0QXA&S0%N%qX3&Eqgf|z}_@<+i*nzezcxas9n%OpNgorO!sXYomoA20+94>m!=rlWs6Q`x&X&J$wrUQ!(zfE= zOs4Er96lp7A$BF9k+)YeOfDfTvIJAbwQ$bV?-QJogJ!!kTUU8$UVDC0YdMVmzAKwr z6}Y&qYqw0f+UEsJr`2}41#-kjBur=gUx!hj=UlsZewGKXz9q-2BI(v`dizhwwMKj& zb}@2kIZTkXceYB0#jYo-x)Wa{py#1jM<9o-oF&3L1N$A5tP`Thh$KGs#qsWQS>(&tBhe69u2n_nZ| z4gE4S7}f;h`xqbuA|`|Z!&v)~v>qQ%H_IxbiW}Y}*zDUAy6|`3h<$9R(U{k5MdFbQ z5rAUS@}D#;{4Bo+l|^x%%;L4rfS&Il?NB4JONr z7KPw|6EiGRpjJa)%F38;XBIfdh8qjn&{rr=0#5bK?GO&aubLBx)y#2VGo+n(k3YP z4ThLJo&!)Uwg^6-G@%`pi0xH$3m^^MbA-UrBtlU5HuIX$Y$YU#jfT&i{}ovYDHULv zD)H)k6Y|%98vZpE4QWY^){F$e2UFq&&5+@{Uohn6J&@KUI}Cga6|h=K{k>i1nRa}* z;M9m;x`4w@262>{zZW}GzVQ~{sLO<~ptwswKvI4ACSibS#eO^v&$0b`I_kc=^To5P z@z_#9r|5x17a6l7?Hb-lnD4lUX?D4oK{t;oOK3P;r4{)Vc)=Iw_=u9%u+?|Q9I4_; zJ&>+RhIY2sh{klAJb{SrkTU8>5loUDF0bnKK0AN89Dry*d7U) z=RL1Y{QQojp+EAWB}?M2UQ+hjMXDed_pKwJ3?FoZeV!~!&QXy{ni(=KZ>PTvlwID1 zlG31lv@9u6^tn^6e{oR+%WITp@vffSt4o2)FNjI*ROE8mC1l^@nPyQjRS!o^Yhxo^ z$Afdv^l36}Pkf!^RybG%3n|YsO)n%E)`iv{FV|o$YUhNkNSWdAFHY)da}u3^NhoRg zA|9JIflBFA{n-UYjTqrOBWF^?(f(?ILp+xL7VL&@n6R+Mz6W#@H^zM}fekHVd<+a_cl&wu2$F}=1q z&*Z178c`>1{*^JCcb$&({ip_ww~&gowbLW@WoI zAx*()z{wh5>GaiaZCJ;yo3tpdtlVajUEew6sH=w@v9nCoR!;o@`t7?+wAkwg0f*j~ zkkf-?)!_#8EuH=9xPe#W+v$ec%_SMdRMYTZ{?K(e^y>T*G}J+F@kBzp-`MBP3q z%RdesVFDgv*!wp%nTyYX>Zh#cIw3q6QMp({Er8T^FMOKEXexKpLL$RLjX0-U@n#8y z<3Ml)d4`SAfK`u33aptqW(R4Dd`G=qu>QNIrA>L%5SGG2L>ISbGH#;hlescmNGtaN?>?bRG9f`H!>mz-yB!G>mi7`MvHQZW88Rqo@vVt(ocJjUlJO1;6D<>ez4!i zh_S{gPwT!QQ*u>L%cl!Ab^sb4O%0K_6)kpSilGJtw_+Bmek!$COWCt8fMkpS`Cci| zPfifS9{SfrUc1pq?Y?SGI3n_9yo!~7ERf`?GD!h#^Jnaru)m93SFiZS^GP{qv;juh zMSC_jC?x}3rKXL9-tV{HlkOfehNn?h08yMF59eD9kR0MlRs7=J7R5H^qDHsI{F{*o zeMjTDgbkKnH2p>i19L)~#_~2qrc<9TPJAi|tKRG3ebtfEa39KSXmE2$_>j48$r(O| zdrW>+##rhj-)GJO_b)<1<{h=x{;VFNe^Fv;wSyjLO}R= z9_B3bqH@d6;`}w093OPdqj2|h$q+par^aF)e@qZ{%jd6>eq~K!$lb4)fb)lPS#{}L zX?9S6MG^(uUz&jqtG9dFUiOn$wUF87R4lj5x8k;1dk5p-K9P>@fV@GzNSbOOsAc0=+$(tHu zv5z%Rt2^+Y=_r@gxcybrg*t;taWT2~wSz|gThkC7v z1vV6 zS7&Zypm&}_SiNSGCrS6NY=6^qj0!^5jWk36nJqIT=jLkVELAL1xA(^Vaz`ZXc3H)` zZ!=ijLA9fKijVm>2p8sY8)?*(Ckdpf&V7!r$B*G&J*C=1IH#J1Ma)fxY4__F>Sy>b z=1~DSu04d6cLGi2_A}otaR&&8qYEsUca$zP=b};$oMoTHi+}0s&3$w}$C_|8h#vR6 zaj077&2jw2lNs)(FTdBKY-h}Q*>D1>L&vhoOIBH?K6!nG14C*MmcOsjTD}~TOGj7h zW?#^&8`Eo5o}XzOO;9jD>q^Yvp|BeZ+~inVy@NM#K85ujG92?74=Li9BDSNazix`5 zf;x1tPqwUda(B|bBO31wG`*>FYeowOaNAH2ct1}3&?kAZrRkr?Tpba zDTUStvAknPyVz@wVnM*{VYgVgH9@rsB*u_x?V)ceZXc+#6Lb5a^>lP=e0hE_jl)Bj zY3SPK;b3qLXE&~WAHzBW69JYEb`FpQzjaRKi!dT=F%hkM-iu2Dv)j9&()j|d+r|67 zK}Fq}dI1OG7Nzx|2(D|A`gckB`NCpAQUrN&%2n8k@9QkDv*R4#4(=p@(?C$K%aLbd` zwO^|~02ffXF#*X!Wk;gN=I#}F5`LGaqbD>5zl55RPfLKVAwCVtzT(#-_tX?zg7+a% z!MEHq#IliksGV;__~ORD{3c|z)X2o}dy@0WyO#9DZ0eUP2$g4#xshpe-RF>$sY2cu zs0@yqD_RFMKQ?DqG=F$*Z)&wFT6D%I3~?_lq+TG|)Z-CS+fmy1?&{Tvl6;pw&B|D7 zLbuu1!L83%t@CC!g+SRUu

CZfnh+0nVx~4>!JjY%)0R)E{7J`~ON1VbpskyxUB2 z3kUVgDWK*VAB8hN%@mi+lNx@t4h%vI&w;l6!`Mt}h=X8YPdJD!<=4oli?^3i&+BX| z4J26suBppQM<}EQl*i4&z1ZM*P39peJ=JX>cq7cfZC97?P88uUW7opyv#%SG1~J-% zW@@)JV!a|}cR1H#`41waU0*dWQgZumb#i}^Y;+%eg1n0A_!1uR+QLp#8pYA#S_WBB zz&%BDQX|^+;+H1c=(QgZlKQiu2l*uBqRpwq-X5UaShl{;GzZBK!UyRlfuxS*b6l>) zLL3WW)wvx`h;`@_>wjYn>xz_1Z28YtFJ|}p-(tYE zCL9TfM3|eilh!(;-;|_?&3pS6>x>A8B9Nm2<|6j;*zMLyuCsB|JO`k3Zo6n^7Kkuj za1R%?EcH#Uar?1dkAWGzSoaGIOYgFasL$vL=@1ZTW4~wRmt^pE84LN4b}Gi}$$z8d z+szkNm$h0wX%|-CLv-m;-HW68A;R*LQ$GCtE8Us! zwkAkfQ9Zk2JGuJ-JU*?UR&5qSBA)Tx{1Cg3$3T!;>n`)~+RRku_{}iku*!wK*w#Hb zggCYF3ZF{(edhZ|=?}*)UMN2T#RjC+qscY1tCqD3_J+)dXAOe*TNo`3J-`wuV!T(+ z94TGJ9~shxM*ISl&(6X(Lmj=I?n2Cf~<1GwY_S7nl$^sh#(Udd)IaqUtkbcPy5ZA z%25x9j|PT=<&yDB6yx|6OFVK))AILb=wUcle}zGwp1zxhy5FwJd^F6Pk~9SSk+EJ+ zHr1%dPXxR7m;+Q8D}BH`B~5%gw#Cx*qgtfA^Ry_vY$~klQzL3>*1NYA=_ekT&~_99 z&EXyad#=bfvwh*wPNDJb{4kW%|Kd0-qGTIgI1^E{SDQ7ZZ*H?M-^r*y2nl?M#-+fh%W{w+I<#gZ4$g-BLUGG&%)cC)~SelZg-!GcF%x66MLo33qwr)b7hu2pQ3qXQ+_7d}+G+ zF)$JQj$P3LO_>j*^g1Vp>e6eEubs8bsYLj}QhoL|mQ<3X>Q%~4Mt}QCCOVAM`z5;B z|L>F%G0a9bCZb)8?L?bZt&LhwXa~MAWFjIcNt5g%tD|Erm4|v7KEV>5wByakG z+F3yvf`t1`L)y)`yp(H!gH)QKixAjgY$308fWpXZJ=+edl#y_kiT+iyU=_vX{B=A&_ZF}^LyYq{GQNPq~!1%*%iL?0<|2%$Vr4c zTl}H)d@;!x1OZ13;P%2U#HojqClqJ|-kj zR>-GfI;56d{~~pepE>$EXAFDpgszvY?u+beZ{HD))(|-gNHx=`mUB3zw&i&%z?P+<{i;+JTzCAw|O%^h+e$Jq9Me9yCCYL^?Zk*UTmwl zjQoSxkksd=aaJa@kn*GR4t&}b=+85DP!+g@iBlPKi@hL=|B)v)bW!FizFY0uq+LQMHtQ_i{ZyDaR-S$Mp%kD0FD3-mPX&Fc>#sr;w$`1I`? zkhnFA^}B(puv3V00m|5hm4_NVb6bw+i54N%n!Y1bgue#Va5Lx6Y^W5)D$dmnmFYe7 zC$%jo;0#R()2xaR#kqrPnvV&sWKIHmiB5(MI@Tn~&a4oX?9v>hGUu%c65=yBRYWoK zEvMz1zp+}np5~|XHDVZ5i#`qNl9Zjl3+u2gUmlAL;> zuaB0yO}2%GgRto?;v}oK@I8%y++tvn`zqGs;$abY)1Zt0XyaES8&LqZGuf7Q`oB|G zQoIiKE2)bo`w+Z^M%^7cW$-W13CHnW>{n@kS1on6GhEtHDSi3WKgV{$weq2cU5C7V zw7T4kunC0nnukww_5!i^-k+r1zE#xAceLM+b7#)!n5@c15DIh`UuBBN zDrK<@5RLySzj^^ix@wbv80j8l&ebMm=p{YEYK*_iJT#UGea`fC zKg-$4=(wknNeeZi^R^Ixa^7A^w(_sms>LlV^M8s48DR<0B@_3G99H@1=q|-X{DnHL z-9wJv@1lCkG5ed7!H~={$2;S;rnSL>6}jpG?{KL1990j z({l7G$a}~ZymS02ne#96VbfCbo8*o6*4)?!PU?}~N?@<`YDy4>uM9EW0db7T~l@kC8QP*uKFHdMajF&#M(m7Xm{~dYqV8kf_}CP$OkCFik^GiLPnHpu5Q5z#2o-SZpKcUj7-OT>Gi}F%gcZh);ZLX}s$G0x;4R1~PWnIv3w&z)<%qhf z{orzl$!(A<`lUr{p%(RJf<}4DAc8rZyr+3)W-IP_P}Gafpga!o)~&V)e!rd(P*=KY zC@Z&mP4SXjGn1DA9O?AkHQ$`TEo~p89|c^g3y6*Lo?z_zrOk1%rw&Ss+P(%m)CKP} zAYfxVQAgSh*slzgG6QLIRSWgEhQQl7q;u$v)z5-!4KuRD+1M+%baZE{{LQG=)pWOb z3G7$5?@7EcKB~4ipNbgb1Rgca&5}l3^VF z`R$DR^2C!BYMJPlo0-4-2YA^ccMxN>l6ifP9C^q}2xp9!bb;-PP@@73e|}IsX~JJW znuBXPaYGqG|EEb{!5%>5cF@zgQeTu2v&-5goj9o4(VZYpR40OM=>+le0Z443bD%7L zn`rxYV*xca|-Y*l; zv-zm|g-a)izhfG8hYCBvRwP9@2C+c_`@*(N&;$h0(5Cny&dHi{GZmMu(F3p^iBBdHl>MR30k`SS0v;4 zw5)@G9h8&(Ne^hpZ7>m{P_=BkKA`b|HL*+5$$H>em7wQ?Ii0h_(#C;|YNK|sdGm&B zYTP^yoNW0oaMuegq*Hwe^=o+?88hl>E&FD>D|TXOg{8IR`Bu1LoGYgur}*_nw`|c@ z)*$a+?Q)pAIMm_(qdNiOu0uapI2RpR?6pEzb#OXSn+)*g09sbZb>=qCxOaH<1Dcu! z=APC2Wx}CE?IxmhKLoY_SD>i5T(|DjoX)Qrh1$`eX*uGU>QevsbnyTTMm^8X9MrkJ zaD06dcPnIsGO8{1Uq_33;2%!970iX~g5?tJj>yV4F#fGyi{( z9DJT1-MM`fRCzl&Vi;*^fC_>E@L>D`@Nxc0Q-6^lqq4zo4G;d2Q-xOPlU*!;_Fq5t zMf7;oJfK;+5Fr{~Ijq@%lR&dzg=ue$?|E48VSKG9CRFG7A;8zS0It=TSA{*7(PaAd zmmJFIxgTKJU2ZRY|iiJ)Y`_)vmKfe0D8VQv+oXw^=T>zcG%c@2$hMhuvy{ z(+jo)-)%Aqw}0pLn}mRy!rI@jwIQJPufyufo8}e(2I)@r$az?NCTC~&t#T7p+7Lpc zwdQ`xe%+`SNvBtVabdxBCX4+mlP7O*3@u>5tm;T5qPpR?)8cw<8 z3erx*fI)<<)Bc#b=<;~S>f}~-Y>@>R;u&>$8=75DY2olZ^uGEZZvHv5<8n-I)& z94l-&+QILpR{$MhQ3wk2F%70mLW>%HdZmrN;&g%Xu)O%WvpjLzL;RA%Go-5fx(&@V zk&o}4Z~-p~kRx^NbK2kQrBnb|rkjJ!v)KGddmpIpSzw?)#YG0hS_^v0kEeR#3{0Y7 z{-gmOpw2$5^mRdo)`TXLdp)P6F$q`2y5!AwzkXX3BoJV0t-pKILQ0Of8WR?bLHZP+ zo0!XJSDA(gUk*SVI=@ZI@JBo>Hbd8!xdbYbou;K~tuk@C6EN}dU~a`VS~mrTL8euJ z^aICHvAjm*RDqnE2POt9( zu4sX2bU_Uys#EZAqjAL9z_uHc@6*xga-!tH+x)B@jPvru&RmqoqaQSSetRuBxtMw} z8KI{&E$4!q?FU7tlz8udEX=Qw8@>?;8jjl%`K4ddn)GlL@47+S%`yRDsPpaVqA-6a z0G*;8sOLKvK2iHI5nb>G1l=%i2vQNP;;AK6{kd0Muw`mkPHbyhYl~TzDN(j#kpcSx z5rSgVinqoAg9aV$2u{?UJZ4DQq1v`mXg`De?k-iHQ5?O8+#M?^@0JPs+!mH_dhahc z-x0&(dk%f=tJ0a$XSQ67o3`gaD?VzGSr@&Y`9LZbf!UuDXM_UhFHP3d$c4J1j6b}IIiqm?o^?GtlJKylHmyctUo|SIfJ}xA{zZ#m zH_%H0YrcKoExLFCc-f^q{TC8(h;!&{S&OFhxfhd6FA%YnlO8GS!>@P7#!L>xAtMoC zq^A(0Lj;k;^S zn5$TY-^m|LKH)K(z_x~ry z{VY9CqwbU&mM&22c27<{*hp0khE=VY2RW;K98>~(q2+AUEa7N(5tZ^Pxs2LP7>5q7 zeQ|lY4VyDoOv}x*()rBn{D7_kmydTEco=%^O=w>(Ol)D?_@1K7dvnp2Uzi}fGYv^J z3yIiDBcegWM~V^;5B#Fo!dVM&|G{vV?X-sa+F&Z`zKPC>^@BQ~S~1l2KU73!07p&z z^uyl%Wyc@s??6)E@;^d%xSVQx5GfDpDFBt)fLc7Hc|_|nX+9D$m-0*Xp`n>RqaKHu z9w-r>tJb}%mo@zX4Qexd_$}nr;P98nQh<#%W_`*Kf>L0m=)Lt@=fzGSV~RuAwC1o%5A zai1WG=abeRtmbM{J3Sa;bIu9Gb+?P1=C6)t^xuw%3X@>eCTz21v6jnqlJ3t$f&YS_ zlDd&tXzJzu?X((^+%->{cn2az{PxIS!kH!Y&hKLe3&A4BU#aE;$f6s)8=G;$q4zCcpA z2zE2fzw|fHrVsF@E|s(>n!~mVlLLU(@bwthTW~v*+Vvma{Q2Z=8d?|9R+al>*1{uW zq69GiY=ZE^8w7H12e1Dm@$4L_;m z^ZRGP3`T-7n59}EN4@DyY@V0y^LXV+o0Zo7{uWvl15?6m{pilfhD^OPFc6|7Pm~~n z%p8Wk@o^pb8~OpvIM1SRP{EePb|4GAJafu{j2DxaB3OEw6Jqv2wW-nvb5uah-7pbs zEtsHYs?Oldb^v?wvrre5CZ;=92V}ew7@gv0we;cbMbWMsV7#{rO4$2ff?hj?R(8Vw zEb(b`@_gUc=H+n%+72K4gV^ZExpu*sgf1)oi0e)w|L_@Gnlgtb9mprelKe>l z$MA=IzDAqCAVTJIBTn!oXHS2@|dxwpyMjzt{!PXb>2oSN*oMj4rmYn@j0N0NiUx*Y!dm^+pO zgi+-`?DMz;)uW;Gh(2v!cQ0*&%QxaoKgLR)(AAPoU-T7j3@CkRO~~I!EB7IkflG)G z_6=Ez`AK!pm1s$MJv~Go`X^x)^|W9ILw)(g>BkkzT|I(MOiR^jkcV0oIGEkos$+BU zTT^;y;l)c&@ug!r+{r3OexXw@XusL#9>Mv1wkA|cKhVqa`|G$KmxK4$vw(N}30o?aS!CT6|eVGN2}2XCG&K*HfKd0 z@z!%nn%9P?z&W~{VIb93U?pT3CO`I6WDauM*+Q->< zFrQTvDwv8&F@xuA==tQog*G0*RP&Vf&IN9!l~Io$y_vrkrhS!RieG6B_y5$~65c$z z-?S_60FR}1P=l~dkd zrlu66h(jHME7}NAgns0=EaY<#l;>i9UBvP$@JC55;VHkO>{G!9>K{F%9ID^iFxViJ z^0J(?b{_Zn>9Ye{k@EY0KmWgc0uzHL&`Zq@%lDAGmsCgoq?oSzmyUqi|NHrW_XK=b u%hgUxBi}{MuI4Gitik{N{D1odvbOEo)q+k7Ejxl-SNr^BVur@8$NvwQ^Z#l9 literal 0 HcmV?d00001 diff --git a/graficos/data/capa-3.png b/graficos/data/capa-3.png new file mode 100644 index 0000000000000000000000000000000000000000..de0b838f8cf1855cd9101aa201338a866d229c50 GIT binary patch literal 1690 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU}EQB1B#@tvj7UPC3?CzhE&{od(e;(D0pbW zSN~l0`~^VfC>RZa(GVC7fzc2c4FU2)py4t@)ISEsgI#-jL56s``njxgN@xNASA!MK literal 0 HcmV?d00001 diff --git a/graficos/data/capa-4.png b/graficos/data/capa-4.png new file mode 100644 index 0000000000000000000000000000000000000000..c5326129c39c4eb84d0bea1800fd4f0e1ec4c7b6 GIT binary patch literal 18152 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 literal 0 HcmV?d00001 diff --git a/graficos/data/capa-PGC-10.png b/graficos/data/capa-PGC-10.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9d5b92823ea411007553878ca8b2bd7a4cad52 GIT binary patch literal 3129 zcmeHH{X5j@9)7S#d&cXy8lubyc`K%xUB-n;lXIcdq8&`zj&&^Opl0(LVTLItFC|2Z zm0qN*nWnNCG*~;7My=Srl*SC^J4$K7&}7EzdB%URKkQH2^V|3NexCdJ-1l?epTdwJ zes-Q(_GB7d%-Xf)pFN0t>G zSDs#M&N;fGvVicP)+Yu29tw2DV?N3nAy@yRBH@eb>T2>m+Fk(0AETR&#>Cj4EiSfp z_RaeofW!%P0W#H#Am0;FR5Snqn5{4A?pz-4^cR(tmE`pF78@M^j7>^!-@Y9Z5n(;2 zVKf5EEn5szQc`q31Ayr5Yi@2%PDn@y;50SurXM?&xx-+6J2Nv=_~as<^3dO~WIL62 z$pGRM8I&$AE+!6V8Jkgqk>z|@D(tBzx;{kGxzL?&q6KvN;jBWT$P=^ zuEy=MMV!ZzJQ{N82?_c5$WD95;+E#-Z8LW`9D|jWmGwSJr10=?a&)x(8Ue@V*v-$+ zi*&MiwouZz6ACLV)>tl=Z!K02S91Odz(x#iaEL?g77EEwJ}WDf$1#cNRsgzWN_4Cj z!qU8c{l7*KA0Mw7n-Y!wa&K(xx5@davt z1zu4R4^o{Ai`K-|3s;}v-P}$W6`|1DqOGLsqobocckL>3@kOH8N^WUuQ`w_8Z{k{+ zOMI+PW%B&m zlgqk*HAaK-HgLIy&|01`cRM zw~Gb@0zouQfv{hl9>DozRw&{yIgw}8otwT;?kKr0aRxx0E3X?+DCo(n{xqG8`PW~~ z5yKfb8hJc7Lqo&7=H_O-J)7+ujIZ`unrRJ)$U|~-bJtJ>t((Io=NBHHu@FTc9vT{w zEvnv$(ga!QeMQ@ylqzCxSsIX9>j4(U6e~b>1kgl8`YjHTzWU+qA2DqE>C7RqxZ1lD zvnQuUCpFy|fNVm1OII<+GG}cieUO05n)FBNz74MR4%D@u{(fj+!1RGY(7m)UQ+~my zBvMOqs$sjS;K~`jNmp0bpC&zS-n=QColR`gHKP)c=bg}**Z6$*mzGBt?%h@kgic8> zU|>AL6y~iPn4}+AJu;O>qsi&Ou3eEjRn^oSuyrgK**n&bwWT5wiVDlml{odM^;nv& zht=B`*~^anB^zS{-K{+JYUjwvi0EU7@)q>w^Vlwi8NuuT1ss z1)>MD&t&!N(?284rZV8@`pGVa$@HnXaN(O3_?2B8fX2cTYd&Ne49>XUtK_!QXOnDb z#*j>y^U$y`c7K2WP7=wD1kLmNqFNdK=Iz@+q^`Z4mInd;+^RS<+&u)3?6)l!<-u%( zJiY+?KUcqVw{|Q>M@J8ra3KAfLkvGVJG&@4{QwJA*B6&K@v`9%)M|P4z7pLHZ)c3n zn%cn53-uqv_{SYN(liC3DoA7p2M3{A-MTK!W}BoDDHLXQWhq?=f7j3xH}<_szV_gO zSOO^~GB6m7Y+5RaI&#Ei2Ogi#AgxhYPoF-`d;UC}gVRdQT>9wR&RlYr2-5K}Kfg>| zUDgah3&D9S{O}?5&CHC2H7pYiCp?h`Um>wio;*1*$RWh`=T%o*X{SaFgQZZx8zz=b zsBmIAWnAhBD}`fe{Z+s7W+cYN1!y^bTAvj7D;4OvgWyga&UkXuTmQKBp1^+v`SHmA GIrV>wh9JxU literal 0 HcmV?d00001 diff --git a/graficos/data/capa-PGC-2.png b/graficos/data/capa-PGC-2.png new file mode 100644 index 0000000000000000000000000000000000000000..00796b5eec26d897653b72458c4403bbf4bd7cf6 GIT binary patch literal 16363 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�NJXYP*cO=*Oc2n87)sn=4`We!y(#Z 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 E0U<_vWdHyG literal 0 HcmV?d00001 diff --git a/graficos/data/capa-PGC-3.png b/graficos/data/capa-PGC-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6042dc49331501024726a077345023679ec552ba GIT binary patch literal 5128 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 FzX0DUCkdA-^LJ%uT%MPH_93_AW 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 A^#A|> literal 0 HcmV?d00001 diff --git a/graficos/data/capa-PGC-5.png b/graficos/data/capa-PGC-5.png new file mode 100644 index 0000000000000000000000000000000000000000..113fc4ffff8ca1fca82a0e98f14662eca0a23a85 GIT binary patch literal 15292 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

7Ois|g-)!Lu|P`zSe2C%NXn!E=2B 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 Q30{23!qyybb|dNk0AG+_Z~y=R literal 0 HcmV?d00001 diff --git a/graficos/data/capa-PGC-8.png b/graficos/data/capa-PGC-8.png new file mode 100644 index 0000000000000000000000000000000000000000..18b939b87cd89ad3d24e02e868bd2d465cc9efb3 GIT binary patch literal 7966 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 M!30%u?rQk|00T`y^8f$< literal 0 HcmV?d00001 diff --git a/graficos/data/cmap-cuencas.png b/graficos/data/cmap-cuencas.png new file mode 100644 index 0000000000000000000000000000000000000000..010b4af3d265997ae8aff0d458f8064719bdf326 GIT binary patch literal 40192 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 RG63SEaaRXbrfL)L{{SjUBRT*8 literal 0 HcmV?d00001 diff --git a/graficos/data/cuencas.png b/graficos/data/cuencas.png new file mode 100644 index 0000000000000000000000000000000000000000..faef82febe5476e5cdcbc0ecdbe71f61d4aca8e6 GIT binary patch literal 73258 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�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 literal 0 HcmV?d00001 diff --git a/graficos/data/duero.png b/graficos/data/duero.png new file mode 100644 index 0000000000000000000000000000000000000000..63e50f340da2ca24269ad9c352a644d250e95f39 GIT binary patch literal 7747 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 U`1Z|OPq-EIyVJo68~=;{1))Q)^Z)<= literal 0 HcmV?d00001 diff --git a/graficos/data/ebro.png b/graficos/data/ebro.png new file mode 100644 index 0000000000000000000000000000000000000000..33d4d38ebef19a06065b29b7299651ce59ca3d8f GIT binary patch literal 7550 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 literal 0 HcmV?d00001 diff --git a/graficos/data/guadiana.png b/graficos/data/guadiana.png new file mode 100644 index 0000000000000000000000000000000000000000..6df4f75eabf42ced77307a38d9399b552c9e0fb4 GIT binary patch literal 7364 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 bV3oA9%;P}Jop(gq008u})6vqyzE}PSxz=8= literal 0 HcmV?d00001 diff --git a/graficos/data/harvester_1046427_cc.png b/graficos/data/harvester_1046427_cc.png new file mode 100644 index 0000000000000000000000000000000000000000..25e6207ce77b704af052cc1ecd513d55b9fffdb6 GIT binary patch literal 11591 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 g|A)Wd5M5n&J6>nX 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 literal 0 HcmV?d00001 diff --git a/graficos/data/norte.png b/graficos/data/norte.png new file mode 100644 index 0000000000000000000000000000000000000000..65a33d85de8996dbda195b55641bd823a2e66d2f GIT binary patch literal 7500 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 SF|>L$5_H_|Sn*NMfBg@HwvNI8 literal 0 HcmV?d00001 diff --git a/graficos/data/pirineo.png b/graficos/data/pirineo.png new file mode 100644 index 0000000000000000000000000000000000000000..01871c0c111a771ef271c853e337768a3b38c8e5 GIT binary patch literal 4087 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 V5zo$q+c8%hz_yOZOOG*r{6DpA!pr~w literal 0 HcmV?d00001 diff --git a/graficos/data/tajo.png b/graficos/data/tajo.png new file mode 100644 index 0000000000000000000000000000000000000000..89ba95987a2c9df1ba1d81b1349c994b5f9a669f GIT binary patch literal 6455 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 VwMTk&kJfjFj(HrdJQ8&E{{UKSO-KL$ literal 0 HcmV?d00001 diff --git a/graficos/data/tractor_792349_cc.png b/graficos/data/tractor_792349_cc.png new file mode 100644 index 0000000000000000000000000000000000000000..5577a2e99d3be5f13289af2e911bcc76a60c07ec GIT binary patch literal 16199 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 + + + + + + + + + + + + diff --git a/graficos/expropiacion.js b/graficos/expropiacion.js new file mode 100644 index 0000000..58d6953 --- /dev/null +++ b/graficos/expropiacion.js @@ -0,0 +1,64 @@ +var exceso, reserva, exceptuadas; +var nombres; +var plot; + +function setup() { + createCanvas(800,519); + nombres = new Array("Norte","Duero","Ebro","Pirineo","Jucar","Tajo","Guadiana","Guadalquivir","Sur", "Segura", "Islas"); + exceso = new Array(15267,35628,136465,3466,19615,64179,81809,148193,13326,35075,3235); + reserva = new Array(12251,62730,131128,24433,54545,68854,82052,140453,20980,131042,5985); + exceptuadas = new Array(7094,31194,128457,3289,15734,39460,21419,68830,23782,68386,15675); + + var pointSizes = []; + var points = []; + + for (var n = 0; n < nombres.length; n++) { + points[n] = new GPoint(exceso[n], exceptuadas[n], nombres[n]); + pointSizes[n] = map(reserva[n],5000,141000,5,100); + } + + // Creamos el plot + plot = new GPlot(this); + plot.setDim(width-230, height-100); + plot.setTitleText("Tierras en exceso, reserva y exceptuadas por cuenca hidrografica segun PGC"); + plot.getXAxis().setAxisLabelText("Tierras en exceso (Has)"); + plot.getYAxis().setAxisLabelText("Tierras exceptuadas (Has)"); + plot.setPoints(points); + plot.setPointSizes(pointSizes); + plot.setPointColor(color(255,0,0,50)); + plot.setLineColor(color(0)); + plot.setLabelBgColor(color(255,0)); +} + + +function draw() { + background(255); + + // Draw the plot + plot.beginDraw(); + plot.drawBox(); + plot.drawXAxis(); + plot.drawYAxis(); + plot.drawTitle(); + plot.drawGridLines(GPlot.BOTH); + plot.drawPoints(); + plot.drawLabels(); + plot.drawAllLabels(); + plot.endDraw(); + + textFont("Helvetica"); + textSize(11); + fill(0); + textAlign(LEFT); + text("Tierras en reserva (Has)", 660, 330); + textAlign(CENTER); + stroke(100); + noFill(); + ellipse(720, 390, 100, 100); + fill(0); + text("140000", 720, 390); + noFill(); + ellipse(720, 455, 10, 10); + fill(0); + text("14000", 720, 475); +} diff --git a/graficos/grafica-0.1.0-mod.js b/graficos/grafica-0.1.0-mod.js new file mode 100644 index 0000000..032f690 --- /dev/null +++ b/graficos/grafica-0.1.0-mod.js @@ -0,0 +1,5444 @@ +/* + * Point class. A GPoint is composed of two coordinates (x, y) and a text label + */ +function GPoint() { + var x, y, label; + + if (arguments.length === 3) { + x = arguments[0]; + y = arguments[1]; + label = arguments[2]; + } else if (arguments.length === 2 && arguments[0] instanceof p5.Vector) { + x = arguments[0].x; + y = arguments[0].y; + label = arguments[1]; + } else if (arguments.length === 2) { + x = arguments[0]; + y = arguments[1]; + label = ""; + } else if (arguments.length === 1 && arguments[0] instanceof GPoint) { + x = arguments[0].getX(); + y = arguments[0].getY(); + label = arguments[0].getLabel(); + } else if (arguments.length === 1 && arguments[0] instanceof p5.Vector) { + x = arguments[0].x; + y = arguments[0].y; + label = ""; + } else if (arguments.length === 0) { + x = 0; + y = 0; + label = ""; + } else { + throw new Error("GPoint constructor: signature not supported"); + } + + this.x = x; + this.y = y; + this.label = label; + this.valid = this.isValidNumber(this.x) && this.isValidNumber(this.y); +} + +GPoint.prototype.isValidNumber = function(number) { + return !isNaN(number) && isFinite(number); +}; + +GPoint.prototype.set = function() { + var x, y, label; + + if (arguments.length === 3) { + x = arguments[0]; + y = arguments[1]; + label = arguments[2]; + } else if (arguments.length === 2 && arguments[0] instanceof p5.Vector) { + x = arguments[0].x; + y = arguments[0].y; + label = arguments[1]; + } else if (arguments.length === 2) { + x = arguments[0]; + y = arguments[1]; + label = ""; + } else if (arguments.length === 1 && arguments[0] instanceof GPoint) { + x = arguments[0].getX(); + y = arguments[0].getY(); + label = arguments[0].getLabel(); + } else if (arguments.length === 1 && arguments[0] instanceof p5.Vector) { + x = arguments[0].x; + y = arguments[0].y; + label = ""; + } else { + throw new Error("GPoint.set(): signature not supported"); + } + + this.x = x; + this.y = y; + this.label = label; + this.valid = this.isValidNumber(this.x) && this.isValidNumber(this.y); +}; + +GPoint.prototype.setX = function(x) { + this.x = x; + this.valid = this.isValidNumber(this.x) && this.isValidNumber(this.y); +}; + +GPoint.prototype.setY = function(y) { + this.y = y; + this.valid = this.isValidNumber(this.x) && this.isValidNumber(this.y); +}; + +GPoint.prototype.setLabel = function(label) { + this.label = label; +}; + +GPoint.prototype.setXY = function() { + var x, y; + + if (arguments.length === 2) { + x = arguments[0]; + y = arguments[1]; + } else if (arguments.length === 1 && arguments[0] instanceof GPoint) { + x = arguments[0].getX(); + y = arguments[0].getY(); + } else if (arguments.length === 1 && arguments[0] instanceof p5.Vector) { + x = arguments[0].x; + y = arguments[0].y; + } else { + throw new Error("GPoint.setXY(): signature not supported"); + } + + this.x = x; + this.y = y; + this.valid = this.isValidNumber(this.x) && this.isValidNumber(this.y); +}; + +GPoint.prototype.getX = function() { + return this.x; +}; + +GPoint.prototype.getY = function() { + return this.y; +}; + +GPoint.prototype.getLabel = function() { + return this.label; +}; + +GPoint.prototype.getValid = function() { + return this.valid; +}; + +GPoint.prototype.isValid = function() { + return this.valid; +}; +/* + * Title class. + */ +function GTitle(parent, dim) { + // The parent processing object + this.parent = parent; + + // General properties + this.dim = dim.slice(); + this.relativePos = 0.5; + this.plotPos = this.relativePos * this.dim[0]; + this.offset = 10; + + // Text properties + this.text = ""; + this.textAlignment = this.parent.CENTER; + this.fontName = "Helvetica"; + this.fontColor = this.parent.color(100); + this.fontStyle = this.parent.BOLD; + this.fontSize = 13; +} + +GTitle.prototype.draw = function() { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textStyle(this.fontStyle); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + this.parent.textAlign(this.textAlignment, this.parent.BOTTOM); + this.parent.text(this.text, this.plotPos, -this.offset - this.dim[1]); + + // There seems to be a bug in p5.js + this.parent.textStyle(this.parent.NORMAL); + this.parent.pop(); +}; + +GTitle.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GTitle.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + this.dim[0] = xDim; + this.dim[1] = yDim; + this.plotPos = this.relativePos * this.dim[0]; + } +}; + +GTitle.prototype.setRelativePos = function(relativePos) { + this.relativePos = relativePos; + this.plotPos = this.relativePos * this.dim[0]; +}; + +GTitle.prototype.setOffset = function(offset) { + this.offset = offset; +}; + +GTitle.prototype.setText = function(text) { + this.text = text; +}; + +GTitle.prototype.setTextAlignment = function(textAlignment) { + if (textAlignment === this.parent.CENTER || textAlignment === this.parent.LEFT || textAlignment === this.parent.RIGHT) { + this.textAlignment = textAlignment; + } +}; + +GTitle.prototype.setFontName = function(fontName) { + this.fontName = fontName; +}; + +GTitle.prototype.setFontColor = function(fontColor) { + this.fontColor = fontColor; +}; + +GTitle.prototype.setFontStyle = function(fontStyle) { + this.fontStyle = fontStyle; +}; + +GTitle.prototype.setFontSize = function(fontSize) { + if (fontSize > 0) { + this.fontSize = fontSize; + } +}; + +GTitle.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + if (fontSize > 0) { + this.fontName = fontName; + this.fontColor = fontColor; + this.fontSize = fontSize; + } +}; +/* + * Axis label class. + */ +function GAxisLabel(parent, type, dim) { + // The parent processing object + this.parent = parent; + + // General properties + this.type = (type === this.parent.BOTTOM || type === this.parent.TOP || type === this.parent.LEFT || type === this.parent.RIGHT) ? type : this.parent.BOTTOM; + this.dim = dim.slice(); + this.relativePos = 0.5; + this.plotPos = (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) ? this.relativePos * this.dim[0] : -this.relativePos * this.dim[1]; + this.offset = 35; + this.rotate = (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) ? false : true; + + // Text properties + this.text = ""; + this.textAlignment = this.parent.CENTER; + this.fontName = "Helvetica"; + this.fontColor = this.parent.color(0); + this.fontSize = 13; +} + +GAxisLabel.prototype.draw = function() { + switch (this.type) { + case this.parent.BOTTOM: + this.drawAsXLabel(); + break; + case this.parent.LEFT: + this.drawAsYLabel(); + break; + case this.parent.TOP: + this.drawAsTopLabel(); + break; + case this.parent.RIGHT: + this.drawAsRightLabel(); + break; + } +}; + +GAxisLabel.prototype.drawAsXLabel = function() { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotate) { + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + this.parent.translate(this.plotPos, this.offset); + this.parent.rotate(-0.5 * Math.PI); + this.parent.text(this.text, 0, 0); + } else { + this.parent.textAlign(this.textAlignment, this.parent.TOP); + this.parent.text(this.text, this.plotPos, this.offset); + } + + this.parent.pop(); +}; + +GAxisLabel.prototype.drawAsYLabel = function() { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotate) { + this.parent.textAlign(this.textAlignment, this.parent.BOTTOM); + this.parent.translate(-this.offset, this.plotPos); + this.parent.rotate(-0.5 * Math.PI); + this.parent.text(this.text, 0, 0); + } else { + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + this.parent.text(this.text, -this.offset, this.plotPos); + } + + this.parent.pop(); +}; + +GAxisLabel.prototype.drawAsTopLabel = function() { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotate) { + this.parent.textAlign(this.parent.LEFT, this.parent.CENTER); + this.parent.translate(this.plotPos, -this.offset - this.dim[1]); + this.parent.rotate(-0.5 * Math.PI); + this.parent.text(this.text, 0, 0); + } else { + this.parent.textAlign(this.textAlignment, this.parent.BOTTOM); + this.parent.text(this.text, this.plotPos, -this.offset - this.dim[1]); + } + + this.parent.pop(); +}; + +GAxisLabel.prototype.drawAsRightLabel = function() { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotate) { + this.parent.textAlign(this.textAlignment, this.parent.TOP); + this.parent.translate(this.offset + this.dim[0], this.plotPos); + this.parent.rotate(-0.5 * Math.PI); + this.parent.text(this.text, 0, 0); + } else { + this.parent.textAlign(this.parent.LEFT, this.parent.CENTER); + this.parent.text(this.text, this.offset + this.dim[0], this.plotPos); + } + + this.parent.pop(); +}; + +GAxisLabel.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GAxisLabel.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + this.dim[0] = xDim; + this.dim[1] = yDim; + this.plotPos = (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) ? this.relativePos * this.dim[0] : -this.relativePos * this.dim[1]; + } +}; + +GAxisLabel.prototype.setRelativePos = function(relativePos) { + this.relativePos = relativePos; + this.plotPos = (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) ? this.relativePos * this.dim[0] : -this.relativePos * this.dim[1]; +}; + +GAxisLabel.prototype.setOffset = function(offset) { + this.offset = offset; +}; + +GAxisLabel.prototype.setRotate = function(rotate) { + this.rotate = rotate; +}; + +GAxisLabel.prototype.setText = function(text) { + this.text = text; +}; + +GAxisLabel.prototype.setTextAlignment = function(textAlignment) { + if (textAlignment === this.parent.CENTER || textAlignment === this.parent.LEFT || textAlignment === this.parent.RIGHT) { + this.textAlignment = textAlignment; + } +}; + +GAxisLabel.prototype.setFontName = function(fontName) { + this.fontName = fontName; +}; + +GAxisLabel.prototype.setFontColor = function(fontColor) { + this.fontColor = fontColor; +}; + +GAxisLabel.prototype.setFontSize = function(fontSize) { + if (fontSize > 0) { + this.fontSize = fontSize; + } +}; + +GAxisLabel.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + if (fontSize > 0) { + this.fontName = fontName; + this.fontColor = fontColor; + this.fontSize = fontSize; + } +}; +/* + * Axis class. + */ +function GAxis(parent, type, dim, lim, log) { + // The parent processing object + this.parent = parent; + + // General properties + this.type = (type === this.parent.BOTTOM || type === this.parent.TOP || type === this.parent.LEFT || type === this.parent.RIGHT) ? type : this.parent.BOTTOM; + this.dim = dim.slice(); + this.lim = lim.slice(); + this.log = log; + + // Do some sanity checks + if (this.log && (this.lim[0] <= 0 || this.lim[1] <= 0)) { + console.log("The limits are negative. This is not allowed in logarithmic scale."); + console.log("Will set them to (0.1, 10)"); + + if (this.lim[1] > this.lim[0]) { + this.lim[0] = 0.1; + this.lim[1] = 10; + } else { + this.lim[0] = 10; + this.lim[1] = 0.1; + } + } + + // Format properties + this.offset = 5; + this.lineColor = this.parent.color(0); + this.lineWidth = 1; + + // Ticks properties + this.nTicks = 5; + this.ticksSeparation = -1; + this.ticks = []; + this.plotTicks = []; + this.ticksInside = []; + this.tickLabels = []; + this.fixedTicks = false; + this.tickLength = 3; + this.smallTickLength = 2; + this.expTickLabels = false; + this.rotateTickLabels = (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) ? false : true; + this.drawTickLabels = (this.type === this.parent.BOTTOM || this.type === this.parent.LEFT) ? true : false; + this.tickLabelOffset = 7; + this.ticksPrecision = undefined; + + // Label properties + this.lab = new GAxisLabel(this.parent, this.type, this.dim); + this.drawAxisLabel = true; + + // Text properties + this.fontName = "Helvetica"; + this.fontColor = this.parent.color(0); + this.fontSize = 11; + + // Update the arrays + this.updateTicks(); + this.updatePlotTicks(); + this.updateTicksInside(); + this.updateTickLabels(); +} + +GAxis.prototype.obtainSigDigits = function(number) { + return Math.round(-Math.log(0.5 * Math.abs(number)) / Math.LN10); +}; + +GAxis.prototype.roundPlus = function(number, sigDigits) { + // Old way of doing it + // var bd = new BigDecimal(number); + // roundedNumber = parseFloat(bd.setScale(sigDigits, RoundingMode.HALF_UP()).longValue().toFixed(sigDigits)); + + number = Math.round(number * Math.pow(10, sigDigits)) / Math.pow(10, sigDigits); + + if (sigDigits <= 0) { + number = Math.round(number); + } + + return number; +}; + +GAxis.prototype.adaptSize = function(a, n) { + if (n < a.length) { + a.splice(n, Number.MAX_VALUE); + } +}; + +GAxis.prototype.updateTicks = function() { + if (this.log) { + this.obtainLogarithmicTicks(); + } else { + this.obtainLinearTicks(); + } +}; + +GAxis.prototype.obtainLogarithmicTicks = function() { + // Get the exponents of the first and last ticks in increasing order + var firstExp, lastExp; + + if (this.lim[1] > this.lim[0]) { + firstExp = Math.floor(Math.log(this.lim[0]) / Math.LN10); + lastExp = Math.ceil(Math.log(this.lim[1]) / Math.LN10); + } else { + firstExp = Math.floor(Math.log(this.lim[1]) / Math.LN10); + lastExp = Math.ceil(Math.log(this.lim[0]) / Math.LN10); + } + + // Calculate the ticks + var n = (lastExp - firstExp) * 9 + 1; + this.adaptSize(this.ticks, n); + + for (var exp = firstExp; exp < lastExp; exp++) { + var base = this.roundPlus(Math.exp(exp * Math.LN10), -exp); + + for (var i = 0; i < 9; i++) { + this.ticks[(exp - firstExp) * 9 + i] = (i + 1) * base; + } + + } + + this.ticks[this.ticks.length - 1] = this.roundPlus(Math.exp(lastExp * Math.LN10), -exp); + + // Change the ticks order if necessary + if (this.lim[1] < this.lim[0]) { + this.ticks.reverse(); + } +}; + +GAxis.prototype.obtainLinearTicks = function() { + // Obtain the required precision for the ticks + var step = 0; + var nSteps = 0; + var sigDigits = 0; + + if (this.ticksSeparation > 0) { + step = (this.lim[1] > this.lim[0]) ? this.ticksSeparation : -this.ticksSeparation; + sigDigits = this.obtainSigDigits(step); + + while (this.roundPlus(step, sigDigits) - step !== 0) { + sigDigits++; + } + + nSteps = Math.floor((this.lim[1] - this.lim[0]) / step); + } else if (this.nTicks > 0) { + step = (this.lim[1] - this.lim[0]) / this.nTicks; + sigDigits = this.obtainSigDigits(step); + step = this.roundPlus(step, sigDigits); + + if (step === 0 || Math.abs(step) > Math.abs(this.lim[1] - this.lim[0])) { + sigDigits++; + step = this.roundPlus((this.lim[1] - this.lim[0]) / this.nTicks, sigDigits); + } + + nSteps = Math.floor((this.lim[1] - this.lim[0]) / step); + } + + // Calculate the linear ticks + if (nSteps > 0) { + // Obtain the first tick + var firstTick = this.lim[0] + ((this.lim[1] - this.lim[0]) - nSteps * step) / 2; + + // Subtract some steps to be sure we have all + firstTick = this.roundPlus(firstTick - 2 * step, sigDigits); + + while ((this.lim[1] - firstTick) * (this.lim[0] - firstTick) > 0) { + firstTick = this.roundPlus(firstTick + step, sigDigits); + } + + // Calculate the rest of the ticks + var n = Math.floor(Math.abs((this.lim[1] - firstTick) / step)) + 1; + this.adaptSize(this.ticks, n); + this.ticks[0] = firstTick; + + for (var i = 1; i < n; i++) { + this.ticks[i] = this.roundPlus(this.ticks[i - 1] + step, sigDigits); + } + + // Save the ticks precision + this.ticksPrecision = sigDigits; + } else { + this.ticks = []; + } +}; + +GAxis.prototype.updatePlotTicks = function() { + var scaleFactor, i; + var n = this.ticks.length; + this.adaptSize(this.plotTicks, n); + + if (this.log) { + if (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) { + scaleFactor = this.dim[0] / Math.log(this.lim[1] / this.lim[0]); + } else { + scaleFactor = -this.dim[1] / Math.log(this.lim[1] / this.lim[0]); + } + + for ( i = 0; i < n; i++) { + this.plotTicks[i] = Math.log(this.ticks[i] / this.lim[0]) * scaleFactor; + } + } else { + if (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) { + scaleFactor = this.dim[0] / (this.lim[1] - this.lim[0]); + } else { + scaleFactor = -this.dim[1] / (this.lim[1] - this.lim[0]); + } + + for ( i = 0; i < n; i++) { + this.plotTicks[i] = (this.ticks[i] - this.lim[0]) * scaleFactor; + } + } +}; + +GAxis.prototype.updateTicksInside = function() { + var i; + var n = this.ticks.length; + this.adaptSize(this.ticksInside, n); + + if (this.type === this.parent.BOTTOM || this.type === this.parent.TOP) { + for ( i = 0; i < n; i++) { + this.ticksInside[i] = (this.plotTicks[i] >= 0) && (this.plotTicks[i] <= this.dim[0]); + } + } else { + for ( i = 0; i < n; i++) { + this.ticksInside[i] = (-this.plotTicks[i] >= 0) && (-this.plotTicks[i] <= this.dim[1]); + } + } +}; + +GAxis.prototype.updateTickLabels = function() { + var tick, logValue, isExactLogValue, i; + var n = this.ticks.length; + this.adaptSize(this.tickLabels, n); + + if (this.log) { + for ( i = 0; i < n; i++) { + tick = this.ticks[i]; + + if (tick > 0) { + logValue = Math.log(tick) / Math.LN10; + isExactLogValue = Math.abs(logValue - Math.round(logValue)) < 0.0001; + + if (isExactLogValue) { + logValue = Math.round(logValue); + + if (this.expTickLabels) { + this.tickLabels[i] = "1e" + logValue; + } else { + if (logValue > -3.1 && logValue < 3.1) { + this.tickLabels[i] = (logValue >= 0) ? "" + Math.round(tick) : "" + tick; + } else { + this.tickLabels[i] = "1e" + logValue; + } + } + } else { + this.tickLabels[i] = ""; + } + } else { + this.tickLabels[i] = ""; + } + } + } else { + for ( i = 0; i < n; i++) { + tick = this.ticks[i]; + + if (tick % 1 === 0) { + this.tickLabels[i] = "" + Math.round(tick); + } else if ( typeof this.ticksPrecision !== "undefined" && this.ticksPrecision >= 0) { + this.tickLabels[i] = "" + parseFloat(tick).toFixed(this.ticksPrecision); + } else { + this.tickLabels[i] = "" + tick; + } + } + } +}; + +GAxis.prototype.moveLim = function(newLim) { + if (newLim[1] !== newLim[0]) { + // Check that the new limit makes sense + if (this.log && (newLim[0] <= 0 || newLim[1] <= 0)) { + console.log("The limits are negative. This is not allowed in logarithmic scale."); + } else { + this.lim[0] = newLim[0]; + this.lim[1] = newLim[1]; + + // Calculate the new ticks if they are not fixed + if (!this.fixedTicks) { + var n = this.ticks.length; + + if (this.log) { + this.obtainLogarithmicTicks(); + } else if (n > 0) { + // Obtain the ticks precision and the tick separation + var step = 0; + var sigDigits = 0; + + if (this.ticksSeparation > 0) { + step = (this.lim[1] > this.lim[0]) ? this.ticksSeparation : -this.ticksSeparation; + sigDigits = this.obtainSigDigits(step); + + while (this.roundPlus(step, sigDigits) - step !== 0) { + sigDigits++; + } + } else { + step = (n === 1) ? this.lim[1] - this.lim[0] : this.ticks[1] - this.ticks[0]; + sigDigits = this.obtainSigDigits(step); + step = this.roundPlus(step, sigDigits); + + if (step === 0 || Math.abs(step) > Math.abs(this.lim[1] - this.lim[0])) { + sigDigits++; + step = (n === 1) ? this.lim[1] - this.lim[0] : this.ticks[1] - this.ticks[0]; + step = this.roundPlus(step, sigDigits); + } + + step = (this.lim[1] > this.lim[0]) ? Math.abs(step) : -Math.abs(step); + } + + // Obtain the first tick + var firstTick = this.ticks[0] + step * Math.ceil((this.lim[0] - this.ticks[0]) / step); + firstTick = this.roundPlus(firstTick, sigDigits); + + if ((this.lim[1] - firstTick) * (this.lim[0] - firstTick) > 0) { + firstTick = this.ticks[0] + step * Math.floor((this.lim[0] - this.ticks[0]) / step); + firstTick = this.roundPlus(firstTick, sigDigits); + } + + // Calculate the rest of the ticks + n = Math.floor(Math.abs((this.lim[1] - firstTick) / step)) + 1; + this.adaptSize(this.ticks, n); + this.ticks[0] = firstTick; + + for (var i = 1; i < n; i++) { + this.ticks[i] = this.roundPlus(this.ticks[i - 1] + step, sigDigits); + } + + // A sanity check + if (this.ticksPrecision !== sigDigits) { + console.log("There is a problem in the axis ticks precision calculation"); + } + } + + // Obtain the new tick labels + this.updateTickLabels(); + } + + // Update the rest of the arrays + this.updatePlotTicks(); + this.updateTicksInside(); + } + } +}; + +GAxis.prototype.draw = function() { + switch (this.type) { + case this.parent.BOTTOM: + this.drawAsXAxis(); + break; + case this.parent.LEFT: + this.drawAsYAxis(); + break; + case this.parent.TOP: + this.drawAsTopAxis(); + break; + case this.parent.RIGHT: + this.drawAsRightAxis(); + break; + } + + if (this.drawAxisLabel) { + this.lab.draw(); + } +}; + +GAxis.prototype.drawAsXAxis = function() { + var i; + + // Draw the ticks + this.parent.push(); + this.parent.stroke(this.lineColor); + this.parent.strokeWeight(this.lineWidth); + this.parent.strokeCap(this.parent.SQUARE); + + this.parent.line(0, this.offset, this.dim[0], this.offset); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i]) { + if (this.log && this.tickLabels[i] === "") { + this.parent.line(this.plotTicks[i], this.offset, this.plotTicks[i], this.offset + this.smallTickLength); + } else { + this.parent.line(this.plotTicks[i], this.offset, this.plotTicks[i], this.offset + this.tickLength); + } + } + } + + this.parent.pop(); + + // Draw the tick labels + if (this.drawTickLabels) { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotateTickLabels) { + var halfPI = 0.5 * Math.PI; + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.push(); + this.parent.translate(this.plotTicks[i], this.offset + this.tickLabelOffset); + this.parent.rotate(-halfPI); + this.parent.text(this.tickLabels[i], 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.CENTER, this.parent.TOP); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.text(this.tickLabels[i], this.plotTicks[i], this.offset + this.tickLabelOffset); + } + } + } + + this.parent.pop(); + } +}; + +GAxis.prototype.drawAsYAxis = function() { + var i; + + // Draw the ticks + this.parent.push(); + this.parent.stroke(this.lineColor); + this.parent.strokeWeight(this.lineWidth); + this.parent.strokeCap(this.parent.SQUARE); + + this.parent.line(-this.offset, 0, -this.offset, -this.dim[1]); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i]) { + if (this.log && this.tickLabels[i] === "") { + this.parent.line(-this.offset, this.plotTicks[i], -this.offset - this.smallTickLength, this.plotTicks[i]); + } else { + this.parent.line(-this.offset, this.plotTicks[i], -this.offset - this.tickLength, this.plotTicks[i]); + } + } + } + + this.parent.pop(); + + // Draw the tick labels + if (this.drawTickLabels) { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.rotateTickLabels) { + var halfPI = 0.5 * Math.PI; + this.parent.textAlign(this.parent.CENTER, this.parent.BOTTOM); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.push(); + this.parent.translate(-this.offset - this.tickLabelOffset, this.plotTicks[i]); + this.parent.rotate(-halfPI); + this.parent.text(this.tickLabels[i], 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.text(this.tickLabels[i], -this.offset - this.tickLabelOffset, this.plotTicks[i]); + } + } + } + + this.parent.pop(); + } +}; + +GAxis.prototype.drawAsTopAxis = function() { + var i; + + // Draw the ticks + this.parent.push(); + this.parent.stroke(this.lineColor); + this.parent.strokeWeight(this.lineWidth); + this.parent.strokeCap(this.parent.SQUARE); + this.parent.translate(0, -this.dim[1]); + + this.parent.line(0, -this.offset, this.dim[0], -this.offset); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i]) { + if (this.log && this.tickLabels[i] === "") { + this.parent.line(this.plotTicks[i], -this.offset, this.plotTicks[i], -this.offset - this.smallTickLength); + } else { + this.parent.line(this.plotTicks[i], -this.offset, this.plotTicks[i], -this.offset - this.tickLength); + } + } + } + + this.parent.pop(); + + // Draw the tick labels + if (this.drawTickLabels) { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + this.parent.translate(0, -this.dim[1]); + + if (this.rotateTickLabels) { + var halfPI = 0.5 * Math.PI; + this.parent.textAlign(this.parent.LEFT, this.parent.CENTER); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.push(); + this.parent.translate(this.plotTicks[i], -this.offset - this.tickLabelOffset); + this.parent.rotate(-halfPI); + this.parent.text(this.tickLabels[i], 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.CENTER, this.parent.BOTTOM); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.text(this.tickLabels[i], this.plotTicks[i], -this.offset - this.tickLabelOffset); + } + } + } + + this.parent.pop(); + } +}; + +GAxis.prototype.drawAsRightAxis = function() { + var i; + + // Draw the ticks + this.parent.push(); + this.parent.stroke(this.lineColor); + this.parent.strokeWeight(this.lineWidth); + this.parent.strokeCap(this.parent.SQUARE); + this.parent.translate(this.dim[0], 0); + + this.parent.line(this.offset, 0, this.offset, -this.dim[1]); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i]) { + if (this.log && this.tickLabels[i] === "") { + this.parent.line(this.offset, this.plotTicks[i], this.offset + this.smallTickLength, this.plotTicks[i]); + } else { + this.parent.line(this.offset, this.plotTicks[i], this.offset + this.tickLength, this.plotTicks[i]); + } + } + } + + this.parent.pop(); + + // Draw the tick labels + if (this.drawTickLabels) { + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + this.parent.translate(this.dim[0], 0); + + if (this.rotateTickLabels) { + var halfPI = 0.5 * Math.PI; + this.parent.textAlign(this.parent.CENTER, this.parent.TOP); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.push(); + this.parent.translate(this.offset + this.tickLabelOffset, this.plotTicks[i]); + this.parent.rotate(-halfPI); + this.parent.text(this.tickLabels[i], 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.LEFT, this.parent.CENTER); + + for ( i = 0; i < this.plotTicks.length; i++) { + if (this.ticksInside[i] && this.tickLabels[i] !== "") { + this.parent.text(this.tickLabels[i], this.offset + this.tickLabelOffset, this.plotTicks[i]); + } + } + } + + this.parent.pop(); + } +}; + +GAxis.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GAxis.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + this.dim[0] = xDim; + this.dim[1] = yDim; + this.updatePlotTicks(); + this.lab.setDim(this.dim); + } +}; + +GAxis.prototype.setLim = function(lim) { + if (lim[1] !== lim[0]) { + // Make sure the new limits makes sense + if (this.log && (lim[0] <= 0 || lim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.lim[0] = lim[0]; + this.lim[1] = lim[1]; + + if (!this.fixedTicks) { + this.updateTicks(); + this.updateTickLabels(); + } + + this.updatePlotTicks(); + this.updateTicksInside(); + } + } +}; + +GAxis.prototype.setLimAndLog = function(lim, log) { + if (lim[1] !== lim[0]) { + // Make sure the new limits makes sense + if (log && (lim[0] <= 0 || lim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.lim[0] = lim[0]; + this.lim[1] = lim[1]; + this.log = log; + + if (!this.fixedTicks) { + this.updateTicks(); + this.updateTickLabels(); + } + + this.updatePlotTicks(); + this.updateTicksInside(); + } + } +}; + +GAxis.prototype.setLog = function(log) { + if (log !== this.log) { + this.log = log; + + // Check if the old limits still make sense + if (this.log && (this.lim[0] <= 0 || this.lim[1] <= 0)) { + console.log("The limits are negative. This is not allowed in logarithmic scale."); + console.log("Will set them to (0.1, 10)"); + + if (this.lim[1] > this.lim[0]) { + this.lim[0] = 0.1; + this.lim[1] = 10; + } else { + this.lim[0] = 10; + this.lim[1] = 0.1; + } + } + + if (!this.fixedTicks) { + this.updateTicks(); + this.updateTickLabels(); + } + + this.updatePlotTicks(); + this.updateTicksInside(); + } +}; + +GAxis.prototype.setOffset = function(offset) { + this.offset = offset; +}; + +GAxis.prototype.setLineColor = function(lineColor) { + this.lineColor = lineColor; +}; + +GAxis.prototype.setLineWidth = function(lineWidth) { + if (lineWidth > 0) { + this.lineWidth = lineWidth; + } +}; + +GAxis.prototype.setNTicks = function(nTicks) { + if (nTicks >= 0) { + this.nTicks = nTicks; + this.ticksSeparation = -1; + + if (!this.log) { + this.fixedTicks = false; + this.updateTicks(); + this.updatePlotTicks(); + this.updateTicksInside(); + this.updateTickLabels(); + } + } +}; + +GAxis.prototype.setTicksSeparation = function(ticksSeparation) { + this.ticksSeparation = ticksSeparation; + + if (!this.log) { + this.fixedTicks = false; + this.updateTicks(); + this.updatePlotTicks(); + this.updateTicksInside(); + this.updateTickLabels(); + } +}; + +GAxis.prototype.setTicks = function(ticks) { + var n = ticks.length; + this.adaptSize(this.ticks, n); + + for (var i = 0; i < n; i++) { + this.ticks[i] = ticks[i]; + } + + this.fixedTicks = true; + + // Set the tick precision to undefined + this.ticksPrecision = undefined; + + this.updatePlotTicks(); + this.updateTicksInside(); + this.updateTickLabels(); +}; + +GAxis.prototype.setTickLabels = function(tickLabels) { + if (tickLabels.length === this.tickLabels.length) { + for (var i = 0; i < this.tickLabels.length; i++) { + this.tickLabels[i] = tickLabels[i]; + } + + this.fixedTicks = true; + + // Set the tick precision to undefined + this.ticksPrecision = undefined; + } +}; + +GAxis.prototype.setFixedTicks = function(fixedTicks) { + if (fixedTicks !== this.fixedTicks) { + this.fixedTicks = fixedTicks; + + if (!this.fixedTicks) { + this.updateTicks(); + this.updatePlotTicks(); + this.updateTicksInside(); + this.updateTickLabels(); + } + } +}; + +GAxis.prototype.setTickLength = function(tickLength) { + this.tickLength = tickLength; +}; + +GAxis.prototype.setSmallTickLength = function(smallTickLength) { + this.smallTickLength = smallTickLength; +}; + +GAxis.prototype.setExpTickLabels = function(expTickLabels) { + if (expTickLabels !== this.expTickLabels) { + this.expTickLabels = expTickLabels; + this.updateTickLabels(); + } +}; + +GAxis.prototype.setRotateTickLabels = function(rotateTickLabels) { + this.rotateTickLabels = rotateTickLabels; +}; + +GAxis.prototype.setDrawTickLabels = function(drawTickLabels) { + this.drawTickLabels = drawTickLabels; +}; + +GAxis.prototype.setTickLabelOffset = function(tickLabelOffset) { + this.tickLabelOffset = tickLabelOffset; +}; + +GAxis.prototype.setDrawAxisLabel = function(drawAxisLabel) { + this.drawAxisLabel = drawAxisLabel; +}; + +GAxis.prototype.setAxisLabelText = function(axisLabelText) { + this.lab.setText(axisLabelText); +}; + +GAxis.prototype.setFontName = function(fontName) { + this.fontName = fontName; +}; + +GAxis.prototype.setFontColor = function(fontColor) { + this.fontColor = fontColor; +}; + +GAxis.prototype.setFontSize = function(fontSize) { + if (fontSize > 0) { + this.fontSize = fontSize; + } +}; + +GAxis.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + if (fontSize > 0) { + this.fontName = fontName; + this.fontColor = fontColor; + this.fontSize = fontSize; + } +}; + +GAxis.prototype.setAllFontProperties = function(fontName, fontColor, fontSize) { + this.setFontProperties(fontName, fontColor, fontSize); + this.lab.setFontProperties(fontName, fontColor, fontSize); +}; + +GAxis.prototype.getTicks = function() { + if (this.fixedTicks) { + return this.ticks.slice(); + } else { + // Return only the ticks that are visible + var validTicks = []; + var counter = 0; + + for (var i = 0; i < this.ticksInside.length; i++) { + if (this.ticksInside[i]) { + validTicks[counter] = this.ticks[i]; + counter++; + } + } + + return validTicks; + } +}; + +GAxis.prototype.getTicksRef = function() { + return this.ticks; +}; + +GAxis.prototype.getPlotTicks = function() { + if (this.fixedTicks) { + return this.plotTicks.slice(); + } else { + var validPlotTicks = []; + var counter = 0; + + for (var i = 0; i < this.ticksInside.length; i++) { + if (this.ticksInside[i]) { + validPlotTicks[counter] = this.plotTicks[i]; + counter++; + } + } + + return validPlotTicks; + } +}; + +GAxis.prototype.getPlotTicksRef = function() { + return this.plotTicks; +}; + +GAxis.prototype.getAxisLabel = function() { + return this.lab; +}; +/* + * Histogram class. + */ +function GHistogram(parent, type, dim, plotPoints) { + // The parent processing object + this.parent = parent; + + // General properties + this.type = (type === GPlot.VERTICAL || type === GPlot.HORIZONTAL) ? type : GPlot.VERTICAL; + this.dim = dim.slice(); + this.plotPoints = []; + + // Copy the plot points + for (var i = 0; i < plotPoints.length; i++) { + this.plotPoints[i] = new GPoint(plotPoints[i]); + } + + this.visible = true; + this.separations = [2]; + this.bgColors = [this.parent.color(150, 150, 255)]; + this.lineColors = [this.parent.color(100, 100, 255)]; + this.lineWidths = [1]; + this.differences = []; + this.leftSides = []; + this.rightSides = []; + this.updateArrays(); + + // Labels properties + this.labelsOffset = 8; + this.drawLabels = false; + this.rotateLabels = false; + this.fontName = "Helvetica"; + this.fontColor = this.parent.color(0); + this.fontSize = 11; +} + +GHistogram.prototype.updateArrays = function() { + var i; + var nPoints = this.plotPoints.length; + + // Remove unused points + if (this.differences.length > nPoints) { + this.differences.splice(nPoints, Number.MAX_VALUE); + this.leftSides.splice(nPoints, Number.MAX_VALUE); + this.rightSides.splice(nPoints, Number.MAX_VALUE); + } + + // Update the arrays + if (nPoints === 1) { + this.leftSides[0] = (this.type === GPlot.VERTICAL) ? 0.2 * this.dim[0] : 0.2 * this.dim[1]; + this.rightSides[0] = this.leftSides[0]; + } else if (nPoints > 1) { + // Calculate the differences between consecutive points + for ( i = 0; i < nPoints - 1; i++) { + if (this.plotPoints[i].isValid() && this.plotPoints[i + 1].isValid()) { + var separation = this.separations[i % this.separations.length]; + var diff; + + if (this.type === GPlot.VERTICAL) { + diff = this.plotPoints[i + 1].getX() - this.plotPoints[i].getX(); + } else { + diff = this.plotPoints[i + 1].getY() - this.plotPoints[i].getY(); + } + + if (diff > 0) { + this.differences[i] = (diff - separation) / 2; + } else { + this.differences[i] = (diff + separation) / 2; + } + } else { + this.differences[i] = 0; + } + } + + // Fill the leftSides and rightSides arrays + this.leftSides[0] = this.differences[0]; + this.rightSides[0] = this.differences[0]; + + for ( i = 1; i < nPoints - 1; i++) { + this.leftSides[i] = this.differences[i - 1]; + this.rightSides[i] = this.differences[i]; + } + + this.leftSides[nPoints - 1] = this.differences[nPoints - 2]; + this.rightSides[nPoints - 1] = this.differences[nPoints - 2]; + } +}; + +GHistogram.prototype.draw = function(plotBasePoint) { + if (this.visible) { + // Calculate the baseline for the histogram + var baseline = 0; + + if (plotBasePoint.isValid()) { + baseline = (this.type === GPlot.VERTICAL) ? plotBasePoint.getY() : plotBasePoint.getX(); + } + + // Draw the rectangles + var point, x1, x2, y1, y2, lw; + var nPoints = this.plotPoints.length; + + this.parent.push(); + this.parent.rectMode(this.parent.CORNERS); + this.parent.strokeCap(this.parent.SQUARE); + + for (var i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid()) { + // Obtain the corners + if (this.type === GPlot.VERTICAL) { + x1 = point.getX() - this.leftSides[i]; + x2 = point.getX() + this.rightSides[i]; + y1 = point.getY(); + y2 = baseline; + } else { + x1 = baseline; + x2 = point.getX(); + y1 = point.getY() - this.leftSides[i]; + y2 = point.getY() + this.rightSides[i]; + } + + if (x1 < 0) { + x1 = 0; + } else if (x1 > this.dim[0]) { + x1 = this.dim[0]; + } + + if (-y1 < 0) { + y1 = 0; + } else if (-y1 > this.dim[1]) { + y1 = -this.dim[1]; + } + + if (x2 < 0) { + x2 = 0; + } else if (x2 > this.dim[0]) { + x2 = this.dim[0]; + } + + if (-y2 < 0) { + y2 = 0; + } else if (-y2 > this.dim[1]) { + y2 = -this.dim[1]; + } + + // Draw the rectangle + lw = this.lineWidths[i % this.lineWidths.length]; + this.parent.fill(this.bgColors[i % this.bgColors.length]); + this.parent.stroke(this.lineColors[i % this.lineColors.length]); + this.parent.strokeWeight(lw); + + if (Math.abs(x2 - x1) > 2 * lw && Math.abs(y2 - y1) > 2 * lw) { + this.parent.rect(x1, y1, x2, y2); + } else if ((this.type === GPlot.VERTICAL && x2 !== x1 && !(y1 === y2 && (y1 === 0 || y1 === -this.dim[1]))) || (this.type === GPlot.HORIZONTAL && y2 !== y1 && !(x1 === x2 && (x1 === 0 || x1 === this.dim[0])))) { + this.parent.rect(x1, y1, x2, y2); + this.parent.line(x1, y1, x1, y2); + this.parent.line(x2, y1, x2, y2); + this.parent.line(x1, y1, x2, y1); + this.parent.line(x1, y2, x2, y2); + } + } + } + + this.parent.pop(); + + // Draw the labels + if (this.drawLabels) { + this.drawHistLabels(); + } + } +}; + +GHistogram.prototype.drawHistLabels = function() { + var point, i; + var nPoints = this.plotPoints.length; + var halfPI = 0.5 * Math.PI; + + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.noStroke(); + + if (this.type === GPlot.VERTICAL) { + if (this.rotateLabels) { + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + + for ( i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid() && point.getX() >= 0 && point.getX() <= this.dim[0]) { + this.parent.push(); + this.parent.translate(point.getX(), this.labelsOffset); + this.parent.rotate(-halfPI); + this.parent.text(point.getLabel(), 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.CENTER, this.parent.TOP); + + for ( i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid() && point.getX() >= 0 && point.getX() <= this.dim[0]) { + this.parent.text(point.getLabel(), point.getX(), this.labelsOffset); + } + } + } + } else { + if (this.rotateLabels) { + this.parent.textAlign(this.parent.CENTER, this.parent.BOTTOM); + + for ( i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid() && -point.getY() >= 0 && -point.getY() <= this.dim[1]) { + this.parent.push(); + this.parent.translate(-this.labelsOffset, point.getY()); + this.parent.rotate(-halfPI); + this.parent.text(point.getLabel(), 0, 0); + this.parent.pop(); + } + } + } else { + this.parent.textAlign(this.parent.RIGHT, this.parent.CENTER); + + for ( i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid() && -point.getY() >= 0 && -point.getY() <= this.dim[1]) { + this.parent.text(point.getLabel(), -this.labelsOffset, point.getY()); + } + } + } + } + + this.parent.pop(); +}; + +GHistogram.prototype.setType = function(type) { + if (type !== this.type && (type === GPlot.VERTICAL || type === GPlot.HORIZONTAL)) { + this.type = type; + this.updateArrays(); + } +}; + +GHistogram.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GHistogram.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + this.dim[0] = xDim; + this.dim[1] = yDim; + this.updateArrays(); + } +}; + +GHistogram.prototype.setPlotPoints = function(plotPoints) { + var i; + var nPoints = plotPoints.length; + + if (this.plotPoints.length === nPoints) { + for ( i = 0; i < nPoints; i++) { + this.plotPoints[i].set(plotPoints[i]); + } + } else if (this.plotPoints.length > nPoints) { + for ( i = 0; i < nPoints; i++) { + this.plotPoints[i].set(plotPoints[i]); + } + + this.plotPoints.splice(nPoints, Number.MAX_VALUE); + } else { + for ( i = 0; i < this.plotPoints.length; i++) { + this.plotPoints[i].set(plotPoints[i]); + } + + for ( i = this.plotPoints.lengh; i < nPoints; i++) { + this.plotPoints[i] = new GPoint(plotPoints[i]); + } + } + + this.updateArrays(); +}; + +GHistogram.prototype.setPlotPoint = function(index, plotPoint) { + if (index < this.plotPoints.length) { + this.plotPoints[index].set(plotPoint); + } else if (index === this.plotPoints.length) { + this.plotPoints[index] = new GPoint(plotPoint); + } else { + throw new Error("GHistogram.setPlotPoint(): the index position is outside the array size"); + } + + this.updateArrays(); +}; + +GHistogram.prototype.addPlotPoint = function() { + if (arguments.length === 2) { + this.plotPoints.push(new GPoint(arguments[0], arguments[1])); + } else if (arguments.length === 1) { + this.plotPoints.push(new GPoint(arguments[0])); + } else { + throw new Error("GHistogram.addPlotPoint(): signature not supported"); + } + + this.updateArrays(); +}; + +GHistogram.prototype.removePlotPoint = function(index) { + if (index < this.plotPoints.length) { + this.plotPoints.splice(index, 1); + } else { + throw new Error("GHistogram.removePlotPoint(): the index position is outside the array size"); + } + + this.updateArrays(); +}; + +GHistogram.prototype.setSeparations = function(separations) { + this.separations = separations.slice(); + this.updateArrays(); +}; + +GHistogram.prototype.setBgColors = function(bgColors) { + this.bgColors = bgColors.slice(); +}; + +GHistogram.prototype.setLineColors = function(lineColors) { + this.lineColors = lineColors.slice(); +}; + +GHistogram.prototype.setLineWidths = function(lineWidths) { + this.lineWidths = lineWidths.slice(); +}; + +GHistogram.prototype.setVisible = function(visible) { + this.visible = visible; +}; + +GHistogram.prototype.setLabelsOffset = function(labelsOffset) { + this.labelsOffset = labelsOffset; +}; + +GHistogram.prototype.setDrawLabels = function(drawLabels) { + this.drawLabels = drawLabels; +}; + +GHistogram.prototype.setRotateLabels = function(rotateLabels) { + this.rotateLabels = rotateLabels; +}; + +GHistogram.prototype.setFontName = function(fontName) { + this.fontName = fontName; +}; + +GHistogram.prototype.setFontColor = function(fontColor) { + this.fontColor = fontColor; +}; + +GHistogram.prototype.setFontSize = function(fontSize) { + if (fontSize > 0) { + this.fontSize = fontSize; + } +}; + +GHistogram.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + if (fontSize > 0) { + this.fontName = fontName; + this.fontColor = fontColor; + this.fontSize = fontSize; + } +}; +/* + * Layer class. A GLayer usually contains an array of points and a histogram + */ +function GLayer(parent, id, dim, xLim, yLim, xLog, yLog) { + // The parent processing object + this.parent = parent; + + // General properties + this.id = id; + this.dim = dim.slice(); + this.xLim = xLim.slice(); + this.yLim = yLim.slice(); + this.xLog = xLog; + this.yLog = yLog; + + // Do some sanity checks + if (this.xLog && (this.xLim[0] <= 0 || this.xLim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + console.log("Will set horizontal limits to (0.1, 10)"); + this.xLim[0] = 0.1; + this.xLim[1] = 10; + } + + if (this.yLog && (this.yLim[0] <= 0 || this.yLim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + console.log("Will set vertical limits to (0.1, 10)"); + this.yLim[0] = 0.1; + this.yLim[1] = 10; + } + + // Points properties + this.points = []; + this.plotPoints = []; + this.inside = []; + this.pointColors = [this.parent.color(255, 0, 0, 150)]; + this.pointSizes = [7]; + + // Line properties + this.lineColor = this.parent.color(0, 150); + this.lineWidth = 1; + + // Histogram properties + this.hist = undefined; + this.histBasePoint = new GPoint(0, 0); + + // Labels properties + this.labelBgColor = this.parent.color(255, 200); + this.labelSeparation = [7, 7]; + this.fontName = "Helvetica"; + this.fontColor = this.parent.color(0); + this.fontSize = 11; + + // Helper variable + this.cuts = [[0, 0], [0, 0], [0, 0], [0, 0]]; +} + +GLayer.prototype.isValidNumber = function(number) { + return !isNaN(number) && isFinite(number); +}; + +GLayer.prototype.isId = function(someId) { + return this.id === someId; +}; + +GLayer.prototype.valueToXPlot = function(x) { + if (this.xLog) { + return this.dim[0] * Math.log(x / this.xLim[0]) / Math.log(this.xLim[1] / this.xLim[0]); + } else { + return this.dim[0] * (x - this.xLim[0]) / (this.xLim[1] - this.xLim[0]); + } +}; + +GLayer.prototype.valueToYPlot = function(y) { + if (this.yLog) { + return -this.dim[1] * Math.log(y / this.yLim[0]) / Math.log(this.yLim[1] / this.yLim[0]); + } else { + return -this.dim[1] * (y - this.yLim[0]) / (this.yLim[1] - this.yLim[0]); + } +}; + +GLayer.prototype.valueToPlot = function() { + if (arguments.length === 2) { + return [this.valueToXPlot(arguments[0]), this.valueToYPlot(arguments[1])]; + } else if (arguments.length === 1 && arguments[0] instanceof GPoint) { + return new GPoint(this.valueToXPlot(arguments[0].getX()), this.valueToYPlot(arguments[0].getY()), arguments[0].getLabel()); + } else if (arguments.length === 1 && arguments[0] instanceof Array && arguments[0][0] instanceof GPoint) { + var xScalingFactor, yScalingFactor, point, xPlot, yPlot, i; + var nPoints = arguments[0].length; + var plotPts = []; + + // Go case by case. More code, but it's faster + if (this.xLog && this.yLog) { + xScalingFactor = this.dim[0] / Math.log(this.xLim[1] / this.xLim[0]); + yScalingFactor = -this.dim[1] / Math.log(this.yLim[1] / this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = arguments[0][i]; + xPlot = Math.log(point.getX() / this.xLim[0]) * xScalingFactor; + yPlot = Math.log(point.getY() / this.yLim[0]) * yScalingFactor; + plotPts[i] = new GPoint(xPlot, yPlot, point.getLabel()); + } + } else if (this.xLog) { + xScalingFactor = this.dim[0] / Math.log(this.xLim[1] / this.xLim[0]); + yScalingFactor = -this.dim[1] / (this.yLim[1] - this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = arguments[0][i]; + xPlot = Math.log(point.getX() / this.xLim[0]) * xScalingFactor; + yPlot = (point.getY() - this.yLim[0]) * yScalingFactor; + plotPts[i] = new GPoint(xPlot, yPlot, point.getLabel()); + } + } else if (this.yLog) { + xScalingFactor = this.dim[0] / (this.xLim[1] - this.xLim[0]); + yScalingFactor = -this.dim[1] / Math.log(this.yLim[1] / this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = arguments[0][i]; + xPlot = (point.getX() - this.xLim[0]) * xScalingFactor; + yPlot = Math.log(point.getY() / this.yLim[0]) * yScalingFactor; + plotPts[i] = new GPoint(xPlot, yPlot, point.getLabel()); + } + } else { + xScalingFactor = this.dim[0] / (this.xLim[1] - this.xLim[0]); + yScalingFactor = -this.dim[1] / (this.yLim[1] - this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = arguments[0][i]; + xPlot = (point.getX() - this.xLim[0]) * xScalingFactor; + yPlot = (point.getY() - this.yLim[0]) * yScalingFactor; + plotPts[i] = new GPoint(xPlot, yPlot, point.getLabel()); + } + } + + return plotPts; + } else { + throw new Error("GLayer.valueToPlot(): signature not supported"); + } +}; + +GLayer.prototype.updatePlotPoints = function() { + var xScalingFactor, yScalingFactor, point, xPlot, yPlot, i; + var nPoints = this.points.length; + + // Update the plotPoints array size if necessary + if (this.plotPoints.length < nPoints) { + for ( i = this.plotPoints.length; i < nPoints; i++) { + this.plotPoints[i] = new GPoint(); + } + } else if (this.plotPoints.length > nPoints) { + this.plotPoints.splice(nPoints, Number.MAX_VALUE); + } + + // Go case by case. More code, but it should be faster + if (this.xLog && this.yLog) { + xScalingFactor = this.dim[0] / Math.log(this.xLim[1] / this.xLim[0]); + yScalingFactor = -this.dim[1] / Math.log(this.yLim[1] / this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = this.points[i]; + xPlot = Math.log(point.getX() / this.xLim[0]) * xScalingFactor; + yPlot = Math.log(point.getY() / this.yLim[0]) * yScalingFactor; + this.plotPoints[i].set(xPlot, yPlot, point.getLabel()); + } + } else if (this.xLog) { + xScalingFactor = this.dim[0] / Math.log(this.xLim[1] / this.xLim[0]); + yScalingFactor = -this.dim[1] / (this.yLim[1] - this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = this.points[i]; + xPlot = Math.log(point.getX() / this.xLim[0]) * xScalingFactor; + yPlot = (point.getY() - this.yLim[0]) * yScalingFactor; + this.plotPoints[i].set(xPlot, yPlot, point.getLabel()); + } + } else if (this.yLog) { + xScalingFactor = this.dim[0] / (this.xLim[1] - this.xLim[0]); + yScalingFactor = -this.dim[1] / Math.log(this.yLim[1] / this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = this.points[i]; + xPlot = (point.getX() - this.xLim[0]) * xScalingFactor; + yPlot = Math.log(point.getY() / this.yLim[0]) * yScalingFactor; + this.plotPoints[i].set(xPlot, yPlot, point.getLabel()); + } + } else { + xScalingFactor = this.dim[0] / (this.xLim[1] - this.xLim[0]); + yScalingFactor = -this.dim[1] / (this.yLim[1] - this.yLim[0]); + + for ( i = 0; i < nPoints; i++) { + point = this.points[i]; + xPlot = (point.getX() - this.xLim[0]) * xScalingFactor; + yPlot = (point.getY() - this.yLim[0]) * yScalingFactor; + this.plotPoints[i].set(xPlot, yPlot, point.getLabel()); + } + } +}; + +GLayer.prototype.xPlotToValue = function(xPlot) { + if (this.xLog) { + return Math.exp(Math.log(this.xLim[0]) + Math.log(this.xLim[1] / this.xLim[0]) * xPlot / this.dim[0]); + } else { + return this.xLim[0] + (this.xLim[1] - this.xLim[0]) * xPlot / this.dim[0]; + } +}; + +GLayer.prototype.yPlotToValue = function(yPlot) { + if (this.yLog) { + return Math.exp(Math.log(this.yLim[0]) - Math.log(this.yLim[1] / this.yLim[0]) * yPlot / this.dim[1]); + } else { + return this.yLim[0] - (this.yLim[1] - this.yLim[0]) * yPlot / this.dim[1]; + } +}; + +GLayer.prototype.plotToValue = function(xPlot, yPlot) { + return [this.xPlotToValue(xPlot), this.yPlotToValue(yPlot)]; +}; + +GLayer.prototype.isInside = function() { + var xPlot, yPlot, valid; + + if (arguments.length === 2) { + xPlot = arguments[0]; + yPlot = arguments[1]; + valid = this.isValidNumber(xPlot) && this.isValidNumber(yPlot); + } else if (arguments.length === 1 && arguments[0] instanceof GPoint) { + xPlot = arguments[0].getX(); + yPlot = arguments[0].getY(); + valid = arguments[0].isValid(); + } else { + throw new Error("GLayer.isInside(): signature not supported"); + } + + return (valid) ? (xPlot >= 0) && (xPlot <= this.dim[0]) && (-yPlot >= 0) && (-yPlot <= this.dim[1]) : false; +}; + +GLayer.prototype.updateInsideList = function() { + var point; + var nPoints = this.plotPoints.length; + + for (var i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + this.inside[i] = (point.isValid()) ? (point.getX() >= 0) && (point.getX() <= this.dim[0]) && (-point.getY() >= 0) && (-point.getY() <= this.dim[1]) : false; + } + + // Remove the unused elements + if (this.inside.length > nPoints) { + this.inside.splice(nPoints, Number.MAX_VALUE); + } +}; + +GLayer.prototype.getPointIndexAtPlotPos = function(xPlot, yPlot) { + var pointIndex; + + if (this.isInside(xPlot, yPlot)) { + var point, distSq; + var minDistSq = 25; + var nPoints = this.plotPoints.length; + + for (var i = 0; i < nPoints; i++) { + if (this.inside[i]) { + point = this.plotPoints[i]; + distSq = Math.pow(point.getX() - xPlot, 2) + Math.pow(point.getY() - yPlot, 2); + + if (distSq < minDistSq) { + minDistSq = distSq; + pointIndex = i; + } + } + } + } + + return pointIndex; +}; + +GLayer.prototype.getPointAtPlotPos = function(xPlot, yPlot) { + return this.points[this.getPointIndexAtPlotPos(xPlot, yPlot)]; +}; + +GLayer.prototype.obtainBoxIntersections = function(plotPoint1, plotPoint2) { + var nCuts = 0; + + if (plotPoint1.isValid() && plotPoint2.isValid()) { + var x1 = plotPoint1.getX(); + var y1 = plotPoint1.getY(); + var x2 = plotPoint2.getX(); + var y2 = plotPoint2.getY(); + var inside1 = this.isInside(x1, y1); + var inside2 = this.isInside(x2, y2); + + // Check if the line between the two points could cut the box borders + var dontCut = (inside1 && inside2) || (x1 < 0 && x2 < 0) || (x1 > this.dim[0] && x2 > this.dim[0]) || (-y1 < 0 && -y2 < 0) || (-y1 > this.dim[1] && -y2 > this.dim[1]); + + if (!dontCut) { + // Obtain the axis cuts of the line that cross the two points + var deltaX = x2 - x1; + var deltaY = y2 - y1; + + if (deltaX === 0) { + nCuts = 2; + this.cuts[0][0] = x1; + this.cuts[0][1] = 0; + this.cuts[1][0] = x1; + this.cuts[1][1] = -this.dim[1]; + } else if (deltaY === 0) { + nCuts = 2; + this.cuts[0][0] = 0; + this.cuts[0][1] = y1; + this.cuts[1][0] = this.dim[0]; + this.cuts[1][1] = y1; + } else { + // Obtain the straight line (y = yCut + slope*x) that + // crosses the two points + var slope = deltaY / deltaX; + var yCut = y1 - slope * x1; + + // Calculate the axis cuts of that line + nCuts = 4; + this.cuts[0][0] = -yCut / slope; + this.cuts[0][1] = 0; + this.cuts[1][0] = (-this.dim[1] - yCut) / slope; + this.cuts[1][1] = -this.dim[1]; + this.cuts[2][0] = 0; + this.cuts[2][1] = yCut; + this.cuts[3][0] = this.dim[0]; + this.cuts[3][1] = yCut + slope * this.dim[0]; + } + + // Select only the cuts that fall inside the box and are located + // between the two points + nCuts = this.getValidCuts(this.cuts, nCuts, plotPoint1, plotPoint2); + + // Make sure we have the correct number of cuts + if (inside1 || inside2) { + // One of the points is inside. We should have one cut only + if (nCuts !== 1) { + var pointInside = (inside1) ? plotPoint1 : plotPoint2; + + // If too many cuts + if (nCuts > 1) { + nCuts = this.removeDuplicatedCuts(this.cuts, nCuts, 0); + + if (nCuts > 1) { + nCuts = this.removePointFromCuts(this.cuts, nCuts, pointInside, 0); + + // In case of rounding number errors + if (nCuts > 1) { + nCuts = this.removeDuplicatedCuts(this.cuts, nCuts, 0.001); + + if (nCuts > 1) { + nCuts = this.removePointFromCuts(this.cuts, nCuts, pointInside, 0.001); + } + } + } + } + + // If the cut is missing, then it must be equal to the point + // inside + if (nCuts === 0) { + nCuts = 1; + this.cuts[0][0] = pointInside.getX(); + this.cuts[1][0] = pointInside.getY(); + } + } + } else { + // Both points are outside. We should have either two cuts or + // none + if (nCuts > 2) { + nCuts = this.removeDuplicatedCuts(this.cuts, nCuts, 0); + + // In case of rounding number errors + if (nCuts > 2) { + nCuts = this.removeDuplicatedCuts(this.cuts, nCuts, 0.001); + } + } + + // If we have two cuts, order them (the closest to the first + // point goes first) + if (nCuts === 2) { + if ((Math.pow(this.cuts[0][0] - x1, 2) + Math.pow(this.cuts[0][1] - y1), 2) > (Math.pow(this.cuts[1][0] - x1, 2) + Math.pow(this.cuts[1][1] - y1, 2))) { + this.cuts[2][0] = this.cuts[0][0]; + this.cuts[2][1] = this.cuts[0][1]; + this.cuts[0][0] = this.cuts[1][0]; + this.cuts[0][1] = this.cuts[1][1]; + this.cuts[1][0] = this.cuts[2][0]; + this.cuts[1][1] = this.cuts[2][1]; + } + } + + // If one cut is missing, add the same one twice + if (nCuts === 1) { + nCuts = 2; + this.cuts[1][0] = this.cuts[0][0]; + this.cuts[1][1] = this.cuts[0][1]; + } + } + + // Some sanity checks + if ((inside1 || inside2) && nCuts !== 1) { + console.log("There should be one cut!!!"); + } else if (!inside1 && !inside2 && nCuts !== 0 && nCuts !== 2) { + console.log("There should be either 0 or 2 cuts!!! " + nCuts + " were found"); + } + } + } + + return nCuts; +}; + +GLayer.prototype.getValidCuts = function(cuts, nCuts, plotPoint1, plotPoint2) { + var x1 = plotPoint1.getX(); + var y1 = plotPoint1.getY(); + var x2 = plotPoint2.getX(); + var y2 = plotPoint2.getY(); + var deltaX = Math.abs(x2 - x1); + var deltaY = Math.abs(y2 - y1); + var counter = 0; + + for (var i = 0; i < nCuts; i++) { + // Check that the cut is inside the inner plotting area + if (this.isInside(cuts[i][0], cuts[i][1])) { + // Check that the cut falls between the two points + if (Math.abs(cuts[i][0] - x1) <= deltaX && Math.abs(cuts[i][1] - y1) <= deltaY && Math.abs(cuts[i][0] - x2) <= deltaX && Math.abs(cuts[i][1] - y2) <= deltaY) { + cuts[counter][0] = cuts[i][0]; + cuts[counter][1] = cuts[i][1]; + counter++; + } + } + } + + return counter; +}; + +GLayer.prototype.removeDuplicatedCuts = function(cuts, nCuts, tolerance) { + var repeated; + var counter = 0; + + for (var i = 0; i < nCuts; i++) { + repeated = false; + + for (var j = 0; j < counter; j++) { + if (Math.abs(cuts[j][0] - cuts[i][0]) <= tolerance && Math.abs(cuts[j][1] - cuts[i][1]) <= tolerance) { + repeated = true; + break; + } + } + + if (!repeated) { + cuts[counter][0] = cuts[i][0]; + cuts[counter][1] = cuts[i][1]; + counter++; + } + } + + return counter; +}; + +GLayer.prototype.removePointFromCuts = function(cuts, nCuts, plotPoint, tolerance) { + var x = plotPoint.getX(); + var y = plotPoint.getY(); + var counter = 0; + + for (var i = 0; i < nCuts; i++) { + if (Math.abs(cuts[i][0] - x) > tolerance || Math.abs(cuts[i][1] - y) > tolerance) { + cuts[counter][0] = cuts[i][0]; + cuts[counter][1] = cuts[i][1]; + counter++; + } + } + + return counter; +}; + +GLayer.prototype.startHistogram = function(histType) { + this.hist = new GHistogram(this.parent, histType, this.dim, this.plotPoints); +}; + +GLayer.prototype.drawPoints = function() { + var nPoints, i; + + if (arguments.length === 0) { + nPoints = this.plotPoints.length; + var nColors = this.pointColors.length; + var nSizes = this.pointSizes.length; + + this.parent.push(); + this.parent.ellipseMode(this.parent.CENTER); + this.parent.stroke(50); + + if (nColors === 1 && nSizes === 1) { + this.parent.fill(this.pointColors[0]); + + for ( i = 0; i < nPoints; i++) { + if (this.inside[i]) { + this.parent.ellipse(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.pointSizes[0], this.pointSizes[0]); + } + } + } else if (nColors === 1) { + this.parent.fill(this.pointColors[0]); + + for ( i = 0; i < nPoints; i++) { + if (this.inside[i]) { + this.parent.fill(0); + this.parent.noStroke(); + this.parent.ellipse(this.plotPoints[i].getX(), this.plotPoints[i].getY(),4,4); + this.parent.stroke(100); + this.parent.fill(this.pointColors[0]); + this.parent.ellipse(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.pointSizes[i % nSizes], this.pointSizes[i % nSizes]); + } + } + } else if (nSizes === 1) { + for ( i = 0; i < nPoints; i++) { + if (this.inside[i]) { + this.parent.fill(this.pointColors[i % nColors]); + this.parent.ellipse(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.pointSizes[0], this.pointSizes[0]); + } + } + } else { + for ( i = 0; i < nPoints; i++) { + if (this.inside[i]) { + this.parent.fill(this.pointColors[i % nColors]); + this.parent.ellipse(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.pointSizes[i % nSizes], this.pointSizes[i % nSizes]); + } + } + } + + this.parent.pop(); + } else if (arguments.length === 1 && arguments[0] instanceof p5.Image) { + nPoints = this.plotPoints.length; + + this.parent.push(); + this.parent.imageMode(this.parent.CENTER); + + for ( i = 0; i < nPoints; i++) { + if (this.inside[i]) { + this.parent.image(arguments[0], this.plotPoints[i].getX(), this.plotPoints[i].getY()); + } + } + + this.parent.pop(); + } else { + throw new Error("GLayer.drawPoints(): signature not supported"); + } +}; + +GLayer.prototype.drawPoint = function() { + var point, pointColor, pointSize, pointImg; + + if (arguments.length === 3) { + point = arguments[0]; + pointColor = arguments[1]; + pointSize = arguments[2]; + } else if (arguments.length === 2 && arguments[1] instanceof p5.Image) { + point = arguments[0]; + pointImg = arguments[1]; + } else if (arguments.length === 1) { + point = arguments[0]; + pointColor = this.pointColors[0]; + pointSize = this.pointSizes[0]; + } else { + throw new Error("GLayer.drawPoint(): signature not supported"); + } + + var xPlot = this.valueToXPlot(point.getX()); + var yPlot = this.valueToYPlot(point.getY()); + + if (this.isInside(xPlot, yPlot)) { + this.parent.push(); + + if ( typeof pointImg !== "undefined") { + this.parent.imageMode(this.parent.CENTER); + this.parent.image(pointImg, xPlot, yPlot); + } else { + this.parent.ellipseMode(this.parent.CENTER); + this.parent.fill(pointColor); + this.parent.noStroke(); + this.parent.ellipse(xPlot, yPlot, pointSize, pointSize); + } + + this.parent.pop(); + } +}; + +GLayer.prototype.drawLines = function() { + var nPoints = this.plotPoints.length; + + this.parent.push(); + this.parent.noFill(); + this.parent.stroke(this.lineColor); + this.parent.strokeWeight(this.lineWidth); + this.parent.strokeCap(this.parent.SQUARE); + + for (var i = 0; i < nPoints - 1; i++) { + if (this.inside[i] && this.inside[i + 1]) { + this.parent.line(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.plotPoints[i + 1].getX(), this.plotPoints[i + 1].getY()); + } else if (this.plotPoints[i].isValid() && this.plotPoints[i + 1].isValid()) { + // At least one of the points is outside the inner region. + // Obtain the valid line box intersections + var nCuts = this.obtainBoxIntersections(this.plotPoints[i], this.plotPoints[i + 1]); + + if (this.inside[i]) { + this.parent.line(this.plotPoints[i].getX(), this.plotPoints[i].getY(), this.cuts[0][0], this.cuts[0][1]); + } else if (this.inside[i + 1]) { + this.parent.line(this.cuts[0][0], this.cuts[0][1], this.plotPoints[i + 1].getX(), this.plotPoints[i + 1].getY()); + } else if (nCuts >= 2) { + this.parent.line(this.cuts[0][0], this.cuts[0][1], this.cuts[1][0], this.cuts[1][1]); + } + } + } + + this.parent.pop(); +}; + +GLayer.prototype.drawLine = function() { + var point1, point2, lc, lw, slope, ycut; + + if (arguments.length === 4 && arguments[0] instanceof GPoint) { + point1 = arguments[0]; + point2 = arguments[1]; + lc = arguments[2]; + lw = arguments[3]; + } else if (arguments.length === 4) { + slope = arguments[0]; + ycut = arguments[1]; + lc = arguments[2]; + lw = arguments[3]; + } else if (arguments.length === 2 && arguments[0] instanceof GPoint) { + point1 = arguments[0]; + point2 = arguments[1]; + lc = this.lineColor; + lw = this.lineWidth; + } else if (arguments.length === 2) { + slope = arguments[0]; + ycut = arguments[1]; + lc = this.lineColor; + lw = this.lineWidth; + } else { + throw new Error("GLayer.drawLine(): signature not supported"); + } + + if ( typeof slope !== "undefined") { + if (this.xLog && this.yLog) { + point1 = new GPoint(this.xLim[0], Math.pow(10, slope * Math.log(this.xLim[0]) / Math.LN10 + yCut)); + point2 = new GPoint(this.xLim[1], Math.pow(10, slope * Math.log(this.xLim[1]) / Math.LN10 + yCut)); + } else if (this.xLog) { + point1 = new GPoint(this.xLim[0], slope * Math.log(this.xLim[0]) / Math.LN10 + yCut); + point2 = new GPoint(this.xLim[1], slope * Math.log(this.xLim[1]) / Math.LN10 + yCut); + } else if (this.yLog) { + point1 = new GPoint(this.xLim[0], Math.pow(10, slope * this.xLim[0] + yCut)); + point2 = new GPoint(this.xLim[1], Math.pow(10, slope * this.xLim[1] + yCut)); + } else { + point1 = new GPoint(this.xLim[0], slope * this.xLim[0] + yCut); + point2 = new GPoint(this.xLim[1], slope * this.xLim[1] + yCut); + } + } + + var plotPoint1 = this.valueToPlot(point1); + var plotPoint2 = this.valueToPlot(point2); + + if (plotPoint1.isValid() && plotPoint2.isValid()) { + var inside1 = this.isInside(plotPoint1); + var inside2 = this.isInside(plotPoint2); + + this.parent.push(); + this.parent.noFill(); + this.parent.stroke(lc); + this.parent.strokeWeight(lw); + this.parent.strokeCap(this.parent.SQUARE); + + if (inside1 && inside2) { + this.parent.line(plotPoint1.getX(), plotPoint1.getY(), plotPoint2.getX(), plotPoint2.getY()); + } else { + // At least one of the points is outside the inner region. + // Obtain the valid line box intersections + var nCuts = this.obtainBoxIntersections(plotPoint1, plotPoint2); + + if (inside1) { + this.parent.line(plotPoint1.getX(), plotPoint1.getY(), this.cuts[0][0], this.cuts[0][1]); + } else if (inside2) { + this.parent.line(this.cuts[0][0], this.cuts[0][1], plotPoint2.getX(), plotPoint2.getY()); + } else if (nCuts >= 2) { + this.parent.line(this.cuts[0][0], this.cuts[0][1], this.cuts[1][0], this.cuts[1][1]); + } + } + + this.parent.pop(); + } +}; + +GLayer.prototype.drawHorizontalLine = function() { + var value, lc, lw; + + if (arguments.length === 3) { + value = arguments[0]; + lc = arguments[1]; + lw = arguments[2]; + } else if (arguments.length === 1) { + value = arguments[0]; + lc = this.lineColor; + lw = this.lineWidth; + } else { + throw new Error("GLayer.drawHorizontalLine(): signature not supported"); + } + + var yPlot = this.valueToYPlot(value); + + if (this.isValidNumber(yPlot) && -yPlot >= 0 && -yPlot <= this.dim[1]) { + this.parent.push(); + this.parent.noFill(); + this.parent.stroke(lc); + this.parent.strokeWeight(lw); + this.parent.strokeCap(this.parent.SQUARE); + this.parent.line(0, yPlot, this.dim[0], yPlot); + this.parent.pop(); + } +}; + +GLayer.prototype.drawVerticalLine = function() { + var value, lc, lw; + + if (arguments.length === 3) { + value = arguments[0]; + lc = arguments[1]; + lw = arguments[2]; + } else if (arguments.length === 1) { + value = arguments[0]; + lc = this.lineColor; + lw = this.lineWidth; + } else { + throw new Error("GLayer.drawVerticalLine(): signature not supported"); + } + + var xPlot = this.valueToXPlot(value); + + if (this.isValidNumber(xPlot) && xPlot >= 0 && xPlot <= this.dim[0]) { + this.parent.push(); + this.parent.noFill(); + this.parent.stroke(lc); + this.parent.strokeWeight(lw); + this.parent.strokeCap(this.parent.SQUARE); + this.parent.line(xPlot, 0, xPlot, -this.dim[1]); + this.parent.pop(); + } +}; + +GLayer.prototype.drawFilledContour = function(contourType, referenceValue) { + // Get the points that compose the shape + var shapePoints; + + if (contourType === GPlot.HORIZONTAL) { + shapePoints = this.getHorizontalShape(referenceValue); + } else if (contourType === GPlot.VERTICAL) { + shapePoints = this.getVerticalShape(referenceValue); + } + + // Draw the shape + if ( typeof shapePoints !== "undefined" && shapePoints.length > 0) { + this.parent.push(); + this.parent.fill(this.lineColor); + this.parent.noStroke(); + this.parent.beginShape(); + + for (var i = 0; i < shapePoints.length; i++) { + if (shapePoints[i].isValid()) { + this.parent.vertex(shapePoints[i].getX(), shapePoints[i].getY()); + } + } + + this.parent.endShape(this.parent.CLOSE); + this.parent.pop(); + } +}; + +GLayer.prototype.getHorizontalShape = function(referenceValue) { + // Collect the points and cuts inside the box + var point, addedPoints, nextIndex; + var nPoints = this.plotPoints.length; + var shapePoints = []; + var indexFirstPoint = -1; + var indexLastPoint = -1; + + for (var i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid()) { + addedPoints = false; + + // Add the point if it's inside the box + if (this.inside[i]) { + shapePoints.push(new GPoint(point.getX(), point.getY(), "normal point")); + addedPoints = true; + } else if (point.getX() >= 0 && point.getX() <= this.dim[0]) { + // If it's outside, add the projection of the point on the + // horizontal axes + if (-point.getY() < 0) { + shapePoints.push(new GPoint(point.getX(), 0, "projection")); + addedPoints = true; + } else { + shapePoints.push(new GPoint(point.getX(), -this.dim[1], "projection")); + addedPoints = true; + } + } + + // Add the box cuts if there is any + nextIndex = i + 1; + + while (nextIndex < nPoints - 1 && !this.plotPoints[nextIndex].isValid()) { + nextIndex++; + } + + if (nextIndex < nPoints && this.plotPoints[nextIndex].isValid()) { + var nCuts = this.obtainBoxIntersections(point, this.plotPoints[nextIndex]); + + for (var j = 0; j < nCuts; j++) { + shapePoints.push(new GPoint(this.cuts[j][0], this.cuts[j][1], "cut")); + addedPoints = true; + } + } + + if (addedPoints) { + if (indexFirstPoint < 0) { + indexFirstPoint = i; + } + + indexLastPoint = i; + } + } + } + + // Continue if there are points in the shape + if (shapePoints.length > 0) { + // Calculate the starting point + var startPoint = new GPoint(shapePoints[0]); + + if (startPoint.getX() !== 0 && startPoint.getX() !== this.dim[0]) { + if (startPoint.getLabel() === "cut") { + if (this.plotPoints[indexFirstPoint].getX() < 0) { + startPoint.setX(0); + startPoint.setLabel("extreme"); + } else { + startPoint.setX(this.dim[0]); + startPoint.setLabel("extreme"); + } + } else if (indexFirstPoint !== 0) { + // Get the previous valid point + var prevIndex = indexFirstPoint - 1; + + while (prevIndex > 0 && !this.plotPoints[prevIndex].isValid()) { + prevIndex--; + } + + if (this.plotPoints[prevIndex].isValid()) { + if (this.plotPoints[prevIndex].getX() < 0) { + startPoint.setX(0); + startPoint.setLabel("extreme"); + } else { + startPoint.setX(this.dim[0]); + startPoint.setLabel("extreme"); + } + } + } + } + + // Calculate the end point + var endPoint = new GPoint(shapePoints[shapePoints.length - 1]); + + if (endPoint.getX() !== 0 && endPoint.getX() !== this.dim[0] && indexLastPoint !== nPoints - 1) { + nextIndex = indexLastPoint + 1; + + while (nextIndex < nPoints - 1 && !this.plotPoints[nextIndex].isValid()) { + nextIndex++; + } + + if (this.plotPoints[nextIndex].isValid()) { + if (this.plotPoints[nextIndex].getX() < 0) { + endPoint.setX(0); + endPoint.setLabel("extreme"); + } else { + endPoint.setX(this.dim[0]); + endPoint.setLabel("extreme"); + } + } + } + + // Add the end point if it's a new extreme + if (endPoint.getLabel() === "extreme") { + shapePoints.push(endPoint); + } + + // Add the reference connections + if (this.yLog && referenceValue <= 0) { + referenceValue = Math.min(this.yLim[0], this.yLim[1]); + } + + var plotReference = this.valueToPlot(1, referenceValue); + + if (-plotReference[1] < 0) { + shapePoints.push(new GPoint(endPoint.getX(), 0)); + shapePoints.push(new GPoint(startPoint.getX(), 0)); + } else if (-plotReference[1] > this.dim[1]) { + shapePoints.push(new GPoint(endPoint.getX(), -this.dim[1])); + shapePoints.push(new GPoint(startPoint.getX(), -this.dim[1])); + } else { + shapePoints.push(new GPoint(endPoint.getX(), plotReference[1])); + shapePoints.push(new GPoint(startPoint.getX(), plotReference[1])); + } + + // Add the starting point if it's a new extreme + if (startPoint.getLabel() === "extreme") { + shapePoints.push(startPoint); + } + } + + return shapePoints; +}; + +GLayer.prototype.getVerticalShape = function(referenceValue) { + // Collect the points and cuts inside the box + var point, addedPoints, nextIndex; + var nPoints = this.plotPoints.length; + var shapePoints = []; + var indexFirstPoint = -1; + var indexLastPoint = -1; + + for (var i = 0; i < nPoints; i++) { + point = this.plotPoints[i]; + + if (point.isValid()) { + addedPoints = false; + + // Add the point if it's inside the box + if (this.inside[i]) { + shapePoints.push(new GPoint(point.getX(), point.getY(), "normal point")); + addedPoints = true; + } else if (-point.getY() >= 0 && -point.getY() <= this.dim[1]) { + // If it's outside, add the projection of the point on the + // vertical axes + if (point.getX() < 0) { + shapePoints.push(new GPoint(0, point.getY(), "projection")); + addedPoints = true; + } else { + shapePoints.push(new GPoint(this.dim[0], point.getY(), "projection")); + addedPoints = true; + } + } + + // Add the box cuts if there is any + nextIndex = i + 1; + + while (nextIndex < nPoints - 1 && !this.plotPoints[nextIndex].isValid()) { + nextIndex++; + } + + if (nextIndex < nPoints && this.plotPoints[nextIndex].isValid()) { + var nCuts = this.obtainBoxIntersections(point, this.plotPoints[nextIndex]); + + for (var j = 0; j < nCuts; j++) { + shapePoints.push(new GPoint(this.cuts[j][0], this.cuts[j][1], "cut")); + addedPoints = true; + } + } + + if (addedPoints) { + if (indexFirstPoint < 0) { + indexFirstPoint = i; + } + + indexLastPoint = i; + } + } + } + + // Continue if there are points in the shape + if (shapePoints.length > 0) { + // Calculate the starting point + var startPoint = new GPoint(shapePoints[0]); + + if (startPoint.getY() !== 0 && startPoint.getY() !== -this.dim[1]) { + if (startPoint.getLabel() === "cut") { + if (-this.plotPoints[indexFirstPoint].getY() < 0) { + startPoint.setY(0); + startPoint.setLabel("extreme"); + } else { + startPoint.setY(-this.dim[1]); + startPoint.setLabel("extreme"); + } + } else if (indexFirstPoint !== 0) { + // Get the previous valid point + var prevIndex = indexFirstPoint - 1; + + while (prevIndex > 0 && !this.plotPoints[prevIndex].isValid()) { + prevIndex--; + } + + if (this.plotPoints[prevIndex].isValid()) { + if (-this.plotPoints[prevIndex].getY() < 0) { + startPoint.setY(0); + startPoint.setLabel("extreme"); + } else { + startPoint.setY(-this.dim[1]); + startPoint.setLabel("extreme"); + } + } + } + } + + // Calculate the end point + var endPoint = new GPoint(shapePoints[shapePoints.length - 1]); + + if (endPoint.getY() !== 0 && endPoint.getY() !== -this.dim[1] && indexLastPoint !== nPoints - 1) { + nextIndex = indexLastPoint + 1; + + while (nextIndex < nPoints - 1 && !this.plotPoints[nextIndex].isValid()) { + nextIndex++; + } + + if (this.plotPoints[nextIndex].isValid()) { + if (-this.plotPoints[nextIndex].getY() < 0) { + endPoint.setY(0); + endPoint.setLabel("extreme"); + } else { + endPoint.setY(-this.dim[1]); + endPoint.setLabel("extreme"); + } + } + } + + // Add the end point if it's a new extreme + if (endPoint.getLabel() === "extreme") { + shapePoints.push(endPoint); + } + + // Add the reference connections + if (this.xLog && referenceValue <= 0) { + referenceValue = Math.min(this.xLim[0], this.xLim[1]); + } + + var plotReference = this.valueToPlot(referenceValue, 1); + + if (plotReference[0] < 0) { + shapePoints.push(new GPoint(0, endPoint.getY())); + shapePoints.push(new GPoint(0, startPoint.getY())); + } else if (plotReference[0] > this.dim[0]) { + shapePoints.push(new GPoint(this.dim[0], endPoint.getY())); + shapePoints.push(new GPoint(this.dim[0], startPoint.getY())); + } else { + shapePoints.push(new GPoint(plotReference[0], endPoint.getY())); + shapePoints.push(new GPoint(plotReference[0], startPoint.getY())); + } + + // Add the starting point if it's a new extreme + if (startPoint.getLabel() === "extreme") { + shapePoints.push(startPoint); + } + } + + return shapePoints; +}; + +GLayer.prototype.drawAllLabels = function() { + for (var n = 0; n < this.points.length; n++) { + this.drawLabel(this.points[n]); + } +} + +GLayer.prototype.drawLabel = function(point) { + var xPlot = this.valueToXPlot(point.getX()); + var yPlot = this.valueToYPlot(point.getY()); + + if (this.isValidNumber(xPlot) && this.isValidNumber(yPlot)) { + var xLabelPos = xPlot + this.labelSeparation[0]; + var yLabelPos = yPlot - 0*this.labelSeparation[1] + 6; + var delta = this.fontSize / 4; + + this.parent.push(); + this.parent.rectMode(this.parent.CORNER); + this.parent.noStroke(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.textAlign(this.parent.LEFT, this.parent.BOTTOM); + + // Draw the background + this.parent.fill(this.labelBgColor); + this.parent.rect(xLabelPos - delta, yLabelPos - this.fontSize - delta, this.parent.textWidth(point.getLabel()) + 2 * delta, this.fontSize + 2 * delta); + + // Draw the text + this.parent.fill(this.fontColor); + this.parent.text(point.getLabel(), xLabelPos, yLabelPos); + this.parent.pop(); + } +}; + +GLayer.prototype.drawLabelAtPlotPos = function(xPlot, yPlot) { + var point = this.getPointAtPlotPos(xPlot, yPlot); + + if ( typeof point !== "undefined") { + this.drawLabel(point); + } +}; + +GLayer.prototype.drawHistogram = function() { + if ( typeof this.hist !== "undefined") { + this.hist.draw(this.valueToPlot(this.histBasePoint)); + } +}; + +GLayer.prototype.drawPolygon = function(polygonPoints, polygonColor) { + var i; + + if (polygonPoints.length > 2) { + // Remove the polygon invalid points + var plotPolygonPoints = this.valueToPlot(polygonPoints); + var counter = 0; + + for ( i = 0; i < plotPolygonPoints.length; i++) { + if (plotPolygonPoints[i].isValid()) { + plotPolygonPoints[counter] = plotPolygonPoints[i]; + counter++; + } + } + + plotPolygonPoints.splice(counter, Number.MAX_VALUE); + + // Create a temporal array with the points inside the plotting area + // and the valid box cuts + var point; + var nPoints = plotPolygonPoints.length; + var tmp = []; + + for ( i = 0; i < nPoints; i++) { + point = plotPolygonPoints[i]; + + if (this.isInside(point)) { + tmp.push(new GPoint(point.getX(), point.getY(), "normal point")); + } + + // Obtain the cuts with the next point + var nextIndex = (i + 1 < nPoints) ? i + 1 : 0; + var nCuts = this.obtainBoxIntersections(point, plotPolygonPoints[nextIndex]); + + if (nCuts === 1) { + tmp.push(new GPoint(this.cuts[0][0], this.cuts[0][1], "single cut")); + } else if (nCuts > 1) { + tmp.push(new GPoint(this.cuts[0][0], this.cuts[0][1], "double cut")); + tmp.push(new GPoint(this.cuts[1][0], this.cuts[1][1], "double cut")); + } + } + + // Final version of the polygon + nPoints = tmp.length; + var croppedPoly = []; + + for ( i = 0; i < nPoints; i++) { + // Add the point + croppedPoly.push(tmp[i]); + + // Add new points in case we have two consecutive cuts, one of + // them is single, and they are in consecutive axes + var next = (i + 1 < nPoints) ? i + 1 : 0; + var label = tmp[i].getLabel(); + var nextLabel = tmp[next].getLabel(); + + var cond = (label === "single cut" && nextLabel === "single cut") || (label === "single cut" && nextLabel === "double cut") || (label === "double cut" && nextLabel === "single cut"); + + if (cond) { + var x1 = tmp[i].getX(); + var y1 = tmp[i].getY(); + var x2 = tmp[next].getX(); + var y2 = tmp[next].getY(); + var deltaX = Math.abs(x2 - x1); + var deltaY = Math.abs(y2 - y1); + + // Check that they come from consecutive axes + if (deltaX > 0 && deltaY > 0 && deltaX !== this.dim[0] && deltaY !== this.dim[1]) { + var x = (x1 === 0 || x1 === this.dim[0]) ? x1 : x2; + var y = (y1 === 0 || y1 === -this.dim[1]) ? y1 : y2; + croppedPoly.push(new GPoint(x, y, "special cut")); + } + } + } + + // Draw the cropped polygon + if (croppedPoly.length > 2) { + this.parent.push(); + this.parent.fill(polygonColor); + this.parent.noStroke(); + this.parent.beginShape(); + + for ( i = 0; i < croppedPoly.length; i++) { + this.parent.vertex(croppedPoly[i].getX(), croppedPoly[i].getY()); + } + + this.parent.endShape(this.parent.CLOSE); + this.parent.pop(); + } + } +}; + +GLayer.prototype.drawAnnotation = function(text, x, y, horAlign, verAlign) { + var xPlot = this.valueToXPlot(x); + var yPlot = this.valueToYPlot(y); + + if (this.isValidNumber(xPlot) && this.isValidNumber(yPlot) && this.isInside(xPlot, yPlot)) { + if (horAlign !== this.parent.CENTER && horAlign !== this.parent.RIGHT && horAlign !== this.parent.LEFT) { + horAlign = this.parent.LEFT; + } + + if (verAlign !== this.parent.CENTER && verAlign !== this.parent.TOP && verAlign !== this.parent.BOTTOM) { + verAlign = this.parent.CENTER; + } + + // A trick to really center the text vertically + if (verAlign === this.parent.CENTER) { + verAlign = this.parent.BOTTOM; + yPlot += this.fontSize / 2; + } + + this.parent.push(); + this.parent.textFont(this.fontName); + this.parent.textSize(this.fontSize); + this.parent.fill(this.fontColor); + this.parent.textAlign(horAlign, verAlign); + this.parent.text(text, xPlot, yPlot); + this.parent.pop(); + } +}; + +GLayer.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GLayer.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + this.dim[0] = xDim; + this.dim[1] = yDim; + this.updatePlotPoints(); + + if ( typeof this.hist !== "undefined") { + this.hist.setDim(this.dim); + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.setXLim = function() { + var xMin, xMax; + + if (arguments.length === 2) { + xMin = arguments[0]; + xMax = arguments[1]; + } else if (arguments.length === 1) { + xMin = arguments[0][0]; + xMax = arguments[0][1]; + } else { + throw new Error("GLayer.setXLim(): signature not supported"); + } + + if (xMin !== xMax && this.isValidNumber(xMin) && this.isValidNumber(xMax)) { + // Make sure the new limits makes sense + if (this.xLog && (xMin <= 0 || xMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.xLim[0] = xMin; + this.xLim[1] = xMax; + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } + } +}; + +GLayer.prototype.setYLim = function() { + var yMin, yMax; + + if (arguments.length === 2) { + yMin = arguments[0]; + yMax = arguments[1]; + } else if (arguments.length === 1) { + yMin = arguments[0][0]; + yMax = arguments[0][1]; + } else { + throw new Error("GLayer.setYLim(): signature not supported"); + } + + if (yMin !== yMax && this.isValidNumber(yMin) && this.isValidNumber(yMax)) { + // Make sure the new limits makes sense + if (this.yLog && (yMin <= 0 || yMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.yLim[0] = yMin; + this.yLim[1] = yMax; + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } + } +}; + +GLayer.prototype.setXYLim = function() { + var xMin, xMax, yMin, yMax; + + if (arguments.length === 4) { + xMin = arguments[0]; + xMax = arguments[1]; + yMin = arguments[2]; + yMax = arguments[3]; + } else if (arguments.length === 2) { + xMin = arguments[0][0]; + xMax = arguments[0][1]; + yMin = arguments[1][0]; + yMax = arguments[1][1]; + } else { + throw new Error("GLayer.setXYLim(): signature not supported"); + } + + if (xMin !== xMax && yMin !== yMax && this.isValidNumber(xMin) && this.isValidNumber(xMax) && this.isValidNumber(yMin) && this.isValidNumber(yMax)) { + // Make sure the new limits make sense + if (this.xLog && (xMin <= 0 || xMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.xLim[0] = xMin; + this.xLim[1] = xMax; + } + + if (this.yLog && (yMin <= 0 || yMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.yLim[0] = yMin; + this.yLim[1] = yMax; + } + + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.setLimAndLog = function() { + var xMin, xMax, yMin, yMax, xLog, yLog; + + if (arguments.length === 6) { + xMin = arguments[0]; + xMax = arguments[1]; + yMin = arguments[2]; + yMax = arguments[3]; + xLog = arguments[4]; + yLog = arguments[5]; + } else if (arguments.length === 4) { + xMin = arguments[0][0]; + xMax = arguments[0][1]; + yMin = arguments[1][0]; + yMax = arguments[1][1]; + xLog = arguments[2]; + yLog = arguments[3]; + } else { + throw new Error("GLayer.setLimAndLog(): signature not supported"); + } + + if (xMin !== xMax && yMin !== yMax && this.isValidNumber(xMin) && this.isValidNumber(xMax) && this.isValidNumber(yMin) && this.isValidNumber(yMax)) { + // Make sure the new limits make sense + if (xLog && (xMin <= 0 || xMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.xLim[0] = xMin; + this.yLim[1] = xMax; + this.xLog = xLog; + } + + if (yLog && (yMin <= 0 || yMax <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.yLim[0] = yMin; + this.yLim[1] = yMax; + this.yLog = yLog; + } + + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.setXLog = function(xLog) { + if (xLog !== this.xLog) { + if (xLog && (this.xLim[0] <= 0 || this.xLim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + console.log("Will set horizontal limits to (0.1, 10)"); + this.xLim[0] = 0.1; + this.xLim[1] = 10; + } + + this.xLog = xLog; + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.setYLog = function(yLog) { + if (yLog !== this.yLog) { + if (yLog && (this.yLim[0] <= 0 || this.yLim[1] <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + console.log("Will set horizontal limits to (0.1, 10)"); + this.yLim[0] = 0.1; + this.yLim[1] = 10; + } + + this.yLog = yLog; + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.setPoints = function(points) { + var i; + var nPoints = points.length; + + if (this.points.length > nPoints) { + this.points.splice(nPoints, Number.MAX_VALUE); + } else { + for ( i = this.points.length; i < nPoints; i++) { + this.points[i] = new GPoint(); + } + } + + for ( i = 0; i < nPoints; i++) { + this.points[i].set(points[i]); + } + + this.updatePlotPoints(); + this.updateInsideList(); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } +}; + +GLayer.prototype.setPoint = function() { + var index, x, y, label; + var nPoints = this.points.length; + + if (arguments.length === 4) { + index = arguments[0]; + x = arguments[1]; + y = arguments[2]; + label = arguments[3]; + } else if (arguments.length === 3) { + index = arguments[0]; + x = arguments[1]; + y = arguments[2]; + label = (index < nPoins) ? this.points[index].getLabel() : ""; + } else if (arguments.length === 2) { + index = arguments[0]; + x = arguments[1].getX(); + y = arguments[1].getY(); + label = arguments[1].getLabel(); + } else { + throw new Error("GLayer.setPoint(): signature not supported"); + } + + if (index < nPoints) { + this.points[index].set(x, y, label); + this.plotPoints[index].set(this.valueToXPlot(x), this.valueToYPlot(y), label); + this.inside[index] = this.isInside(this.plotPoints[index]); + } else if (index === nPoints) { + this.points[index] = new GPoint(x, y, label); + this.plotPoints[index] = new GPoint(this.valueToXPlot(x), this.valueToYPlot(y), label); + this.inside[index] = this.isInside(this.plotPoints[index]); + } else { + throw new Error("GLayer.setPoint(): the index position is outside the array size"); + } + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoint(index, this.plotPoints[index]); + } +}; + +GLayer.prototype.addPoint = function() { + var x, y, label; + + if (arguments.length === 3) { + x = arguments[0]; + y = arguments[1]; + label = arguments[2]; + } else if (arguments.length === 2) { + x = arguments[0]; + y = arguments[1]; + label = ""; + } else if (arguments.length === 1) { + x = arguments[0].getX(); + y = arguments[0].getY(); + label = arguments[0].getLabel(); + } else { + throw new Error("GLayer.addPoint(): signature not supported"); + } + + this.points.push(new GPoint(x, y, label)); + this.plotPoints.push(new GPoint(this.valueToXPlot(x), this.valueToYPlot(y), label)); + this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length - 1])); + + if ( typeof this.hist !== "undefined") { + this.hist.addPlotPoint(this.plotPoints[this.plotPoints.length - 1]); + } +}; + +GLayer.prototype.addPoints = function(newPoints) { + var newPoint; + var nNewPoints = newPoints.length; + + for (var i = 0; i < nNewPoints; i++) { + newPoint = newPoints[i]; + this.points.push(new GPoint(newPoint)); + this.plotPoints.push(new GPoint(this.valueToXPlot(newPoint.getX()), this.valueToYPlot(newPoint.getY()), newPoint.getLabel())); + this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length - 1])); + } + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } +}; + +GLayer.prototype.addPointAtIndexPos = function() { + var index, x, y, label; + + if (arguments.length === 4) { + index = arguments[0]; + x = arguments[1]; + y = arguments[2]; + label = arguments[3]; + } else if (arguments.length === 3) { + index = arguments[0]; + x = arguments[1]; + y = arguments[2]; + label = ""; + } else if (arguments.length === 2) { + index = arguments[0]; + x = arguments[1].getX(); + y = arguments[1].getY(); + label = arguments[1].getLabel(); + } else { + throw new Error("GLayer.addPointAtIndexPos(): signature not supported"); + } + + if (index <= this.points.length) { + this.points.splice(index, 0, new GPoint(x, y, label)); + this.plotPoints.splice(index, 0, new GPoint(this.valueToXPlot(x), this.valueToYPlot(y), label)); + this.inside.splice(index, 0, this.isInside(this.plotPoints[0])); + + if ( typeof this.hist !== "undefined") { + this.hist.setPlotPoints(this.plotPoints); + } + } +}; + +GLayer.prototype.removePoint = function(index) { + if (index < this.points.length) { + this.points.splice(index, 1); + this.plotPoints.splice(index, 1); + this.inside.splice(index, 1); + + if ( typeof this.hist !== "undefined") { + this.hist.removePlotPoint(index); + } + } +}; + +GLayer.prototype.setInside = function(inside) { + if (inside.length === this.inside.length) { + this.inside = inside.slice(); + } +}; + +GLayer.prototype.setPointColors = function(pointColors) { + if (pointColors.length > 0) { + this.pointColors = pointColors.slice(); + } +}; + +GLayer.prototype.setPointColor = function(pointColor) { + this.pointColors = [pointColor]; +}; + +GLayer.prototype.setPointSizes = function(pointSizes) { + if (pointSizes.length > 0) { + this.pointSizes = pointSizes.slice(); + } +}; + +GLayer.prototype.setPointSize = function(pointSize) { + this.pointSizes = [pointSize]; +}; + +GLayer.prototype.setLineColor = function(lineColor) { + this.lineColor = lineColor; +}; + +GLayer.prototype.setLineWidth = function(lineWidth) { + if (lineWidth > 0) { + this.lineWidth = lineWidth; + } +}; + +GLayer.prototype.setHistBasePoint = function(histBasePoint) { + this.histBasePoint.set(histBasePoint); +}; + +GLayer.prototype.setHistType = function(histType) { + if ( typeof this.hist !== "undefined") { + this.hist.setType(histType); + } +}; + +GLayer.prototype.setHistVisible = function(visible) { + if ( typeof this.hist !== "undefined") { + this.hist.setVisible(visible); + } +}; + +GLayer.prototype.setDrawHistLabels = function(drawHistLabels) { + if ( typeof this.hist !== "undefined") { + this.hist.setDrawLabels(drawHistLabels); + } +}; + +GLayer.prototype.setLabelBgColor = function(labelBgColor) { + this.labelBgColor = labelBgColor; +}; + +GLayer.prototype.setLabelSeparation = function(labelSeparation) { + this.labelSeparation[0] = labelSeparation[0]; + this.labelSeparation[1] = labelSeparation[1]; +}; + +GLayer.prototype.setFontName = function(fontName) { + this.fontName = fontName; +}; + +GLayer.prototype.setFontColor = function(fontColor) { + this.fontColor = fontColor; +}; + +GLayer.prototype.setFontSize = function(fontSize) { + if (fontSize > 0) { + this.fontSize = fontSize; + } +}; + +GLayer.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + if (fontSize > 0) { + this.fontName = fontName; + this.fontColor = fontColor; + this.fontSize = fontSize; + } +}; + +GLayer.prototype.setAllFontProperties = function(fontName, fontColor, fontSize) { + this.setFontProperties(fontName, fontColor, fontSize); + + if ( typeof this.hist !== "undefined") { + this.hist.setFontProperties(fontName, fontColor, fontSize); + } +}; + +GLayer.prototype.getId = function() { + return this.id; +}; + +GLayer.prototype.getDim = function() { + return this.dim.slice(); +}; + +GLayer.prototype.getXLim = function() { + return this.xLim.slice(); +}; + +GLayer.prototype.getYLim = function() { + return this.yLim.slice(); +}; + +GLayer.prototype.getXLog = function() { + return this.xLog; +}; + +GLayer.prototype.getYLog = function() { + return this.yLog; +}; + +GLayer.prototype.getPoints = function() { + var points = []; + + for (var i = 0; i < this.points.length; i++) { + points[i] = new GPoint(this.points[i]); + } + + return points; +}; + +GLayer.prototype.getPointsRef = function() { + return this.points; +}; + +GLayer.prototype.getPointColors = function() { + return this.pointColors.slice(); +}; + +GLayer.prototype.getPointSizes = function() { + return this.pointSizes.slice(); +}; + +GLayer.prototype.getLineColor = function() { + return this.lineColor; +}; + +GLayer.prototype.getLineWidth = function() { + return this.lineWidth; +}; + +GLayer.prototype.getHistogram = function() { + return this.hist; +}; +/* + * Plot class. It controls the rest of the graphical elements (layers, axes, + * title, limits). + */ +function GPlot() { + var parent, xPos, yPos, plotWidth, plotHeight; + + if (arguments.length === 5) { + parent = arguments[0]; + xPos = arguments[1]; + yPos = arguments[2]; + plotWidth = arguments[3]; + plotHeight = arguments[4]; + } else if (arguments.length === 3) { + parent = arguments[0]; + xPos = arguments[1]; + yPos = arguments[2]; + plotWidth = 450; + plotHeight = 300; + } else if (arguments.length === 1) { + parent = arguments[0]; + xPos = 0; + yPos = 0; + plotWidth = 450; + plotHeight = 300; + } else { + throw new Error("GPlot constructor: signature not supported"); + } + + // The parent processing object + this.parent = parent; + + // General properties + this.pos = [xPos, yPos]; + this.outerDim = [plotWidth, plotHeight]; + this.mar = [60, 70, 40, 30]; + this.dim = [this.outerDim[0] - this.mar[1] - this.mar[3], this.outerDim[1] - this.mar[0] - this.mar[2]]; + this.xLim = [0, 1]; + this.yLim = [0, 1]; + this.fixedXLim = false; + this.fixedYLim = false; + this.xLog = false; + this.yLog = false; + this.invertedXScale = false; + this.invertedYScale = false; + this.includeAllLayersInLim = true; + this.expandLimFactor = 0.1; + + // Format properties + this.bgColor = this.parent.color(255); + this.boxBgColor = this.parent.color(245); + this.boxLineColor = this.parent.color(210); + this.boxLineWidth = 1; + this.gridLineColor = this.parent.color(210); + this.gridLineWidth = 1; + + // Layers + this.mainLayer = new GLayer(this.parent, GPlot.MAINLAYERID, this.dim, this.xLim, this.yLim, this.xLog, this.yLog); + this.layerList = []; + + // Axes and title + this.xAxis = new GAxis(this.parent, this.parent.BOTTOM, this.dim, this.xLim, this.xLog); + this.topAxis = new GAxis(this.parent, this.parent.TOP, this.dim, this.xLim, this.xLog); + this.yAxis = new GAxis(this.parent, this.parent.LEFT, this.dim, this.yLim, this.yLog); + this.rightAxis = new GAxis(this.parent, this.parent.RIGHT, this.dim, this.yLim, this.yLog); + this.title = new GTitle(this.parent, this.dim); + + // Setup for the mouse events + this.zoomingIsActive = false; + this.zoomFactor = 1.3; + this.increaseZoomButton = this.parent.LEFT; + this.decreaseZoomButton = this.parent.RIGHT; + this.increaseZoomKeyModifier = GPlot.NONE; + this.decreaseZoomKeyModifier = GPlot.NONE; + this.centeringIsActive = false; + this.centeringButton = this.parent.LEFT; + this.centeringKeyModifier = GPlot.NONE; + this.panningIsActive = false; + this.panningButton = this.parent.LEFT; + this.panningKeyModifier = GPlot.NONE; + this.panningReferencePoint = undefined; + this.panningIntervalId = undefined; + this.labelingIsActive = false; + this.labelingButton = this.parent.LEFT; + this.labelingKeyModifier = GPlot.NONE; + this.mousePos = undefined; + this.resetIsActive = false; + this.resetButton = this.parent.RIGHT; + this.resetKeyModifier = this.parent.CONTROL; + this.xLimReset = undefined; + this.yLimReset = undefined; + + // Add the event listeners + window.addEventListener("click", this.clickEvent.bind(this), false); + window.addEventListener("mousedown", this.mouseDownEvent.bind(this), false); + window.addEventListener("touchstart", this.mouseDownEvent.bind(this), false); + window.addEventListener("mouseup", this.mouseUpEvent.bind(this), false); + window.addEventListener("touchend", this.mouseUpEvent.bind(this), false); + window.addEventListener("wheel", this.wheelEvent.bind(this), false); +} + +// Constants +GPlot.MAINLAYERID = "main layer"; +GPlot.VERTICAL = 0; +GPlot.HORIZONTAL = 1; +GPlot.BOTH = 2; +GPlot.NONE = 0; + +GPlot.prototype.addLayer = function() { + var id, layer; + + if (arguments.length === 2) { + id = arguments[0]; + layer = new GLayer(this.parent, id, this.dim, this.xLim, this.yLim, this.xLog, this.yLog); + layer.setPoints(arguments[1]); + } else if (arguments.length === 1) { + id = arguments[0].getId(); + layer = arguments[0]; + } else { + throw new Error("GPlot.addLayer(): signature not supported"); + } + + // Check that it is the only layer with that id + var sameId = false; + + if (this.mainLayer.isId(id)) { + sameId = true; + } else { + for (var i = 0; i < this.layerList.length; i++) { + if (this.layerList[i].isId(id)) { + sameId = true; + break; + } + } + } + + // Add the layer to the list + if (!sameId) { + layer.setDim(this.dim); + layer.setLimAndLog(this.xLim, this.yLim, this.xLog, this.yLog); + this.layerList.push(layer); + + // Calculate and update the new plot limits if necessary + if (this.includeAllLayersInLim) { + this.updateLimits(); + } + } else { + console.log("A layer with the same id exists. Please change the id and try to add it again."); + } +}; + +GPlot.prototype.removeLayer = function(id) { + var index; + + for (var i = 0; i < this.layerList.length; i++) { + if (this.layerList[i].isId(id)) { + index = i; + break; + } + } + + if ( typeof index !== "undefined") { + this.layerList.splice(index, 1); + + // Calculate and update the new plot limits if necessary + if (this.includeAllLayersInLim) { + this.updateLimits(); + } + } else { + console.log("Couldn't find a layer in the plot with id = " + id); + } +}; + +GPlot.prototype.getPlotPosAt = function(xScreen, yScreen) { + var xPlot = xScreen - (this.pos[0] + this.mar[1]); + var yPlot = yScreen - (this.pos[1] + this.mar[2] + this.dim[1]); + + return [xPlot, yPlot]; +}; + +GPlot.prototype.getScreenPosAtValue = function(xValue, yValue) { + var xScreen = this.mainLayer.valueToXPlot(xValue) + (this.pos[0] + this.mar[1]); + var yScreen = this.mainLayer.valueToYPlot(yValue) + (this.pos[1] + this.mar[2] + this.dim[1]); + + return [xScreen, yScreen]; +}; + +GPlot.prototype.getPointAt = function() { + var xScreen, yScreen, layer; + + if (arguments.length === 3) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layer = this.getLayer(arguments[2]); + } else if (arguments.length === 2) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layer = this.mainLayer; + } else { + throw new Error("GPlot.getPointAt(): signature not supported"); + } + + var plotPos = this.getPlotPosAt(xScreen, yScreen); + return layer.getPointAtPlotPos(plotPos[0], plotPos[1]); +}; + +GPlot.prototype.addPointAt = function() { + var xScreen, yScreen, layerId; + + if (arguments.length === 3) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layerId = arguments[2]; + } else if (arguments.length === 2) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layerId = GPlot.MAINLAYERID; + } else { + throw new Error("GPlot.addPointAt(): signature not supported"); + } + + var value = this.getValueAt(xScreen, yScreen); + this.addPoint(value[0], value[1], "", layerId); +}; + +GPlot.prototype.removePointAt = function() { + var xScreen, yScreen, layerId; + + if (arguments.length === 3) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layerId = arguments[2]; + } else if (arguments.length === 2) { + xScreen = arguments[0]; + yScreen = arguments[1]; + layerId = GPlot.MAINLAYERID; + } else { + throw new Error("GPlot.removePointAt(): signature not supported"); + } + + var plotPos = this.getPlotPosAt(xScreen, yScreen); + var pointIndex = this.getLayer(layerId).getPointIndexAtPlotPos(plotPos[0], plotPos[1]); + + if ( typeof pointIndex !== "undefined") { + this.removePoint(pointIndex, layerId); + } +}; + +GPlot.prototype.getValueAt = function(xScreen, yScreen) { + var plotPos = this.getPlotPosAt(xScreen, yScreen); + return this.mainLayer.plotToValue(plotPos[0], plotPos[1]); +}; + +GPlot.prototype.getRelativePlotPosAt = function(xScreen, yScreen) { + var plotPos = this.getPlotPosAt(xScreen, yScreen); + return [plotPos[0] / this.dim[0], -plotPos[1] / this.dim[1]]; +}; + +GPlot.prototype.isOverPlot = function() { + var xScreen, yScreen; + + if (arguments.length === 2) { + xScreen = arguments[0]; + yScreen = arguments[1]; + } else if (arguments.length === 0) { + xScreen = this.parent.mouseX; + yScreen = this.parent.mouseY; + } else { + throw new Error("GPlot.isOverPlot(): signature not supported"); + } + + return (xScreen >= this.pos[0]) && (xScreen <= this.pos[0] + this.outerDim[0]) && (yScreen >= this.pos[1]) && (yScreen <= this.pos[1] + this.outerDim[1]); +}; + +GPlot.prototype.isOverBox = function() { + var xScreen, yScreen; + + if (arguments.length === 2) { + xScreen = arguments[0]; + yScreen = arguments[1]; + } else if (arguments.length === 0) { + xScreen = this.parent.mouseX; + yScreen = this.parent.mouseY; + } else { + throw new Error("GPlot.isOverBox(): signature not supported"); + } + + return (xScreen >= this.pos[0] + this.mar[1]) && (xScreen <= this.pos[0] + this.outerDim[0] - this.mar[3]) && (yScreen >= this.pos[1] + this.mar[2]) && (yScreen <= this.pos[1] + this.outerDim[1] - this.mar[0]); +}; + +GPlot.prototype.updateLimits = function() { + // Calculate the new limits and update the axes if needed + if (!this.fixedXLim) { + this.xLim = this.calculatePlotXLim(); + this.xAxis.setLim(this.xLim); + this.topAxis.setLim(this.xLim); + } + + if (!this.fixedYLim) { + this.yLim = this.calculatePlotYLim(); + this.yAxis.setLim(this.yLim); + this.rightAxis.setLim(this.yLim); + } + + // Update the layers + this.mainLayer.setXYLim(this.xLim, this.yLim); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].setXYLim(this.xLim, this.yLim); + } +}; + +GPlot.prototype.calculatePlotXLim = function() { + // Find the limits for the main layer + var lim = this.calculatePointsXLim(this.mainLayer.getPointsRef()); + + // Include the other layers in the limit calculation if necessary + if (this.includeAllLayersInLim) { + for (var i = 0; i < this.layerList.length; i++) { + var newLim = this.calculatePointsXLim(this.layerList[i].getPointsRef()); + + if ( typeof newLim !== "undefined") { + if ( typeof lim !== "undefined") { + lim[0] = Math.min(lim[0], newLim[0]); + lim[1] = Math.max(lim[1], newLim[1]); + } else { + lim = newLim; + } + } + } + } + + if ( typeof lim !== "undefined") { + // Expand the axis limits a bit + var delta = (lim[0] === 0) ? 0.1 : 0.1 * lim[0]; + + if (this.xLog) { + if (lim[0] !== lim[1]) { + delta = Math.exp(this.expandLimFactor * Math.log(lim[1] / lim[0])); + } + + lim[0] = lim[0] / delta; + lim[1] = lim[1] * delta; + } else { + if (lim[0] !== lim[1]) { + delta = this.expandLimFactor * (lim[1] - lim[0]); + } + + lim[0] = lim[0] - delta; + lim[1] = lim[1] + delta; + } + } else { + if (this.xLog && (this.xLim[0] <= 0 || this.xLim[1] <= 0)) { + lim = [0.1, 10]; + } else { + lim = this.xLim.slice(); + } + } + + // Invert the limits if necessary + if (this.invertedXScale && lim[0] < lim[1]) { + lim = [lim[1], lim[0]]; + } + + return lim; +}; + +GPlot.prototype.calculatePlotYLim = function() { + // Find the limits for the main layer + var lim = this.calculatePointsYLim(this.mainLayer.getPointsRef()); + + // Include the other layers in the limit calculation if necessary + if (this.includeAllLayersInLim) { + for (var i = 0; i < this.layerList.length; i++) { + var newLim = this.calculatePointsYLim(this.layerList[i].getPointsRef()); + + if ( typeof newLim !== "undefined") { + if ( typeof lim !== "undefined") { + lim[0] = Math.min(lim[0], newLim[0]); + lim[1] = Math.max(lim[1], newLim[1]); + } else { + lim = newLim; + } + } + } + } + + if ( typeof lim !== "undefined") { + // Expand the axis limits a bit + var delta = (lim[0] === 0) ? 0.1 : 0.1 * lim[0]; + + if (this.yLog) { + if (lim[0] !== lim[1]) { + delta = Math.exp(this.expandLimFactor * Math.log(lim[1] / lim[0])); + } + + lim[0] = lim[0] / delta; + lim[1] = lim[1] * delta; + } else { + if (lim[0] !== lim[1]) { + delta = this.expandLimFactor * (lim[1] - lim[0]); + } + + lim[0] = lim[0] - delta; + lim[1] = lim[1] + delta; + } + } else { + if (this.yLog && (this.yLim[0] <= 0 || this.yLim[1] <= 0)) { + lim = [0.1, 10]; + } else { + lim = this.yLim.slice(); + } + } + + // Invert the limits if necessary + if (this.invertedYScale && lim[0] < lim[1]) { + lim = [lim[1], lim[0]]; + } + + return lim; +}; + +GPlot.prototype.calculatePointsXLim = function(points) { + // Find the points limits + var lim = [Number.MAX_VALUE, -Number.MAX_VALUE]; + + for (var i = 0; i < points.length; i++) { + if (points[i].isValid()) { + // Use the point if it's inside, and it's not negative if + // the scale is logarithmic + var x = points[i].getX(); + var y = points[i].getY(); + var isInside = true; + + if (this.fixedYLim) { + isInside = ((this.yLim[1] >= this.yLim[0]) && (y >= this.yLim[0]) && (y <= this.yLim[1])) || ((this.yLim[1] < this.yLim[0]) && (y <= this.yLim[0]) && (y >= this.yLim[1])); + } + + if (isInside && !(this.xLog && x <= 0)) { + if (x < lim[0]) { + lim[0] = x; + } + + if (x > lim[1]) { + lim[1] = x; + } + } + } + } + + // Check that the new limits make sense + if (lim[1] < lim[0]) { + lim = undefined; + } + + return lim; +}; + +GPlot.prototype.calculatePointsYLim = function(points) { + // Find the points limits + var lim = [Number.MAX_VALUE, -Number.MAX_VALUE]; + + for (var i = 0; i < points.length; i++) { + if (points[i].isValid()) { + // Use the point if it's inside, and it's not negative if + // the scale is logarithmic + var x = points[i].getX(); + var y = points[i].getY(); + var isInside = true; + + if (this.fixedXLim) { + isInside = ((this.xLim[1] >= this.xLim[0]) && (x >= this.xLim[0]) && (x <= this.xLim[1])) || ((this.xLim[1] < this.xLim[0]) && (x <= this.xLim[0]) && (x >= this.xLim[1])); + } + + if (isInside && !(this.yLog && y <= 0)) { + if (y < lim[0]) { + lim[0] = y; + } + if (y > lim[1]) { + lim[1] = y; + } + } + } + } + + // Check that the new limits make sense + if (lim[1] < lim[0]) { + lim = undefined; + } + + return lim; +}; + +GPlot.prototype.moveHorizontalAxesLim = function(delta) { + // Obtain the new x limits + var deltaLim; + + if (this.xLog) { + deltaLim = Math.exp(Math.log(this.xLim[1] / this.xLim[0]) * delta / this.dim[0]); + this.xLim[0] *= deltaLim; + this.xLim[1] *= deltaLim; + } else { + deltaLim = (this.xLim[1] - this.xLim[0]) * delta / this.dim[0]; + this.xLim[0] += deltaLim; + this.xLim[1] += deltaLim; + } + + // Fix the limits + this.fixedXLim = true; + + // Move the horizontal axes + this.xAxis.moveLim(this.xLim); + this.topAxis.moveLim(this.xLim); + + // Update the plot limits + this.updateLimits(); +}; + +GPlot.prototype.moveVerticalAxesLim = function(delta) { + // Obtain the new y limits + var deltaLim; + + if (this.yLog) { + deltaLim = Math.exp(Math.log(this.yLim[1] / this.yLim[0]) * delta / this.dim[1]); + this.yLim[0] *= deltaLim; + this.yLim[1] *= deltaLim; + } else { + deltaLim = (this.yLim[1] - this.yLim[0]) * delta / this.dim[1]; + this.yLim[0] += deltaLim; + this.yLim[1] += deltaLim; + } + + // Fix the limits + this.fixedYLim = true; + + // Move the vertical axes + this.yAxis.moveLim(this.yLim); + this.rightAxis.moveLim(this.yLim); + + // Update the plot limits + this.updateLimits(); +}; + +GPlot.prototype.centerAndZoom = function(factor, xValue, yValue) { + // Calculate the new limits + var deltaLim; + + if (this.xLog) { + deltaLim = Math.exp(Math.log(this.xLim[1] / this.xLim[0]) / (2 * factor)); + this.xLim = [xValue / deltaLim, xValue * deltaLim]; + } else { + deltaLim = (this.xLim[1] - this.xLim[0]) / (2 * factor); + this.xLim = [xValue - deltaLim, xValue + deltaLim]; + } + + if (this.yLog) { + deltaLim = Math.exp(Math.log(this.yLim[1] / this.yLim[0]) / (2 * factor)); + this.yLim = [yValue / deltaLim, yValue * deltaLim]; + } else { + deltaLim = (this.yLim[1] - this.yLim[0]) / (2 * factor); + this.yLim = [yValue - deltaLim, yValue + deltaLim]; + } + + // Fix the limits + this.fixedXLim = true; + this.fixedYLim = true; + + // Update the horizontal and vertical axes + this.xAxis.setLim(this.xLim); + this.topAxis.setLim(this.xLim); + this.yAxis.setLim(this.yLim); + this.rightAxis.setLim(yLim); + + // Update the plot limits (the layers, because the limits are fixed) + this.updateLimits(); +}; + +GPlot.prototype.zoom = function() { + var factor, deltaLim, offset; + + if (arguments.length === 3) { + factor = arguments[0]; + var xScreen = arguments[1]; + var yScreen = arguments[2]; + + var plotPos = this.getPlotPosAt(xScreen, yScreen); + var value = this.mainLayer.plotToValue(plotPos[0], plotPos[1]); + + if (this.xLog) { + deltaLim = Math.exp(Math.log(this.xLim[1] / this.xLim[0]) / (2 * factor)); + offset = Math.exp((Math.log(this.xLim[1] / this.xLim[0]) / factor) * (0.5 - plotPos[0] / this.dim[0])); + this.xLim = [value[0] * offset / deltaLim, value[0] * offset * deltaLim]; + } else { + deltaLim = (this.xLim[1] - this.xLim[0]) / (2 * factor); + offset = 2 * deltaLim * (0.5 - plotPos[0] / this.dim[0]); + this.xLim = [value[0] + offset - deltaLim, value[0] + offset + deltaLim]; + } + + if (this.yLog) { + deltaLim = Math.exp(Math.log(this.yLim[1] / this.yLim[0]) / (2 * factor)); + offset = Math.exp((Math.log(this.yLim[1] / this.yLim[0]) / factor) * (0.5 + plotPos[1] / this.dim[1])); + this.yLim = [value[1] * offset / deltaLim, value[1] * offset * deltaLim]; + } else { + deltaLim = (this.yLim[1] - this.yLim[0]) / (2 * factor); + offset = 2 * deltaLim * (0.5 + plotPos[1] / this.dim[1]); + this.yLim = [value[1] + offset - deltaLim, value[1] + offset + deltaLim]; + } + + // Fix the limits + this.fixedXLim = true; + this.fixedYLim = true; + + // Update the horizontal and vertical axes + this.xAxis.setLim(this.xLim); + this.topAxis.setLim(this.xLim); + this.yAxis.setLim(this.yLim); + this.rightAxis.setLim(this.yLim); + + // Update the plot limits (the layers, because the limits are fixed) + this.updateLimits(); + } else if (arguments.length === 1) { + factor = arguments[0]; + var centerValue = this.mainLayer.plotToValue(this.dim[0] / 2, -this.dim[1] / 2); + this.centerAndZoom(factor, centerValue[0], centerValue[1]); + } else { + throw new Error("GPlot.zoom(): signature not supported"); + } +}; + +GPlot.prototype.shiftPlotPos = function(valuePlotPos, newPlotPos) { + // Calculate the new limits + var deltaLim; + var deltaXPlot = valuePlotPos[0] - newPlotPos[0]; + var deltaYPlot = valuePlotPos[1] - newPlotPos[1]; + + if (this.xLog) { + deltaLim = Math.exp(Math.log(this.xLim[1] / this.xLim[0]) * deltaXPlot / this.dim[0]); + this.xLim = [this.xLim[0] * deltaLim, this.xLim[1] * deltaLim]; + } else { + deltaLim = (this.xLim[1] - this.xLim[0]) * deltaXPlot / this.dim[0]; + this.xLim = [this.xLim[0] + deltaLim, this.xLim[1] + deltaLim]; + } + + if (this.yLog) { + deltaLim = Math.exp(-Math.log(this.yLim[1] / this.yLim[0]) * deltaYPlot / this.dim[1]); + this.yLim = [this.yLim[0] * deltaLim, this.yLim[1] * deltaLim]; + } else { + deltaLim = -(this.yLim[1] - this.yLim[0]) * deltaYPlot / this.dim[1]; + this.yLim = [this.yLim[0] + deltaLim, this.yLim[1] + deltaLim]; + } + + // Fix the limits + this.fixedXLim = true; + this.fixedYLim = true; + + // Move the horizontal and vertical axes + this.xAxis.moveLim(this.xLim); + this.topAxis.moveLim(this.xLim); + this.yAxis.moveLim(this.yLim); + this.rightAxis.moveLim(this.yLim); + + // Update the plot limits (the layers, because the limits are fixed) + this.updateLimits(); +}; + +GPlot.prototype.align = function() { + var xValue, yValue, xScreen, yScreen; + + if (arguments.length === 4) { + xValue = arguments[0]; + yValue = arguments[1]; + xScreen = arguments[2]; + yScreen = arguments[3]; + } else if (arguments.length === 3) { + xValue = arguments[0][0]; + yValue = arguments[0][1]; + xScreen = arguments[1]; + yScreen = arguments[2]; + } else { + throw new Error("GPlot.align(): signature not supported"); + } + + var valuePlotPos = this.mainLayer.valueToPlot(xValue, yValue); + var newPlotPos = this.getPlotPosAt(xScreen, yScreen); + this.shiftPlotPos(valuePlotPos, newPlotPos); +}; + +GPlot.prototype.center = function(xScreen, yScreen) { + var valuePlotPos = this.getPlotPosAt(xScreen, yScreen); + var newPlotPos = [this.dim[0] / 2, -this.dim[1] / 2]; + this.shiftPlotPos(valuePlotPos, newPlotPos); +}; + +GPlot.prototype.startHistograms = function(histType) { + this.mainLayer.startHistogram(histType); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].startHistogram(histType); + } +}; + +GPlot.prototype.defaultDraw = function() { + this.beginDraw(); + this.drawBackground(); + this.drawBox(); + this.drawXAxis(); + this.drawYAxis(); + this.drawTitle(); + this.drawLines(); + this.drawPoints(); + this.endDraw(); +}; + +GPlot.prototype.beginDraw = function() { + this.parent.push(); + this.parent.translate(this.pos[0] + this.mar[1], this.pos[1] + this.mar[2] + this.dim[1]); +}; + +GPlot.prototype.endDraw = function() { + this.parent.pop(); +}; + +GPlot.prototype.drawBackground = function() { + this.parent.push(); + this.parent.rectMode(this.parent.CORNER); + this.parent.fill(this.bgColor); + this.parent.noStroke(); + this.parent.rect(-this.mar[1], -this.mar[2] - this.dim[1], this.outerDim[0], this.outerDim[1]); + this.parent.pop(); +}; + +GPlot.prototype.drawBox = function() { + this.parent.push(); + this.parent.rectMode(this.parent.CORNER); + this.parent.fill(this.boxBgColor); + this.parent.stroke(this.boxLineColor); + this.parent.strokeWeight(this.boxLineWidth); + this.parent.strokeCap(this.parent.SQUARE); + this.parent.rect(0, -this.dim[1], this.dim[0], this.dim[1]); + this.parent.pop(); +}; + +GPlot.prototype.drawXAxis = function() { + this.xAxis.draw(); +}; + +GPlot.prototype.drawYAxis = function() { + this.yAxis.draw(); +}; + +GPlot.prototype.drawTopAxis = function() { + this.topAxis.draw(); +}; + +GPlot.prototype.drawRightAxis = function() { + this.rightAxis.draw(); +}; + +GPlot.prototype.drawTitle = function() { + this.title.draw(); +}; + +GPlot.prototype.drawPoints = function() { + var i; + + if (arguments.length === 1) { + this.mainLayer.drawPoints(arguments[0]); + + for ( i = 0; i < this.layerList.length; i++) { + this.layerList[0].drawPoints(arguments[0]); + } + } else if (arguments.length === 0) { + this.mainLayer.drawPoints(); + + for ( i = 0; i < this.layerList.length; i++) { + this.layerList[i].drawPoints(); + } + } else { + throw new Error("GPlot.drawPoints(): signature not supported"); + } +}; + +GPlot.prototype.drawPoint = function() { + if (arguments.length === 3) { + this.mainLayer.drawPoint(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 2) { + this.mainLayer.drawPoint(arguments[0], arguments[1]); + } else if (arguments.length === 1) { + this.mainLayer.drawPoint(arguments[0]); + } else { + throw new Error("GPlot.drawPoint(): signature not supported"); + } +}; + +GPlot.prototype.drawLines = function() { + this.mainLayer.drawLines(); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].drawLines(); + } +}; + +GPlot.prototype.drawLine = function() { + if (arguments.length === 4) { + this.mainLayer.drawLine(arguments[0], arguments[1], arguments[2], arguments[3]); + } else if (arguments.length === 2) { + this.mainLayer.drawLine(arguments[0], arguments[1]); + } else { + throw new Error("GPlot.drawLine(): signature not supported"); + } +}; + +GPlot.prototype.drawHorizontalLine = function() { + if (arguments.length === 3) { + this.mainLayer.drawHorizontalLine(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 1) { + this.mainLayer.drawHorizontalLine(arguments[0]); + } else { + throw new Error("GPlot.drawHorizontalLine(): signature not supported"); + } +}; + +GPlot.prototype.drawVerticalLine = function() { + if (arguments.length === 3) { + this.mainLayer.drawVerticalLine(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 1) { + this.mainLayer.drawVerticalLine(arguments[0]); + } else { + throw new Error("GPlot.drawVerticalLine(): signature not supported"); + } +}; + +GPlot.prototype.drawFilledContours = function(contourType, referenceValue) { + this.mainLayer.drawFilledContour(contourType, referenceValue); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].drawFilledContour(contourType, referenceValue); + } +}; + +GPlot.prototype.drawAllLabels = function() { + this.mainLayer.drawAllLabels(); +}; + +GPlot.prototype.drawLabel = function(point) { + this.mainLayer.drawLabel(point); +}; + +GPlot.prototype.drawLabelsAt = function(xScreen, yScreen) { + var plotPos = this.getPlotPosAt(xScreen, yScreen); + this.mainLayer.drawLabelAtPlotPos(plotPos[0], plotPos[1]); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].drawLabelAtPlotPos(plotPos[0], plotPos[1]); + } +}; + +GPlot.prototype.drawLabels = function() { + if (this.labelingIsActive && typeof this.mousePos !== "undefined") { + this.drawLabelsAt(this.mousePos[0], this.mousePos[1]); + } +}; + +GPlot.prototype.drawGridLines = function(gridType) { + var i; + + this.parent.push(); + this.parent.noFill(); + this.parent.stroke(this.gridLineColor); + this.parent.strokeWeight(this.gridLineWidth); + this.parent.strokeCap(this.parent.SQUARE); + + if (gridType === GPlot.BOTH || gridType === GPlot.VERTICAL) { + var xPlotTicks = this.xAxis.getPlotTicksRef(); + + for ( i = 0; i < xPlotTicks.length; i++) { + if (xPlotTicks[i] >= 0 && xPlotTicks[i] <= this.dim[0]) { + this.parent.line(xPlotTicks[i], 0, xPlotTicks[i], -this.dim[1]); + } + } + } + + if (gridType === GPlot.BOTH || gridType === GPlot.HORIZONTAL) { + var yPlotTicks = this.yAxis.getPlotTicksRef(); + + for ( i = 0; i < yPlotTicks.length; i++) { + if (-yPlotTicks[i] >= 0 && -yPlotTicks[i] <= this.dim[1]) { + this.parent.line(0, yPlotTicks[i], this.dim[0], yPlotTicks[i]); + } + } + } + + this.parent.pop(); +}; + +GPlot.prototype.drawHistograms = function() { + this.mainLayer.drawHistogram(); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].drawHistogram(); + } +}; + +GPlot.prototype.drawPolygon = function(polygonPoints, polygonColor) { + this.mainLayer.drawPolygon(polygonPoints, polygonColor); +}; + +GPlot.prototype.drawAnnotation = function(text, x, y, horAlign, verAlign) { + this.mainLayer.drawAnnotation(text, x, y, horAlign, verAlign); +}; + +GPlot.prototype.drawLegend = function(text, xRelativePos, yRelativePos) { + var rectSize = 14; + + this.parent.push(); + this.parent.rectMode(this.parent.CENTER); + this.parent.noStroke(); + + for (var i = 0; i < text.length; i++) { + var plotPosition = [xRelativePos[i] * this.dim[0], -yRelativePos[i] * this.dim[1]]; + var position = this.mainLayer.plotToValue(plotPosition[0] + rectSize, plotPosition[1]); + + if (i === 0) { + this.parent.fill(this.mainLayer.getLineColor()); + this.parent.rect(plotPosition[0], plotPosition[1], rectSize, rectSize); + this.mainLayer.drawAnnotation(text[i], position[0], position[1], this.parent.LEFT, this.parent.CENTER); + } else { + this.parent.fill(this.layerList[i - 1].getLineColor()); + this.parent.rect(plotPosition[0], plotPosition[1], rectSize, rectSize); + this.layerList[i - i].drawAnnotation(text[i], position[0], position[1], this.parent.LEFT, this.parent.CENTER); + } + } + + this.parent.pop(); +}; + +GPlot.prototype.setPos = function() { + if (arguments.length === 2) { + this.pos[0] = arguments[0]; + this.pos[1] = arguments[1]; + } else if (arguments.length === 1) { + this.pos[0] = arguments[0][0]; + this.pos[1] = arguments[0][1]; + } else { + throw new Error("GPlot.setPos(): signature not supported"); + } +}; + +GPlot.prototype.setOuterDim = function() { + var xOuterDim, yOuterDim; + + if (arguments.length === 2) { + xOuterDim = arguments[0]; + yOuterDim = arguments[1]; + } else if (arguments.length === 1) { + xOuterDim = arguments[0][0]; + yOuterDim = arguments[0][1]; + } else { + throw new Error("GPlot.setOuterDim(): signature not supported"); + } + + if (xOuterDim > 0 && yOuterDim > 0) { + // Make sure that the new plot dimensions are positive + var xDim = xOuterDim - this.mar[1] - this.mar[3]; + var yDim = yOuterDim - this.mar[0] - this.mar[2]; + + if (xDim > 0 && yDim > 0) { + this.outerDim[0] = xOuterDim; + this.outerDim[1] = yOuterDim; + this.dim[0] = xDim; + this.dim[1] = yDim; + this.xAxis.setDim(this.dim); + this.topAxis.setDim(this.dim); + this.yAxis.setDim(this.dim); + this.rightAxis.setDim(this.dim); + this.title.setDim(this.dim); + + // Update the layers + this.mainLayer.setDim(this.dim); + + for (var i = 0; i < this.layerList.lenght; i++) { + this.layerList[i].setDim(this.dim); + } + } + } +}; + +GPlot.prototype.setMar = function() { + var bottomMargin, leftMargin, topMargin, rightMargin; + + if (arguments.length === 4) { + bottomMargin = arguments[0]; + leftMargin = arguments[1]; + topMargin = arguments[2]; + rightMargin = arguments[3]; + } else if (arguments.length === 1) { + bottomMargin = arguments[0][0]; + leftMargin = arguments[0][1]; + topMargin = arguments[0][2]; + rightMargin = arguments[0][3]; + } else { + throw new Error("GPlot.setMar(): signature not supported"); + } + + var xOuterDim = this.dim[0] + leftMargin + rightMargin; + var yOuterDim = this.dim[1] + bottomMargin + topMargin; + + if (xOuterDim > 0 && yOuterDim > 0) { + this.mar[0] = bottomMargin; + this.mar[1] = leftMargin; + this.mar[2] = topMargin; + this.mar[3] = rightMargin; + this.outerDim[0] = xOuterDim; + this.outerDim[1] = yOuterDim; + } +}; + +GPlot.prototype.setDim = function() { + var xDim, yDim; + + if (arguments.length === 2) { + xDim = arguments[0]; + yDim = arguments[1]; + } else if (arguments.length === 1) { + xDim = arguments[0][0]; + yDim = arguments[0][1]; + } else { + throw new Error("GPlot.setDim(): signature not supported"); + } + + if (xDim > 0 && yDim > 0) { + // Make sure that the new outer dimensions are positive + var xOuterDim = xDim + this.mar[1] + this.mar[3]; + var yOuterDim = yDim + this.mar[0] + this.mar[2]; + + if (xOuterDim > 0 && yOuterDim > 0) { + this.outerDim[0] = xOuterDim; + this.outerDim[1] = yOuterDim; + this.dim[0] = xDim; + this.dim[1] = yDim; + this.xAxis.setDim(this.dim); + this.topAxis.setDim(this.dim); + this.yAxis.setDim(this.dim); + this.rightAxis.setDim(this.dim); + this.title.setDim(this.dim); + + // Update the layers + this.mainLayer.setDim(this.dim); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].setDim(this.dim); + } + } + } +}; + +GPlot.prototype.setXLim = function() { + var lowerLim, upperLim; + + if (arguments.length === 2) { + lowerLim = arguments[0]; + upperLim = arguments[1]; + } else if (arguments.length === 1) { + lowerLim = arguments[0][0]; + upperLim = arguments[0][1]; + } else { + throw new Error("GPlot.setXLim(): signature not supported"); + } + + if (lowerLim !== upperLim) { + // Make sure the new limits makes sense + if (this.xLog && (lowerLim <= 0 || upperLim <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.xLim[0] = lowerLim; + this.xLim[1] = upperLim; + this.invertedXScale = this.xLim[0] > this.xLim[1]; + + // Fix the limits + this.fixedXLim = true; + + // Update the axes + this.xAxis.setLim(this.xLim); + this.topAxis.setLim(this.xLim); + + // Update the plot limits + this.updateLimits(); + } + } +}; + +GPlot.prototype.setYLim = function() { + var lowerLim, upperLim; + + if (arguments.length === 2) { + lowerLim = arguments[0]; + upperLim = arguments[1]; + } else if (arguments.length === 1) { + lowerLim = arguments[0][0]; + upperLim = arguments[0][1]; + } else { + throw new Error("GPlot.setYLim(): signature not supported"); + } + + if (lowerLim !== upperLim) { + // Make sure the new limits makes sense + if (this.yLog && (lowerLim <= 0 || upperLim <= 0)) { + console.log("One of the limits is negative. This is not allowed in logarithmic scale."); + } else { + this.yLim[0] = lowerLim; + this.yLim[1] = upperLim; + this.invertedYScale = this.yLim[0] > this.yLim[1]; + + // Fix the limits + this.fixedYLim = true; + + // Update the axes + this.yAxis.setLim(this.yLim); + this.rightAxis.setLim(this.yLim); + + // Update the plot limits + this.updateLimits(); + } + } +}; + +GPlot.prototype.setFixedXLim = function(fixedXLim) { + this.fixedXLim = fixedXLim; + + // Update the plot limits + this.updateLimits(); +}; + +GPlot.prototype.setFixedYLim = function(fixedYLim) { + this.fixedYLim = fixedYLim; + + // Update the plot limits + this.updateLimits(); +}; + +GPlot.prototype.setLogScale = function(logType) { + var newXLog = this.xLog; + var newYLog = this.yLog; + + if (logType === "xy" || logType === "yx") { + newXLog = true; + newYLog = true; + } else if (logType === "x") { + newXLog = true; + newYLog = false; + } else if (logType === "y") { + newXLog = false; + newYLog = true; + } else if (logType === "") { + newXLog = false; + newYLog = false; + } + + // Do something only if the scale changed + if (newXLog !== this.xLog || newYLog !== this.yLog) { + // Set the new log scales + this.xLog = newXLog; + this.yLog = newYLog; + + // Unfix the limits if the old ones don't make sense + if (this.xLog && this.fixedXLim && (this.xLim[0] <= 0 || this.xLim[1] <= 0)) { + this.fixedXLim = false; + } + + if (this.yLog && this.fixedYLim && (this.yLim[0] <= 0 || this.yLim[1] <= 0)) { + this.fixedYLim = false; + } + + // Calculate the new limits if needed + if (!this.fixedXLim) { + this.xLim = this.calculatePlotXLim(); + } + + if (!this.fixedYLim) { + this.yLim = this.calculatePlotYLim(); + } + + // Update the axes + this.xAxis.setLimAndLog(this.xLim, this.xLog); + this.topAxis.setLimAndLog(this.xLim, this.xLog); + this.yAxis.setLimAndLog(this.yLim, this.yLog); + this.rightAxis.setLimAndLog(this.yLim, this.yLog); + + // Update the layers + this.mainLayer.setLimAndLog(this.xLim, this.yLim, this.xLog, this.yLog); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].setLimAndLog(this.xLim, this.yLim, this.xLog, this.yLog); + } + } +}; + +GPlot.prototype.setInvertedXScale = function(invertedXScale) { + if (invertedXScale !== this.invertedXScale) { + this.invertedXScale = invertedXScale; + var temp = this.xLim[0]; + this.xLim[0] = this.xLim[1]; + this.xLim[1] = temp; + + // Update the axes + this.xAxis.setLim(this.xLim); + this.topAxis.setLim(this.xLim); + + // Update the layers + this.mainLayer.setXLim(this.xLim); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].setXLim(this.xLim); + } + } +}; + +GPlot.prototype.invertXScale = function() { + this.setInvertedXScale(!this.invertedXScale); +}; + +GPlot.prototype.setInvertedYScale = function(invertedYScale) { + if (invertedYScale !== this.invertedYScale) { + this.invertedYScale = invertedYScale; + var temp = this.yLim[0]; + this.yLim[0] = this.yLim[1]; + this.yLim[1] = temp; + + // Update the axes + this.yAxis.setLim(this.yLim); + this.rightAxis.setLim(this.yLim); + + // Update the layers + this.mainLayer.setYLim(this.yLim); + + for (var i = 0; i < this.layerList.length; i++) { + this.layerList[i].setYLim(this.yLim); + } + } +}; + +GPlot.prototype.invertYScale = function() { + this.setInvertedYScale(!this.invertedYScale); +}; + +GPlot.prototype.setIncludeAllLayersInLim = function(includeAllLayers) { + if (includeAllLayers !== this.includeAllLayersInLim) { + this.includeAllLayersInLim = includeAllLayers; + + // Update the plot limits + this.updateLimits(); + } +}; + +GPlot.prototype.setExpandLimFactor = function(expandFactor) { + if (expandFactor >= 0 && expandFactor !== this.expandLimFactor) { + this.expandLimFactor = expandFactor; + + // Update the plot limits + this.updateLimits(); + } +}; + +GPlot.prototype.setBgColor = function(bgColor) { + this.bgColor = bgColor; +}; + +GPlot.prototype.setBoxBgColor = function(boxBgColor) { + this.boxBgColor = boxBgColor; +}; + +GPlot.prototype.setBoxLineColor = function(boxLineColor) { + this.boxLineColor = boxLineColor; +}; + +GPlot.prototype.setBoxLineWidth = function(boxLineWidth) { + if (boxLineWidth > 0) { + this.boxLineWidth = boxLineWidth; + } +}; + +GPlot.prototype.setGridLineColor = function(gridLineColor) { + this.gridLineColor = gridLineColor; +}; + +GPlot.prototype.setGridLineWidth = function(gridLineWidth) { + if (gridLineWidth > 0) { + this.gridLineWidth = gridLineWidth; + } +}; + +GPlot.prototype.setPoints = function() { + if (arguments.length === 2) { + this.getLayer(arguments[1]).setPoints(arguments[0]); + } else if (arguments.length === 1) { + this.mainLayer.setPoints(arguments[0]); + } else { + throw new Error("GPlot.setPoints(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.setPoint = function() { + if (arguments.length === 5) { + this.getLayer(arguments[4]).setPoint(arguments[0], arguments[1], arguments[2], arguments[3]); + } else if (arguments.length === 4) { + this.mainLayer.setPoint(arguments[0], arguments[1], arguments[2], arguments[3]); + } else if (arguments.length === 3 && arguments[1] instanceof GPoint) { + this.getLayer(arguments[2]).setPoint(arguments[0], arguments[1]); + } else if (arguments.length === 3) { + this.mainLayer.setPoint(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 2) { + this.mainLayer.setPoint(arguments[0], arguments[1]); + } else { + throw new Error("GPlot.setPoint(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.addPoint = function() { + if (arguments.length === 4) { + this.getLayer(arguments[3]).addPoint(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 3) { + this.mainLayer.addPoint(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 2 && arguments[0] instanceof GPoint) { + this.getLayer(arguments[1]).addPoint(arguments[0]); + } else if (arguments.length === 2) { + this.mainLayer.addPoint(arguments[0], arguments[1]); + } else if (arguments.length === 1) { + this.mainLayer.addPoint(arguments[0]); + } else { + throw new Error("GPlot.addPoint(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.addPoints = function() { + if (arguments.length === 2) { + this.getLayer(arguments[1]).addPoints(arguments[0]); + } else if (arguments.length === 1) { + this.mainLayer.addPoints(arguments[0]); + } else { + throw new Error("GPlot.addPoints(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.removePoint = function() { + if (arguments.length === 2) { + this.getLayer(arguments[1]).removePoint(arguments[0]); + } else if (arguments.length === 1) { + this.mainLayer.removePoint(arguments[0]); + } else { + throw new Error("GPlot.removePoint(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.addPointAtIndexPos = function() { + if (arguments.length === 5) { + this.getLayer(arguments[4]).addPointAtIndexPos(arguments[0], arguments[1], arguments[2], arguments[3]); + } else if (arguments.length === 4) { + this.mainLayer.addPointAtIndexPos(arguments[0], arguments[1], arguments[2], arguments[3]); + } else if (arguments.length === 3 && arguments[1] instanceof GPoint) { + this.getLayer(arguments[2]).addPointAtIndexPos(arguments[0], arguments[1]); + } else if (arguments.length === 3) { + this.mainLayer.addPointAtIndexPos(arguments[0], arguments[1], arguments[2]); + } else if (arguments.length === 2) { + this.mainLayer.addPointAtIndexPos(arguments[0], arguments[1]); + } else { + throw new Error("GPlot.addPointAtIndexPos(): signature not supported"); + } + + this.updateLimits(); +}; + +GPlot.prototype.setPointColors = function(pointColors) { + this.mainLayer.setPointColors(pointColors); +}; + +GPlot.prototype.setPointColor = function(pointColor) { + this.mainLayer.setPointColor(pointColor); +}; + +GPlot.prototype.setPointSizes = function(pointSizes) { + this.mainLayer.setPointSizes(pointSizes); +}; + +GPlot.prototype.setPointSize = function(pointSize) { + this.mainLayer.setPointSize(pointSize); +}; + +GPlot.prototype.setLineColor = function(lineColor) { + this.mainLayer.setLineColor(lineColor); +}; + +GPlot.prototype.setLineWidth = function(lineWidth) { + this.mainLayer.setLineWidth(lineWidth); +}; + +GPlot.prototype.setHistBasePoint = function(basePoint) { + this.mainLayer.setHistBasePoint(basePoint); +}; + +GPlot.prototype.setHistType = function(histType) { + this.mainLayer.setHistType(histType); +}; + +GPlot.prototype.setHistVisible = function(histVisible) { + this.mainLayer.setHistVisible(histVisible); +}; + +GPlot.prototype.setDrawHistLabels = function(drawHistLabels) { + this.mainLayer.setDrawHistLabels(drawHistLabels); +}; + +GPlot.prototype.setLabelBgColor = function(labelBgColor) { + this.mainLayer.setLabelBgColor(labelBgColor); +}; + +GPlot.prototype.setLabelSeparation = function(labelSeparation) { + this.mainLayer.setLabelSeparation(labelSeparation); +}; + +GPlot.prototype.setTitleText = function(text) { + this.title.setText(text); +}; + +GPlot.prototype.setAxesOffset = function(offset) { + this.xAxis.setOffset(offset); + this.topAxis.setOffset(offset); + this.yAxis.setOffset(offset); + this.rightAxis.setOffset(offset); +}; + +GPlot.prototype.setTicksLength = function(tickLength) { + this.xAxis.setTickLength(tickLength); + this.topAxis.setTickLength(tickLength); + this.yAxis.setTickLength(tickLength); + this.rightAxis.setTickLength(tickLength); +}; + +GPlot.prototype.setHorizontalAxesNTicks = function(nTicks) { + this.xAxis.setNTicks(nTicks); + this.topAxis.setNTicks(nTicks); +}; + +GPlot.prototype.setHorizontalAxesTicksSeparation = function(ticksSeparation) { + this.xAxis.setTicksSeparation(ticksSeparation); + this.topAxis.setTicksSeparation(ticksSeparation); +}; + +GPlot.prototype.setHorizontalAxesTicks = function(ticks) { + this.xAxis.setTicks(ticks); + this.topAxis.setTicks(ticks); +}; + +GPlot.prototype.setVerticalAxesNTicks = function(nTicks) { + this.yAxis.setNTicks(nTicks); + this.rightAxis.setNTicks(nTicks); +}; + +GPlot.prototype.setVerticalAxesTicksSeparation = function(ticksSeparation) { + this.yAxis.setTicksSeparation(ticksSeparation); + this.rightAxis.setTicksSeparation(ticksSeparation); +}; + +GPlot.prototype.setVerticalAxesTicks = function(ticks) { + this.yAxis.setTicks(ticks); + this.rightAxis.setTicks(ticks); +}; + +GPlot.prototype.setFontName = function(fontName) { + this.maniLayer.setFontName(fontName); +}; + +GPlot.prototype.setFontColor = function(fontColor) { + this.maniLayer.setFontColor(fontColor); +}; + +GPlot.prototype.setFontSize = function(fontSize) { + this.maniLayer.setFontSize(fontSize); +}; + +GPlot.prototype.setFontProperties = function(fontName, fontColor, fontSize) { + this.maniLayer.setFontProperties(fontName, fontColor, fontSize); +}; + +GPlot.prototype.setAllFontProperties = function(fontName, fontColor, fontSize) { + this.xAxis.setAllFontProperties(fontName, fontColor, fontSize); + this.topAxis.setAllFontProperties(fontName, fontColor, fontSize); + this.yAxis.setAllFontProperties(fontName, fontColor, fontSize); + this.rightAxis.setAllFontProperties(fontName, fontColor, fontSize); + this.title.setFontProperties(fontName, fontColor, fontSize); + + this.mainLayer.setAllFontProperties(fontName, fontColor, fontSize); + + for (var i = 0; i < layerList.length; i++) { + this.layerList[i].setAllFontProperties(fontName, fontColor, fontSize); + } +}; + +GPlot.prototype.getPos = function() { + return this.pos.slice(); +}; + +GPlot.prototype.getOuterDim = function() { + return this.outerDim.slice(); +}; + +GPlot.prototype.getMar = function() { + return this.mar.slice(); +}; + +GPlot.prototype.getDim = function() { + return this.dim.slice(); +}; + +GPlot.prototype.getXLim = function() { + return this.xLim.slice(); +}; + +GPlot.prototype.getYLim = function() { + return this.yLim.slice(); +}; + +GPlot.prototype.getFixedXLim = function() { + return this.fixedXLim; +}; + +GPlot.prototype.getFixedYLim = function() { + return this.fixedYLim; +}; + +GPlot.prototype.getXLog = function() { + return this.xLog; +}; + +GPlot.prototype.getYLog = function() { + return this.yLog; +}; + +GPlot.prototype.getInvertedXScale = function() { + return this.invertedXScale; +}; + +GPlot.prototype.getInvertedYScale = function() { + return this.invertedYScale; +}; + +GPlot.prototype.getMainLayer = function() { + return this.mainLayer; +}; + +GPlot.prototype.getLayer = function(id) { + var layer; + + if (this.mainLayer.isId(id)) { + layer = this.mainLayer; + } else { + for (var i = 0; i < this.layerList.length; i++) { + if (this.layerList[i].isId(id)) { + layer = this.layerList[i]; + break; + } + } + } + + if ( typeof layer === "undefined") { + console.log("Couldn't find a layer in the plot with id = " + id); + } + + return layer; +}; + +GPlot.prototype.getXAxis = function() { + return this.xAxis; +}; + +GPlot.prototype.getYAxis = function() { + return this.yAxis; +}; + +GPlot.prototype.getTopAxis = function() { + return this.topAxis; +}; + +GPlot.prototype.getRightAxis = function() { + return this.rightAxis; +}; + +GPlot.prototype.getTitle = function() { + return this.title; +}; + +GPlot.prototype.getPoints = function() { + if (arguments.length === 1) { + return this.getLayer(arguments[0]).getPoints(); + } else if (arguments.length === 0) { + return this.mainLayer.getPoints(); + } else { + throw new Error("GPlot.getPoints(): signature not supported"); + } +}; + +GPlot.prototype.getPointsRef = function() { + if (arguments.length === 1) { + return this.getLayer(arguments[0]).getPointsRef(); + } else if (arguments.length === 0) { + return this.mainLayer.getPointsRef(); + } else { + throw new Error("GPlot.getPointsRef(): signature not supported"); + } +}; + +GPlot.prototype.getHistogram = function() { + if (arguments.length === 1) { + return this.getLayer(arguments[0]).getHistogram(); + } else if (arguments.length === 0) { + return this.mainLayer.getHistogram(); + } else { + throw new Error("GPlot.getHistogram(): signature not supported"); + } +}; + +GPlot.prototype.activateZooming = function() { + var zoomFactor, increaseButton, decreaseButton, increaseKeyModifier, decreaseKeyModifier; + + if (arguments.length === 5) { + zoomFactor = arguments[0]; + increaseButton = arguments[1]; + decreaseButton = arguments[2]; + increaseKeyModifier = arguments[3]; + decreaseKeyModifier = arguments[4]; + } else if (arguments.length === 3) { + zoomFactor = arguments[0]; + increaseButton = arguments[1]; + decreaseButton = arguments[2]; + increaseKeyModifier = GPlot.NONE; + decreaseKeyModifier = GPlot.NONE; + } else if (arguments.length === 1) { + zoomFactor = arguments[0]; + increaseButton = this.parent.LEFT; + decreaseButton = this.parent.RIGHT; + increaseKeyModifier = GPlot.NONE; + decreaseKeyModifier = GPlot.NONE; + } else if (arguments.length === 0) { + zoomFactor = 1.3; + increaseButton = this.parent.LEFT; + decreaseButton = this.parent.RIGHT; + increaseKeyModifier = GPlot.NONE; + decreaseKeyModifier = GPlot.NONE; + } else { + throw new Error("GPlot.activateZooming(): signature not supported"); + } + + this.zoomingIsActive = true; + + if (zoomFactor > 0) { + this.zoomFactor = zoomFactor; + } + + if (increaseButton === this.parent.LEFT || increaseButton === this.parent.RIGHT || increaseButton === this.parent.CENTER) { + this.increaseZoomButton = increaseButton; + } + + if (decreaseButton === this.parent.LEFT || decreaseButton === this.parent.RIGHT || decreaseButton === this.parent.CENTER) { + this.decreaseZoomButton = decreaseButton; + } + + if (increaseKeyModifier === this.parent.SHIFT || increaseKeyModifier === this.parent.CONTROL || increaseKeyModifier === this.parent.ALT || increaseKeyModifier === GPlot.NONE) { + this.increaseZoomKeyModifier = increaseKeyModifier; + } + + if (decreaseKeyModifier === this.parent.SHIFT || decreaseKeyModifier === this.parent.CONTROL || decreaseKeyModifier === this.parent.ALT || decreaseKeyModifier === GPlot.NONE) { + this.decreaseZoomKeyModifier = decreaseKeyModifier; + } +}; + +GPlot.prototype.deactivateZooming = function() { + this.zoomingIsActive = false; +}; + +GPlot.prototype.activateCentering = function() { + var button, keyModifier; + + if (arguments.length === 2) { + button = arguments[0]; + keyModifier = arguments[1]; + } else if (arguments.length === 1) { + button = arguments[0]; + keyModifier = GPlot.NONE; + } else if (arguments.length === 0) { + button = this.parent.LEFT; + keyModifier = GPlot.NONE; + } else { + throw new Error("GPlot.activateCentering(): signature not supported"); + } + + this.centeringIsActive = true; + + if (button === this.parent.LEFT || button === this.parent.RIGHT || button === this.parent.CENTER) { + this.centeringButton = button; + } + + if (keyModifier === this.parent.SHIFT || keyModifier === this.parent.CONTROL || keyModifier === this.parent.ALT || keyModifier === GPlot.NONE) { + this.centeringKeyModifier = keyModifier; + } +}; + +GPlot.prototype.deactivateCentering = function() { + this.centeringIsActive = false; +}; + +GPlot.prototype.activatePanning = function() { + var button, keyModifier; + + if (arguments.length === 2) { + button = arguments[0]; + keyModifier = arguments[1]; + } else if (arguments.length === 1) { + button = arguments[0]; + keyModifier = GPlot.NONE; + } else if (arguments.length === 0) { + button = this.parent.LEFT; + keyModifier = GPlot.NONE; + } else { + throw new Error("GPlot.activatePanning(): signature not supported"); + } + + this.panningIsActive = true; + + if (button === this.parent.LEFT || button === this.parent.RIGHT || button === this.parent.CENTER) { + this.panningButton = button; + } + + if (keyModifier === this.parent.SHIFT || keyModifier === this.parent.CONTROL || keyModifier === this.parent.ALT || keyModifier === GPlot.NONE) { + this.panningKeyModifier = keyModifier; + } +}; + +GPlot.prototype.deactivatePanning = function() { + this.panningIsActive = false; + this.panningReferencePoint = undefined; +}; + +GPlot.prototype.activatePointLabels = function() { + var button, keyModifier; + + if (arguments.length === 2) { + button = arguments[0]; + keyModifier = arguments[1]; + } else if (arguments.length === 1) { + button = arguments[0]; + keyModifier = GPlot.NONE; + } else if (arguments.length === 0) { + button = this.parent.LEFT; + keyModifier = GPlot.NONE; + } else { + throw new Error("GPlot.activatePointLabels(): signature not supported"); + } + + this.labelingIsActive = true; + + if (button === this.parent.LEFT || button === this.parent.RIGHT || button === this.parent.CENTER) { + this.labelingButton = button; + } + + if (keyModifier === this.parent.SHIFT || keyModifier === this.parent.CONTROL || keyModifier === this.parent.ALT || keyModifier === GPlot.NONE) { + this.labelingKeyModifier = keyModifier; + } +}; + +GPlot.prototype.deactivatePointLabels = function() { + this.labelingIsActive = false; + this.mousePos = undefined; +}; + +GPlot.prototype.activateReset = function() { + var button, keyModifier; + + if (arguments.length === 2) { + button = arguments[0]; + keyModifier = arguments[1]; + } else if (arguments.length === 1) { + button = arguments[0]; + keyModifier = GPlot.NONE; + } else if (arguments.length === 0) { + button = this.parent.RIGHT; + keyModifier = GPlot.NONE; + } else { + throw new Error("GPlot.activateReset(): signature not supported"); + } + + this.resetIsActive = true; + this.xLimReset = undefined; + this.yLimReset = undefined; + + if (button === this.parent.LEFT || button === this.parent.RIGHT || button === this.parent.CENTER) { + this.resetButton = button; + } + + if (keyModifier === this.parent.SHIFT || keyModifier === this.parent.CONTROL || keyModifier === this.parent.ALT || keyModifier === GPlot.NONE) { + this.resetKeyModifier = keyModifier; + } +}; + +GPlot.prototype.deactivateReset = function() { + this.resetIsActive = false; + this.xLimReset = undefined; + this.yLimReset = undefined; +}; + +GPlot.prototype.getButton = function(event) { + var button; + + if (event.button === 0) { + button = this.parent.LEFT; + } else if (event.button === 1) { + button = this.parent.CENTER; + } else if (event.button === 2) { + button = this.parent.RIGHT; + } else if ( typeof event.button === "undefined") { + button = this.parent.LEFT; + } + + return button; +}; + +GPlot.prototype.getModifier = function(event) { + var modifier; + + if (event.altKey) { + modifier = this.parent.ALT; + } else if (event.ctrlKey) { + modifier = this.parent.CONTROL; + } else if (event.shiftKey) { + modifier = this.parent.SHIFT; + } else { + modifier = GPlot.NONE; + } + + return modifier; +}; + +GPlot.prototype.saveResetLimits = function() { + if ( typeof this.xLimReset === "undefined" || typeof this.yLimReset === "undefined") { + this.xLimReset = this.xLim.slice(); + this.yLimReset = this.yLim.slice(); + } +}; + +GPlot.prototype.panningFunction = function() { + if ( typeof this.panningReferencePoint !== "undefined") { + this.align(this.panningReferencePoint, this.parent.mouseX, this.parent.mouseY); + } +}; + +GPlot.prototype.clickEvent = function(event) { + e = event || window.event; + + if (this.isOverBox()) { + var button = this.getButton(e); + var modifier = this.getModifier(e); + + if (this.zoomingIsActive) { + if (button === this.increaseZoomButton && modifier === this.increaseZoomKeyModifier) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + this.zoom(this.zoomFactor, this.parent.mouseX, this.parent.mouseY); + } else if (button === this.decreaseZoomButton && modifier === this.decreaseZoomKeyModifier) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + this.zoom(1 / this.zoomFactor, this.parent.mouseX, this.parent.mouseY); + } + } + + if (this.centeringIsActive && button === this.centeringButton && modifier === this.centeringKeyModifier) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + this.center(this.parent.mouseX, this.parent.mouseY); + } + + if (this.resetIsActive && button === this.resetButton && modifier === this.resetKeyModifier) { + if ( typeof this.xLimReset !== "undefined" && typeof this.yLimReset !== "undefined") { + this.setXLim(this.xLimReset); + this.setYLim(this.yLimReset); + this.xLimReset = undefined; + this.yLimReset = undefined; + } + } + } +}; + +GPlot.prototype.mouseDownEvent = function(event) { + e = event || window.event; + + if (this.isOverBox()) { + var button = this.getButton(e); + var modifier = this.getModifier(e); + + if (this.panningIsActive && button === this.panningButton && modifier === this.panningKeyModifier) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + // Calculate the panning reference point + this.panningReferencePoint = this.getValueAt(this.parent.mouseX, this.parent.mouseY); + + // Execute the panning function every 100ms + this.panningIntervalId = setInterval(this.panningFunction.bind(this), 100); + } + + if (this.labelingIsActive && button === this.labelingButton && modifier === this.labelingKeyModifier) { + this.mousePos = [this.parent.mouseX, this.parent.mouseY]; + } + } +}; + +GPlot.prototype.mouseUpEvent = function(event) { + e = event || window.event; + var button = this.getButton(e); + var modifier = this.getModifier(e); + + if (this.panningIsActive && button === this.panningButton && typeof this.panningIntervalId !== "undefined") { + // Stop executing the panning function + clearInterval(this.panningIntervalId); + + // Reset the panning variables + this.panningIntervalId = undefined; + this.panningReferencePoint = undefined; + } + + if (this.labelingIsActive && button === this.labelingButton) { + this.mousePos = undefined; + } + + if (button === this.parent.RIGHT) { + // This is a right click! + this.clickEvent(e); + } +}; + +GPlot.prototype.wheelEvent = function(event) { + e = event || window.event; + + if (this.isOverBox()) { + var deltaY = e.deltaY; + var button = this.parent.CENTER; + var modifier = this.getModifier(e); + + if (this.zoomingIsActive) { + if (button === this.increaseZoomButton && modifier === this.increaseZoomKeyModifier && deltaY > 0) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + this.zoom(this.zoomFactor, this.parent.mouseX, this.parent.mouseY); + } else if (button === this.decreaseZoomButton && modifier === this.decreaseZoomKeyModifier && deltaY < 0) { + // Save the axes limits + if (this.resetIsActive) { + this.saveResetLimits(); + } + + this.zoom(1 / this.zoomFactor, this.parent.mouseX, this.parent.mouseY); + } + } + } +}; + +GPlot.prototype.preventDefaultEvent = function(event) { + e = event || window.event; + + if (this.isOverBox()) { + // Don't show the menu inside the plot area + if (e.preventDefault) { + e.preventDefault(); + } else { + e.returnValue = false; + } + } +}; + +GPlot.prototype.preventWheelDefault = function() { + window.addEventListener("wheel", this.preventDefaultEvent.bind(this), false); +}; + +GPlot.prototype.preventRightClickDefault = function() { + window.addEventListener("contextmenu", this.preventDefaultEvent.bind(this), false); +}; diff --git a/graficos/grafica-0.1.0-mod.min.js b/graficos/grafica-0.1.0-mod.min.js new file mode 100644 index 0000000..192dbac --- /dev/null +++ b/graficos/grafica-0.1.0-mod.min.js @@ -0,0 +1,5 @@ +/*! grafica.js (0.1.0): a library for p5.js. Author: Javier Graciá Carpio, license: LGPL-3.0, 2015-04-12 */ function GPoint(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c=arguments[1];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else if(1===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel();else if(1===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c="";else{if(0!==arguments.length)throw new Error("GPoint constructor: signature not supported");a=0,b=0,c=""}this.x=a,this.y=b,this.label=c,this.valid=this.isValidNumber(this.x)&&this.isValidNumber(this.y)}function GTitle(a,b){this.parent=a,this.dim=b.slice(),this.relativePos=.5,this.plotPos=this.relativePos*this.dim[0],this.offset=10,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(100),this.fontStyle=this.parent.BOLD,this.fontSize=13}function GAxisLabel(a,b,c){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.relativePos=.5,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1],this.offset=35,this.rotate=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=13}function GAxis(a,b,c,d,e){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.lim=d.slice(),this.log=e,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.offset=5,this.lineColor=this.parent.color(0),this.lineWidth=1,this.nTicks=5,this.ticksSeparation=-1,this.ticks=[],this.plotTicks=[],this.ticksInside=[],this.tickLabels=[],this.fixedTicks=!1,this.tickLength=3,this.smallTickLength=2,this.expTickLabels=!1,this.rotateTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.drawTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.LEFT?!0:!1,this.tickLabelOffset=7,this.ticksPrecision=void 0,this.lab=new GAxisLabel(this.parent,this.type,this.dim),this.drawAxisLabel=!0,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=11,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()}function GHistogram(a,b,c,d){this.parent=a,this.type=b===GPlot.VERTICAL||b===GPlot.HORIZONTAL?b:GPlot.VERTICAL,this.dim=c.slice(),this.plotPoints=[];for(var e=0;e0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.relativePos*this.dim[0])},GTitle.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.relativePos*this.dim[0]},GTitle.prototype.setOffset=function(a){this.offset=a},GTitle.prototype.setText=function(a){this.text=a},GTitle.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GTitle.prototype.setFontName=function(a){this.fontName=a},GTitle.prototype.setFontColor=function(a){this.fontColor=a},GTitle.prototype.setFontStyle=function(a){this.fontStyle=a},GTitle.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GTitle.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxisLabel.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXLabel();break;case this.parent.LEFT:this.drawAsYLabel();break;case this.parent.TOP:this.drawAsTopLabel();break;case this.parent.RIGHT:this.drawAsRightLabel()}},GAxisLabel.prototype.drawAsXLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.translate(this.plotPos,this.offset),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.text(this.text,this.plotPos,this.offset)),this.parent.pop()},GAxisLabel.prototype.drawAsYLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.translate(-this.offset,this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.text(this.text,-this.offset,this.plotPos)),this.parent.pop()},GAxisLabel.prototype.drawAsTopLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.translate(this.plotPos,-this.offset-this.dim[1]),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.text(this.text,this.plotPos,-this.offset-this.dim[1])),this.parent.pop()},GAxisLabel.prototype.drawAsRightLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.translate(this.offset+this.dim[0],this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.text(this.text,this.offset+this.dim[0],this.plotPos)),this.parent.pop()},GAxisLabel.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GAxisLabel.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1])},GAxisLabel.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1]},GAxisLabel.prototype.setOffset=function(a){this.offset=a},GAxisLabel.prototype.setRotate=function(a){this.rotate=a},GAxisLabel.prototype.setText=function(a){this.text=a},GAxisLabel.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GAxisLabel.prototype.setFontName=function(a){this.fontName=a},GAxisLabel.prototype.setFontColor=function(a){this.fontColor=a},GAxisLabel.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GAxisLabel.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.obtainSigDigits=function(a){return Math.round(-Math.log(.5*Math.abs(a))/Math.LN10)},GAxis.prototype.roundPlus=function(a,b){return a=Math.round(a*Math.pow(10,b))/Math.pow(10,b),0>=b&&(a=Math.round(a)),a},GAxis.prototype.adaptSize=function(a,b){bthis.lim[0]?(a=Math.floor(Math.log(this.lim[0])/Math.LN10),b=Math.ceil(Math.log(this.lim[1])/Math.LN10)):(a=Math.floor(Math.log(this.lim[1])/Math.LN10),b=Math.ceil(Math.log(this.lim[0])/Math.LN10));var c=9*(b-a)+1;this.adaptSize(this.ticks,c);for(var d=a;b>d;d++)for(var e=this.roundPlus(Math.exp(d*Math.LN10),-d),f=0;9>f;f++)this.ticks[9*(d-a)+f]=(f+1)*e;this.ticks[this.ticks.length-1]=this.roundPlus(Math.exp(b*Math.LN10),-d),this.lim[1]0){for(a=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,c=this.obtainSigDigits(a);this.roundPlus(a,c)-a!==0;)c++;b=Math.floor((this.lim[1]-this.lim[0])/a)}else this.nTicks>0&&(a=(this.lim[1]-this.lim[0])/this.nTicks,c=this.obtainSigDigits(a),a=this.roundPlus(a,c),(0===a||Math.abs(a)>Math.abs(this.lim[1]-this.lim[0]))&&(c++,a=this.roundPlus((this.lim[1]-this.lim[0])/this.nTicks,c)),b=Math.floor((this.lim[1]-this.lim[0])/a));if(b>0){var d=this.lim[0]+(this.lim[1]-this.lim[0]-b*a)/2;for(d=this.roundPlus(d-2*a,c);(this.lim[1]-d)*(this.lim[0]-d)>0;)d=this.roundPlus(d+a,c);var e=Math.floor(Math.abs((this.lim[1]-d)/a))+1;this.adaptSize(this.ticks,e),this.ticks[0]=d;for(var f=1;e>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+a,c);this.ticksPrecision=c}else this.ticks=[]},GAxis.prototype.updatePlotTicks=function(){var a,b,c=this.ticks.length;if(this.adaptSize(this.plotTicks,c),this.log)for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/Math.log(this.lim[1]/this.lim[0]):-this.dim[1]/Math.log(this.lim[1]/this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=Math.log(this.ticks[b]/this.lim[0])*a;else for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/(this.lim[1]-this.lim[0]):-this.dim[1]/(this.lim[1]-this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=(this.ticks[b]-this.lim[0])*a},GAxis.prototype.updateTicksInside=function(){var a,b=this.ticks.length;if(this.adaptSize(this.ticksInside,b),this.type===this.parent.BOTTOM||this.type===this.parent.TOP)for(a=0;b>a;a++)this.ticksInside[a]=this.plotTicks[a]>=0&&this.plotTicks[a]<=this.dim[0];else for(a=0;b>a;a++)this.ticksInside[a]=-this.plotTicks[a]>=0&&-this.plotTicks[a]<=this.dim[1]},GAxis.prototype.updateTickLabels=function(){var a,b,c,d,e=this.ticks.length;if(this.adaptSize(this.tickLabels,e),this.log)for(d=0;e>d;d++)a=this.ticks[d],a>0?(b=Math.log(a)/Math.LN10,c=Math.abs(b-Math.round(b))<1e-4,c?(b=Math.round(b),this.tickLabels[d]=this.expTickLabels?"1e"+b:b>-3.1&&3.1>b?b>=0?""+Math.round(a):""+a:"1e"+b):this.tickLabels[d]=""):this.tickLabels[d]="";else for(d=0;e>d;d++)a=this.ticks[d],this.tickLabels[d]=a%1===0?""+Math.round(a):"undefined"!=typeof this.ticksPrecision&&this.ticksPrecision>=0?""+parseFloat(a).toFixed(this.ticksPrecision):""+a},GAxis.prototype.moveLim=function(a){if(a[1]!==a[0])if(this.log&&(a[0]<=0||a[1]<=0))console.log("The limits are negative. This is not allowed in logarithmic scale.");else{if(this.lim[0]=a[0],this.lim[1]=a[1],!this.fixedTicks){var b=this.ticks.length;if(this.log)this.obtainLogarithmicTicks();else if(b>0){var c=0,d=0;if(this.ticksSeparation>0)for(c=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,d=this.obtainSigDigits(c);this.roundPlus(c,d)-c!==0;)d++;else c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],d=this.obtainSigDigits(c),c=this.roundPlus(c,d),(0===c||Math.abs(c)>Math.abs(this.lim[1]-this.lim[0]))&&(d++,c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],c=this.roundPlus(c,d)),c=this.lim[1]>this.lim[0]?Math.abs(c):-Math.abs(c);var e=this.ticks[0]+c*Math.ceil((this.lim[0]-this.ticks[0])/c);e=this.roundPlus(e,d),(this.lim[1]-e)*(this.lim[0]-e)>0&&(e=this.ticks[0]+c*Math.floor((this.lim[0]-this.ticks[0])/c),e=this.roundPlus(e,d)),b=Math.floor(Math.abs((this.lim[1]-e)/c))+1,this.adaptSize(this.ticks,b),this.ticks[0]=e;for(var f=1;b>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+c,d);this.ticksPrecision!==d&&console.log("There is a problem in the axis ticks precision calculation")}this.updateTickLabels()}this.updatePlotTicks(),this.updateTicksInside()}},GAxis.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXAxis();break;case this.parent.LEFT:this.drawAsYAxis();break;case this.parent.TOP:this.drawAsTopAxis();break;case this.parent.RIGHT:this.drawAsRightAxis()}this.drawAxisLabel&&this.lab.draw()},GAxis.prototype.drawAsXAxis=function(){var a;for(this.parent.push(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,this.offset,this.dim[0],this.offset),a=0;a0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotTicks(),this.lab.setDim(this.dim))},GAxis.prototype.setLim=function(a){a[1]!==a[0]&&(this.log&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLimAndLog=function(a,b){a[1]!==a[0]&&(b&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.log=b,this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLog=function(a){a!==this.log&&(this.log=a,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside())},GAxis.prototype.setOffset=function(a){this.offset=a},GAxis.prototype.setLineColor=function(a){this.lineColor=a},GAxis.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GAxis.prototype.setNTicks=function(a){a>=0&&(this.nTicks=a,this.ticksSeparation=-1,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()))},GAxis.prototype.setTicksSeparation=function(a){this.ticksSeparation=a,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels())},GAxis.prototype.setTicks=function(a){var b=a.length;this.adaptSize(this.ticks,b);for(var c=0;b>c;c++)this.ticks[c]=a[c];this.fixedTicks=!0,this.ticksPrecision=void 0,this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()},GAxis.prototype.setTickLabels=function(a){if(a.length===this.tickLabels.length){for(var b=0;b0&&(this.fontSize=a)},GAxis.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),this.lab.setFontProperties(a,b,c)},GAxis.prototype.getTicks=function(){if(this.fixedTicks)return this.ticks.slice();for(var a=[],b=0,c=0;cb&&(this.differences.splice(b,Number.MAX_VALUE),this.leftSides.splice(b,Number.MAX_VALUE),this.rightSides.splice(b,Number.MAX_VALUE)),1===b)this.leftSides[0]=this.type===GPlot.VERTICAL?.2*this.dim[0]:.2*this.dim[1],this.rightSides[0]=this.leftSides[0];else if(b>1){for(a=0;b-1>a;a++)if(this.plotPoints[a].isValid()&&this.plotPoints[a+1].isValid()){var c,d=this.separations[a%this.separations.length];c=this.type===GPlot.VERTICAL?this.plotPoints[a+1].getX()-this.plotPoints[a].getX():this.plotPoints[a+1].getY()-this.plotPoints[a].getY(),this.differences[a]=c>0?(c-d)/2:(c+d)/2}else this.differences[a]=0;for(this.leftSides[0]=this.differences[0],this.rightSides[0]=this.differences[0],a=1;b-1>a;a++)this.leftSides[a]=this.differences[a-1],this.rightSides[a]=this.differences[a];this.leftSides[b-1]=this.differences[b-2],this.rightSides[b-1]=this.differences[b-2]}},GHistogram.prototype.draw=function(a){if(this.visible){var b=0;a.isValid()&&(b=this.type===GPlot.VERTICAL?a.getY():a.getX());var c,d,e,f,g,h,i=this.plotPoints.length;this.parent.push(),this.parent.rectMode(this.parent.CORNERS),this.parent.strokeCap(this.parent.SQUARE);for(var j=0;i>j;j++)c=this.plotPoints[j],c.isValid()&&(this.type===GPlot.VERTICAL?(d=c.getX()-this.leftSides[j],e=c.getX()+this.rightSides[j],f=c.getY(),g=b):(d=b,e=c.getX(),f=c.getY()-this.leftSides[j],g=c.getY()+this.rightSides[j]),0>d?d=0:d>this.dim[0]&&(d=this.dim[0]),0>-f?f=0:-f>this.dim[1]&&(f=-this.dim[1]),0>e?e=0:e>this.dim[0]&&(e=this.dim[0]),0>-g?g=0:-g>this.dim[1]&&(g=-this.dim[1]),h=this.lineWidths[j%this.lineWidths.length],this.parent.fill(this.bgColors[j%this.bgColors.length]),this.parent.stroke(this.lineColors[j%this.lineColors.length]),this.parent.strokeWeight(h),Math.abs(e-d)>2*h&&Math.abs(g-f)>2*h?this.parent.rect(d,f,e,g):(this.type===GPlot.VERTICAL&&e!==d&&(f!==g||0!==f&&f!==-this.dim[1])||this.type===GPlot.HORIZONTAL&&g!==f&&(d!==e||0!==d&&d!==this.dim[0]))&&(this.parent.rect(d,f,e,g),this.parent.line(d,f,d,g),this.parent.line(e,f,e,g),this.parent.line(d,f,e,f),this.parent.line(d,g,e,g)));this.parent.pop(),this.drawLabels&&this.drawHistLabels()}},GHistogram.prototype.drawHistLabels=function(){var a,b,c=this.plotPoints.length,d=.5*Math.PI;if(this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.type===GPlot.VERTICAL)if(this.rotateLabels)for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&(this.parent.push(),this.parent.translate(a.getX(),this.labelsOffset),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.CENTER,this.parent.TOP),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&this.parent.text(a.getLabel(),a.getX(),this.labelsOffset);else if(this.rotateLabels)for(this.parent.textAlign(this.parent.CENTER,this.parent.BOTTOM),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&(this.parent.push(),this.parent.translate(-this.labelsOffset,a.getY()),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&this.parent.text(a.getLabel(),-this.labelsOffset,a.getY());this.parent.pop()},GHistogram.prototype.setType=function(a){a===this.type||a!==GPlot.VERTICAL&&a!==GPlot.HORIZONTAL||(this.type=a,this.updateArrays())},GHistogram.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GHistogram.setDim(): signature not supported"); + +a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updateArrays())},GHistogram.prototype.setPlotPoints=function(a){var b,c=a.length;if(this.plotPoints.length===c)for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);else if(this.plotPoints.length>c){for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);this.plotPoints.splice(c,Number.MAX_VALUE)}else{for(b=0;bb;b++)this.plotPoints[b]=new GPoint(a[b])}this.updateArrays()},GHistogram.prototype.setPlotPoint=function(a,b){if(a0&&(this.fontSize=a)},GHistogram.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.isValidNumber=function(a){return!isNaN(a)&&isFinite(a)},GLayer.prototype.isId=function(a){return this.id===a},GLayer.prototype.valueToXPlot=function(a){return this.xLog?this.dim[0]*Math.log(a/this.xLim[0])/Math.log(this.xLim[1]/this.xLim[0]):this.dim[0]*(a-this.xLim[0])/(this.xLim[1]-this.xLim[0])},GLayer.prototype.valueToYPlot=function(a){return this.yLog?-this.dim[1]*Math.log(a/this.yLim[0])/Math.log(this.yLim[1]/this.yLim[0]):-this.dim[1]*(a-this.yLim[0])/(this.yLim[1]-this.yLim[0])},GLayer.prototype.valueToPlot=function(){if(2===arguments.length)return[this.valueToXPlot(arguments[0]),this.valueToYPlot(arguments[1])];if(1===arguments.length&&arguments[0]instanceof GPoint)return new GPoint(this.valueToXPlot(arguments[0].getX()),this.valueToYPlot(arguments[0].getY()),arguments[0].getLabel());if(1===arguments.length&&arguments[0]instanceof Array&&arguments[0][0]instanceof GPoint){var a,b,c,d,e,f,g=arguments[0].length,h=[];if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());return h}throw new Error("GLayer.valueToPlot(): signature not supported")},GLayer.prototype.updatePlotPoints=function(){var a,b,c,d,e,f,g=this.points.length;if(this.plotPoints.lengthf;f++)this.plotPoints[f]=new GPoint;else this.plotPoints.length>g&&this.plotPoints.splice(g,Number.MAX_VALUE);if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel())},GLayer.prototype.xPlotToValue=function(a){return this.xLog?Math.exp(Math.log(this.xLim[0])+Math.log(this.xLim[1]/this.xLim[0])*a/this.dim[0]):this.xLim[0]+(this.xLim[1]-this.xLim[0])*a/this.dim[0]},GLayer.prototype.yPlotToValue=function(a){return this.yLog?Math.exp(Math.log(this.yLim[0])-Math.log(this.yLim[1]/this.yLim[0])*a/this.dim[1]):this.yLim[0]-(this.yLim[1]-this.yLim[0])*a/this.dim[1]},GLayer.prototype.plotToValue=function(a,b){return[this.xPlotToValue(a),this.yPlotToValue(b)]},GLayer.prototype.isInside=function(){var a,b,c;if(2===arguments.length)a=arguments[0],b=arguments[1],c=this.isValidNumber(a)&&this.isValidNumber(b);else{if(!(1===arguments.length&&arguments[0]instanceof GPoint))throw new Error("GLayer.isInside(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].isValid()}return c?a>=0&&a<=this.dim[0]&&-b>=0&&-b<=this.dim[1]:!1},GLayer.prototype.updateInsideList=function(){for(var a,b=this.plotPoints.length,c=0;b>c;c++)a=this.plotPoints[c],this.inside[c]=a.isValid()?a.getX()>=0&&a.getX()<=this.dim[0]&&-a.getY()>=0&&-a.getY()<=this.dim[1]:!1;this.inside.length>b&&this.inside.splice(b,Number.MAX_VALUE)},GLayer.prototype.getPointIndexAtPlotPos=function(a,b){var c;if(this.isInside(a,b))for(var d,e,f=25,g=this.plotPoints.length,h=0;g>h;h++)this.inside[h]&&(d=this.plotPoints[h],e=Math.pow(d.getX()-a,2)+Math.pow(d.getY()-b,2),f>e&&(f=e,c=h));return c},GLayer.prototype.getPointAtPlotPos=function(a,b){return this.points[this.getPointIndexAtPlotPos(a,b)]},GLayer.prototype.obtainBoxIntersections=function(a,b){var c=0;if(a.isValid()&&b.isValid()){var d=a.getX(),e=a.getY(),f=b.getX(),g=b.getY(),h=this.isInside(d,e),i=this.isInside(f,g),j=h&&i||0>d&&0>f||d>this.dim[0]&&f>this.dim[0]||0>-e&&0>-g||-e>this.dim[1]&&-g>this.dim[1];if(!j){var k=f-d,l=g-e;if(0===k)c=2,this.cuts[0][0]=d,this.cuts[0][1]=0,this.cuts[1][0]=d,this.cuts[1][1]=-this.dim[1];else if(0===l)c=2,this.cuts[0][0]=0,this.cuts[0][1]=e,this.cuts[1][0]=this.dim[0],this.cuts[1][1]=e;else{var m=l/k,n=e-m*d;c=4,this.cuts[0][0]=-n/m,this.cuts[0][1]=0,this.cuts[1][0]=(-this.dim[1]-n)/m,this.cuts[1][1]=-this.dim[1],this.cuts[2][0]=0,this.cuts[2][1]=n,this.cuts[3][0]=this.dim[0],this.cuts[3][1]=n+m*this.dim[0]}if(c=this.getValidCuts(this.cuts,c,a,b),h||i){if(1!==c){var o=h?a:b;c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,0),c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,.001),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,.001))))),0===c&&(c=1,this.cuts[0][0]=o.getX(),this.cuts[1][0]=o.getY())}}else c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,.001))),2===c&&(Math.pow(this.cuts[0][0]-d,2)+Math.pow(this.cuts[0][1]-e),2>Math.pow(this.cuts[1][0]-d,2)+Math.pow(this.cuts[1][1]-e,2)&&(this.cuts[2][0]=this.cuts[0][0],this.cuts[2][1]=this.cuts[0][1],this.cuts[0][0]=this.cuts[1][0],this.cuts[0][1]=this.cuts[1][1],this.cuts[1][0]=this.cuts[2][0],this.cuts[1][1]=this.cuts[2][1])),1===c&&(c=2,this.cuts[1][0]=this.cuts[0][0],this.cuts[1][1]=this.cuts[0][1]);(h||i)&&1!==c?console.log("There should be one cut!!!"):h||i||0===c||2===c||console.log("There should be either 0 or 2 cuts!!! "+c+" were found")}}return c},GLayer.prototype.getValidCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=d.getX(),h=d.getY(),i=Math.abs(g-e),j=Math.abs(h-f),k=0,l=0;b>l;l++)this.isInside(a[l][0],a[l][1])&&Math.abs(a[l][0]-e)<=i&&Math.abs(a[l][1]-f)<=j&&Math.abs(a[l][0]-g)<=i&&Math.abs(a[l][1]-h)<=j&&(a[k][0]=a[l][0],a[k][1]=a[l][1],k++);return k},GLayer.prototype.removeDuplicatedCuts=function(a,b,c){for(var d,e=0,f=0;b>f;f++){d=!1;for(var g=0;e>g;g++)if(Math.abs(a[g][0]-a[f][0])<=c&&Math.abs(a[g][1]-a[f][1])<=c){d=!0;break}d||(a[e][0]=a[f][0],a[e][1]=a[f][1],e++)}return e},GLayer.prototype.removePointFromCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=0,h=0;b>h;h++)(Math.abs(a[h][0]-e)>d||Math.abs(a[h][1]-f)>d)&&(a[g][0]=a[h][0],a[g][1]=a[h][1],g++);return g},GLayer.prototype.startHistogram=function(a){this.hist=new GHistogram(this.parent,a,this.dim,this.plotPoints)},GLayer.prototype.drawPoints=function(){var a,b;if(0===arguments.length){a=this.plotPoints.length;var c=this.pointColors.length,d=this.pointSizes.length;if(this.parent.push(),this.parent.ellipseMode(this.parent.CENTER),this.parent.stroke(50),1===c&&1===d)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]);else if(1===c)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]);else if(1===d)for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]));else for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]));this.parent.pop()}else{if(!(1===arguments.length&&arguments[0]instanceof p5.Image))throw new Error("GLayer.drawPoints(): signature not supported");for(a=this.plotPoints.length,this.parent.push(),this.parent.imageMode(this.parent.CENTER),b=0;a>b;b++)this.inside[b]&&this.parent.image(arguments[0],this.plotPoints[b].getX(),this.plotPoints[b].getY());this.parent.pop()}},GLayer.prototype.drawPoint=function(){var a,b,c,d;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[1]instanceof p5.Image)a=arguments[0],d=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.drawPoint(): signature not supported");a=arguments[0],b=this.pointColors[0],c=this.pointSizes[0]}var e=this.valueToXPlot(a.getX()),f=this.valueToYPlot(a.getY());this.isInside(e,f)&&(this.parent.push(),"undefined"!=typeof d?(this.parent.imageMode(this.parent.CENTER),this.parent.image(d,e,f)):(this.parent.ellipseMode(this.parent.CENTER),this.parent.fill(b),this.parent.noStroke(),this.parent.ellipse(e,f,c,c)),this.parent.pop())},GLayer.prototype.drawLines=function(){var a=this.plotPoints.length;this.parent.push(),this.parent.noFill(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE);for(var b=0;a-1>b;b++)if(this.inside[b]&&this.inside[b+1])this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY());else if(this.plotPoints[b].isValid()&&this.plotPoints[b+1].isValid()){var c=this.obtainBoxIntersections(this.plotPoints[b],this.plotPoints[b+1]);this.inside[b]?this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.cuts[0][0],this.cuts[0][1]):this.inside[b+1]?this.parent.line(this.cuts[0][0],this.cuts[0][1],this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY()):c>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()},GLayer.prototype.drawLine=function(){var a,b,c,d,e,f;if(4===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(4===arguments.length)e=arguments[0],f=arguments[1],c=arguments[2],d=arguments[3];else if(2===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=this.lineColor,d=this.lineWidth;else{if(2!==arguments.length)throw new Error("GLayer.drawLine(): signature not supported");e=arguments[0],f=arguments[1],c=this.lineColor,d=this.lineWidth}"undefined"!=typeof e&&(this.xLog&&this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*Math.log(this.xLim[0])/Math.LN10+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*Math.log(this.xLim[1])/Math.LN10+yCut))):this.xLog?(a=new GPoint(this.xLim[0],e*Math.log(this.xLim[0])/Math.LN10+yCut),b=new GPoint(this.xLim[1],e*Math.log(this.xLim[1])/Math.LN10+yCut)):this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*this.xLim[0]+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*this.xLim[1]+yCut))):(a=new GPoint(this.xLim[0],e*this.xLim[0]+yCut),b=new GPoint(this.xLim[1],e*this.xLim[1]+yCut)));var g=this.valueToPlot(a),h=this.valueToPlot(b);if(g.isValid()&&h.isValid()){var i=this.isInside(g),j=this.isInside(h);if(this.parent.push(),this.parent.noFill(),this.parent.stroke(c),this.parent.strokeWeight(d),this.parent.strokeCap(this.parent.SQUARE),i&&j)this.parent.line(g.getX(),g.getY(),h.getX(),h.getY());else{var k=this.obtainBoxIntersections(g,h);i?this.parent.line(g.getX(),g.getY(),this.cuts[0][0],this.cuts[0][1]):j?this.parent.line(this.cuts[0][0],this.cuts[0][1],h.getX(),h.getY()):k>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()}},GLayer.prototype.drawHorizontalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawHorizontalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToYPlot(a);this.isValidNumber(d)&&-d>=0&&-d<=this.dim[1]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,d,this.dim[0],d),this.parent.pop())},GLayer.prototype.drawVerticalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawVerticalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToXPlot(a);this.isValidNumber(d)&&d>=0&&d<=this.dim[0]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(d,0,d,-this.dim[1]),this.parent.pop())},GLayer.prototype.drawFilledContour=function(a,b){var c;if(a===GPlot.HORIZONTAL?c=this.getHorizontalShape(b):a===GPlot.VERTICAL&&(c=this.getVerticalShape(b)),"undefined"!=typeof c&&c.length>0){this.parent.push(),this.parent.fill(this.lineColor),this.parent.noStroke(),this.parent.beginShape();for(var d=0;di;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):b.getX()>=0&&b.getX()<=this.dim[0]&&(-b.getY()<0?(f.push(new GPoint(b.getX(),0,"projection")),c=!0):(f.push(new GPoint(b.getX(),-this.dim[1],"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getX()&&l.getX()!==this.dim[0])if("cut"===l.getLabel())this.plotPoints[g].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(this.plotPoints[m].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getX()&&n.getX()!==this.dim[0]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(this.plotPoints[d].getX()<0?(n.setX(0),n.setLabel("extreme")):(n.setX(this.dim[0]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.yLog&&0>=a&&(a=Math.min(this.yLim[0],this.yLim[1]));var o=this.valueToPlot(1,a);-o[1]<0?(f.push(new GPoint(n.getX(),0)),f.push(new GPoint(l.getX(),0))):-o[1]>this.dim[1]?(f.push(new GPoint(n.getX(),-this.dim[1])),f.push(new GPoint(l.getX(),-this.dim[1]))):(f.push(new GPoint(n.getX(),o[1])),f.push(new GPoint(l.getX(),o[1]))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.getVerticalShape=function(a){for(var b,c,d,e=this.plotPoints.length,f=[],g=-1,h=-1,i=0;e>i;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):-b.getY()>=0&&-b.getY()<=this.dim[1]&&(b.getX()<0?(f.push(new GPoint(0,b.getY(),"projection")),c=!0):(f.push(new GPoint(this.dim[0],b.getY(),"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getY()&&l.getY()!==-this.dim[1])if("cut"===l.getLabel())-this.plotPoints[g].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(-this.plotPoints[m].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getY()&&n.getY()!==-this.dim[1]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(-this.plotPoints[d].getY()<0?(n.setY(0),n.setLabel("extreme")):(n.setY(-this.dim[1]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.xLog&&0>=a&&(a=Math.min(this.xLim[0],this.xLim[1]));var o=this.valueToPlot(a,1);o[0]<0?(f.push(new GPoint(0,n.getY())),f.push(new GPoint(0,l.getY()))):o[0]>this.dim[0]?(f.push(new GPoint(this.dim[0],n.getY())),f.push(new GPoint(this.dim[0],l.getY()))):(f.push(new GPoint(o[0],n.getY())),f.push(new GPoint(o[0],l.getY()))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.drawLabel=function(a){var b=this.valueToXPlot(a.getX()),c=this.valueToYPlot(a.getY());if(this.isValidNumber(b)&&this.isValidNumber(c)){var d=b+this.labelSeparation[0],e=c-this.labelSeparation[1],f=this.fontSize/4;this.parent.push(),this.parent.rectMode(this.parent.CORNER),this.parent.noStroke(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.textAlign(this.parent.LEFT,this.parent.BOTTOM),this.parent.fill(this.labelBgColor),this.parent.rect(d-f,e-this.fontSize-f,this.parent.textWidth(a.getLabel())+2*f,this.fontSize+2*f),this.parent.fill(this.fontColor),this.parent.text(a.getLabel(),d,e),this.parent.pop()}},GLayer.prototype.drawLabelAtPlotPos=function(a,b){var c=this.getPointAtPlotPos(a,b);"undefined"!=typeof c&&this.drawLabel(c)},GLayer.prototype.drawHistogram=function(){"undefined"!=typeof this.hist&&this.hist.draw(this.valueToPlot(this.histBasePoint))},GLayer.prototype.drawPolygon=function(a,b){var c;if(a.length>2){var d=this.valueToPlot(a),e=0;for(c=0;cc;c++){f=d[c],this.isInside(f)&&h.push(new GPoint(f.getX(),f.getY(),"normal point"));var i=g>c+1?c+1:0,j=this.obtainBoxIntersections(f,d[i]);1===j?h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"single cut")):j>1&&(h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"double cut")),h.push(new GPoint(this.cuts[1][0],this.cuts[1][1],"double cut")))}g=h.length;var k=[];for(c=0;g>c;c++){k.push(h[c]);var l=g>c+1?c+1:0,m=h[c].getLabel(),n=h[l].getLabel(),o="single cut"===m&&"single cut"===n||"single cut"===m&&"double cut"===n||"double cut"===m&&"single cut"===n;if(o){var p=h[c].getX(),q=h[c].getY(),r=h[l].getX(),s=h[l].getY(),t=Math.abs(r-p),u=Math.abs(s-q);if(t>0&&u>0&&t!==this.dim[0]&&u!==this.dim[1]){var v=0===p||p===this.dim[0]?p:r,w=0===q||q===-this.dim[1]?q:s;k.push(new GPoint(v,w,"special cut"))}}}if(k.length>2){for(this.parent.push(),this.parent.fill(b),this.parent.noStroke(),this.parent.beginShape(),c=0;c0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotPoints(),"undefined"!=typeof this.hist&&(this.hist.setDim(this.dim),this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setXLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXYLim=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else{if(2!==arguments.length)throw new Error("GLayer.setXYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b),this.yLog&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setLimAndLog=function(){var a,b,c,d,e,f;if(6===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3],e=arguments[4],f=arguments[5];else{if(4!==arguments.length)throw new Error("GLayer.setLimAndLog(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1],e=arguments[2],f=arguments[3]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(e&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.yLim[1]=b,this.xLog=e),f&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d,this.yLog=f),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setXLog=function(a){a!==this.xLog&&(a&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.xLim[0]=.1,this.xLim[1]=10),this.xLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setYLog=function(a){a!==this.yLog&&(a&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.yLim[0]=.1,this.yLim[1]=10),this.yLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setPoints=function(a){var b,c=a.length;if(this.points.length>c)this.points.splice(c,Number.MAX_VALUE);else for(b=this.points.length;c>b;b++)this.points[b]=new GPoint;for(b=0;c>b;b++)this.points[b].set(a[b]);this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.setPoint=function(){var a,b,c,d,e=this.points.length;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=aa)this.points[a].set(b,c,d),this.plotPoints[a].set(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a]);else{if(a!==e)throw new Error("GLayer.setPoint(): the index position is outside the array size");this.points[a]=new GPoint(b,c,d),this.plotPoints[a]=new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a])}"undefined"!=typeof this.hist&&this.hist.setPlotPoint(a,this.plotPoints[a])},GLayer.prototype.addPoint=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else{if(1!==arguments.length)throw new Error("GLayer.addPoint(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel()}this.points.push(new GPoint(a,b,c)),this.plotPoints.push(new GPoint(this.valueToXPlot(a),this.valueToYPlot(b),c)),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1])),"undefined"!=typeof this.hist&&this.hist.addPlotPoint(this.plotPoints[this.plotPoints.length-1])},GLayer.prototype.addPoints=function(a){for(var b,c=a.length,d=0;c>d;d++)b=a[d],this.points.push(new GPoint(b)),this.plotPoints.push(new GPoint(this.valueToXPlot(b.getX()),this.valueToYPlot(b.getY()),b.getLabel())),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1]));"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.addPointAtIndexPos=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d="";else{if(2!==arguments.length)throw new Error("GLayer.addPointAtIndexPos(): signature not supported");a=arguments[0],b=arguments[1].getX(),c=arguments[1].getY(),d=arguments[1].getLabel()}a<=this.points.length&&(this.points.splice(a,0,new GPoint(b,c,d)),this.plotPoints.splice(a,0,new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d)),this.inside.splice(a,0,this.isInside(this.plotPoints[0])),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.removePoint=function(a){a0&&(this.pointColors=a.slice())},GLayer.prototype.setPointColor=function(a){this.pointColors=[a]},GLayer.prototype.setPointSizes=function(a){a.length>0&&(this.pointSizes=a.slice())},GLayer.prototype.setPointSize=function(a){this.pointSizes=[a]},GLayer.prototype.setLineColor=function(a){this.lineColor=a},GLayer.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GLayer.prototype.setHistBasePoint=function(a){this.histBasePoint.set(a)},GLayer.prototype.setHistType=function(a){"undefined"!=typeof this.hist&&this.hist.setType(a)},GLayer.prototype.setHistVisible=function(a){"undefined"!=typeof this.hist&&this.hist.setVisible(a)},GLayer.prototype.setDrawHistLabels=function(a){"undefined"!=typeof this.hist&&this.hist.setDrawLabels(a)},GLayer.prototype.setLabelBgColor=function(a){this.labelBgColor=a},GLayer.prototype.setLabelSeparation=function(a){this.labelSeparation[0]=a[0],this.labelSeparation[1]=a[1]},GLayer.prototype.setFontName=function(a){this.fontName=a},GLayer.prototype.setFontColor=function(a){this.fontColor=a},GLayer.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GLayer.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),"undefined"!=typeof this.hist&&this.hist.setFontProperties(a,b,c)},GLayer.prototype.getId=function(){return this.id},GLayer.prototype.getDim=function(){return this.dim.slice()},GLayer.prototype.getXLim=function(){return this.xLim.slice()},GLayer.prototype.getYLim=function(){return this.yLim.slice()},GLayer.prototype.getXLog=function(){return this.xLog},GLayer.prototype.getYLog=function(){return this.yLog},GLayer.prototype.getPoints=function(){for(var a=[],b=0;b=this.pos[0]&&a<=this.pos[0]+this.outerDim[0]&&b>=this.pos[1]&&b<=this.pos[1]+this.outerDim[1]},GPlot.prototype.isOverBox=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(0!==arguments.length)throw new Error("GPlot.isOverBox(): signature not supported");a=this.parent.mouseX,b=this.parent.mouseY}return a>=this.pos[0]+this.mar[1]&&a<=this.pos[0]+this.outerDim[0]-this.mar[3]&&b>=this.pos[1]+this.mar[2]&&b<=this.pos[1]+this.outerDim[1]-this.mar[0]},GPlot.prototype.updateLimits=function(){this.fixedXLim||(this.xLim=this.calculatePlotXLim(),this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim)),this.fixedYLim||(this.yLim=this.calculatePlotYLim(),this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim)),this.mainLayer.setXYLim(this.xLim,this.yLim);for(var a=0;a=this.yLim[0]&&e>=this.yLim[0]&&e<=this.yLim[1]||this.yLim[1]=this.yLim[1]),!f||this.xLog&&0>=d||(db[1]&&(b[1]=d))}return b[1]=this.xLim[0]&&d>=this.xLim[0]&&d<=this.xLim[1]||this.xLim[1]=this.xLim[1]),!f||this.yLog&&0>=e||(eb[1]&&(b[1]=e))}return b[1]=0&&c[b]<=this.dim[0]&&this.parent.line(c[b],0,c[b],-this.dim[1])}if(a===GPlot.BOTH||a===GPlot.HORIZONTAL){var d=this.yAxis.getPlotTicksRef();for(b=0;b=0&&-d[b]<=this.dim[1]&&this.parent.line(0,d[b],this.dim[0],d[b])}this.parent.pop()},GPlot.prototype.drawHistograms=function(){this.mainLayer.drawHistogram();for(var a=0;a0&&b>0){var c=a-this.mar[1]-this.mar[3],d=b-this.mar[0]-this.mar[2];if(c>0&&d>0){this.outerDim[0]=a,this.outerDim[1]=b,this.dim[0]=c,this.dim[1]=d,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e0&&f>0&&(this.mar[0]=a,this.mar[1]=b,this.mar[2]=c,this.mar[3]=d,this.outerDim[0]=e,this.outerDim[1]=f)},GPlot.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}if(a>0&&b>0){var c=a+this.mar[1]+this.mar[3],d=b+this.mar[0]+this.mar[2];if(c>0&&d>0){this.outerDim[0]=c,this.outerDim[1]=d,this.dim[0]=a,this.dim[1]=b,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.invertedXScale=this.xLim[0]>this.xLim[1],this.fixedXLim=!0,this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim),this.updateLimits()))},GPlot.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.invertedYScale=this.yLim[0]>this.yLim[1],this.fixedYLim=!0,this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim),this.updateLimits()))},GPlot.prototype.setFixedXLim=function(a){this.fixedXLim=a,this.updateLimits()},GPlot.prototype.setFixedYLim=function(a){this.fixedYLim=a,this.updateLimits()},GPlot.prototype.setLogScale=function(a){var b=this.xLog,c=this.yLog;if("xy"===a||"yx"===a?(b=!0,c=!0):"x"===a?(b=!0,c=!1):"y"===a?(b=!1,c=!0):""===a&&(b=!1,c=!1),b!==this.xLog||c!==this.yLog){this.xLog=b,this.yLog=c,this.xLog&&this.fixedXLim&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(this.fixedXLim=!1),this.yLog&&this.fixedYLim&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(this.fixedYLim=!1),this.fixedXLim||(this.xLim=this.calculatePlotXLim()),this.fixedYLim||(this.yLim=this.calculatePlotYLim()),this.xAxis.setLimAndLog(this.xLim,this.xLog),this.topAxis.setLimAndLog(this.xLim,this.xLog),this.yAxis.setLimAndLog(this.yLim,this.yLog),this.rightAxis.setLimAndLog(this.yLim,this.yLog),this.mainLayer.setLimAndLog(this.xLim,this.yLim,this.xLog,this.yLog);for(var d=0;d=0&&a!==this.expandLimFactor&&(this.expandLimFactor=a,this.updateLimits())},GPlot.prototype.setBgColor=function(a){this.bgColor=a},GPlot.prototype.setBoxBgColor=function(a){this.boxBgColor=a},GPlot.prototype.setBoxLineColor=function(a){this.boxLineColor=a},GPlot.prototype.setBoxLineWidth=function(a){a>0&&(this.boxLineWidth=a)},GPlot.prototype.setGridLineColor=function(a){this.gridLineColor=a},GPlot.prototype.setGridLineWidth=function(a){a>0&&(this.gridLineWidth=a)},GPlot.prototype.setPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).setPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.setPoints(): signature not supported");this.mainLayer.setPoints(arguments[0])}this.updateLimits()},GPlot.prototype.setPoint=function(){if(5===arguments.length)this.getLayer(arguments[4]).setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).setPoint(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.setPoint(): signature not supported");this.mainLayer.setPoint(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.addPoint=function(){if(4===arguments.length)this.getLayer(arguments[3]).addPoint(arguments[0],arguments[1],arguments[2]);else if(3===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1],arguments[2]);else if(2===arguments.length&&arguments[0]instanceof GPoint)this.getLayer(arguments[1]).addPoint(arguments[0]);else if(2===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1]);else{if(1!==arguments.length)throw new Error("GPlot.addPoint(): signature not supported");this.mainLayer.addPoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).addPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.addPoints(): signature not supported");this.mainLayer.addPoints(arguments[0])}this.updateLimits()},GPlot.prototype.removePoint=function(){if(2===arguments.length)this.getLayer(arguments[1]).removePoint(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.removePoint(): signature not supported");this.mainLayer.removePoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPointAtIndexPos=function(){if(5===arguments.length)this.getLayer(arguments[4]).addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).addPointAtIndexPos(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.addPointAtIndexPos(): signature not supported");this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.setPointColors=function(a){this.mainLayer.setPointColors(a)},GPlot.prototype.setPointColor=function(a){this.mainLayer.setPointColor(a)},GPlot.prototype.setPointSizes=function(a){this.mainLayer.setPointSizes(a)},GPlot.prototype.setPointSize=function(a){this.mainLayer.setPointSize(a)},GPlot.prototype.setLineColor=function(a){this.mainLayer.setLineColor(a)},GPlot.prototype.setLineWidth=function(a){this.mainLayer.setLineWidth(a)},GPlot.prototype.setHistBasePoint=function(a){this.mainLayer.setHistBasePoint(a)},GPlot.prototype.setHistType=function(a){this.mainLayer.setHistType(a)},GPlot.prototype.setHistVisible=function(a){this.mainLayer.setHistVisible(a)},GPlot.prototype.setDrawHistLabels=function(a){this.mainLayer.setDrawHistLabels(a)},GPlot.prototype.setLabelBgColor=function(a){this.mainLayer.setLabelBgColor(a)},GPlot.prototype.setLabelSeparation=function(a){this.mainLayer.setLabelSeparation(a)},GPlot.prototype.setTitleText=function(a){this.title.setText(a)},GPlot.prototype.setAxesOffset=function(a){this.xAxis.setOffset(a),this.topAxis.setOffset(a),this.yAxis.setOffset(a),this.rightAxis.setOffset(a)},GPlot.prototype.setTicksLength=function(a){this.xAxis.setTickLength(a),this.topAxis.setTickLength(a),this.yAxis.setTickLength(a),this.rightAxis.setTickLength(a)},GPlot.prototype.setHorizontalAxesNTicks=function(a){this.xAxis.setNTicks(a),this.topAxis.setNTicks(a)},GPlot.prototype.setHorizontalAxesTicksSeparation=function(a){this.xAxis.setTicksSeparation(a),this.topAxis.setTicksSeparation(a)},GPlot.prototype.setHorizontalAxesTicks=function(a){this.xAxis.setTicks(a),this.topAxis.setTicks(a)},GPlot.prototype.setVerticalAxesNTicks=function(a){this.yAxis.setNTicks(a),this.rightAxis.setNTicks(a)},GPlot.prototype.setVerticalAxesTicksSeparation=function(a){this.yAxis.setTicksSeparation(a),this.rightAxis.setTicksSeparation(a)},GPlot.prototype.setVerticalAxesTicks=function(a){this.yAxis.setTicks(a),this.rightAxis.setTicks(a)},GPlot.prototype.setFontName=function(a){this.maniLayer.setFontName(a)},GPlot.prototype.setFontColor=function(a){this.maniLayer.setFontColor(a)},GPlot.prototype.setFontSize=function(a){this.maniLayer.setFontSize(a)},GPlot.prototype.setFontProperties=function(a,b,c){this.maniLayer.setFontProperties(a,b,c)},GPlot.prototype.setAllFontProperties=function(a,b,c){this.xAxis.setAllFontProperties(a,b,c),this.topAxis.setAllFontProperties(a,b,c),this.yAxis.setAllFontProperties(a,b,c),this.rightAxis.setAllFontProperties(a,b,c),this.title.setFontProperties(a,b,c),this.mainLayer.setAllFontProperties(a,b,c);for(var d=0;d0&&(this.zoomFactor=a),(b===this.parent.LEFT||b===this.parent.RIGHT||b===this.parent.CENTER)&&(this.increaseZoomButton=b),(c===this.parent.LEFT||c===this.parent.RIGHT||c===this.parent.CENTER)&&(this.decreaseZoomButton=c),(d===this.parent.SHIFT||d===this.parent.CONTROL||d===this.parent.ALT||d===GPlot.NONE)&&(this.increaseZoomKeyModifier=d),(e===this.parent.SHIFT||e===this.parent.CONTROL||e===this.parent.ALT||e===GPlot.NONE)&&(this.decreaseZoomKeyModifier=e)},GPlot.prototype.deactivateZooming=function(){this.zoomingIsActive=!1},GPlot.prototype.activateCentering=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateCentering(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.centeringIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.centeringButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.centeringKeyModifier=b)},GPlot.prototype.deactivateCentering=function(){this.centeringIsActive=!1},GPlot.prototype.activatePanning=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePanning(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.panningIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.panningButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.panningKeyModifier=b)},GPlot.prototype.deactivatePanning=function(){this.panningIsActive=!1,this.panningReferencePoint=void 0},GPlot.prototype.activatePointLabels=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePointLabels(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.labelingIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.labelingButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.labelingKeyModifier=b)},GPlot.prototype.deactivatePointLabels=function(){this.labelingIsActive=!1,this.mousePos=void 0},GPlot.prototype.activateReset=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateReset(): signature not supported");a=this.parent.RIGHT,b=GPlot.NONE}this.resetIsActive=!0,this.xLimReset=void 0,this.yLimReset=void 0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.resetButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.resetKeyModifier=b)},GPlot.prototype.deactivateReset=function(){this.resetIsActive=!1,this.xLimReset=void 0,this.yLimReset=void 0},GPlot.prototype.getButton=function(a){var b;return 0===a.button?b=this.parent.LEFT:1===a.button?b=this.parent.CENTER:2===a.button?b=this.parent.RIGHT:"undefined"==typeof a.button&&(b=this.parent.LEFT),b},GPlot.prototype.getModifier=function(a){var b;return b=a.altKey?this.parent.ALT:a.ctrlKey?this.parent.CONTROL:a.shiftKey?this.parent.SHIFT:GPlot.NONE},GPlot.prototype.saveResetLimits=function(){("undefined"==typeof this.xLimReset||"undefined"==typeof this.yLimReset)&&(this.xLimReset=this.xLim.slice(),this.yLimReset=this.yLim.slice())},GPlot.prototype.panningFunction=function(){"undefined"!=typeof this.panningReferencePoint&&this.align(this.panningReferencePoint,this.parent.mouseX,this.parent.mouseY)},GPlot.prototype.clickEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.zoomingIsActive&&(b===this.increaseZoomButton&&c===this.increaseZoomKeyModifier?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):b===this.decreaseZoomButton&&c===this.decreaseZoomKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY))),this.centeringIsActive&&b===this.centeringButton&&c===this.centeringKeyModifier&&(this.resetIsActive&&this.saveResetLimits(), +this.center(this.parent.mouseX,this.parent.mouseY)),this.resetIsActive&&b===this.resetButton&&c===this.resetKeyModifier&&"undefined"!=typeof this.xLimReset&&"undefined"!=typeof this.yLimReset&&(this.setXLim(this.xLimReset),this.setYLim(this.yLimReset),this.xLimReset=void 0,this.yLimReset=void 0)}},GPlot.prototype.mouseDownEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.panningIsActive&&b===this.panningButton&&c===this.panningKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.panningReferencePoint=this.getValueAt(this.parent.mouseX,this.parent.mouseY),this.panningIntervalId=setInterval(this.panningFunction.bind(this),100)),this.labelingIsActive&&b===this.labelingButton&&c===this.labelingKeyModifier&&(this.mousePos=[this.parent.mouseX,this.parent.mouseY])}},GPlot.prototype.mouseUpEvent=function(a){e=a||window.event;{var b=this.getButton(e);this.getModifier(e)}this.panningIsActive&&b===this.panningButton&&"undefined"!=typeof this.panningIntervalId&&(clearInterval(this.panningIntervalId),this.panningIntervalId=void 0,this.panningReferencePoint=void 0),this.labelingIsActive&&b===this.labelingButton&&(this.mousePos=void 0),b===this.parent.RIGHT&&this.clickEvent(e)},GPlot.prototype.wheelEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=e.deltaY,c=this.parent.CENTER,d=this.getModifier(e);this.zoomingIsActive&&(c===this.increaseZoomButton&&d===this.increaseZoomKeyModifier&&b>0?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):c===this.decreaseZoomButton&&d===this.decreaseZoomKeyModifier&&0>b&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY)))}},GPlot.prototype.preventDefaultEvent=function(a){e=a||window.event,this.isOverBox()&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},GPlot.prototype.preventWheelDefault=function(){window.addEventListener("wheel",this.preventDefaultEvent.bind(this),!1)},GPlot.prototype.preventRightClickDefault=function(){window.addEventListener("contextmenu",this.preventDefaultEvent.bind(this),!1)}; diff --git a/graficos/grafica-0.1.0.min.js b/graficos/grafica-0.1.0.min.js new file mode 100644 index 0000000..6e86b8a --- /dev/null +++ b/graficos/grafica-0.1.0.min.js @@ -0,0 +1,5 @@ +/*! grafica.js (0.1.0): a library for p5.js. Author: Javier Graciá Carpio, license: LGPL-3.0, 2015-04-12 */ function GPoint(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c=arguments[1];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else if(1===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel();else if(1===arguments.length&&arguments[0]instanceof p5.Vector)a=arguments[0].x,b=arguments[0].y,c="";else{if(0!==arguments.length)throw new Error("GPoint constructor: signature not supported");a=0,b=0,c=""}this.x=a,this.y=b,this.label=c,this.valid=this.isValidNumber(this.x)&&this.isValidNumber(this.y)}function GTitle(a,b){this.parent=a,this.dim=b.slice(),this.relativePos=.5,this.plotPos=this.relativePos*this.dim[0],this.offset=10,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(100),this.fontStyle=this.parent.BOLD,this.fontSize=13}function GAxisLabel(a,b,c){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.relativePos=.5,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1],this.offset=35,this.rotate=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.text="",this.textAlignment=this.parent.CENTER,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=13}function GAxis(a,b,c,d,e){this.parent=a,this.type=b===this.parent.BOTTOM||b===this.parent.TOP||b===this.parent.LEFT||b===this.parent.RIGHT?b:this.parent.BOTTOM,this.dim=c.slice(),this.lim=d.slice(),this.log=e,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.offset=5,this.lineColor=this.parent.color(0),this.lineWidth=1,this.nTicks=5,this.ticksSeparation=-1,this.ticks=[],this.plotTicks=[],this.ticksInside=[],this.tickLabels=[],this.fixedTicks=!1,this.tickLength=3,this.smallTickLength=2,this.expTickLabels=!1,this.rotateTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?!1:!0,this.drawTickLabels=this.type===this.parent.BOTTOM||this.type===this.parent.LEFT?!0:!1,this.tickLabelOffset=7,this.ticksPrecision=void 0,this.lab=new GAxisLabel(this.parent,this.type,this.dim),this.drawAxisLabel=!0,this.fontName="Helvetica",this.fontColor=this.parent.color(0),this.fontSize=11,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()}function GHistogram(a,b,c,d){this.parent=a,this.type=b===GPlot.VERTICAL||b===GPlot.HORIZONTAL?b:GPlot.VERTICAL,this.dim=c.slice(),this.plotPoints=[];for(var e=0;e0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.relativePos*this.dim[0])},GTitle.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.relativePos*this.dim[0]},GTitle.prototype.setOffset=function(a){this.offset=a},GTitle.prototype.setText=function(a){this.text=a},GTitle.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GTitle.prototype.setFontName=function(a){this.fontName=a},GTitle.prototype.setFontColor=function(a){this.fontColor=a},GTitle.prototype.setFontStyle=function(a){this.fontStyle=a},GTitle.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GTitle.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxisLabel.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXLabel();break;case this.parent.LEFT:this.drawAsYLabel();break;case this.parent.TOP:this.drawAsTopLabel();break;case this.parent.RIGHT:this.drawAsRightLabel()}},GAxisLabel.prototype.drawAsXLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.translate(this.plotPos,this.offset),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.text(this.text,this.plotPos,this.offset)),this.parent.pop()},GAxisLabel.prototype.drawAsYLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.translate(-this.offset,this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),this.parent.text(this.text,-this.offset,this.plotPos)),this.parent.pop()},GAxisLabel.prototype.drawAsTopLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.translate(this.plotPos,-this.offset-this.dim[1]),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.textAlignment,this.parent.BOTTOM),this.parent.text(this.text,this.plotPos,-this.offset-this.dim[1])),this.parent.pop()},GAxisLabel.prototype.drawAsRightLabel=function(){this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.rotate?(this.parent.textAlign(this.textAlignment,this.parent.TOP),this.parent.translate(this.offset+this.dim[0],this.plotPos),this.parent.rotate(-.5*Math.PI),this.parent.text(this.text,0,0)):(this.parent.textAlign(this.parent.LEFT,this.parent.CENTER),this.parent.text(this.text,this.offset+this.dim[0],this.plotPos)),this.parent.pop()},GAxisLabel.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GAxisLabel.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1])},GAxisLabel.prototype.setRelativePos=function(a){this.relativePos=a,this.plotPos=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.relativePos*this.dim[0]:-this.relativePos*this.dim[1]},GAxisLabel.prototype.setOffset=function(a){this.offset=a},GAxisLabel.prototype.setRotate=function(a){this.rotate=a},GAxisLabel.prototype.setText=function(a){this.text=a},GAxisLabel.prototype.setTextAlignment=function(a){(a===this.parent.CENTER||a===this.parent.LEFT||a===this.parent.RIGHT)&&(this.textAlignment=a)},GAxisLabel.prototype.setFontName=function(a){this.fontName=a},GAxisLabel.prototype.setFontColor=function(a){this.fontColor=a},GAxisLabel.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GAxisLabel.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.obtainSigDigits=function(a){return Math.round(-Math.log(.5*Math.abs(a))/Math.LN10)},GAxis.prototype.roundPlus=function(a,b){return a=Math.round(a*Math.pow(10,b))/Math.pow(10,b),0>=b&&(a=Math.round(a)),a},GAxis.prototype.adaptSize=function(a,b){bthis.lim[0]?(a=Math.floor(Math.log(this.lim[0])/Math.LN10),b=Math.ceil(Math.log(this.lim[1])/Math.LN10)):(a=Math.floor(Math.log(this.lim[1])/Math.LN10),b=Math.ceil(Math.log(this.lim[0])/Math.LN10));var c=9*(b-a)+1;this.adaptSize(this.ticks,c);for(var d=a;b>d;d++)for(var e=this.roundPlus(Math.exp(d*Math.LN10),-d),f=0;9>f;f++)this.ticks[9*(d-a)+f]=(f+1)*e;this.ticks[this.ticks.length-1]=this.roundPlus(Math.exp(b*Math.LN10),-d),this.lim[1]0){for(a=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,c=this.obtainSigDigits(a);this.roundPlus(a,c)-a!==0;)c++;b=Math.floor((this.lim[1]-this.lim[0])/a)}else this.nTicks>0&&(a=(this.lim[1]-this.lim[0])/this.nTicks,c=this.obtainSigDigits(a),a=this.roundPlus(a,c),(0===a||Math.abs(a)>Math.abs(this.lim[1]-this.lim[0]))&&(c++,a=this.roundPlus((this.lim[1]-this.lim[0])/this.nTicks,c)),b=Math.floor((this.lim[1]-this.lim[0])/a));if(b>0){var d=this.lim[0]+(this.lim[1]-this.lim[0]-b*a)/2;for(d=this.roundPlus(d-2*a,c);(this.lim[1]-d)*(this.lim[0]-d)>0;)d=this.roundPlus(d+a,c);var e=Math.floor(Math.abs((this.lim[1]-d)/a))+1;this.adaptSize(this.ticks,e),this.ticks[0]=d;for(var f=1;e>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+a,c);this.ticksPrecision=c}else this.ticks=[]},GAxis.prototype.updatePlotTicks=function(){var a,b,c=this.ticks.length;if(this.adaptSize(this.plotTicks,c),this.log)for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/Math.log(this.lim[1]/this.lim[0]):-this.dim[1]/Math.log(this.lim[1]/this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=Math.log(this.ticks[b]/this.lim[0])*a;else for(a=this.type===this.parent.BOTTOM||this.type===this.parent.TOP?this.dim[0]/(this.lim[1]-this.lim[0]):-this.dim[1]/(this.lim[1]-this.lim[0]),b=0;c>b;b++)this.plotTicks[b]=(this.ticks[b]-this.lim[0])*a},GAxis.prototype.updateTicksInside=function(){var a,b=this.ticks.length;if(this.adaptSize(this.ticksInside,b),this.type===this.parent.BOTTOM||this.type===this.parent.TOP)for(a=0;b>a;a++)this.ticksInside[a]=this.plotTicks[a]>=0&&this.plotTicks[a]<=this.dim[0];else for(a=0;b>a;a++)this.ticksInside[a]=-this.plotTicks[a]>=0&&-this.plotTicks[a]<=this.dim[1]},GAxis.prototype.updateTickLabels=function(){var a,b,c,d,e=this.ticks.length;if(this.adaptSize(this.tickLabels,e),this.log)for(d=0;e>d;d++)a=this.ticks[d],a>0?(b=Math.log(a)/Math.LN10,c=Math.abs(b-Math.round(b))<1e-4,c?(b=Math.round(b),this.tickLabels[d]=this.expTickLabels?"1e"+b:b>-3.1&&3.1>b?b>=0?""+Math.round(a):""+a:"1e"+b):this.tickLabels[d]=""):this.tickLabels[d]="";else for(d=0;e>d;d++)a=this.ticks[d],this.tickLabels[d]=a%1===0?""+Math.round(a):"undefined"!=typeof this.ticksPrecision&&this.ticksPrecision>=0?""+parseFloat(a).toFixed(this.ticksPrecision):""+a},GAxis.prototype.moveLim=function(a){if(a[1]!==a[0])if(this.log&&(a[0]<=0||a[1]<=0))console.log("The limits are negative. This is not allowed in logarithmic scale.");else{if(this.lim[0]=a[0],this.lim[1]=a[1],!this.fixedTicks){var b=this.ticks.length;if(this.log)this.obtainLogarithmicTicks();else if(b>0){var c=0,d=0;if(this.ticksSeparation>0)for(c=this.lim[1]>this.lim[0]?this.ticksSeparation:-this.ticksSeparation,d=this.obtainSigDigits(c);this.roundPlus(c,d)-c!==0;)d++;else c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],d=this.obtainSigDigits(c),c=this.roundPlus(c,d),(0===c||Math.abs(c)>Math.abs(this.lim[1]-this.lim[0]))&&(d++,c=1===b?this.lim[1]-this.lim[0]:this.ticks[1]-this.ticks[0],c=this.roundPlus(c,d)),c=this.lim[1]>this.lim[0]?Math.abs(c):-Math.abs(c);var e=this.ticks[0]+c*Math.ceil((this.lim[0]-this.ticks[0])/c);e=this.roundPlus(e,d),(this.lim[1]-e)*(this.lim[0]-e)>0&&(e=this.ticks[0]+c*Math.floor((this.lim[0]-this.ticks[0])/c),e=this.roundPlus(e,d)),b=Math.floor(Math.abs((this.lim[1]-e)/c))+1,this.adaptSize(this.ticks,b),this.ticks[0]=e;for(var f=1;b>f;f++)this.ticks[f]=this.roundPlus(this.ticks[f-1]+c,d);this.ticksPrecision!==d&&console.log("There is a problem in the axis ticks precision calculation")}this.updateTickLabels()}this.updatePlotTicks(),this.updateTicksInside()}},GAxis.prototype.draw=function(){switch(this.type){case this.parent.BOTTOM:this.drawAsXAxis();break;case this.parent.LEFT:this.drawAsYAxis();break;case this.parent.TOP:this.drawAsTopAxis();break;case this.parent.RIGHT:this.drawAsRightAxis()}this.drawAxisLabel&&this.lab.draw()},GAxis.prototype.drawAsXAxis=function(){var a;for(this.parent.push(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,this.offset,this.dim[0],this.offset),a=0;a0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotTicks(),this.lab.setDim(this.dim))},GAxis.prototype.setLim=function(a){a[1]!==a[0]&&(this.log&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLimAndLog=function(a,b){a[1]!==a[0]&&(b&&(a[0]<=0||a[1]<=0)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.lim[0]=a[0],this.lim[1]=a[1],this.log=b,this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside()))},GAxis.prototype.setLog=function(a){a!==this.log&&(this.log=a,this.log&&(this.lim[0]<=0||this.lim[1]<=0)&&(console.log("The limits are negative. This is not allowed in logarithmic scale."),console.log("Will set them to (0.1, 10)"),this.lim[1]>this.lim[0]?(this.lim[0]=.1,this.lim[1]=10):(this.lim[0]=10,this.lim[1]=.1)),this.fixedTicks||(this.updateTicks(),this.updateTickLabels()),this.updatePlotTicks(),this.updateTicksInside())},GAxis.prototype.setOffset=function(a){this.offset=a},GAxis.prototype.setLineColor=function(a){this.lineColor=a},GAxis.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GAxis.prototype.setNTicks=function(a){a>=0&&(this.nTicks=a,this.ticksSeparation=-1,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()))},GAxis.prototype.setTicksSeparation=function(a){this.ticksSeparation=a,this.log||(this.fixedTicks=!1,this.updateTicks(),this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels())},GAxis.prototype.setTicks=function(a){var b=a.length;this.adaptSize(this.ticks,b);for(var c=0;b>c;c++)this.ticks[c]=a[c];this.fixedTicks=!0,this.ticksPrecision=void 0,this.updatePlotTicks(),this.updateTicksInside(),this.updateTickLabels()},GAxis.prototype.setTickLabels=function(a){if(a.length===this.tickLabels.length){for(var b=0;b0&&(this.fontSize=a)},GAxis.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GAxis.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),this.lab.setFontProperties(a,b,c)},GAxis.prototype.getTicks=function(){if(this.fixedTicks)return this.ticks.slice();for(var a=[],b=0,c=0;cb&&(this.differences.splice(b,Number.MAX_VALUE),this.leftSides.splice(b,Number.MAX_VALUE),this.rightSides.splice(b,Number.MAX_VALUE)),1===b)this.leftSides[0]=this.type===GPlot.VERTICAL?.2*this.dim[0]:.2*this.dim[1],this.rightSides[0]=this.leftSides[0];else if(b>1){for(a=0;b-1>a;a++)if(this.plotPoints[a].isValid()&&this.plotPoints[a+1].isValid()){var c,d=this.separations[a%this.separations.length];c=this.type===GPlot.VERTICAL?this.plotPoints[a+1].getX()-this.plotPoints[a].getX():this.plotPoints[a+1].getY()-this.plotPoints[a].getY(),this.differences[a]=c>0?(c-d)/2:(c+d)/2}else this.differences[a]=0;for(this.leftSides[0]=this.differences[0],this.rightSides[0]=this.differences[0],a=1;b-1>a;a++)this.leftSides[a]=this.differences[a-1],this.rightSides[a]=this.differences[a];this.leftSides[b-1]=this.differences[b-2],this.rightSides[b-1]=this.differences[b-2]}},GHistogram.prototype.draw=function(a){if(this.visible){var b=0;a.isValid()&&(b=this.type===GPlot.VERTICAL?a.getY():a.getX());var c,d,e,f,g,h,i=this.plotPoints.length;this.parent.push(),this.parent.rectMode(this.parent.CORNERS),this.parent.strokeCap(this.parent.SQUARE);for(var j=0;i>j;j++)c=this.plotPoints[j],c.isValid()&&(this.type===GPlot.VERTICAL?(d=c.getX()-this.leftSides[j],e=c.getX()+this.rightSides[j],f=c.getY(),g=b):(d=b,e=c.getX(),f=c.getY()-this.leftSides[j],g=c.getY()+this.rightSides[j]),0>d?d=0:d>this.dim[0]&&(d=this.dim[0]),0>-f?f=0:-f>this.dim[1]&&(f=-this.dim[1]),0>e?e=0:e>this.dim[0]&&(e=this.dim[0]),0>-g?g=0:-g>this.dim[1]&&(g=-this.dim[1]),h=this.lineWidths[j%this.lineWidths.length],this.parent.fill(this.bgColors[j%this.bgColors.length]),this.parent.stroke(this.lineColors[j%this.lineColors.length]),this.parent.strokeWeight(h),Math.abs(e-d)>2*h&&Math.abs(g-f)>2*h?this.parent.rect(d,f,e,g):(this.type===GPlot.VERTICAL&&e!==d&&(f!==g||0!==f&&f!==-this.dim[1])||this.type===GPlot.HORIZONTAL&&g!==f&&(d!==e||0!==d&&d!==this.dim[0]))&&(this.parent.rect(d,f,e,g),this.parent.line(d,f,d,g),this.parent.line(e,f,e,g),this.parent.line(d,f,e,f),this.parent.line(d,g,e,g)));this.parent.pop(),this.drawLabels&&this.drawHistLabels()}},GHistogram.prototype.drawHistLabels=function(){var a,b,c=this.plotPoints.length,d=.5*Math.PI;if(this.parent.push(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.fill(this.fontColor),this.parent.noStroke(),this.type===GPlot.VERTICAL)if(this.rotateLabels)for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&(this.parent.push(),this.parent.translate(a.getX(),this.labelsOffset),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.CENTER,this.parent.TOP),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&a.getX()>=0&&a.getX()<=this.dim[0]&&this.parent.text(a.getLabel(),a.getX(),this.labelsOffset);else if(this.rotateLabels)for(this.parent.textAlign(this.parent.CENTER,this.parent.BOTTOM),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&(this.parent.push(),this.parent.translate(-this.labelsOffset,a.getY()),this.parent.rotate(-d),this.parent.text(a.getLabel(),0,0),this.parent.pop());else for(this.parent.textAlign(this.parent.RIGHT,this.parent.CENTER),b=0;c>b;b++)a=this.plotPoints[b],a.isValid()&&-a.getY()>=0&&-a.getY()<=this.dim[1]&&this.parent.text(a.getLabel(),-this.labelsOffset,a.getY());this.parent.pop()},GHistogram.prototype.setType=function(a){a===this.type||a!==GPlot.VERTICAL&&a!==GPlot.HORIZONTAL||(this.type=a,this.updateArrays())},GHistogram.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GHistogram.setDim(): signature not supported"); + +a=arguments[0][0],b=arguments[0][1]}a>0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updateArrays())},GHistogram.prototype.setPlotPoints=function(a){var b,c=a.length;if(this.plotPoints.length===c)for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);else if(this.plotPoints.length>c){for(b=0;c>b;b++)this.plotPoints[b].set(a[b]);this.plotPoints.splice(c,Number.MAX_VALUE)}else{for(b=0;bb;b++)this.plotPoints[b]=new GPoint(a[b])}this.updateArrays()},GHistogram.prototype.setPlotPoint=function(a,b){if(a0&&(this.fontSize=a)},GHistogram.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.isValidNumber=function(a){return!isNaN(a)&&isFinite(a)},GLayer.prototype.isId=function(a){return this.id===a},GLayer.prototype.valueToXPlot=function(a){return this.xLog?this.dim[0]*Math.log(a/this.xLim[0])/Math.log(this.xLim[1]/this.xLim[0]):this.dim[0]*(a-this.xLim[0])/(this.xLim[1]-this.xLim[0])},GLayer.prototype.valueToYPlot=function(a){return this.yLog?-this.dim[1]*Math.log(a/this.yLim[0])/Math.log(this.yLim[1]/this.yLim[0]):-this.dim[1]*(a-this.yLim[0])/(this.yLim[1]-this.yLim[0])},GLayer.prototype.valueToPlot=function(){if(2===arguments.length)return[this.valueToXPlot(arguments[0]),this.valueToYPlot(arguments[1])];if(1===arguments.length&&arguments[0]instanceof GPoint)return new GPoint(this.valueToXPlot(arguments[0].getX()),this.valueToYPlot(arguments[0].getY()),arguments[0].getLabel());if(1===arguments.length&&arguments[0]instanceof Array&&arguments[0][0]instanceof GPoint){var a,b,c,d,e,f,g=arguments[0].length,h=[];if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=arguments[0][f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,h[f]=new GPoint(d,e,c.getLabel());return h}throw new Error("GLayer.valueToPlot(): signature not supported")},GLayer.prototype.updatePlotPoints=function(){var a,b,c,d,e,f,g=this.points.length;if(this.plotPoints.lengthf;f++)this.plotPoints[f]=new GPoint;else this.plotPoints.length>g&&this.plotPoints.splice(g,Number.MAX_VALUE);if(this.xLog&&this.yLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.xLog)for(a=this.dim[0]/Math.log(this.xLim[1]/this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=Math.log(c.getX()/this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else if(this.yLog)for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/Math.log(this.yLim[1]/this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=Math.log(c.getY()/this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel());else for(a=this.dim[0]/(this.xLim[1]-this.xLim[0]),b=-this.dim[1]/(this.yLim[1]-this.yLim[0]),f=0;g>f;f++)c=this.points[f],d=(c.getX()-this.xLim[0])*a,e=(c.getY()-this.yLim[0])*b,this.plotPoints[f].set(d,e,c.getLabel())},GLayer.prototype.xPlotToValue=function(a){return this.xLog?Math.exp(Math.log(this.xLim[0])+Math.log(this.xLim[1]/this.xLim[0])*a/this.dim[0]):this.xLim[0]+(this.xLim[1]-this.xLim[0])*a/this.dim[0]},GLayer.prototype.yPlotToValue=function(a){return this.yLog?Math.exp(Math.log(this.yLim[0])-Math.log(this.yLim[1]/this.yLim[0])*a/this.dim[1]):this.yLim[0]-(this.yLim[1]-this.yLim[0])*a/this.dim[1]},GLayer.prototype.plotToValue=function(a,b){return[this.xPlotToValue(a),this.yPlotToValue(b)]},GLayer.prototype.isInside=function(){var a,b,c;if(2===arguments.length)a=arguments[0],b=arguments[1],c=this.isValidNumber(a)&&this.isValidNumber(b);else{if(!(1===arguments.length&&arguments[0]instanceof GPoint))throw new Error("GLayer.isInside(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].isValid()}return c?a>=0&&a<=this.dim[0]&&-b>=0&&-b<=this.dim[1]:!1},GLayer.prototype.updateInsideList=function(){for(var a,b=this.plotPoints.length,c=0;b>c;c++)a=this.plotPoints[c],this.inside[c]=a.isValid()?a.getX()>=0&&a.getX()<=this.dim[0]&&-a.getY()>=0&&-a.getY()<=this.dim[1]:!1;this.inside.length>b&&this.inside.splice(b,Number.MAX_VALUE)},GLayer.prototype.getPointIndexAtPlotPos=function(a,b){var c;if(this.isInside(a,b))for(var d,e,f=25,g=this.plotPoints.length,h=0;g>h;h++)this.inside[h]&&(d=this.plotPoints[h],e=Math.pow(d.getX()-a,2)+Math.pow(d.getY()-b,2),f>e&&(f=e,c=h));return c},GLayer.prototype.getPointAtPlotPos=function(a,b){return this.points[this.getPointIndexAtPlotPos(a,b)]},GLayer.prototype.obtainBoxIntersections=function(a,b){var c=0;if(a.isValid()&&b.isValid()){var d=a.getX(),e=a.getY(),f=b.getX(),g=b.getY(),h=this.isInside(d,e),i=this.isInside(f,g),j=h&&i||0>d&&0>f||d>this.dim[0]&&f>this.dim[0]||0>-e&&0>-g||-e>this.dim[1]&&-g>this.dim[1];if(!j){var k=f-d,l=g-e;if(0===k)c=2,this.cuts[0][0]=d,this.cuts[0][1]=0,this.cuts[1][0]=d,this.cuts[1][1]=-this.dim[1];else if(0===l)c=2,this.cuts[0][0]=0,this.cuts[0][1]=e,this.cuts[1][0]=this.dim[0],this.cuts[1][1]=e;else{var m=l/k,n=e-m*d;c=4,this.cuts[0][0]=-n/m,this.cuts[0][1]=0,this.cuts[1][0]=(-this.dim[1]-n)/m,this.cuts[1][1]=-this.dim[1],this.cuts[2][0]=0,this.cuts[2][1]=n,this.cuts[3][0]=this.dim[0],this.cuts[3][1]=n+m*this.dim[0]}if(c=this.getValidCuts(this.cuts,c,a,b),h||i){if(1!==c){var o=h?a:b;c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,0),c>1&&(c=this.removeDuplicatedCuts(this.cuts,c,.001),c>1&&(c=this.removePointFromCuts(this.cuts,c,o,.001))))),0===c&&(c=1,this.cuts[0][0]=o.getX(),this.cuts[1][0]=o.getY())}}else c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,0),c>2&&(c=this.removeDuplicatedCuts(this.cuts,c,.001))),2===c&&(Math.pow(this.cuts[0][0]-d,2)+Math.pow(this.cuts[0][1]-e),2>Math.pow(this.cuts[1][0]-d,2)+Math.pow(this.cuts[1][1]-e,2)&&(this.cuts[2][0]=this.cuts[0][0],this.cuts[2][1]=this.cuts[0][1],this.cuts[0][0]=this.cuts[1][0],this.cuts[0][1]=this.cuts[1][1],this.cuts[1][0]=this.cuts[2][0],this.cuts[1][1]=this.cuts[2][1])),1===c&&(c=2,this.cuts[1][0]=this.cuts[0][0],this.cuts[1][1]=this.cuts[0][1]);(h||i)&&1!==c?console.log("There should be one cut!!!"):h||i||0===c||2===c||console.log("There should be either 0 or 2 cuts!!! "+c+" were found")}}return c},GLayer.prototype.getValidCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=d.getX(),h=d.getY(),i=Math.abs(g-e),j=Math.abs(h-f),k=0,l=0;b>l;l++)this.isInside(a[l][0],a[l][1])&&Math.abs(a[l][0]-e)<=i&&Math.abs(a[l][1]-f)<=j&&Math.abs(a[l][0]-g)<=i&&Math.abs(a[l][1]-h)<=j&&(a[k][0]=a[l][0],a[k][1]=a[l][1],k++);return k},GLayer.prototype.removeDuplicatedCuts=function(a,b,c){for(var d,e=0,f=0;b>f;f++){d=!1;for(var g=0;e>g;g++)if(Math.abs(a[g][0]-a[f][0])<=c&&Math.abs(a[g][1]-a[f][1])<=c){d=!0;break}d||(a[e][0]=a[f][0],a[e][1]=a[f][1],e++)}return e},GLayer.prototype.removePointFromCuts=function(a,b,c,d){for(var e=c.getX(),f=c.getY(),g=0,h=0;b>h;h++)(Math.abs(a[h][0]-e)>d||Math.abs(a[h][1]-f)>d)&&(a[g][0]=a[h][0],a[g][1]=a[h][1],g++);return g},GLayer.prototype.startHistogram=function(a){this.hist=new GHistogram(this.parent,a,this.dim,this.plotPoints)},GLayer.prototype.drawPoints=function(){var a,b;if(0===arguments.length){a=this.plotPoints.length;var c=this.pointColors.length,d=this.pointSizes.length;if(this.parent.push(),this.parent.ellipseMode(this.parent.CENTER),this.parent.noStroke(),1===c&&1===d)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]);else if(1===c)for(this.parent.fill(this.pointColors[0]),b=0;a>b;b++)this.inside[b]&&this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]);else if(1===d)for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[0],this.pointSizes[0]));else for(b=0;a>b;b++)this.inside[b]&&(this.parent.fill(this.pointColors[b%c]),this.parent.ellipse(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.pointSizes[b%d],this.pointSizes[b%d]));this.parent.pop()}else{if(!(1===arguments.length&&arguments[0]instanceof p5.Image))throw new Error("GLayer.drawPoints(): signature not supported");for(a=this.plotPoints.length,this.parent.push(),this.parent.imageMode(this.parent.CENTER),b=0;a>b;b++)this.inside[b]&&this.parent.image(arguments[0],this.plotPoints[b].getX(),this.plotPoints[b].getY());this.parent.pop()}},GLayer.prototype.drawPoint=function(){var a,b,c,d;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length&&arguments[1]instanceof p5.Image)a=arguments[0],d=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.drawPoint(): signature not supported");a=arguments[0],b=this.pointColors[0],c=this.pointSizes[0]}var e=this.valueToXPlot(a.getX()),f=this.valueToYPlot(a.getY());this.isInside(e,f)&&(this.parent.push(),"undefined"!=typeof d?(this.parent.imageMode(this.parent.CENTER),this.parent.image(d,e,f)):(this.parent.ellipseMode(this.parent.CENTER),this.parent.fill(b),this.parent.noStroke(),this.parent.ellipse(e,f,c,c)),this.parent.pop())},GLayer.prototype.drawLines=function(){var a=this.plotPoints.length;this.parent.push(),this.parent.noFill(),this.parent.stroke(this.lineColor),this.parent.strokeWeight(this.lineWidth),this.parent.strokeCap(this.parent.SQUARE);for(var b=0;a-1>b;b++)if(this.inside[b]&&this.inside[b+1])this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY());else if(this.plotPoints[b].isValid()&&this.plotPoints[b+1].isValid()){var c=this.obtainBoxIntersections(this.plotPoints[b],this.plotPoints[b+1]);this.inside[b]?this.parent.line(this.plotPoints[b].getX(),this.plotPoints[b].getY(),this.cuts[0][0],this.cuts[0][1]):this.inside[b+1]?this.parent.line(this.cuts[0][0],this.cuts[0][1],this.plotPoints[b+1].getX(),this.plotPoints[b+1].getY()):c>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()},GLayer.prototype.drawLine=function(){var a,b,c,d,e,f;if(4===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(4===arguments.length)e=arguments[0],f=arguments[1],c=arguments[2],d=arguments[3];else if(2===arguments.length&&arguments[0]instanceof GPoint)a=arguments[0],b=arguments[1],c=this.lineColor,d=this.lineWidth;else{if(2!==arguments.length)throw new Error("GLayer.drawLine(): signature not supported");e=arguments[0],f=arguments[1],c=this.lineColor,d=this.lineWidth}"undefined"!=typeof e&&(this.xLog&&this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*Math.log(this.xLim[0])/Math.LN10+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*Math.log(this.xLim[1])/Math.LN10+yCut))):this.xLog?(a=new GPoint(this.xLim[0],e*Math.log(this.xLim[0])/Math.LN10+yCut),b=new GPoint(this.xLim[1],e*Math.log(this.xLim[1])/Math.LN10+yCut)):this.yLog?(a=new GPoint(this.xLim[0],Math.pow(10,e*this.xLim[0]+yCut)),b=new GPoint(this.xLim[1],Math.pow(10,e*this.xLim[1]+yCut))):(a=new GPoint(this.xLim[0],e*this.xLim[0]+yCut),b=new GPoint(this.xLim[1],e*this.xLim[1]+yCut)));var g=this.valueToPlot(a),h=this.valueToPlot(b);if(g.isValid()&&h.isValid()){var i=this.isInside(g),j=this.isInside(h);if(this.parent.push(),this.parent.noFill(),this.parent.stroke(c),this.parent.strokeWeight(d),this.parent.strokeCap(this.parent.SQUARE),i&&j)this.parent.line(g.getX(),g.getY(),h.getX(),h.getY());else{var k=this.obtainBoxIntersections(g,h);i?this.parent.line(g.getX(),g.getY(),this.cuts[0][0],this.cuts[0][1]):j?this.parent.line(this.cuts[0][0],this.cuts[0][1],h.getX(),h.getY()):k>=2&&this.parent.line(this.cuts[0][0],this.cuts[0][1],this.cuts[1][0],this.cuts[1][1])}this.parent.pop()}},GLayer.prototype.drawHorizontalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawHorizontalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToYPlot(a);this.isValidNumber(d)&&-d>=0&&-d<=this.dim[1]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(0,d,this.dim[0],d),this.parent.pop())},GLayer.prototype.drawVerticalLine=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else{if(1!==arguments.length)throw new Error("GLayer.drawVerticalLine(): signature not supported");a=arguments[0],b=this.lineColor,c=this.lineWidth}var d=this.valueToXPlot(a);this.isValidNumber(d)&&d>=0&&d<=this.dim[0]&&(this.parent.push(),this.parent.noFill(),this.parent.stroke(b),this.parent.strokeWeight(c),this.parent.strokeCap(this.parent.SQUARE),this.parent.line(d,0,d,-this.dim[1]),this.parent.pop())},GLayer.prototype.drawFilledContour=function(a,b){var c;if(a===GPlot.HORIZONTAL?c=this.getHorizontalShape(b):a===GPlot.VERTICAL&&(c=this.getVerticalShape(b)),"undefined"!=typeof c&&c.length>0){this.parent.push(),this.parent.fill(this.lineColor),this.parent.noStroke(),this.parent.beginShape();for(var d=0;di;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):b.getX()>=0&&b.getX()<=this.dim[0]&&(-b.getY()<0?(f.push(new GPoint(b.getX(),0,"projection")),c=!0):(f.push(new GPoint(b.getX(),-this.dim[1],"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getX()&&l.getX()!==this.dim[0])if("cut"===l.getLabel())this.plotPoints[g].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(this.plotPoints[m].getX()<0?(l.setX(0),l.setLabel("extreme")):(l.setX(this.dim[0]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getX()&&n.getX()!==this.dim[0]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(this.plotPoints[d].getX()<0?(n.setX(0),n.setLabel("extreme")):(n.setX(this.dim[0]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.yLog&&0>=a&&(a=Math.min(this.yLim[0],this.yLim[1]));var o=this.valueToPlot(1,a);-o[1]<0?(f.push(new GPoint(n.getX(),0)),f.push(new GPoint(l.getX(),0))):-o[1]>this.dim[1]?(f.push(new GPoint(n.getX(),-this.dim[1])),f.push(new GPoint(l.getX(),-this.dim[1]))):(f.push(new GPoint(n.getX(),o[1])),f.push(new GPoint(l.getX(),o[1]))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.getVerticalShape=function(a){for(var b,c,d,e=this.plotPoints.length,f=[],g=-1,h=-1,i=0;e>i;i++)if(b=this.plotPoints[i],b.isValid()){for(c=!1,this.inside[i]?(f.push(new GPoint(b.getX(),b.getY(),"normal point")),c=!0):-b.getY()>=0&&-b.getY()<=this.dim[1]&&(b.getX()<0?(f.push(new GPoint(0,b.getY(),"projection")),c=!0):(f.push(new GPoint(this.dim[0],b.getY(),"projection")),c=!0)),d=i+1;e-1>d&&!this.plotPoints[d].isValid();)d++;if(e>d&&this.plotPoints[d].isValid())for(var j=this.obtainBoxIntersections(b,this.plotPoints[d]),k=0;j>k;k++)f.push(new GPoint(this.cuts[k][0],this.cuts[k][1],"cut")),c=!0;c&&(0>g&&(g=i),h=i)}if(f.length>0){var l=new GPoint(f[0]);if(0!==l.getY()&&l.getY()!==-this.dim[1])if("cut"===l.getLabel())-this.plotPoints[g].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme"));else if(0!==g){for(var m=g-1;m>0&&!this.plotPoints[m].isValid();)m--;this.plotPoints[m].isValid()&&(-this.plotPoints[m].getY()<0?(l.setY(0),l.setLabel("extreme")):(l.setY(-this.dim[1]),l.setLabel("extreme")))}var n=new GPoint(f[f.length-1]);if(0!==n.getY()&&n.getY()!==-this.dim[1]&&h!==e-1){for(d=h+1;e-1>d&&!this.plotPoints[d].isValid();)d++;this.plotPoints[d].isValid()&&(-this.plotPoints[d].getY()<0?(n.setY(0),n.setLabel("extreme")):(n.setY(-this.dim[1]),n.setLabel("extreme")))}"extreme"===n.getLabel()&&f.push(n),this.xLog&&0>=a&&(a=Math.min(this.xLim[0],this.xLim[1]));var o=this.valueToPlot(a,1);o[0]<0?(f.push(new GPoint(0,n.getY())),f.push(new GPoint(0,l.getY()))):o[0]>this.dim[0]?(f.push(new GPoint(this.dim[0],n.getY())),f.push(new GPoint(this.dim[0],l.getY()))):(f.push(new GPoint(o[0],n.getY())),f.push(new GPoint(o[0],l.getY()))),"extreme"===l.getLabel()&&f.push(l)}return f},GLayer.prototype.drawLabel=function(a){var b=this.valueToXPlot(a.getX()),c=this.valueToYPlot(a.getY());if(this.isValidNumber(b)&&this.isValidNumber(c)){var d=b+this.labelSeparation[0],e=c-this.labelSeparation[1],f=this.fontSize/4;this.parent.push(),this.parent.rectMode(this.parent.CORNER),this.parent.noStroke(),this.parent.textFont(this.fontName),this.parent.textSize(this.fontSize),this.parent.textAlign(this.parent.LEFT,this.parent.BOTTOM),this.parent.fill(this.labelBgColor),this.parent.rect(d-f,e-this.fontSize-f,this.parent.textWidth(a.getLabel())+2*f,this.fontSize+2*f),this.parent.fill(this.fontColor),this.parent.text(a.getLabel(),d,e),this.parent.pop()}},GLayer.prototype.drawLabelAtPlotPos=function(a,b){var c=this.getPointAtPlotPos(a,b);"undefined"!=typeof c&&this.drawLabel(c)},GLayer.prototype.drawHistogram=function(){"undefined"!=typeof this.hist&&this.hist.draw(this.valueToPlot(this.histBasePoint))},GLayer.prototype.drawPolygon=function(a,b){var c;if(a.length>2){var d=this.valueToPlot(a),e=0;for(c=0;cc;c++){f=d[c],this.isInside(f)&&h.push(new GPoint(f.getX(),f.getY(),"normal point"));var i=g>c+1?c+1:0,j=this.obtainBoxIntersections(f,d[i]);1===j?h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"single cut")):j>1&&(h.push(new GPoint(this.cuts[0][0],this.cuts[0][1],"double cut")),h.push(new GPoint(this.cuts[1][0],this.cuts[1][1],"double cut")))}g=h.length;var k=[];for(c=0;g>c;c++){k.push(h[c]);var l=g>c+1?c+1:0,m=h[c].getLabel(),n=h[l].getLabel(),o="single cut"===m&&"single cut"===n||"single cut"===m&&"double cut"===n||"double cut"===m&&"single cut"===n;if(o){var p=h[c].getX(),q=h[c].getY(),r=h[l].getX(),s=h[l].getY(),t=Math.abs(r-p),u=Math.abs(s-q);if(t>0&&u>0&&t!==this.dim[0]&&u!==this.dim[1]){var v=0===p||p===this.dim[0]?p:r,w=0===q||q===-this.dim[1]?q:s;k.push(new GPoint(v,w,"special cut"))}}}if(k.length>2){for(this.parent.push(),this.parent.fill(b),this.parent.noStroke(),this.parent.beginShape(),c=0;c0&&b>0&&(this.dim[0]=a,this.dim[1]=b,this.updatePlotPoints(),"undefined"!=typeof this.hist&&(this.hist.setDim(this.dim),this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setXLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GLayer.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&this.isValidNumber(a)&&this.isValidNumber(b)&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)))},GLayer.prototype.setXYLim=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else{if(2!==arguments.length)throw new Error("GLayer.setXYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(this.xLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b),this.yLog&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setLimAndLog=function(){var a,b,c,d,e,f;if(6===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3],e=arguments[4],f=arguments[5];else{if(4!==arguments.length)throw new Error("GLayer.setLimAndLog(): signature not supported");a=arguments[0][0],b=arguments[0][1],c=arguments[1][0],d=arguments[1][1],e=arguments[2],f=arguments[3]}a!==b&&c!==d&&this.isValidNumber(a)&&this.isValidNumber(b)&&this.isValidNumber(c)&&this.isValidNumber(d)&&(e&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.yLim[1]=b,this.xLog=e),f&&(0>=c||0>=d)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=c,this.yLim[1]=d,this.yLog=f),this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setXLog=function(a){a!==this.xLog&&(a&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.xLim[0]=.1,this.xLim[1]=10),this.xLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setYLog=function(a){a!==this.yLog&&(a&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(console.log("One of the limits is negative. This is not allowed in logarithmic scale."),console.log("Will set horizontal limits to (0.1, 10)"),this.yLim[0]=.1,this.yLim[1]=10),this.yLog=a,this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.setPoints=function(a){var b,c=a.length;if(this.points.length>c)this.points.splice(c,Number.MAX_VALUE);else for(b=this.points.length;c>b;b++)this.points[b]=new GPoint;for(b=0;c>b;b++)this.points[b].set(a[b]);this.updatePlotPoints(),this.updateInsideList(),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.setPoint=function(){var a,b,c,d,e=this.points.length;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=aa)this.points[a].set(b,c,d),this.plotPoints[a].set(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a]);else{if(a!==e)throw new Error("GLayer.setPoint(): the index position is outside the array size");this.points[a]=new GPoint(b,c,d),this.plotPoints[a]=new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d),this.inside[a]=this.isInside(this.plotPoints[a])}"undefined"!=typeof this.hist&&this.hist.setPlotPoint(a,this.plotPoints[a])},GLayer.prototype.addPoint=function(){var a,b,c;if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2];else if(2===arguments.length)a=arguments[0],b=arguments[1],c="";else{if(1!==arguments.length)throw new Error("GLayer.addPoint(): signature not supported");a=arguments[0].getX(),b=arguments[0].getY(),c=arguments[0].getLabel()}this.points.push(new GPoint(a,b,c)),this.plotPoints.push(new GPoint(this.valueToXPlot(a),this.valueToYPlot(b),c)),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1])),"undefined"!=typeof this.hist&&this.hist.addPlotPoint(this.plotPoints[this.plotPoints.length-1])},GLayer.prototype.addPoints=function(a){for(var b,c=a.length,d=0;c>d;d++)b=a[d],this.points.push(new GPoint(b)),this.plotPoints.push(new GPoint(this.valueToXPlot(b.getX()),this.valueToYPlot(b.getY()),b.getLabel())),this.inside.push(this.isInside(this.plotPoints[this.plotPoints.length-1]));"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints)},GLayer.prototype.addPointAtIndexPos=function(){var a,b,c,d;if(4===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d=arguments[3];else if(3===arguments.length)a=arguments[0],b=arguments[1],c=arguments[2],d="";else{if(2!==arguments.length)throw new Error("GLayer.addPointAtIndexPos(): signature not supported");a=arguments[0],b=arguments[1].getX(),c=arguments[1].getY(),d=arguments[1].getLabel()}a<=this.points.length&&(this.points.splice(a,0,new GPoint(b,c,d)),this.plotPoints.splice(a,0,new GPoint(this.valueToXPlot(b),this.valueToYPlot(c),d)),this.inside.splice(a,0,this.isInside(this.plotPoints[0])),"undefined"!=typeof this.hist&&this.hist.setPlotPoints(this.plotPoints))},GLayer.prototype.removePoint=function(a){a0&&(this.pointColors=a.slice())},GLayer.prototype.setPointColor=function(a){this.pointColors=[a]},GLayer.prototype.setPointSizes=function(a){a.length>0&&(this.pointSizes=a.slice())},GLayer.prototype.setPointSize=function(a){this.pointSizes=[a]},GLayer.prototype.setLineColor=function(a){this.lineColor=a},GLayer.prototype.setLineWidth=function(a){a>0&&(this.lineWidth=a)},GLayer.prototype.setHistBasePoint=function(a){this.histBasePoint.set(a)},GLayer.prototype.setHistType=function(a){"undefined"!=typeof this.hist&&this.hist.setType(a)},GLayer.prototype.setHistVisible=function(a){"undefined"!=typeof this.hist&&this.hist.setVisible(a)},GLayer.prototype.setDrawHistLabels=function(a){"undefined"!=typeof this.hist&&this.hist.setDrawLabels(a)},GLayer.prototype.setLabelBgColor=function(a){this.labelBgColor=a},GLayer.prototype.setLabelSeparation=function(a){this.labelSeparation[0]=a[0],this.labelSeparation[1]=a[1]},GLayer.prototype.setFontName=function(a){this.fontName=a},GLayer.prototype.setFontColor=function(a){this.fontColor=a},GLayer.prototype.setFontSize=function(a){a>0&&(this.fontSize=a)},GLayer.prototype.setFontProperties=function(a,b,c){c>0&&(this.fontName=a,this.fontColor=b,this.fontSize=c)},GLayer.prototype.setAllFontProperties=function(a,b,c){this.setFontProperties(a,b,c),"undefined"!=typeof this.hist&&this.hist.setFontProperties(a,b,c)},GLayer.prototype.getId=function(){return this.id},GLayer.prototype.getDim=function(){return this.dim.slice()},GLayer.prototype.getXLim=function(){return this.xLim.slice()},GLayer.prototype.getYLim=function(){return this.yLim.slice()},GLayer.prototype.getXLog=function(){return this.xLog},GLayer.prototype.getYLog=function(){return this.yLog},GLayer.prototype.getPoints=function(){for(var a=[],b=0;b=this.pos[0]&&a<=this.pos[0]+this.outerDim[0]&&b>=this.pos[1]&&b<=this.pos[1]+this.outerDim[1]},GPlot.prototype.isOverBox=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(0!==arguments.length)throw new Error("GPlot.isOverBox(): signature not supported");a=this.parent.mouseX,b=this.parent.mouseY}return a>=this.pos[0]+this.mar[1]&&a<=this.pos[0]+this.outerDim[0]-this.mar[3]&&b>=this.pos[1]+this.mar[2]&&b<=this.pos[1]+this.outerDim[1]-this.mar[0]},GPlot.prototype.updateLimits=function(){this.fixedXLim||(this.xLim=this.calculatePlotXLim(),this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim)),this.fixedYLim||(this.yLim=this.calculatePlotYLim(),this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim)),this.mainLayer.setXYLim(this.xLim,this.yLim);for(var a=0;a=this.yLim[0]&&e>=this.yLim[0]&&e<=this.yLim[1]||this.yLim[1]=this.yLim[1]),!f||this.xLog&&0>=d||(db[1]&&(b[1]=d))}return b[1]=this.xLim[0]&&d>=this.xLim[0]&&d<=this.xLim[1]||this.xLim[1]=this.xLim[1]),!f||this.yLog&&0>=e||(eb[1]&&(b[1]=e))}return b[1]=0&&c[b]<=this.dim[0]&&this.parent.line(c[b],0,c[b],-this.dim[1])}if(a===GPlot.BOTH||a===GPlot.HORIZONTAL){var d=this.yAxis.getPlotTicksRef();for(b=0;b=0&&-d[b]<=this.dim[1]&&this.parent.line(0,d[b],this.dim[0],d[b])}this.parent.pop()},GPlot.prototype.drawHistograms=function(){this.mainLayer.drawHistogram();for(var a=0;a0&&b>0){var c=a-this.mar[1]-this.mar[3],d=b-this.mar[0]-this.mar[2];if(c>0&&d>0){this.outerDim[0]=a,this.outerDim[1]=b,this.dim[0]=c,this.dim[1]=d,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e0&&f>0&&(this.mar[0]=a,this.mar[1]=b,this.mar[2]=c,this.mar[3]=d,this.outerDim[0]=e,this.outerDim[1]=f)},GPlot.prototype.setDim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setDim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}if(a>0&&b>0){var c=a+this.mar[1]+this.mar[3],d=b+this.mar[0]+this.mar[2];if(c>0&&d>0){this.outerDim[0]=c,this.outerDim[1]=d,this.dim[0]=a,this.dim[1]=b,this.xAxis.setDim(this.dim),this.topAxis.setDim(this.dim),this.yAxis.setDim(this.dim),this.rightAxis.setDim(this.dim),this.title.setDim(this.dim),this.mainLayer.setDim(this.dim);for(var e=0;e=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.xLim[0]=a,this.xLim[1]=b,this.invertedXScale=this.xLim[0]>this.xLim[1],this.fixedXLim=!0,this.xAxis.setLim(this.xLim),this.topAxis.setLim(this.xLim),this.updateLimits()))},GPlot.prototype.setYLim=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else{if(1!==arguments.length)throw new Error("GPlot.setYLim(): signature not supported");a=arguments[0][0],b=arguments[0][1]}a!==b&&(this.yLog&&(0>=a||0>=b)?console.log("One of the limits is negative. This is not allowed in logarithmic scale."):(this.yLim[0]=a,this.yLim[1]=b,this.invertedYScale=this.yLim[0]>this.yLim[1],this.fixedYLim=!0,this.yAxis.setLim(this.yLim),this.rightAxis.setLim(this.yLim),this.updateLimits()))},GPlot.prototype.setFixedXLim=function(a){this.fixedXLim=a,this.updateLimits()},GPlot.prototype.setFixedYLim=function(a){this.fixedYLim=a,this.updateLimits()},GPlot.prototype.setLogScale=function(a){var b=this.xLog,c=this.yLog;if("xy"===a||"yx"===a?(b=!0,c=!0):"x"===a?(b=!0,c=!1):"y"===a?(b=!1,c=!0):""===a&&(b=!1,c=!1),b!==this.xLog||c!==this.yLog){this.xLog=b,this.yLog=c,this.xLog&&this.fixedXLim&&(this.xLim[0]<=0||this.xLim[1]<=0)&&(this.fixedXLim=!1),this.yLog&&this.fixedYLim&&(this.yLim[0]<=0||this.yLim[1]<=0)&&(this.fixedYLim=!1),this.fixedXLim||(this.xLim=this.calculatePlotXLim()),this.fixedYLim||(this.yLim=this.calculatePlotYLim()),this.xAxis.setLimAndLog(this.xLim,this.xLog),this.topAxis.setLimAndLog(this.xLim,this.xLog),this.yAxis.setLimAndLog(this.yLim,this.yLog),this.rightAxis.setLimAndLog(this.yLim,this.yLog),this.mainLayer.setLimAndLog(this.xLim,this.yLim,this.xLog,this.yLog);for(var d=0;d=0&&a!==this.expandLimFactor&&(this.expandLimFactor=a,this.updateLimits())},GPlot.prototype.setBgColor=function(a){this.bgColor=a},GPlot.prototype.setBoxBgColor=function(a){this.boxBgColor=a},GPlot.prototype.setBoxLineColor=function(a){this.boxLineColor=a},GPlot.prototype.setBoxLineWidth=function(a){a>0&&(this.boxLineWidth=a)},GPlot.prototype.setGridLineColor=function(a){this.gridLineColor=a},GPlot.prototype.setGridLineWidth=function(a){a>0&&(this.gridLineWidth=a)},GPlot.prototype.setPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).setPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.setPoints(): signature not supported");this.mainLayer.setPoints(arguments[0])}this.updateLimits()},GPlot.prototype.setPoint=function(){if(5===arguments.length)this.getLayer(arguments[4]).setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).setPoint(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.setPoint(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.setPoint(): signature not supported");this.mainLayer.setPoint(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.addPoint=function(){if(4===arguments.length)this.getLayer(arguments[3]).addPoint(arguments[0],arguments[1],arguments[2]);else if(3===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1],arguments[2]);else if(2===arguments.length&&arguments[0]instanceof GPoint)this.getLayer(arguments[1]).addPoint(arguments[0]);else if(2===arguments.length)this.mainLayer.addPoint(arguments[0],arguments[1]);else{if(1!==arguments.length)throw new Error("GPlot.addPoint(): signature not supported");this.mainLayer.addPoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPoints=function(){if(2===arguments.length)this.getLayer(arguments[1]).addPoints(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.addPoints(): signature not supported");this.mainLayer.addPoints(arguments[0])}this.updateLimits()},GPlot.prototype.removePoint=function(){if(2===arguments.length)this.getLayer(arguments[1]).removePoint(arguments[0]);else{if(1!==arguments.length)throw new Error("GPlot.removePoint(): signature not supported");this.mainLayer.removePoint(arguments[0])}this.updateLimits()},GPlot.prototype.addPointAtIndexPos=function(){if(5===arguments.length)this.getLayer(arguments[4]).addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(4===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2],arguments[3]);else if(3===arguments.length&&arguments[1]instanceof GPoint)this.getLayer(arguments[2]).addPointAtIndexPos(arguments[0],arguments[1]);else if(3===arguments.length)this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1],arguments[2]);else{if(2!==arguments.length)throw new Error("GPlot.addPointAtIndexPos(): signature not supported");this.mainLayer.addPointAtIndexPos(arguments[0],arguments[1])}this.updateLimits()},GPlot.prototype.setPointColors=function(a){this.mainLayer.setPointColors(a)},GPlot.prototype.setPointColor=function(a){this.mainLayer.setPointColor(a)},GPlot.prototype.setPointSizes=function(a){this.mainLayer.setPointSizes(a)},GPlot.prototype.setPointSize=function(a){this.mainLayer.setPointSize(a)},GPlot.prototype.setLineColor=function(a){this.mainLayer.setLineColor(a)},GPlot.prototype.setLineWidth=function(a){this.mainLayer.setLineWidth(a)},GPlot.prototype.setHistBasePoint=function(a){this.mainLayer.setHistBasePoint(a)},GPlot.prototype.setHistType=function(a){this.mainLayer.setHistType(a)},GPlot.prototype.setHistVisible=function(a){this.mainLayer.setHistVisible(a)},GPlot.prototype.setDrawHistLabels=function(a){this.mainLayer.setDrawHistLabels(a)},GPlot.prototype.setLabelBgColor=function(a){this.mainLayer.setLabelBgColor(a)},GPlot.prototype.setLabelSeparation=function(a){this.mainLayer.setLabelSeparation(a)},GPlot.prototype.setTitleText=function(a){this.title.setText(a)},GPlot.prototype.setAxesOffset=function(a){this.xAxis.setOffset(a),this.topAxis.setOffset(a),this.yAxis.setOffset(a),this.rightAxis.setOffset(a)},GPlot.prototype.setTicksLength=function(a){this.xAxis.setTickLength(a),this.topAxis.setTickLength(a),this.yAxis.setTickLength(a),this.rightAxis.setTickLength(a)},GPlot.prototype.setHorizontalAxesNTicks=function(a){this.xAxis.setNTicks(a),this.topAxis.setNTicks(a)},GPlot.prototype.setHorizontalAxesTicksSeparation=function(a){this.xAxis.setTicksSeparation(a),this.topAxis.setTicksSeparation(a)},GPlot.prototype.setHorizontalAxesTicks=function(a){this.xAxis.setTicks(a),this.topAxis.setTicks(a)},GPlot.prototype.setVerticalAxesNTicks=function(a){this.yAxis.setNTicks(a),this.rightAxis.setNTicks(a)},GPlot.prototype.setVerticalAxesTicksSeparation=function(a){this.yAxis.setTicksSeparation(a),this.rightAxis.setTicksSeparation(a)},GPlot.prototype.setVerticalAxesTicks=function(a){this.yAxis.setTicks(a),this.rightAxis.setTicks(a)},GPlot.prototype.setFontName=function(a){this.maniLayer.setFontName(a)},GPlot.prototype.setFontColor=function(a){this.maniLayer.setFontColor(a)},GPlot.prototype.setFontSize=function(a){this.maniLayer.setFontSize(a)},GPlot.prototype.setFontProperties=function(a,b,c){this.maniLayer.setFontProperties(a,b,c)},GPlot.prototype.setAllFontProperties=function(a,b,c){this.xAxis.setAllFontProperties(a,b,c),this.topAxis.setAllFontProperties(a,b,c),this.yAxis.setAllFontProperties(a,b,c),this.rightAxis.setAllFontProperties(a,b,c),this.title.setFontProperties(a,b,c),this.mainLayer.setAllFontProperties(a,b,c);for(var d=0;d0&&(this.zoomFactor=a),(b===this.parent.LEFT||b===this.parent.RIGHT||b===this.parent.CENTER)&&(this.increaseZoomButton=b),(c===this.parent.LEFT||c===this.parent.RIGHT||c===this.parent.CENTER)&&(this.decreaseZoomButton=c),(d===this.parent.SHIFT||d===this.parent.CONTROL||d===this.parent.ALT||d===GPlot.NONE)&&(this.increaseZoomKeyModifier=d),(e===this.parent.SHIFT||e===this.parent.CONTROL||e===this.parent.ALT||e===GPlot.NONE)&&(this.decreaseZoomKeyModifier=e)},GPlot.prototype.deactivateZooming=function(){this.zoomingIsActive=!1},GPlot.prototype.activateCentering=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateCentering(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.centeringIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.centeringButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.centeringKeyModifier=b)},GPlot.prototype.deactivateCentering=function(){this.centeringIsActive=!1},GPlot.prototype.activatePanning=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePanning(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.panningIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.panningButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.panningKeyModifier=b)},GPlot.prototype.deactivatePanning=function(){this.panningIsActive=!1,this.panningReferencePoint=void 0},GPlot.prototype.activatePointLabels=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activatePointLabels(): signature not supported");a=this.parent.LEFT,b=GPlot.NONE}this.labelingIsActive=!0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.labelingButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.labelingKeyModifier=b)},GPlot.prototype.deactivatePointLabels=function(){this.labelingIsActive=!1,this.mousePos=void 0},GPlot.prototype.activateReset=function(){var a,b;if(2===arguments.length)a=arguments[0],b=arguments[1];else if(1===arguments.length)a=arguments[0],b=GPlot.NONE;else{if(0!==arguments.length)throw new Error("GPlot.activateReset(): signature not supported");a=this.parent.RIGHT,b=GPlot.NONE}this.resetIsActive=!0,this.xLimReset=void 0,this.yLimReset=void 0,(a===this.parent.LEFT||a===this.parent.RIGHT||a===this.parent.CENTER)&&(this.resetButton=a),(b===this.parent.SHIFT||b===this.parent.CONTROL||b===this.parent.ALT||b===GPlot.NONE)&&(this.resetKeyModifier=b)},GPlot.prototype.deactivateReset=function(){this.resetIsActive=!1,this.xLimReset=void 0,this.yLimReset=void 0},GPlot.prototype.getButton=function(a){var b;return 0===a.button?b=this.parent.LEFT:1===a.button?b=this.parent.CENTER:2===a.button?b=this.parent.RIGHT:"undefined"==typeof a.button&&(b=this.parent.LEFT),b},GPlot.prototype.getModifier=function(a){var b;return b=a.altKey?this.parent.ALT:a.ctrlKey?this.parent.CONTROL:a.shiftKey?this.parent.SHIFT:GPlot.NONE},GPlot.prototype.saveResetLimits=function(){("undefined"==typeof this.xLimReset||"undefined"==typeof this.yLimReset)&&(this.xLimReset=this.xLim.slice(),this.yLimReset=this.yLim.slice())},GPlot.prototype.panningFunction=function(){"undefined"!=typeof this.panningReferencePoint&&this.align(this.panningReferencePoint,this.parent.mouseX,this.parent.mouseY)},GPlot.prototype.clickEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.zoomingIsActive&&(b===this.increaseZoomButton&&c===this.increaseZoomKeyModifier?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):b===this.decreaseZoomButton&&c===this.decreaseZoomKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY))),this.centeringIsActive&&b===this.centeringButton&&c===this.centeringKeyModifier&&(this.resetIsActive&&this.saveResetLimits(), +this.center(this.parent.mouseX,this.parent.mouseY)),this.resetIsActive&&b===this.resetButton&&c===this.resetKeyModifier&&"undefined"!=typeof this.xLimReset&&"undefined"!=typeof this.yLimReset&&(this.setXLim(this.xLimReset),this.setYLim(this.yLimReset),this.xLimReset=void 0,this.yLimReset=void 0)}},GPlot.prototype.mouseDownEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=this.getButton(e),c=this.getModifier(e);this.panningIsActive&&b===this.panningButton&&c===this.panningKeyModifier&&(this.resetIsActive&&this.saveResetLimits(),this.panningReferencePoint=this.getValueAt(this.parent.mouseX,this.parent.mouseY),this.panningIntervalId=setInterval(this.panningFunction.bind(this),100)),this.labelingIsActive&&b===this.labelingButton&&c===this.labelingKeyModifier&&(this.mousePos=[this.parent.mouseX,this.parent.mouseY])}},GPlot.prototype.mouseUpEvent=function(a){e=a||window.event;{var b=this.getButton(e);this.getModifier(e)}this.panningIsActive&&b===this.panningButton&&"undefined"!=typeof this.panningIntervalId&&(clearInterval(this.panningIntervalId),this.panningIntervalId=void 0,this.panningReferencePoint=void 0),this.labelingIsActive&&b===this.labelingButton&&(this.mousePos=void 0),b===this.parent.RIGHT&&this.clickEvent(e)},GPlot.prototype.wheelEvent=function(a){if(e=a||window.event,this.isOverBox()){var b=e.deltaY,c=this.parent.CENTER,d=this.getModifier(e);this.zoomingIsActive&&(c===this.increaseZoomButton&&d===this.increaseZoomKeyModifier&&b>0?(this.resetIsActive&&this.saveResetLimits(),this.zoom(this.zoomFactor,this.parent.mouseX,this.parent.mouseY)):c===this.decreaseZoomButton&&d===this.decreaseZoomKeyModifier&&0>b&&(this.resetIsActive&&this.saveResetLimits(),this.zoom(1/this.zoomFactor,this.parent.mouseX,this.parent.mouseY)))}},GPlot.prototype.preventDefaultEvent=function(a){e=a||window.event,this.isOverBox()&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},GPlot.prototype.preventWheelDefault=function(){window.addEventListener("wheel",this.preventDefaultEvent.bind(this),!1)},GPlot.prototype.preventRightClickDefault=function(){window.addEventListener("contextmenu",this.preventDefaultEvent.bind(this),!1)}; diff --git a/graficos/hidraulicas.html b/graficos/hidraulicas.html new file mode 100755 index 0000000..be3038e --- /dev/null +++ b/graficos/hidraulicas.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/graficos/hidraulicas.js b/graficos/hidraulicas.js new file mode 100644 index 0000000..72fedda --- /dev/null +++ b/graficos/hidraulicas.js @@ -0,0 +1,112 @@ +var cuencas, cmap; +var nombres,colores,x,y; +var canales, acequias; +var totCanales = 0,totAcequias = 0; +var cuenta = 0, last; + +function setup() { + createCanvas(800,519); + cuencas = loadImage("data/cuencas.png"); + cmap = loadImage("data/cmap-cuencas.png"); + nombres = new Array("Norte","Duero","Ebro","Pirineo","Jucar","Tajo","Guadiana","Guadalquivir","Sur", "Segura", "Baleares y Canarias"); + colores = new Array("#f00","#0f0","#00f","#ff0","#0ff","#a00","#0a0","#00a","#aa0","#0aa", "#aaa"); + canales = new Array(157.3,1422.1,810, 132.5,525.7,764.9,360.5,1111.7,266.7,85.7,-1); + acequias= new Array(448.1,2215.3,1872.7,258.7,2378,1356.7,1210.5,1215.7,191.7,2004.1,-1); + x = new Array(158,243, 449, 597, 432, 308, 236, 263, 362,412, 601); + y = new Array(77,158,140, 139,278, 253, 327, 393, 441,368, 322); + + for (var n = 0; n < nombres.length; n++) { + if (canales[n] != -1) totCanales = totCanales + canales[n]; + if (acequias[n] != -1) totAcequias = totAcequias + acequias[n]; + } +} + +function draw() { + background(200,225,225); + image(cuencas,0,0); + + var mc = cmap.get(mouseX,mouseY); + var over = []; + for (var n = 0; n < colores.length; n++) { + over[n] = compara(mc,color(colores[n])); + } + + for (var n = 0; n < colores.length; n++) { + if (over[n]) { + fill(0); + textStyle(NORMAL); + if (canales[n] != -1) { + text("Canales: " + canales[n] + " Km", x[n], y[n]+5); + text("Acequias: " + acequias[n] + " Km", x[n], y[n]+20); + } + else { + textSize(10); + text("(Sin datos)", x[n], y[n]+5); + } + } + } + + // nombres + textStyle(BOLD); + textSize(14); + for (var n = 0; n < nombres.length; n++) { + var nbr = String.toUpperCase(nombres[n]); + fill(255); + noStroke(); + fill(0); + text(nbr, x[n], y[n]-10); + } + + cuenta = cuenta + 0.5; + + // Canales + for (var n = 0; n < nombres.length; n++) { + if (!over[n]) { + if (canales[n] == -1) { + textSize(10); + fill(0); + text("(Sin datos)", x[n], y[n]+5); + } + var pct = map(canales[n]/totCanales,0,1,0,50); + for (var i = 0; i < min(cuenta,pct); i++) { + var xi = x[n] + 10*i; + stroke(0); + line(xi+3, y[n]-4,xi+10+3,y[n]-4); + noStroke(); + fill(0); + quad(xi+10+4,y[n]-4,xi+10+4,y[n]-4+7, xi+10,y[n]+7, xi+10,y[n]); + fill(0,255,255); + quad(xi+3, y[n]-3,xi+10+3,y[n]-3,xi+10,y[n],xi, y[n]); + noStroke(); + fill(0); + rect(xi, y[n],10,7) + fill(255); + arc(xi+5,y[n]+7,7,8,PI,TWO_PI); + } + } + } + + // Acequias + for (var n = 0; n < nombres.length; n++) { + if (!over[n]) { + pct = map(acequias[n]/totAcequias,0,1,0,50); + for (var i = 0; i < min(cuenta,pct); i++) { + var xi = x[n] + 10*i; + stroke(0); + line(xi, y[n]+15,xi+10,y[n]+15); + line(xi+3, y[n]+15-3,xi+10+3,y[n]+15-3); + noStroke(); + fill(0); + quad(xi+10+4,y[n]+15-3, xi+10+4,y[n]+15+4-3-1, xi+10, y[n]+15+4, xi+10, y[n]+15); + fill(0,255,255); + quad(xi+3, y[n]+15-2,xi+10+3,y[n]+15-2, xi+10,y[n]+15,xi, y[n]+15); + fill(0); + rect(xi, y[n]+15, 10, 4); + } + } + } +} + +function compara(c1, c2) { + return red(c1) == red(c2) && green(c1) == green(c2) && blue(c1) == blue(c2); +} diff --git a/graficos/mecanizacion.html b/graficos/mecanizacion.html new file mode 100644 index 0000000..1d6e1ef --- /dev/null +++ b/graficos/mecanizacion.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/graficos/mecanizacion.js b/graficos/mecanizacion.js new file mode 100644 index 0000000..9cbe3ab --- /dev/null +++ b/graficos/mecanizacion.js @@ -0,0 +1,101 @@ +var cuencas, cmap; +var nombres,colores,x,y; +var tractores, cosechadoras; +var totTractores = 0,totCosechadoras = 0; +var cuenta = 0, last; +var imgTractor,imgCosechadora; + +function setup() { + createCanvas(800,519); + cuencas = loadImage("data/cuencas.png"); + cmap = loadImage("data/cmap-cuencas.png"); + imgTractor = loadImage("data/tractor_792349_cc_p.png"); + imgCosechadora = loadImage("data/harvester_1046427_cc_p.png"); + nombres = new Array("Norte","Duero","Ebro","Pirineo","Jucar","Tajo","Guadiana","Guadalquivir","Sur", "Segura", "Baleares y Canarias"); + colores = new Array("#f00","#0f0","#00f","#ff0","#0ff","#a00","#0a0","#00a","#aa0","#0aa", "#aaa"); + tractores = new Array(31.5,32.8,81.4,-1,128.5,37.6,59.1,30.6,11.2,34.6,-1); + cosechadoras= new Array(0,1.2,2.8,-1,5,0.6,0.9,2.6,0.2,0.5,-1); + + x = new Array(128,233, 409, 597, 392, 248, 206, 217, 362,402, 651); + y = new Array(77,128,110, 139,248, 243, 307, 390, 431,368, 322); + + for (var n = 0; n < nombres.length; n++) { + if (tractores[n] != -1) totTractores = totTractores + tractores[n]; + if (cosechadoras[n] != -1) totCosechadoras = totCosechadoras + cosechadoras[n]; + } +} + +function draw() { + background(200,225,225); + image(cuencas,0,0); + + + var mc = cmap.get(mouseX,mouseY); + var over = []; + for (var n = 0; n < colores.length; n++) { + over[n] = compara(mc,color(colores[n])); + } + + for (var n = 0; n < colores.length; n++) { + if (over[n]) { + fill(0); + textStyle(NORMAL); + if (tractores[n] != -1) { + text("Tractores: " + tractores[n], x[n], y[n]+10); + text("Cosechadoras: " + cosechadoras[n], x[n], y[n]+25); + } + else { + textSize(10); + text("(Sin datos)", x[n], y[n]+5); + } + } + } + + + cuenta = cuenta + 0.5; + + // Cosechadoras + var mpct = []; + for (var n = 0; n < nombres.length; n++) { + if (!over[n]) { + pct = map(cosechadoras[n]/totCosechadoras,0,1,0,40); + mpct[n] = floor(pct)+1; + for (var i = 0; i < min(cuenta,pct); i++) { + var xi = x[n] + 20*(i%4); + var yi = y[n] + floor(i/4)*20; + image(imgCosechadora,xi,yi,20,20); + } + } + } + + // Tractores + for (var n = 0; n < nombres.length; n++) { + if (!over[n]) { + if (tractores[n] == -1) { + textSize(10); + textStyle(NORMAL); + fill(0); + text("(Sin datos)", x[n], y[n]+5); + } + var pct = map(tractores[n]/totTractores,0,1,0,40); + for (var i = 0; i < min(cuenta,pct); i++) { + var xi = x[n] + 20*(i%4) + min(4,mpct[n])*20; + var yi = y[n] + floor(i/4)*20; + image(imgTractor,xi,yi,18,18); + } + } + } + + // nombres + textStyle(BOLD); + textSize(14); + for (var n = 0; n < nombres.length; n++) { + var nbr = nombres[n]; + fill(0); + text(nbr, x[n], y[n]-7); + } +} + +function compara(c1, c2) { + return red(c1) == red(c2) && green(c1) == green(c2) && blue(c1) == blue(c2); +} diff --git a/graficos/parcelas-old.js b/graficos/parcelas-old.js new file mode 100644 index 0000000..b368d77 --- /dev/null +++ b/graficos/parcelas-old.js @@ -0,0 +1,94 @@ +var cuencas, cmap; +var ids,nombres,colores,x,y; +var capas,imgs; +var dim; + +function preload() { + ids = new Array("norte","duero","ebro","pirineo","jucar","tajo","guadiana","guadalquivir","sur","segura","baleares"); + imgs = new Array(); + for (var n = 0; n < ids.length; n++) { + imgs[n] = loadImage("data/"+ids[n]+".png"); + } + cuencas = loadImage("data/cuencas.png"); + cmap = loadImage("data/cmap-cuencas.png"); +} + +function setup() { + createCanvas(800,519); + nombres = new Array("Norte","Duero","Ebro","Pirineo","Jucar","Tajo","Guadiana","Guadalquivir","Sur", "Segura", "Baleares y Canarias"); + colores = new Array("#f00","#0f0","#00f","#ff0","#0ff","#a00","#0a0","#00a","#aa0","#0aa", "#aaa"); + x = new Array(158,243, 449, 597, 432, 308, 236, 263, 362,432, 651); + y = new Array(77,158,140, 139,278, 253, 327, 393, 441,368, 322); + dim = new Array(11,8.4,11,-1,6,7.5,8.6,5.3,5.9,6.6,-1); + capas = new Array(); + for (var n = 0; n < ids.length; n++) { + capas[n] = createImage(width,height); + capas[n].loadPixels(); + + if (dim[n] != -1) { + var paso = map(dim[n],0, 15, 2, 20); + + colorMode(HSB,360,255,255); + var h = random(70,130); + var numi = floor(width/paso)+1; + var numj = floor(height/paso)+1; + var c = []; + for (var i = 0; i < numi; i++) { + c[i] = []; + for (var j = 0; j < numj; j++) { + var s = random(100,200); + c[i][j] = color(h, s, random(150,200) ); + } + } + colorMode(RGB,255,255,255); + for (var i = 0; i < width; i++) { + var pasoi = floor(i/paso); + for (var j = 0; j < height; j++) { + var pasoj = floor(j/paso); + capas[n].set(i,j,c[pasoi][pasoj]); + } + } + capas[n].updatePixels(); + capas[n].mask(imgs[n]); + } + } +} + +function draw() { + background(200,225,225); + + // capas + for (var n = 0; n < ids.length; n++) { + tint(200,180,130); + image(imgs[n],0,0); + tint(255,min(frameCount*40,255)); + if (dim[n] != -1) image(capas[n],0,0); + else text("(Sin datos)", x[n], y[n]+5); + } + + // Mas datos + var mc = cmap.get(mouseX,mouseY); + for (var n = 0; n < colores.length; n++) { + if (compara(mc,color(colores[n]))) { + noTint(); + image(imgs[n],0,0); + } + } + + + // nombres + textSize(14); + for (var n = 0; n < nombres.length; n++) { + var nbr = nombres[n]; + fill(255); + noStroke(); + fill(0); + text(nbr, x[n], y[n]-10); + } +} + + + +function compara(c1, c2) { + return red(c1) == red(c2) && green(c1) == green(c2) && blue(c1) == blue(c2); +} diff --git a/graficos/parcelas.html b/graficos/parcelas.html new file mode 100644 index 0000000..a3eb0a8 --- /dev/null +++ b/graficos/parcelas.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/graficos/parcelas.js b/graficos/parcelas.js new file mode 100644 index 0000000..7372bc4 --- /dev/null +++ b/graficos/parcelas.js @@ -0,0 +1,78 @@ +var cuencas, cmap; +var ids,nombres,colores,x,y; +var capas,capaspg,imgs; +var dim, dimr; + +function preload() { + ids = new Array("norte","duero","ebro","pirineo","jucar","tajo","guadiana","guadalquivir","sur","segura","baleares"); + dimr = new Array(11,8.4,11,-1,6,7.5,8.6,5.3,5.9,6.6,-1); + dim = new Array(12,10,14.2,8,7.6,8,7.6,10,4.7,10,11); + imgs = new Array(); + capas = new Array(); + capaspg = new Array(); + for (var n = 0; n < ids.length; n++) { + imgs[n] = loadImage("data/"+ids[n]+".png"); + capaspg[n] = loadImage("data/capa-PGC-"+n+".png"); + if (dim[n] != -1) { + capas[n] = loadImage("data/capa-"+n+".png"); + } + } + cuencas = loadImage("data/cuencas.png"); + cmap = loadImage("data/cmap-cuencas.png"); +} + +function setup() { + createCanvas(800,519); + nombres = new Array("Norte","Duero","Ebro","Pirineo","Jucar","Tajo","Guadiana","Guadalquivir","Sur", "Segura", "Baleares y Canarias"); + colores = new Array("#f00","#0f0","#00f","#ff0","#0ff","#a00","#0a0","#00a","#aa0","#0aa", "#aaa"); + x = new Array(158,243, 429, 597, 432, 268, 226, 253, 362,432, 611); + y = new Array(77,158,140, 139,278, 263, 327, 393, 441, 368, 322); +} + + +function draw() { + background(200,225,225); + + // capas + for (var n = 0; n < ids.length; n++) { + if (dimr[n] != -1) image(capas[n],0,0); + else { + image(imgs[n],0,0); + } + } + + // Parcelas segun PGC + var mc = cmap.get(mouseX,mouseY); + for (var n = 0; n < colores.length; n++) { + if (compara(mc,color(colores[n]))) { + tint(255,100); + image(capaspg[n],0,0); + noTint(); + } + } + + + // nombres + textSize(14); + for (var n = 0; n < nombres.length; n++) { + var nbr = String.toUpperCase(nombres[n]); + if (dimr[n] != -1 || !compara(mc,color(colores[n]))) fill(0); + else fill(0); + textStyle(BOLD); + text(nbr, x[n], y[n]-10); + textStyle(NORMAL); + if (compara(mc,color(colores[n]))) { + text("Plan inicial: " + dim[n]+" Has", x[n], y[n]+5); + } + else { + if (dimr[n] != -1) text("Parcela media: " + dimr[n]+" Has", x[n], y[n]+5); + else text("(Sin datos)", x[n], y[n]+5); + } + } +} + + + +function compara(c1, c2) { + return red(c1) == red(c2) && green(c1) == green(c2) && blue(c1) == blue(c2); +}