Skip to content

Instantly share code, notes, and snippets.

@sfpgmr
Last active October 23, 2016 09:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sfpgmr/9d6cbae6f65de393196f to your computer and use it in GitHub Desktop.
Save sfpgmr/9d6cbae6f65de393196f to your computer and use it in GitHub Desktop.
three.jsのPathのシリアライズ

three.jsのPathのシリアライズ(2)

エドワード・マイブリッジの「Horse in motion」をInkscapeでトレースし、各馬をセル化したものをthree.jsのshapeに変換し表示しています。

今回はシリアライズ・デシリアライズのコードを最適化してみました。 http://bl.ocks.org/sfpgmr/cee0c48acb0854e2055c#pathSerializer.js

下記のURLから動くデモが見れます。Windows 10 Tech Preview 9926 のIE11では動作しませんでした。ひょっとするとIE11ではそもそも動作しないのかもしれません。原因は不明ですが。。

http://bl.ocks.org/sfpgmr/cee0c48acb0854e2055c

Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
viewBox="0 0 1536 952"
height="952"
width="1536"
inkscape:version="0.91 r13725"
sodipodi:docname="horse03.svg">
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1027"
id="namedview4202"
showgrid="false"
inkscape:zoom="5.6568542"
inkscape:cx="1309.0417"
inkscape:cy="588.34097"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g07" />
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="g00"
style="display:inline">
<path
id="horse00"
d="m 238.23047,56.955078 c -1.33296,0.02214 -3.03795,0.539691 -5.32227,1.494141 -3.20437,1.338871 -3.46494,1.775794 -3.43554,5.75 0.0175,2.365565 0.6452,5.109594 1.39453,6.097656 2.04285,2.69368 0.82333,5.361754 -3.78711,8.285156 -6.53639,4.144609 -14.63867,15.875848 -14.63867,21.195313 0,1.294866 -0.54656,3.337726 -1.21289,4.539066 -1.49533,2.69594 -2.07085,6.4729 -2.12305,13.93359 -0.0435,6.2237 -0.0537,6.23322 -6.91211,5.78125 -2.12731,-0.1402 -2.61059,0.17494 -2.14258,1.39453 0.87504,2.28034 -8.36582,2.09775 -21.60937,-0.42578 -12.55891,-2.39308 -19.68885,-2.5197 -27.03321,-0.48242 -3.00736,0.83422 -8.16679,1.94404 -11.46679,2.4668 -3.3,0.52274 -9.34195,2.08939 -13.42579,3.48242 -4.08384,1.39303 -8.22583,2.5332 -9.20507,2.5332 -0.97924,0 -3.37588,1.08274 -5.32617,2.40625 -1.9503,1.32351 -5.71497,2.70385 -8.36524,3.06836 -4.350882,0.5984 -12.5942,5.39913 -9.427734,5.49023 2.303196,0.0663 1.32956,3.03473 -1,3.04883 -1.2375,0.008 -3.15,0.24821 -4.25,0.53516 -1.292566,0.33719 -4.122301,-0.89465 -8,-3.48438 -3.3,-2.20392 -6.5625,-4.02151 -7.25,-4.03711 -1.892847,-0.0428 -1.501037,3.55917 0.898438,8.26172 1.181528,2.31559 2.19403,5.10614 2.25,6.20117 0.136549,2.67145 5.915143,5.40014 11.566406,5.46094 4.930141,0.053 12.43389,-2.35055 15.53516,-4.97851 1.1,-0.93212 3.47631,-2.18931 5.28125,-2.79297 1.80494,-0.60366 5.17994,-2.63001 7.5,-4.50196 2.32006,-1.87194 5.34375,-3.68989 6.71875,-4.04101 1.375,-0.35112 4.0135,-2.66225 5.86523,-5.13672 4.90272,-6.55146 6.5237,-6.06985 3.54688,1.05469 -2.03637,4.87372 -1.17876,11.03687 2.23437,16.0664 3.69464,5.44435 4.7117,8.53448 3.14063,9.53125 -0.70881,0.44971 -5.89961,0.82403 -11.53711,0.83204 -7.47246,0.0112 -10.27656,0.35434 -10.34766,1.26562 -0.0536,0.6875 -0.20119,7.1 -0.32813,14.25 -0.30032,16.91803 -0.9133,19.5 -4.63085,19.5 -3.1963,0 -5.94336,3.10724 -5.94336,6.72266 0,1.25262 0.25019,2.27734 0.55664,2.27734 2.09477,0 9.44336,-2.39525 9.44336,-3.07812 0,-0.46245 1.10516,-1.8711 2.45703,-3.13086 2.20957,-2.05901 2.52682,-3.37753 3.14648,-13.04102 0.68698,-10.71329 1.65323,-13.31416 4.66992,-12.58203 0.75369,0.18292 5.48837,5.05703 10.52149,10.83203 5.03312,5.775 10.10581,11.48703 11.27344,12.69336 1.98226,2.04798 2.01794,2.34453 0.52734,4.47266 -2.07309,2.95974 -2.07836,2.93504 1.24219,6.65429 5.15421,5.77309 6.02757,3.95317 4.19336,-8.73633 -0.90032,-6.22862 -1.11578,-6.58567 -7.41993,-12.27539 -3.57142,-3.22334 -6.78185,-6.77088 -7.13476,-7.88281 -0.85112,-2.68165 1.14284,-4.9229 4.39453,-4.9375 1.44516,-0.006 6.21086,-0.89179 10.58984,-1.9668 6.55395,-1.60894 8.5344,-2.57947 11.19922,-5.48828 4.2412,-4.62952 8.86019,-4.76147 17.25391,-0.49609 9.09633,4.62242 21.29664,7.87419 34.31836,9.14844 l 11.76758,1.15234 0,4.16602 c 0,4.17384 -2.97069,14.59869 -5.62305,19.73242 -0.77733,1.50454 -2.53616,3.01697 -3.9082,3.36133 -3.85127,0.9666 -10.51993,-0.39266 -15.32227,-3.12305 C 201.19425,204.11369 198.67776,203 197.99414,203 c -0.68361,0 -2.08179,-0.92549 -3.10547,-2.05664 -1.91868,-2.12012 -5.46129,-2.00765 -8.19336,0.25976 -3.31747,2.75325 -2.34925,3.25963 18.7461,9.8418 16.17463,5.04681 15.3358,4.44037 14.61328,10.58789 -0.3421,2.91079 -1.13715,6.42141 -1.76563,7.80078 -1.34273,2.94697 0.19775,5.56641 3.27344,5.56641 1.03266,0 1.87891,5.07554 1.87891,5.57617 23.53114,0.44671 14.14894,1.33088 11.97851,-1.85156 -1.04702,-1.76945 -5.30505,-7.56151 -7.17969,-8.17969 -3.20505,-1.0569 -3.29226,-1.23008 -3.01757,-6.0664 0.15552,-2.73815 0.65315,-6.10352 1.10546,-7.47852 0.4523,-1.375 1.87748,-5.875 3.16602,-10 1.6107,-5.15635 3.97986,-9.69613 7.58203,-14.5293 4.38672,-5.88584 6.04731,-7.32058 10.20703,-8.8164 2.73256,-0.98261 6.73759,-3.44479 8.90039,-5.47071 3.29077,-3.08252 4.14818,-4.7441 5.24805,-10.18359 1.56019,-7.71601 4.175,-13.39138 8.06445,-17.5 3.29458,-3.48022 9.94532,-15.8093 9.94532,-18.4375 0,-0.98587 0.92871,-2.9741 2.06445,-4.41797 1.13575,-1.44386 1.78179,-3.0843 1.43555,-3.64453 -1.12996,-1.82831 0.57881,-4.99101 3.51953,-6.51172 2.86924,-1.48374 14.04643,-2.08834 15.30664,-0.82812 0.36328,0.36328 4.24071,0.77005 8.61523,0.90429 7.39669,0.22697 8.06209,0.0785 9.50586,-2.125 3.30149,-5.0387 2.26145,-6.76996 -7.53515,-12.56445 -12.15292,-7.188229 -16.05261,-9.177997 -24.91211,-12.705078 -11.65703,-4.640816 -12,-4.696488 -12,-1.949219 0,2.903037 -8.36318,11.370402 -12.14258,12.294917 -1.89104,0.46259 -2.80664,1.47656 -3.22461,3.56641 -0.33879,1.69396 -1.22435,2.91797 -2.10938,2.91797 -0.83875,0 -1.52343,0.675 -1.52343,1.5 0,0.97548 -0.96162,1.49206 -2.75,1.47656 -5.70009,-0.0495 -10.1475,-1.80571 -13.78711,-5.44531 -3.70322,-3.70322 -3.7141,-3.74167 -2.38672,-7.763672 0.73367,-2.223048 1.3543,-8.029839 1.3789,-12.904297 0.0265,-5.26749 0.45278,-8.863186 1.05274,-8.863281 1.4069,-2.24e-4 3.76109,-4.002715 4.11719,-7 0.16336,-1.375 -0.42011,-4.4125 -1.29883,-6.75 -1.12481,-2.992107 -2.31552,-4.331816 -4.53711,-4.294922 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0000"
d="m 227.9668,106.86719 7.48632,2.74609 c 10.07417,3.69646 11.92536,5.11136 10.55079,8.06641 -0.58444,1.25641 -1.7375,2.55324 -2.5625,2.88281 -3.00795,1.20161 -15.51003,1.5117 -17.25,0.42773 -2.38327,-1.48471 -2.3764,-8.99611 0.0117,-11.94531 l 1.76368,-2.17773 z"
style="display:inline;opacity:1;fill:#000000" />
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame00"
width="358.99219"
height="238.99217"
x="22.490698"
y="29.846764" />
</g>
<g
id="g01"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame01"
width="358.99219"
height="238.99217"
x="398.17059"
y="31.170578" />
<path
id="horse01"
d="m 616.47852,54.251953 c -0.54152,0.0031 -1.18567,0.101256 -2.01172,0.251953 -1.9398,0.353878 -4.59203,1.330337 -5.89453,2.169922 -2.04892,1.320716 -2.29284,2.084778 -1.8125,5.666016 0.33045,2.463657 1.38931,4.816277 2.61718,5.810547 2.9548,2.392652 2.58391,3.543556 -1.8789,5.820312 -6.86341,3.501449 -15.05664,14.726039 -15.05664,20.626953 0,2.052204 -0.91344,4.042338 -2.65235,5.781254 -1.45833,1.45833 -2.39486,2.90787 -2.08203,3.2207 0.31283,0.31283 -0.24327,2.92597 -1.23437,5.80664 -1.54643,4.49479 -1.61684,5.67584 -0.5,8.33203 0.71606,1.70233 1.0396,3.3569 0.71875,3.67774 -0.90537,0.90537 -5.84502,0.68796 -8.65625,-0.38086 -1.97005,-0.74902 -2.72937,-0.61537 -3.40821,0.59765 -1.21383,2.16901 -8.4062,1.97154 -20.89843,-0.57422 -14.80729,-3.01753 -19.44711,-2.54741 -26.28711,2.66407 -8.3835,6.3875 -14.78673,8.70745 -33.60352,12.17187 -7.2972,1.34351 -18.76432,6.72754 -23.45703,11.01367 -1.86182,1.70051 -4.49093,3.0918 -5.8418,3.0918 -3.05703,0 -9.09765,-2.12565 -9.09765,-3.20117 0,-1.19699 -4.7821,-0.9628 -5.54493,0.27148 -0.36374,0.58854 -1.53298,1.39254 -2.5996,1.78711 -1.83085,0.67728 -1.76531,0.96681 1.17968,5.17969 1.71572,2.45439 3.87132,5.69318 4.79102,7.19727 3.29519,5.38905 12.18968,6.39651 17.38867,1.96874 7.59979,-6.4724 11.94848,-9.39813 14.37109,-9.66406 1.41636,-0.15548 4.45125,-2.11239 6.74414,-4.34961 4.45008,-4.34203 15.64241,-10.18845 19.50782,-10.18945 2.21083,-7.5e-4 2.29272,0.231 1.52734,4.25 -1.53649,8.06805 -1.0121,10.50404 3.18164,14.79883 2.14204,2.19364 6.04531,4.9605 8.67383,6.14844 2.62852,1.18794 4.7793,2.57161 4.7793,3.07617 0,2.03427 -4.2474,6.68246 -8.25196,9.02929 -2.33776,1.37002 -5.11177,3.44075 -6.16406,4.60352 -1.8902,2.08865 -1.88483,2.14398 0.42578,4.60352 1.28634,1.36924 2.85875,2.49023 3.4961,2.49023 1.70348,0 16.65246,7.94321 19.05859,10.12695 1.13545,1.0305 2.61193,1.87305 3.28125,1.87305 2.10509,0 2.47111,2.99051 0.61719,5.03906 -1.55172,1.71464 -1.62483,2.47581 -0.58008,5.96289 0.65869,2.19849 1.61706,3.99805 2.13086,3.99805 1.32142,0 3.9837,-5.4582 4,-8.20117 0.0307,-5.17274 1.07679,-6.79973 4.35156,-6.76563 6.16226,0.0642 21.63477,7.11941 21.63477,9.86524 0,1.30822 -5.23831,2.04367 -7.17383,1.00781 -2.93546,-1.57101 -5.82821,-0.99406 -8.51758,1.69531 -2.12062,2.12062 -2.34349,2.77779 -1.20508,3.56446 1.67019,1.15414 25.79559,0.35356 30.89649,-1.0254 1.925,-0.5204 4.73901,-1.225 6.2539,-1.56445 2.00979,-0.45036 3.31685,-1.81319 4.83594,-5.04492 3.10329,-6.60196 4.16239,-7.17013 9.16406,-4.92187 2.82045,1.26778 6.02743,1.81204 9.72657,1.65234 7.54793,-0.32584 23.08618,-4.38846 24.3164,-6.35742 1.93382,-3.09509 0.0385,-6.57288 -9.04687,-16.59766 -1.7875,-1.97231 -3.25,-4.04069 -3.25,-4.5957 0,-0.55501 1.575,-2.53867 3.5,-4.40821 1.925,-1.86953 3.5,-4.09409 3.5,-4.94335 0,-0.84927 0.9,-2.68752 2,-4.08594 1.12505,-1.43027 2,-4.05689 2,-6.00391 0,-2.22631 1.6485,-6.48843 4.62304,-11.94531 2.54348,-4.66607 5.67035,-11.47459 6.94727,-15.12891 1.27692,-3.65433 3.10667,-7.21815 4.0664,-7.91992 0.95973,-0.70177 1.20786,-1.27539 0.55274,-1.27539 -1.99916,0 -1.33534,-2.6753 1.5,-6.04492 2.59833,-3.08793 2.89681,-3.17904 8.64062,-2.6582 3.27198,0.29669 6.22322,0.97801 6.5586,1.51367 0.33537,0.53567 3.27243,0.91003 6.52539,0.83203 3.94879,-0.0947 6.05238,0.27286 6.33203,1.10742 0.61554,1.83692 4.70282,1.52186 6.48633,-0.5 0.84903,-0.9625 1.85266,-3.19782 2.22851,-4.9668 0.65254,-3.0713 0.42088,-3.38368 -5.13867,-6.93164 -3.20213,-2.04352 -8.52226,-5.776076 -11.82226,-8.294919 C 667.85291,88.356236 656.64201,82 653.15039,82 c -1.79936,0 -6.69117,2.3386 -6.70117,3.203125 -0.004,0.386763 -1.92031,1.591882 -4.25781,2.677734 -7.44309,3.45758 -7.64587,3.769718 -4.25,6.535157 l 3,2.443359 -3.85547,1.626953 c -3.21918,1.359493 -3.78187,2.020522 -3.40235,4.005862 0.72079,3.77055 -0.67717,4.83875 -6.92968,5.29101 -5.43385,0.39305 -6.14105,0.18703 -10.01563,-2.92968 -5.2517,-4.22447 -5.62987,-5.160866 -3.28906,-8.136723 2.95304,-3.754189 4.96066,-10.65435 4.97656,-17.101563 0.0123,-4.982727 0.39904,-6.241538 2.51563,-8.203125 3.38962,-3.141398 3.3072,-7.998173 -0.22461,-13.392578 -1.91338,-2.922432 -2.61375,-3.776796 -4.23828,-3.767578 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0100"
d="m 606.74609,107 c 2.27536,0 13.16143,4.1174 14.60938,5.52539 1.95176,1.89792 -2.2e-4,4.12535 -4.77344,5.45117 -6.57931,1.82747 -15.14062,0.92872 -15.14062,-1.58984 0,-2.41063 3.94231,-9.38672 5.30468,-9.38672 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0101"
d="m 560.64844,167 c 0.45894,0 4.77348,1.53865 9.58789,3.41992 4.81441,1.88127 13.48366,4.3338 19.26367,5.44922 5.78002,1.11543 11.28087,2.32341 12.22461,2.68555 1.83931,0.70581 2.3377,3.94349 0.75781,4.91992 -0.52659,0.32545 -1.7136,3.28901 -2.63867,6.58594 -0.92507,3.29693 -2.06963,6.23285 -2.54297,6.52539 -0.47333,0.29253 -0.85937,1.3891 -0.85937,2.4375 0,2.98555 -5.76542,8.81722 -9.83399,9.94726 -5.06495,1.40679 -4.71907,1.52853 -9.43359,-3.36914 -2.92415,-3.03774 -5.77858,-4.85647 -9.23242,-5.88476 -10.00511,-2.97876 -16.38393,-6.40008 -17.07618,-9.15821 -1.0035,-3.99826 3.01636,-17.36589 6.23047,-20.7207 C 558.59122,168.27691 560.1895,167 560.64844,167 Z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0102"
d="m 541.94141,177.5 0,6.91602 c 0,3.80416 -0.45,7.05081 -1,7.21289 -1.3626,0.40154 -11.01579,-4.33929 -12.51563,-6.14649 -2.61669,-3.15292 2.29785,-7.08248 9.58984,-7.66797 L 541.94141,177.5 Z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0103"
d="m 618.45703,183.83789 c 1.23897,-0.0973 2.45524,0.52687 5.22852,2.11523 7.86328,4.50364 12.00685,9.19433 9.94336,11.25782 -0.5481,0.5481 -3.85144,1.60889 -7.3418,2.35742 -3.49035,0.74853 -7.4707,1.30503 -8.8457,1.23633 -6.29676,-0.3146 -9.16207,-1.06096 -9.72852,-2.53711 -0.98357,-2.56313 4.60381,-11.83805 8.15039,-13.5293 1.09939,-0.52426 1.85037,-0.84202 2.59375,-0.90039 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g02"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame02"
width="358.99219"
height="238.99217"
x="771.50391"
y="31.003906" />
<path
id="horse02"
d="m 996.7793,52.945312 c -1.79495,-0.03288 -3.83887,0.671209 -6.19141,2.105469 -3.08095,1.878344 -3.29811,2.333078 -2.68164,5.619141 0.36893,1.966553 1.16059,4.360878 1.75977,5.320312 1.65631,2.652177 0.3172,4.685126 -3.56836,5.414063 -2.62241,0.491966 -5.0601,2.346961 -9.69727,7.376953 -6.96374,7.553637 -8.17299,9.904618 -7.31055,14.216797 0.32977,1.648871 0.15824,3.561135 -0.38086,4.25 -1.37398,1.7557 -3.26757,9.957203 -3.26757,14.148433 0,1.93057 0.52277,4.65735 1.16211,6.06055 0.63934,1.40321 0.86109,2.85375 0.49218,3.22266 -0.3689,0.3689 -3.44917,0.15473 -6.84375,-0.47657 -4.29722,-0.79915 -6.55428,-0.83197 -7.42968,-0.10546 -1.37101,1.13784 -5.98117,0.71882 -19.28321,-1.75391 -4.62103,-0.85901 -10.95525,-1.37809 -14.07617,-1.15234 -5.8399,0.42242 -5.89712,0.45166 -22.31641,11.71875 -4.05878,2.78517 -6.35757,3.50216 -15,4.67187 -19.33421,2.6168 -25.99004,5.59635 -38.4121,17.19531 l -2.43946,2.27735 -3.0039,-2.52735 c -3.81784,-3.2125 -5.34243,-3.17758 -8.4629,0.18946 -2.31493,2.49785 -2.38069,2.81448 -0.82617,3.95117 1.04715,0.76573 1.43821,1.88947 1.0293,2.95508 -0.99944,2.60448 4.69233,7.37695 8.79883,7.37695 3.4579,0 10.33995,-3.99655 15.28515,-8.87695 5.37854,-5.30808 12.0588,-9.06082 15.37891,-8.64063 1.69819,0.21492 3.69571,0.89446 4.43945,1.51172 1.83444,1.52245 13.09531,0.20835 14.69141,-1.71484 0.99174,-1.19496 0.76183,-1.81278 -1.23438,-3.32618 -2.17338,-1.64773 -2.27947,-2.02334 -0.94921,-3.32617 1.46987,-1.43955 3.2552,-1.98256 5.75,-1.74609 0.83509,0.0791 1.25,1.95455 1.25,5.65039 0,3.04266 0.60654,6.9872 1.34961,8.76563 1.99093,4.76494 7.79941,9.344 14.36328,11.32226 8.24888,2.4861 8.55852,2.89758 6.92187,9.20703 -0.74986,2.89078 -2.29549,6.24985 -3.43359,7.46485 -1.13809,1.21499 -2.53308,3.43233 -3.09961,4.92773 -0.87977,2.32227 -0.7108,2.94227 1.15625,4.25 1.20226,0.8421 3.71979,1.53125 5.59375,1.53125 6.09488,0 19.42187,4.17476 22.93164,7.18359 2.13118,1.827 4.41397,2.8155 6.5,2.8125 4.41779,-0.006 19.80012,4.88708 22.06641,7.01953 1.48046,1.39303 3.6259,1.73262 10.74218,1.69922 10.2576,-0.0481 11.31415,-0.70828 12.36133,-7.71484 1.14202,-7.6412 4.77632,-19.4353 6.39258,-20.75 0.98747,-0.80323 4.77279,-1.23503 10.59379,-1.20703 16.518,0.0794 21.9756,2.31799 19.1191,7.8418 -1.8923,3.65932 -4.3555,5.66735 -9.4375,7.6914 -3.3136,1.31974 -4.8044,1.47758 -6.1289,0.65039 -2.4451,-1.52698 -8.3817,1.49491 -8.8066,4.48242 -0.2993,2.10398 0.072,2.22232 7.8574,2.5 l 8.1718,0.29102 8.8926,-8.76172 c 11.3277,-11.16304 11.3891,-11.88683 1.5625,-18.35742 -4.0309,-2.65428 -8.0396,-5.76838 -8.9082,-6.91992 -1.4625,-1.9388 -1.3974,-2.4508 0.8711,-6.92578 1.4823,-2.92425 2.5904,-7.0776 2.8067,-10.51758 0.2203,-3.50313 1.3298,-7.60553 2.8925,-10.68946 1.3948,-2.75247 3.507,-7.88047 4.6914,-11.39648 1.1845,-3.51601 2.6567,-7.30166 3.2735,-8.41211 0.6167,-1.11044 1.0253,-2.50179 0.9082,-3.0918 -0.1171,-0.59001 0.9481,-2.16288 2.3652,-3.49414 2.0528,-1.92846 3.5874,-2.40072 7.5508,-2.32812 6.526,0.11947 8.5805,1.99062 3.2578,2.9668 -4.1056,0.75295 -9.0523,3.42564 -6.3515,3.43164 0.8098,0.002 4.7825,-0.98002 8.83,-2.17969 6.3732,-1.88901 7.7799,-2.00838 10.5,-0.90039 5.9277,2.41454 7.6318,2.43599 10.0918,0.125 1.2908,-1.21267 2.5406,-3.52522 2.7774,-5.13867 0.3514,-2.39449 -0.1696,-3.39112 -2.8321,-5.42188 -1.794,-1.36837 -3.6289,-2.49019 -4.0781,-2.49219 -0.4492,-0.002 -4.0743,-2.81477 -8.0547,-6.249996 -7.0609,-6.093917 -11.6308,-8.829946 -23.6504,-14.154297 -4.4945,-1.990895 -6.2105,-2.339349 -7.25,-1.476563 -0.7491,0.621676 -1.3613,1.670249 -1.3613,2.332032 0,1.667471 -4.0883,5.2775 -6.4648,5.708984 -1.4117,0.256304 -1.974,1.178441 -2,3.28125 -0.031,2.45614 -0.5636,3.063767 -3.3321,3.785156 -3.7453,0.975877 -5.0145,3.095304 -3.1777,5.308594 1.0178,1.22633 0.917,1.87498 -0.543,3.48828 -1.3519,1.49388 -3.08,1.98047 -7.0234,1.98047 -4.8389,0 -5.53762,-0.31774 -9.35548,-4.25 -4.98793,-5.137429 -5.66691,-6.953673 -3.72265,-9.955078 2.70737,-4.179433 5.75461,-13.71212 5.43359,-16.996094 -0.26339,-2.694446 0.14588,-3.458476 2.45312,-4.580078 6.04402,-2.938166 7.15912,-8.890924 2.89652,-15.46875 -1.6206,-2.50071 -3.51842,-3.762409 -5.8262,-3.804688 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0200"
d="m 985.09961,106.21875 c 1.61974,0.004 4.15029,1.08538 8.0293,3.14648 l 6.18945,3.28711 -2.48047,2.67383 c -1.9473,2.10008 -3.402,2.67383 -6.7832,2.67383 -4.94201,0 -7.61328,-2.19167 -7.61328,-6.24609 0,-3.76446 0.57568,-5.54035 2.6582,-5.53516 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0201"
d="m 944.97656,168.32812 c 0.84315,0.0645 3.70687,1.12303 6.91602,2.57813 7.31274,3.31576 18.36716,6.55507 25.84961,7.57617 3.89386,0.53137 4.98027,1.1278 5.75,3.15235 1.39214,3.6616 1.20081,19.71324 -0.25196,21.16601 -1.82717,1.82717 -11.04002,1.20205 -13.25,-0.89844 -0.5225,-0.49662 -1.689,-0.90234 -2.59375,-0.90234 -0.90476,0 -2.4977,-0.94111 -3.53906,-2.0918 -1.40879,-1.5567 -2.68888,-1.96294 -5,-1.58789 -2.81883,0.45743 -3.06357,0.28659 -2.6582,-1.83398 0.38158,-1.99611 -0.11549,-2.4925 -3.40625,-3.40625 -2.11871,-0.58831 -4.36031,-1.07122 -4.98047,-1.07422 -2.0442,-0.0101 -3.42947,-2.71523 -4.37891,-8.54883 -0.83399,-5.12426 -0.13426,-12.64895 1.31055,-14.09375 0.0331,-0.0331 0.11197,-0.0444 0.23242,-0.0352 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0202"
d="m 929.06445,178 c 2.02889,0 5.37696,5.06492 5.37696,8.13477 0,3.13533 -1.2414,3.43205 -7.84375,1.87109 -5.55751,-1.31394 -5.9727,-2.56835 -2.15821,-6.50391 1.86682,-1.92607 3.94781,-3.50195 4.625,-3.50195 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g03"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame03"
width="358.99219"
height="238.99217"
x="1145.5039"
y="30.503914" />
<path
id="horse03"
d="m 1342.0059,239.03316 c 0,0 -2.6766,0.88564 -5.2983,0.90907 0,0 -4.6373,-0.52548 -1.267,-2.9422 l 0,-2.46482 c 0,-2.43858 -2.448,-4.53518 -5.2954,-4.53518 -1.2048,0 -14.5387,-12.53535 -19.8209,-18.63388 -0.889,-1.02637 -3.1856,-3.07024 -5.1036,-4.54194 -2.9826,-2.28854 -3.5779,-3.44638 -4.1132,-8 -0.9399,-7.9952 -3.4084,-15.36353 -6.2972,-18.79663 -1.4195,-1.68702 -5.7959,-5.12676 -9.7253,-7.64389 -14.3924,-9.21956 -20.2276,-17.49098 -19.4877,-27.62402 0.2706,-3.70617 0.033,-4.29952 -1.8263,-4.56654 -2.4397,-0.35032 -5.3304,3.08208 -5.3304,6.32941 0,4.6284 -4.4409,5.6621 -12.5287,2.91624 -4.3709,-1.48398 -4.7724,-1.45866 -8.1117,0.51157 -1.9322,1.14005 -3.8632,1.85648 -4.291,1.59207 -0.4278,-0.26441 -1.8217,0.63038 -3.0976,1.98843 -1.2758,1.35805 -2.6712,2.46918 -3.1009,2.46918 -1.1046,0 -6.6337,3.84394 -14.2746,9.92404 -7.8896,6.27787 -10.8754,6.50964 -13.8621,1.07596 -1.0581,-1.925 -2.8484,-4.50076 -3.9784,-5.7239 -1.8102,-1.9594 -1.8633,-2.29732 -0.446,-2.84117 0.8847,-0.33949 3.2823,-0.0649 5.328,0.61029 3.6952,1.21951 3.7447,1.19883 7.5666,-3.15884 2.1158,-2.41251 4.5057,-5.59199 5.3107,-7.06551 0.8051,-1.47352 2.3125,-2.94852 3.3499,-3.27778 1.0374,-0.32926 3.4343,-2.10219 5.3265,-3.93985 3.7683,-3.65973 5.9181,-4.12303 32.4034,-6.9833 11.1463,-1.20374 12.5178,-1.58677 17.5,-4.88734 14.7379,-9.7634 19.5315,-10.7746 37.6428,-7.94066 10.9592,1.71482 12.4612,1.75759 14.3857,0.4096 1.7204,-1.20502 2.7699,-1.28332 5.2632,-0.39271 1.7128,0.61184 4.9702,1.40362 7.2386,1.75952 5.5966,0.87808 6.4563,-0.85814 2.4643,-4.97688 -3.6937,-3.81085 -4.2727,-8.4011 -1.69,-13.39565 0.9374,-1.81268 1.4435,-4.1175 1.1248,-5.12183 -0.4062,-1.27985 0.027,-1.984703 1.4485,-2.35641 1.5262,-0.399109 2.0289,-1.357734 2.0317,-3.873964 0,-4.281457 2.6114,-8.502166 9.7668,-15.814553 4.1714,-4.263008 6.908,-6.167485 10.0631,-7.003237 3.5178,-0.931848 4.1903,-1.465832 3.5726,-2.836875 -0.4185,-0.928925 -0.9473,-3.793586 -1.1752,-6.365913 -0.3901,-4.405563 -0.2315,-4.771416 2.7336,-6.304751 4.4126,-2.281821 11.3939,-1.704915 11.88,0.981709 0.199,1.1 0.9494,2.675 1.6676,3.5 1.6367,1.880188 1.0147,7.760311 -1.0638,10.057003 -0.8528,0.942394 -2.8155,1.966411 -4.3614,2.275594 -2.6922,0.538444 -2.8315,0.85304 -3.3043,7.460195 -0.3644,5.093672 -1.2392,8.224465 -3.344,11.968895 l -2.8505,5.07085 2.8193,5.572277 c 3.1973,6.31927 7.5773,9.61354 12.7105,9.55975 l 3.382,-0.0354 -2.5,-1.39225 c -2.3374,-1.30173 -2.3749,-1.44075 -0.5764,-2.13817 1.058,-0.41026 2.7455,-1.5678 3.75,-2.57232 1.0045,-1.00451 3.0639,-1.8364 4.5764,-1.84863 l 2.75,-0.0222 -2.5,-1.95559 -2.5,-1.95553 3.45,-0.0222 c 2.6833,-0.0173 3.1833,-0.288911 2.25,-1.222244 -1.8974,-1.897391 -1.4467,-2.531142 2.3,-3.234022 2.0951,-0.393039 3.5,-1.240526 3.5,-2.111291 0,-0.800108 -0.45,-1.454717 -1,-1.454717 -0.55,0 -1,-0.45 -1,-1 0,-0.55 1.3409,-1 2.9798,-1 1.6388,0 4.7643,-0.714055 6.9455,-1.58679 3.5995,-1.440224 4.4557,-1.443434 9.2702,-0.03476 6.1366,1.795499 14.0386,6.650811 18.9486,11.642804 1.8819,1.9133 6.712,6.50503 10.7336,10.20384 7.2214,6.64177 7.2959,6.7615 6.0116,9.66279 -0.7152,1.61573 -2.7508,3.62938 -4.5237,4.47479 -2.9743,1.41837 -3.4038,1.39511 -5.5602,-0.3011 -2.6513,-2.08554 -8.9671,-4.04771 -13.0554,-4.056 -1.5125,-0.003 -2.75,-0.40831 -2.75,-0.90054 0,-1.24563 -8.0101,-1.95759 -10.7756,-0.95777 -1.2516,0.45249 -2.5789,1.61697 -2.9496,2.58772 -0.3707,0.97076 -1.0475,2.21501 -1.5041,2.76501 -0.4566,0.55 -2.8689,5.24892 -5.3607,10.44204 -3.0521,6.36113 -4.3422,10.19209 -3.9535,11.74074 0.8324,3.3164 -1.3459,11.2974 -4.0941,15.0005 -1.2993,1.7508 -2.3624,3.62107 -2.3624,4.15616 0,0.98429 3.6605,1.58168 16.6628,2.71932 11.1928,0.97932 11.0843,0.74715 12.3621,26.44124 0.2554,5.13575 -1.445,16 -2.5043,16 -3.5116,0 -5.8637,-6.64043 -3.1499,-8.89269 1.032,-0.85652 1.281,-3.41925 1.0076,-10.37245 -0.5845,-14.86248 -1.011,-15.69375 -8.065,-15.71955 -4.6108,-0.0169 -20.1518,3.42316 -21.4842,4.75558 -0.8745,0.87449 0.6854,2.8139 6.0217,7.48682 1.7321,1.51675 3.1492,3.55412 3.1492,4.5275 0,2.96436 -2.8237,6.01772 -6.2512,6.7597 -1.7869,0.38681 -5.8235,1.99744 -8.9703,3.57919 -3.1468,1.58174 -6.408,2.8759 -7.2471,2.8759 -3.6157,0 -13.8613,-12.06004 -11.4904,-13.52531 2.7703,-1.71215 10.3106,2.44539 9.2846,5.11927 -1.3441,3.50256 14.883,0.11356 17.1694,-3.58579 1.2485,-2.02016 -1.5524,-3.65047 -12.495,-7.27307 -8.6169,-2.85265 -12.6521,-3.59664 -22.5,-4.14843 -14.8788,-0.83368 -24.1074,-2.21526 -31.2791,-4.68271 -8.4121,-2.89416 -8.425,-2.88684 -7.654,4.34604 0.3664,3.4375 1.1762,6.77077 1.7996,7.40726 1.5504,1.58296 9.1365,4.01977 18.4072,5.91277 4.2495,0.8677 8.6263,2.13345 9.7263,2.81277 1.1,0.67933 4.101,2.01938 6.6689,2.9779 4.3939,1.64014 8.4706,5.66649 7.1124,7.02468 -0.3381,0.33804 -2.7593,0.61462 -5.3806,0.61462 -3.6724,0 -4.8942,-0.40413 -5.325,-1.76137 -0.3445,-1.08564 -2.3845,-2.22493 -5.3173,-2.96972 -2.6171,-0.6646 -8.1334,-2.13998 -12.2584,-3.27862 -4.125,-1.13865 -10.3125,-2.34235 -13.75,-2.67488 -7.0128,-0.67842 -7.4556,-0.1366 -4.8955,5.99064 1.1428,2.73511 17.2862,18.69395 18.9101,18.69395 0.2945,0 2.1132,1.57781 4.0417,3.50625 1.9284,1.92844 4.8911,3.78323 6.5837,4.12175 1.6927,0.33853 2.8566,0.97296 2.5866,1.40984 -0.27,0.43688 -0.027,2.0137 0.5393,3.50404 l 1.0303,2.70972 c 3.573,3.31768 3.1172,2.16608 -1.3249,2.61527 -2.0085,1.96855 -4.2822,1.6232 -4.156,-0.83373 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g04"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame04"
width="358.99219"
height="238.99217"
x="26.003906"
y="274.00391" />
<path
id="horse04"
d="m 245.47266,300.00977 c -1.99099,0.0339 -5.15078,0.76866 -7.85547,1.99609 -3.50006,1.58837 -4.21363,2.34582 -3.75,3.97852 0.31492,1.10901 0.84928,3.02812 1.1875,4.26562 0.33821,1.2375 1.51107,3.229 2.60547,4.42578 2.25178,2.46242 1.65395,4.32422 -1.38868,4.32422 -1.12805,0 -4.7346,1.43093 -8.01562,3.17969 -6.28295,3.34878 -10.22916,7.97903 -13.93359,16.35351 -1.0867,2.45666 -2.45206,4.4668 -3.03516,4.4668 -0.58307,0 -0.80785,0.65678 -0.5,1.45898 0.30784,0.80224 -0.59832,3.53016 -2.01367,6.0625 -3.19637,5.71892 -2.75741,9.74216 1.57031,14.375 1.70327,1.82336 3.09766,3.94215 3.09766,4.70899 0,1.75461 -6.64318,1.88184 -12.14844,0.23242 -3.02438,-0.90609 -4.39644,-0.88497 -6.23242,0.0977 -1.93004,1.03292 -4.40849,0.94584 -13.73828,-0.48828 -17.56383,-2.6998 -20.42311,-2.34354 -33.83204,4.21875 l -11.45117,5.60351 -19.12304,0.61524 c -18.665584,0.60046 -19.22109,0.68029 -23.242192,3.34179 -2.265808,1.4997 -5.640311,4.1997 -7.498047,6 -1.857736,1.8003 -4.910228,4.099 -6.783203,5.10742 -2.874084,1.54742 -3.147942,1.97705 -1.759766,2.75391 1.3792,0.77184 1.477202,1.5249 0.611329,4.66602 -1.898945,6.88877 -5.006639,12.29891 -7.933594,13.8125 -1.57875,0.8164 -2.869141,1.9371 -2.869141,2.49023 0,2.34265 3.243495,1.92058 7.544922,-0.98242 2.537453,-1.71251 6.039379,-3.72397 7.783203,-4.4707 1.743825,-0.74672 7.31813,-5.15362 12.386719,-9.79297 11.58589,-10.60472 13.29048,-11.57108 17.64063,-9.99805 5.17486,1.87126 7.27743,1.4351 10.83007,-2.24219 2.12812,-2.2028 5.20892,-3.97569 8.61133,-4.95898 6.15041,-1.77747 7.25341,-0.85683 4.74414,3.95508 -0.84157,1.61384 -1.53215,4.45699 -1.53515,6.31836 -0.007,4.06335 7.39184,19.98444 11.85156,25.50195 1.72822,2.13813 3.13972,4.61313 3.13672,5.5 -0.0125,3.62306 -2.2311,9.16967 -6.00196,15.0039 -2.19597,3.39759 -3.99218,6.65425 -3.99218,7.23829 0,0.58404 0.80945,2.25694 1.79882,3.71679 0.98937,1.4599 3.50475,6.4793 5.58985,11.1543 2.08509,4.675 4.65064,10.13684 5.70117,12.13672 2.37706,4.52517 4.76122,6.47933 2.49219,6.70312 -0.9625,0.0949 -1.15703,0.83158 2.41797,1.23047 l 0.66601,-1.66601 c 3.575,0.39889 8.35,0.17095 15.5,-0.0996 0,0 -0.0175,-0.0371 -0.98242,-3.27344 C 171.2544,476.6606 169.71682,476 166.56836,476 c -3.86105,0 -9.11817,-3.2318 -9.13477,-5.61523 -0.003,-0.48693 -0.71594,-2.23477 -1.58398,-3.88477 -5.42411,-10.3103 -5.19222,-13.90587 1.52734,-23.79102 2.16482,-3.18467 4.4675,-7.45967 5.11719,-9.5 1.22929,-3.86056 7.4791,-11.20898 9.5332,-11.20898 1.96984,0 8.17225,7.57864 11.34375,13.86133 l 2.98829,5.92187 11.79101,5.66797 c 6.48466,3.11693 13.93344,7.04136 16.55273,8.72071 3.45105,2.21262 5.10796,2.76662 6.01758,2.01171 0.90019,-0.7471 1.95807,-0.5026 3.73828,0.86524 2.83611,2.17913 6.23937,2.39613 10.2793,0.65625 2.44758,-1.05411 2.63531,-1.42597 1.5,-2.96875 -0.79173,-1.07589 -3.584,-2.13551 -7.16211,-2.7168 -6.8398,-1.11117 -27.71713,-10.79246 -31.97656,-14.82812 -3.49326,-3.30973 -6.25714,-8.5337 -7.21484,-13.63868 l -0.72266,-3.85351 3.88867,0.59375 c 2.13922,0.32637 6.59063,1.05565 9.89063,1.62109 5.18113,0.88775 30.61554,1.35169 55.5,1.01172 9.00932,-0.12309 20,0.95367 20,1.95899 0,0.39855 -1.4625,2.91518 -3.25,5.59375 -1.7875,2.67857 -3.7,5.7122 -4.25,6.74023 -0.78702,1.47104 -1.74544,1.75053 -4.5,1.31445 -4.17268,-0.66058 -5.52173,0.079 -6.9375,3.80274 -2.15285,5.66244 -1.49893,5.80645 8.77148,1.93164 7.19343,-2.71393 7.39037,-2.88312 10.24609,-8.76758 1.60149,-3.3 3.93221,-7.2712 5.17969,-8.82422 2.22903,-2.77498 2.35449,-2.8022 7.25391,-1.60351 2.74196,0.67084 6.25422,1.85634 7.80469,2.63476 4.5046,2.26159 16.68164,14.76346 16.68164,17.12695 0,2.21114 1.72213,3.4645 6.25,4.54688 1.7674,0.42249 2.75,0.2528 2.75,-0.47461 0,-0.93016 -6.98685,-11.14481 -9.74805,-14.25195 -1.67716,-1.88727 -14.03209,-11.74047 -18,-14.35547 -3.2366,-2.13305 -4.13311,-3.29041 -3.77539,-4.86524 0.25814,-1.13639 -0.21926,-3.04889 -1.06055,-4.25 C 290.63165,411.43356 289.33334,411 285.32617,411 c -5.04813,0 -13.73439,-1.69381 -15.15429,-2.95508 -0.42316,-0.37588 -0.0856,-2.62173 0.75,-4.99023 0.83564,-2.36849 1.51953,-6.84605 1.51953,-9.94922 0,-4.22499 0.57938,-6.51553 2.31054,-9.12305 1.2715,-1.91517 3.57964,-5.95742 5.12891,-8.98242 3.16502,-6.17981 4.00476,-6.9564 7.56055,-7 1.93446,-0.0237 2.16561,-0.24108 1.02734,-0.96094 -2.297,-1.45267 -0.47645,-2.36341 4.57422,-2.28711 5.96197,0.0901 8.50186,2.19799 2.84765,2.36328 -2.1725,0.0635 0.38523,0.66871 5.6836,1.34571 6.06356,0.77477 10.88097,1.98282 13,3.25976 1.85163,1.11579 4.04219,1.80366 4.86719,1.52735 2.54085,-0.85098 6,-4.50398 6,-6.33594 0,-2.32919 -23.33902,-25.70243 -29.06836,-29.11133 -7.94653,-4.72808 -9.24362,-4.9526 -13.17774,-2.2793 -1.9233,1.30692 -4.79373,2.65988 -6.37695,3.00782 -4.45989,0.98012 -8.37695,2.6292 -8.37695,3.52539 0,0.44674 1.2375,0.98347 2.75,1.19336 2.03763,0.28276 1.3492,0.5986 -2.65625,1.21679 -4.73474,0.73074 -5.18834,0.99261 -3.65039,2.11719 2.38083,1.7409 1.2577,3.15315 -3.54102,4.44531 -2.20737,0.59439 -4.765,1.95482 -5.68164,3.02539 -2.32451,2.71482 -5.40513,2.43237 -10.42188,-0.95898 -3.85734,-2.60758 -8.79882,-8.01759 -8.79882,-9.63086 0,-0.33955 1.76184,-3.07769 3.91601,-6.08594 3.12154,-4.35919 3.91602,-6.35623 3.91602,-9.83398 0,-4.46613 1.51066,-8.54297 3.16406,-8.54297 0.50922,0 1.84694,-0.98895 2.97266,-2.19727 2.52077,-2.70573 2.238,-6.90315 -0.79493,-11.80273 -1.1916,-1.925 -2.16792,-3.8375 -2.16992,-4.25 -0.003,-0.52876 -0.77806,-0.7606 -1.97265,-0.74023 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0400"
d="m 231.5918,352 c 2.77686,0 8.7727,3.18642 9.33593,4.96094 0.2792,0.87969 1.95284,2.14399 3.71875,2.81054 3.64309,1.37512 3.05954,2.44967 -2.20507,4.05469 -7.2423,2.20795 -12.5673,2.46396 -14.33985,0.69141 -0.91347,-0.91346 -1.66015,-2.51264 -1.66015,-3.55469 0,-3.29303 3.25769,-8.96289 5.15039,-8.96289 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g05"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame05"
width="358.99219"
height="238.99217"
x="398.50391"
y="274.50391" />
<path
id="horse05"
d="m 620.43555,303.03906 c -0.64429,0.005 -1.46369,0.091 -2.54493,0.21289 -2.43147,0.27406 -5.56964,1.25063 -6.97265,2.16993 -2.22925,1.46064 -2.46742,2.13893 -1.89258,5.375 0.36179,2.03665 1.05382,4.12984 1.53711,4.65234 2.03467,2.19975 0.84349,4.48271 -2.87109,5.50195 -4.6558,1.27751 -7.61066,3.22999 -14.125,9.33008 -5.82816,5.45754 -8.50663,9.94507 -7.61329,12.75977 0.33885,1.06759 0.26159,2.50679 -0.17187,3.19921 -0.43347,0.69242 -0.80551,1.70977 -0.82813,2.25977 -0.0226,0.55 -1.09107,2.97791 -2.37304,5.39648 -2.99413,5.64875 -2.3682,8.89987 2.85351,14.83204 2.20405,2.50393 4.00782,5.00707 4.00782,5.5625 0,0.65296 -3.68307,0.80131 -10.41797,0.41992 -8.03026,-0.45475 -10.52933,-0.29242 -10.91211,0.70508 -0.53082,1.38329 -0.12695,1.42531 -19.36914,-2.02149 -11.32005,-2.02773 -11.26362,-2.03671 -31.05664,4.97461 -9.33713,3.30751 -21.1263,4.75931 -32.23633,3.9707 -11.02574,-0.78263 -16.27492,0.47126 -23.77539,5.67774 -4.6849,3.25204 -6.58822,3.97947 -10.40235,3.98047 -2.56752,7.2e-4 -5.38002,0.27552 -6.25,0.60937 -2.75214,1.05609 -1.71326,2.39258 1.85938,2.39258 3.70241,0 5.6716,1.63545 3.13867,2.60742 -2.06281,0.79158 -7.57812,10.54352 -7.57812,13.39844 0,1.24424 -0.52563,4.01619 -1.16797,6.16016 -1.54655,5.1619 0.0772,7.14891 3.02539,3.70117 1.11326,-1.30191 5.98915,-6.41719 10.83398,-11.36719 8.15466,-8.33168 9.43979,-9.23858 17.3086,-12.20508 4.675,-1.76246 10.75,-3.47895 13.5,-3.81445 2.75,-0.3355 8.93748,-1.51854 13.75,-2.62891 4.81251,-1.11038 9.21507,-1.8632 9.7832,-1.67383 0.56813,0.18938 -0.1551,1.91504 -1.60547,3.83399 l -2.63672,3.48828 0.57617,14.29297 0.57618,14.29297 -4.72071,4.57031 c -2.59735,2.51324 -6.52265,5.69176 -8.72265,7.06445 -5.03383,3.14086 -6.49982,4.99203 -6.50782,8.22071 -0.003,1.40738 -0.67839,3.84845 -1.5,5.42382 -0.82161,1.57537 -1.49218,3.3876 -1.49218,4.02735 0,0.63975 -0.78044,2.27366 -1.73243,3.63281 -0.95199,1.35916 -1.7411,2.92194 -1.7539,3.47266 -0.0342,1.4676 -3.7046,10.84141 -4.67969,11.95117 -1.46491,1.66722 -0.93468,2.24163 3.7207,4.01953 3.67753,1.40447 6.09655,2.35374 5.84961,4.08594 -0.24797,1.73951 0.49261,4.9129 -1.40429,6.64453 4.16849,-0.0364 6.91076,1.6469 10.54101,0.3789 0,0 4.77305,0.59312 3.7168,-0.46484 -0.71053,-0.71168 -4.64876,-7.41544 -5.73633,-9.4375 C 490.87531,476.65371 489.24352,475 488.33594,475 c -4.34916,0 -4.823,-5.89037 -1.04688,-13.01758 1.01459,-1.91497 2.12829,-4.64386 2.47461,-6.0625 0.91232,-3.73703 23.9009,-22.85482 34.33203,-28.55078 2.96956,-1.62157 3.30845,-1.62203 5.74219,-0.0273 4.12525,2.70297 7.25202,10.11113 8.08399,19.15625 0.72973,7.93387 2.06849,11.05092 6.75585,15.73828 0.96993,0.96993 1.76368,2.17195 1.76368,2.66992 0,0.49796 1.575,2.78968 3.5,5.09375 1.925,2.30407 3.5,4.65954 3.5,5.23438 0,0.57483 0.69011,1.55008 1.53515,2.16796 0.84504,0.61791 2.15174,2.91861 2.9043,5.11133 L 559.25,486.5 l 9.5957,0.28711 c 6.13787,0.18309 9.59571,-0.0872 9.59571,-0.75 0,-0.56991 -0.36827,-1.03711 -0.81641,-1.03711 -0.44813,0 -1.57022,-1.58594 -2.49414,-3.52344 C 573.37734,477.7994 570.22968,476 565.55078,476 c -2.69293,0 -6.10667,-2.7388 -8.5,-6.82031 -0.61099,-1.04197 -2.41879,-3.86124 -4.01758,-6.26563 -4.21343,-6.33655 -4.82697,-9.66425 -4.96679,-26.91406 l -0.125,-15.5 3.5,0.0859 c 1.925,0.0468 8.9,1.57398 15.5,3.39453 10.83705,2.98931 13.65123,3.35463 29.04297,3.77344 12.53305,0.34102 19.94598,0.0386 28.01367,-1.14453 C 630.03216,425.7245 636.24597,425 637.80469,425 c 3.54888,0 23.0247,10.17834 27.38672,14.3125 3.91756,3.71291 4.0372,4.94179 0.69921,7.12891 -2.86806,1.87923 -2.65103,4.59181 0.64258,8.01953 2.24826,2.3398 3.05886,1.63048 4.92774,-4.31641 0.75295,-2.39595 1.91553,-4.5665 2.58203,-4.82226 1.30088,-0.49919 7.19284,2.93776 14.29101,8.33593 3.15963,2.40291 5.43919,3.3418 8.11524,3.3418 2.20715,0 4.75565,0.81379 6.26367,2 3.33233,2.62121 3.82685,2.5506 7.27344,-1.04688 2.43799,-2.54471 2.67542,-3.20162 1.4375,-3.98437 -0.81534,-0.51554 -3.39095,-0.94512 -5.72266,-0.95313 -8.98232,-0.0324 -26.85712,-10.05877 -30.33594,-17.01562 -1.47519,-2.95007 -1.60181,-4.5213 -0.80468,-10 0.52011,-3.575 0.71729,-7.43491 0.4375,-8.57812 -0.58571,-2.39317 -4.42904,-4.42602 -8.35352,-4.41602 -1.48662,0.004 -6.13542,-0.51589 -10.33008,-1.1543 l -7.62695,-1.16015 -0.53125,-7.09571 c -0.64288,-8.58469 0.65096,-12.05495 8.81836,-23.64453 3.70403,-5.25604 6.25871,-7.95117 7.53516,-7.95117 1.06211,0 1.81914,-0.5625 1.68164,-1.25 -0.17905,-0.89524 1.39204,-1.21556 5.53515,-1.13086 6.0319,0.12334 8.07231,0.92439 5.85156,2.29688 -1.61238,0.9965 0.73357,2.08398 4.49415,2.08398 3.04459,0 7.25004,2.10796 9.77539,4.89844 2.98348,3.29671 8.64799,2.87068 11.40429,-0.85742 1.20343,-1.62773 2.18946,-3.18706 2.18946,-3.46485 0,-0.59427 -3.74392,-5.93156 -9.94141,-14.17187 -2.44256,-3.24768 -6.20927,-8.2668 -8.37109,-11.1543 -2.16183,-2.8875 -4.38944,-5.25 -4.94922,-5.25 -0.55979,0 -3.12544,-1.296 -5.70117,-2.88086 -6.05255,-3.72417 -10.56779,-4.78368 -11.37891,-2.66992 -0.35687,0.92997 -1.81006,1.55078 -3.62695,1.55078 -1.66726,0 -3.03125,0.44095 -3.03125,0.98047 0,0.53952 -1.125,1.26426 -2.5,1.60937 -1.51611,0.38051 -2.5,1.34051 -2.5,2.43946 0,1.23976 -1.02654,2.02399 -3.25,2.48437 -1.7875,0.37011 -6.08162,1.98942 -9.54102,3.59766 -4.58155,2.12992 -6.2111,3.39431 -6,4.65625 0.24657,1.47394 -0.49313,1.71285 -4.96094,1.5957 -4.81044,-0.12613 -5.82863,-0.61101 -12.11718,-5.75586 l -6.86524,-5.61523 2.47461,-6.7461 c 1.3601,-3.7102 2.79831,-8.92358 3.19727,-11.58398 0.69091,-4.60715 2.12723,-6.61278 4.75586,-6.64649 1.93704,-0.0248 4.30664,-4.21474 4.30664,-7.61523 0,-1.73546 -0.70582,-4.84071 -1.56641,-6.90039 -1.14806,-2.74769 -1.50659,-3.47504 -3.43945,-3.46094 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0500"
d="m 603.53711,353.375 c 0.35104,-0.0259 0.74057,0.0432 1.20117,0.18164 4.34867,1.30746 18.70313,8.3303 18.70313,9.15039 0,1.28148 -5.97259,4.05517 -11,5.10742 -2.475,0.51802 -5.23368,1.24787 -6.12891,1.62305 -1.14265,0.47888 -2.55813,-0.44635 -4.75,-3.10547 -1.71727,-2.08334 -3.12109,-4.15302 -3.12109,-4.59961 0,-0.4466 0.92098,-2.61729 2.04687,-4.82422 1.28406,-2.51721 1.9957,-3.45546 3.04883,-3.5332 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0501"
d="m 663.69727,420.20703 c 0.23368,-0.007 0.46138,-0.005 0.68164,0.006 3.81782,0.18358 5.61176,2.95912 4.89453,7.85742 -0.5058,3.45431 -2.02933,3.30954 -6.63282,-0.63086 -4.96367,-4.24874 -5.28043,-6.04236 -1.22265,-6.93359 0.81791,-0.17965 1.57823,-0.27853 2.2793,-0.29883 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g06"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame06"
width="358.99219"
height="238.99217"
x="770.00391"
y="273.50391" />
<path
id="horse06"
d="m 1001.377,300.66602 c -1.50701,0 -10.38718,3.17766 -11.58208,4.14453 -1.32977,1.076 0.12823,7.31023 2.32422,9.93554 2.29315,2.74147 1.48825,3.88405 -4.92773,6.98243 -3.4375,1.66002 -6.97611,3.56704 -7.86329,4.23828 -3.28089,2.48233 -9.88671,13.05907 -9.88671,15.83008 0,1.81041 -0.73437,3.19294 -2.07813,3.9121 -1.16815,0.62517 -1.84282,1.72326 -1.54101,2.50977 0.29523,0.76934 -0.11931,2.96981 -0.92188,4.89063 -2.21276,5.29587 -1.79138,8.12202 2.04102,13.69335 1.925,2.79846 3.5,5.67374 3.5,6.38868 0,1.53966 -5.83244,2.68386 -11.86133,2.32812 -2.71773,-0.16035 -4.57425,0.23317 -5.09766,1.08008 -1.02134,1.65256 -7.00726,1.14347 -23.04101,-1.96289 -10.21416,-1.97887 -12.40114,-2.10268 -19.55274,-1.09961 -4.42854,0.62114 -10.05577,1.12891 -12.50586,1.12891 -2.45009,0 -6.02785,0.47942 -7.94922,1.06445 -10.84309,3.3016 -26.08441,7.14375 -29.99218,7.56055 -2.475,0.26399 -5.4,0.87556 -6.5,1.35937 -1.1,0.48381 -3.35,1.11296 -5,1.39844 -11.55526,1.99925 -15.13751,2.87675 -16.47657,4.0332 -0.83836,0.72403 -2.76093,1.6094 -4.27343,1.96875 -1.51897,0.36089 -2.75,1.33936 -2.75,2.18555 0,1.5715 -5.533,4.40339 -8.71875,4.46289 -2.4247,0.0453 -6.5944,3.65437 -5.76758,4.99219 0.36736,0.59439 1.19102,0.89128 1.82812,0.66015 0.6371,-0.23113 2.3699,0.27839 3.85157,1.13086 2.5236,1.45193 3.28238,1.35302 12,-1.55469 5.11833,-1.70719 10.88164,-3.36269 12.80664,-3.67968 5.10729,-0.84099 22.05585,-6.28914 33,-10.60743 13.06055,-5.15335 14,-5.39916 14,-3.66796 0,0.79215 -0.87357,3.41069 -1.93946,5.82031 -1.06589,2.40963 -2.40445,8.11504 -2.97656,12.67773 -0.57211,4.56269 -1.388,8.86094 -1.8125,9.55078 -2.20162,3.57778 -10.84349,10.01942 -17.52539,13.06446 -6.03144,2.74861 -8.17267,4.33942 -10.61328,7.88672 -1.68162,2.44415 -5.21241,6.23447 -7.8457,8.42187 -5.92293,4.92002 -17.73991,10.64934 -20.48438,9.93164 -2.37124,-0.62009 -5.3265,0.47059 -8.80273,3.24805 -2.25882,1.80476 -2.35229,2.14859 -0.95313,3.55859 1.39443,1.40518 2.38975,1.41013 10,0.0645 4.6483,-0.82193 8.99799,-1.50162 9.66406,-1.51172 0.66608,-0.0101 2.01608,-0.82067 3,-1.80078 3.53706,-3.52333 13.49166,-11.35666 23.08985,-18.16797 12.1623,-8.6309 31.34937,-13.6561 20.66406,-5.41211 -9.41744,7.2658 -8.90773,6.42479 -9.3125,15.33789 -0.26853,5.91325 -0.76683,8.32243 -1.80469,8.7207 -1.20183,0.46119 -1.15877,0.85553 0.26758,2.43164 1.32015,1.45874 1.47105,2.38279 0.67774,4.125 -0.5625,1.23527 -0.81558,3.65654 -0.5625,5.37891 0.25308,1.72237 -0.03,3.43529 -0.63086,3.80664 -0.76301,0.47156 0.79375,1.32708 0.40234,3.56836 -0.4977,2.84993 -0.41531,4.63201 -0.14453,5.73047 l 18.0664,0.26172 c -0.22318,-0.275 -0.0821,-3.9625 -1.3164,-5.75 -1.36162,-1.97181 -3.102,-3.25468 -4.42578,-3.26368 -3.48454,-0.0245 -4.33939,-1.16172 -4.9668,-6.60351 -0.42641,-3.69844 -0.17538,-5.70854 0.9043,-7.25 1.03274,-1.47445 1.12762,-2.13281 0.30664,-2.13281 -1.79139,0 -0.4421,-6.46493 2.09179,-10.02344 1.17709,-1.65307 3.56641,-3.71474 5.31055,-4.58008 1.74414,-0.86534 5.4503,-3.89551 8.23633,-6.73438 2.78602,-2.83886 6.74077,-6.2871 8.78711,-7.6621 2.04634,-1.375 4.87204,-4.41527 6.28125,-6.75586 1.53531,-2.55004 3.56443,-4.50683 5.0625,-4.88282 4.98117,-1.2502 19.64185,0.41127 27.30469,3.09375 15.83617,5.54368 24.04447,6.78548 41,6.20703 8.525,-0.29084 17.89879,-1.05325 20.83199,-1.69531 4.9814,-1.09043 5.5509,-1.0114 8.6387,1.18555 4.4503,3.16644 16.2906,16.47034 18.541,20.83398 0.9968,1.9326 3.4272,5.06555 5.4004,6.96094 1.9732,1.89539 3.5879,3.92496 3.5879,4.50977 0,0.58481 0.7875,1.56104 1.75,2.16992 0.9625,0.60888 3.1,4.08073 4.75,7.71484 2.2711,5.00211 3.4999,6.61311 5.0586,6.63281 2.725,0.0344 5.2258,2.04776 5.6211,4.5254 l 2.2012,6.66992 c 4.0629,0.66818 6.2134,0.63612 6.9511,-0.10156 0.5873,-0.58738 4.0057,0.54556 6.7832,0.48046 0,0 0.022,-1.9721 -4.8378,-6.23242 -1.0739,-1.54882 -2.2368,-3.6039 -2.584,-4.5664 -0.3859,-1.06979 -1.6651,-1.75 -3.291,-1.75 -1.9371,0 -4.1191,-1.54254 -8.0313,-5.67969 -2.9544,-3.12428 -5.3711,-6.18968 -5.3711,-6.8125 0,-0.62283 -1.3177,-2.39498 -2.9277,-3.9375 -1.6101,-1.54251 -3.4838,-4.21461 -4.1641,-5.9375 -0.6803,-1.72289 -2.8164,-5.37889 -4.7461,-8.125 -3.4264,-4.87593 -9.1621,-16.44794 -9.1621,-18.48438 0,-2.85595 24.8454,0.8182 32.7285,4.83985 6.3474,3.23821 13.1749,8.08785 14.2735,10.14062 0.5464,1.02103 1.976,2.00183 3.1777,2.17774 1.439,0.21066 2.4486,1.31463 2.959,3.23437 0.4262,1.60312 1.3575,3.28343 2.0683,3.73438 2.0398,1.29411 6.4346,0.98519 7.7012,-0.54102 0.9272,-1.11716 0.1602,-2.1213 -3.8945,-5.09766 -2.7771,-2.03859 -5.4744,-4.50146 -5.9942,-5.47265 -0.5198,-0.9712 -4.0689,-3.6206 -7.8867,-5.88867 -3.8177,-2.26808 -9.2771,-6.11905 -12.1328,-8.55664 -3.8995,-3.32855 -6.3502,-4.60011 -9.8457,-5.10743 -5.1756,-0.75116 -23.325,-7.55537 -23.3242,-8.74414 0,-2.61308 1.4153,-16.5518 1.8281,-18.02734 0.2747,-0.98229 2.8477,-4.58229 5.7188,-8 2.8712,-3.41771 6.2357,-7.6679 7.4765,-9.44531 1.2408,-1.77741 2.774,-3.12741 3.4063,-3 0.6322,0.12741 1.175,-0.44453 1.207,-1.26953 0.1076,-2.74375 13.1016,-0.7542 13.8535,2.12109 0.3196,1.22207 1.3866,1.87891 3.0508,1.87891 3.5848,0 9.4954,3.00723 10.1855,5.18164 0.3177,1.00079 1.3344,1.86878 2.2598,1.92968 4.1054,0.27007 6.7774,-0.37799 7.9766,-1.93359 2.8439,-3.68891 2.4945,-5.87144 -1.8946,-11.84961 -10.5694,-14.39587 -22.6947,-27.27756 -25.8183,-27.42773 -1.144,-0.055 -3.2051,-0.0996 -4.5801,-0.0996 -4.931,0 -5.5,0.22682 -5.5,2.19922 0,1.86011 -0.6665,2 -9.5312,2 -7.8936,0 -9.6394,0.28085 -10.1582,1.63281 -0.3445,0.89785 -0.064,2.53391 0.623,3.63476 1.563,2.5027 0.066,3.69635 -4.6641,3.71875 -1.7763,0.008 -5.0701,0.752 -7.3203,1.65235 -4.9247,1.97046 -9.6114,0.93121 -15.2871,-3.38672 -1.98924,-1.51343 -4.56157,-3.42695 -5.71483,-4.25195 l -2.0957,-1.5 3.18164,-6.41016 c 2.21423,-4.46132 3.2597,-8.11075 3.4375,-12 0.32939,-7.20196 0.29859,-7.08984 1.85349,-7.08984 0.7291,0 2.3794,-1.12068 3.666,-2.49024 2.036,-2.16716 2.1871,-2.82463 1.1622,-5.07422 -0.6434,-1.42166 -0.9427,-2.96702 -0.6543,-3.43359 0.6351,-1.02768 -3.3414,-8.00195 -4.5625,-8.00195 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0600"
d="m 870.79883,482.4043 -0.96875,-0.0137 c 0.42924,0.0904 0.76079,0.20057 1.05078,0.31641 -0.0294,-0.0931 -0.0559,-0.19675 -0.082,-0.30273 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0601"
d="m 870.88086,482.70703 c 0.70088,2.21748 2.21242,0.88376 0,0 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0602"
d="m 987.80273,353.09375 c 0.1504,0.0231 0.30562,0.0702 0.46875,0.14063 0.91825,0.39608 4.14493,1.36069 7.16993,2.14257 7.90589,2.04347 12.42699,4.2625 11.19529,5.49414 -0.5562,0.55628 -4.0902,2.06886 -7.8535,3.36133 -3.76332,1.29247 -8.7065,2.36928 -10.98437,2.39258 -3.55048,0.0364 -4.22765,-0.29951 -4.74219,-2.34961 -0.35992,-1.43403 0.23001,-4.26696 1.47266,-7.07617 1.41743,-3.20434 2.22064,-4.2669 3.27343,-4.10547 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g07"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame07"
width="358.99219"
height="238.99217"
x="1144.5039"
y="272.50391" />
<path
id="horse07"
d="m 1364.877,302 c -1.9449,0 -4.8637,0.68627 -6.4864,1.52539 -2.3494,1.21496 -2.9492,2.18779 -2.9492,4.77734 0,1.7885 0.7138,4.27361 1.5879,5.52149 2.2054,3.14873 1.2581,4.77083 -4.2988,7.36133 -5.3464,2.49235 -5.2083,2.37392 -10.8985,9.31445 -5.4363,6.63076 -6.5641,8.96065 -5.8047,11.98633 0.6299,2.50975 -0.5597,5.973 -4.748,13.82226 -2.4018,4.50124 -1.5687,7.66006 3.2344,12.26172 1.61,1.54252 2.9277,3.34426 2.9277,4.00391 0,1.50658 -7.8667,2.74887 -11.5508,1.82422 -2.0696,-0.51945 -3.0962,-0.2355 -4.0996,1.13672 -1.2918,1.7666 -1.7831,1.74551 -14.0937,-0.60157 -10.5628,-2.01386 -15.6786,-2.41786 -29.7559,-2.35156 -18.2778,0.0861 -25.1482,1.09946 -33,4.86914 -13.5628,6.51161 -18.9092,7.62181 -39,8.09375 -6.0262,0.14155 -11.7882,0.86853 -14.5,1.83008 -2.475,0.87759 -5.4233,1.60333 -6.5508,1.61133 -2.082,0.0148 -4.4492,1.7375 -4.4492,3.23828 0,0.45361 1.1545,1.26396 2.5664,1.80078 1.8825,0.71562 2.409,1.47184 1.9766,2.83399 -0.504,1.58793 0.283,2.04237 5.4121,3.13085 6.7616,1.43491 25.3422,0.981 28.5449,-0.69726 1.1,-0.5764 3.8,-1.61372 6,-2.30469 6.3776,-2.00308 17.4636,-7.74945 21.0879,-10.93164 1.8324,-1.60885 5.4042,-4.14041 7.9375,-5.625 6.3755,-3.73629 7.8144,-2.12511 3.4844,3.9043 -2.6781,3.72911 -3.3965,5.92025 -4.2051,12.83008 -0.5363,4.58317 -1.1811,9.38554 -1.4316,10.66992 -0.9419,4.8294 -9.7333,10.29063 -18.668,11.59765 -3.5205,0.515 -6.1777,1.82632 -10,4.92969 -9.9647,8.0905 -28.7123,17.02986 -30.9727,14.76953 -1.7733,-1.77335 -4.8873,-1.33638 -7.4179,1.04102 -4.5351,4.26051 -3.2579,5.05257 7.4355,4.60937 9.7316,-0.40333 9.765,-0.41342 18.1758,-5.60351 4.6347,-2.85995 11.6097,-6.15054 15.5,-7.3125 13.4608,-4.02048 18.5906,-3.51242 11.125,1.10156 -1.8966,1.17217 -3.7444,3.11989 -4.1055,4.33008 -1.1498,3.85282 -9.7482,15.89094 -15.6406,21.89648 -4.3865,4.47071 -6.3726,5.80469 -8.6426,5.80469 -2.2791,0 -3.0836,0.54466 -3.5508,2.40625 -0.3323,1.3239 -0.8786,3.1239 -1.2148,4 -1.0568,2.75388 3.3583,1.8678 9.4512,-1.89844 5.7241,-3.53831 11.1965,-9.23793 16.9101,-17.61523 3.1061,-4.5541 11.9465,-12.71705 17.7168,-16.35742 1.6364,-1.03238 5.0114,-3.77356 7.5,-6.0918 2.4886,-2.31824 7.2254,-5.56235 10.5254,-7.20898 3.3,-1.64664 8.2546,-4.17628 11.0117,-5.62305 6.8168,-3.57706 18.0652,-4.01397 23.9883,-0.93164 14.0342,7.30332 28.8038,9.975 59.3359,10.73633 7.8854,0.19663 14.7077,0.74602 15.1602,1.2207 0.4525,0.47468 1.5109,7.24957 2.3516,15.05469 0.9215,8.5542 2.1262,15.10824 3.0332,16.5 0.8277,1.26988 1.9728,5.90859 2.5449,10.30859 0.5721,4.4 1.3425,9.08064 1.7129,10.40234 l 0.6738,2.4043 c -3.4395,2.1493 1.9589,2.96913 12.1856,3.1582 1.7036,1.17285 2.1641,1.16908 3.0996,-0.0273 0.6044,-0.77293 1.3396,-1.16627 1.6328,-0.87305 0.2932,0.29322 1.7374,0.23115 3.2109,-0.13867 l 2.6797,-0.67383 -2.8105,-1.73242 c -1.5461,-0.9532 -3.669,-2.6982 -4.7168,-3.87695 -1.1954,-1.3449 -3.092,-2.14258 -5.0938,-2.14258 -6.4167,0 -8.4967,-4.87702 -9.7695,-22.9082 -1.1384,-16.12699 0.11,-28.71027 2.957,-29.80274 1.7452,-0.66968 11.5121,1.33665 15.8125,3.24805 1.65,0.73338 7.4516,3.38783 12.8945,5.89844 5.4428,2.51061 10.4507,4.56445 11.1289,4.56445 1.6716,0 12.3607,4.87878 15.5547,7.09961 1.8245,1.26859 4.3268,1.76703 8.5567,1.70703 3.2879,-0.0466 6.9949,0.45954 8.2383,1.125 1.8454,0.98766 2.7072,0.91849 4.6933,-0.38281 3.975,-2.60456 2.8324,-3.54795 -4.3164,-3.56055 -9.3742,-0.0165 -17.0124,-2.19424 -25.4648,-7.26172 -2.0423,-1.22444 -6.3173,-3.75542 -9.5,-5.625 -3.1827,-1.86957 -8.0588,-5.24457 -10.836,-7.5 -2.7772,-2.25542 -7.4027,-5.67656 -10.2793,-7.60156 -4.5791,-3.06429 -5.1681,-3.83784 -4.7324,-6.21484 0.2737,-1.49324 -0.1425,-4.52769 -0.9238,-6.74219 -1.6123,-4.56976 -0.5891,-8.32016 3.7265,-13.67188 1.2732,-1.5789 3.6294,-4.89609 5.2364,-7.37109 4.2364,-6.52463 6.629,-9 8.6972,-9 1.0041,0 1.8262,-0.675 1.8262,-1.5 0,-1.14954 1.2697,-1.5 5.4395,-1.5 5.4531,0 8.0193,1.4604 5.4375,3.0957 -0.9998,0.63327 -0.6907,0.88003 1.123,0.89453 3.5153,0.028 14.1437,4.51485 15.2109,6.42188 1.1263,2.01257 6.1689,2.06354 8.1504,0.082 3.3863,-3.3863 3.0172,-5.40173 -2.0781,-11.31445 -2.6924,-3.12424 -7.6679,-9.27969 -11.0566,-13.67969 -3.3887,-4.4 -6.7396,-8.46271 -7.4453,-9.0293 -5.9696,-4.79313 -8.8449,-6.4707 -11.0957,-6.4707 -1.8609,0 -2.4641,0.41488 -2.0762,1.42578 0.3228,0.84121 -0.5324,2.13245 -2.086,3.15039 -2.4725,1.61997 -3.0484,1.62433 -9.4707,0.0742 -7.6387,-1.84368 -13.0527,-2.13395 -13.0527,-0.70117 0,0.52166 1.1158,2.15247 2.4805,3.625 3.046,3.28676 2.5558,4.23725 -2.6172,5.06445 -2.3014,0.368 -4.5191,1.43795 -5.1836,2.50195 -0.9266,1.48373 -2.3985,1.85938 -7.2832,1.85938 -5.2206,0 -6.6947,-0.43268 -10.0098,-2.93359 -7.3521,-5.54637 -13.2153,-10.56816 -13.7578,-11.78516 -0.2988,-0.67051 0.3379,-3.77816 1.4141,-6.90625 1.0763,-3.12809 1.957,-6.93031 1.957,-8.44922 0,-3.75158 0.9405,-5.92578 2.5664,-5.92578 2.3885,0 5.4336,-4.23945 5.4336,-7.56641 0,-1.75412 -0.6813,-4.81837 -1.5137,-6.81054 C 1368.5929,302.4284 1367.9959,302 1364.877,302 Z"
style="display:none;opacity:1;fill:#000000"
inkscape:connector-curvature="0" />
<path
id="hole0700"
d="m 1353.4086,351.25199 5.0332,1.22759 c 8.158,1.21408 19.3607,5.93525 18.7809,7.67472 -0.1961,0.58845 -4.391,2.59191 -9.3204,4.45117 -10.1719,3.83659 -19.7591,4.6694 -20.8554,1.8125 -1.0849,-2.82716 -0.6465,-6.07324 1.4629,-10.8418 z"
style="display:inline;opacity:1;fill:#000000"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsscc" />
</g>
<g
id="g08"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame08"
width="358.99219"
height="238.99217"
x="26.003906"
y="516.50391" />
<path
id="horse08"
d="m 241.3125,544.13477 c -3.45208,0.0198 -9.8788,2.70894 -9.85742,4.26757 0.0212,1.54599 2.4759,8.42121 3.30078,9.2461 1.80679,1.80679 0.31634,4.03595 -4.06445,6.07812 -5.37696,2.50655 -11.18826,7.70946 -14.94141,13.38086 -2.13537,3.22675 -2.4387,4.54694 -1.88867,8.21485 0.49632,3.30964 0.2822,4.67961 -0.88281,5.64648 -0.84599,0.70211 -1.53711,2.29076 -1.53711,3.53125 0,1.24049 -0.69433,3.91814 -1.54297,5.94922 -1.53121,3.66471 -1.51623,3.73121 2.06836,8.7207 4.98256,6.93536 4.25897,8.25389 -4.03907,7.36524 -4.40599,-0.47184 -6.48632,-0.34848 -6.48632,0.38476 0,1.92015 -8.8743,1.1619 -22.77149,-1.94531 -14.99472,-3.35261 -20.38185,-3.39312 -43.22851,-0.32227 -10.84443,1.45761 -12.12243,1.88323 -22.41016,7.44727 -12.29619,6.65029 -14.714247,7.03753 -25.925781,4.16406 -6.499422,-1.66538 -6.899122,-1.6656 -8.111328,-0.008 -1.996135,2.72988 -5.065737,2.07219 -7.945313,-1.70313 l -2.628906,-3.44726 -2.984375,1.69726 c -1.640625,0.93354 -2.984781,1.98049 -2.988281,2.32618 -0.0035,0.34569 2.58164,2.80083 5.74414,5.45703 3.1625,2.6562 7.008428,6.19174 8.546875,7.85547 2.542052,2.74907 3.472413,3.05845 10.205078,3.39843 11.556159,0.58356 22.168641,-3.1295 31.892581,-11.16015 6.09981,-5.03761 11.19638,-7.67969 14.8164,-7.67969 3.40016,0 3.41033,0.25609 0.28321,6.41992 -2.151,4.23982 -2.49414,6.25865 -2.49414,14.61133 l 0,9.69141 -6.22852,0.56445 c -3.42549,0.31065 -8.32837,0.31564 -10.89453,0.0117 -5.1367,-0.60837 -5.16003,-0.58823 -10.07813,8.40429 C 101.58388,667.56015 92.711574,678 91.240234,678 c -0.548377,0 -2.492591,0.70886 -4.320312,1.57617 -2.510778,1.19144 -3.812843,1.31487 -5.328125,0.50391 -1.620817,-0.86743 -2.547106,-0.61982 -4.828125,1.28711 -1.55235,1.29777 -3.776442,2.65718 -4.941406,3.02148 -1.164964,0.3643 -2.910737,1.53936 -3.88086,2.61133 -1.699973,1.87845 -1.67164,1.98475 0.808594,2.92773 1.415395,0.53813 5.863119,1.26543 9.882812,1.61719 l 7.308594,0.64063 8.857422,-5.59375 C 99.670669,683.51589 104.15289,681 104.75977,681 c 0.98097,0 6.33766,-2.44636 23.18164,-10.58789 3.03009,-1.46459 9.11978,-3.00947 15.45703,-3.91992 9.0001,-1.29303 10.88116,-1.89778 13.5,-4.34571 5.64486,-5.27645 7.6603,-6.14648 14.24218,-6.14648 5.11271,0 7.30895,0.57123 12.02735,3.13086 12.52219,6.79302 21.91143,9.45767 36.82226,10.44922 9.34303,0.62131 14.45118,1.6534 14.45118,2.91992 0,0.30235 -1.60568,3.57662 -3.56641,7.27539 -6.27718,11.84141 -7.20901,13.65003 -9.08984,17.64258 -3.32552,7.05928 -5.01338,9.86653 -6.6543,11.06641 -0.95542,0.69862 -1.73277,2.95281 -1.90234,5.51171 -0.27317,4.12225 -0.13304,4.37071 2.93945,5.18946 3.35393,0.89374 4.1909,7.05995 3.0293,8.93945 0,0 0.73383,-0.99467 4.57617,0.3125 0.825,0.4633 3.88569,-0.88085 4.33398,-0.10938 3.88274,0.31666 10.92451,2.00837 7.88867,-2.4121 -2.63098,1.92382 -3.22567,-0.52179 -5.74218,-3.41602 -1.19555,-1.375 -2.7324,-2.5 -3.41602,-2.5 -1.62633,0 -7.39648,-4.8696 -7.39648,-6.24219 0,-2.32089 5.10472,-11.52317 8.9414,-16.11719 2.23184,-2.67239 4.0586,-5.24161 4.0586,-5.71093 0,-0.46933 2.53237,-3.68429 5.6289,-7.14258 3.09653,-3.45829 6.6527,-7.89503 7.90235,-9.86133 1.9387,-3.05053 3.26849,-3.84517 9.06445,-5.41406 l 6.79297,-1.83984 8.05469,4.1621 c 5.76952,2.98088 10.5507,6.57465 16.84961,12.66407 4.83692,4.67605 9.28829,8.50195 9.89062,8.50195 1.65149,0 13.81641,12.6877 13.81641,14.41016 0,0.94591 1.3847,1.74954 3.75,2.17578 5.28231,0.95355 7.06168,2.07079 7.42968,4.66211 0.48221,3.39556 5.62138,3.59108 9.1211,0.34765 4.05761,-3.76046 3.49351,-5.22278 -2.27735,-5.90625 -3.30912,-0.39192 -6.57485,-1.69595 -9.75,-3.89062 -5.87116,-4.05816 -23.8008,-22.1625 -30.00586,-30.29883 -2.5167,-3.3 -6.49451,-8.025 -8.83984,-10.5 -3.96177,-4.18081 -4.27976,-4.92559 -4.4668,-10.5 -0.1107,-3.3 -0.14773,-6.73483 -0.082,-7.63281 0.0657,-0.89798 3.1787,-5.85568 6.91602,-11.01563 3.73732,-5.15996 7.90656,-11.40013 9.26562,-13.86718 l 2.47071,-4.48438 9.98437,-0.68555 c 10.85197,-0.74485 18.97557,0.79664 23.04883,4.37305 1.13545,0.99695 2.57695,1.8125 3.20312,1.8125 2.50772,0 6.07471,-2.36067 7.15625,-4.73438 1.46252,-3.20989 0.10012,-5.4043 -7.34961,-11.83593 -3.02125,-2.60837 -7.53172,-7.51696 -10.02148,-10.90821 -4.80651,-6.54683 -10.75578,-11.88844 -15.06641,-13.52734 -3.38908,-1.28819 -11.18896,-1.28429 -11.98632,0.006 -0.33992,0.55 -2.88633,1 -5.65821,1 -4.367,0 -5.4344,0.42206 -7.99218,3.16016 -1.96565,2.10423 -2.85057,3.9892 -2.6504,5.64453 0.25407,2.10087 -0.31563,2.7008 -3.67578,3.86719 -2.18671,0.75905 -4.41342,1.81772 -4.94922,2.35351 -1.55816,1.55817 -9.75469,1.07556 -13.64062,-0.80273 -1.96145,-0.94808 -5.87363,-3.52266 -8.69336,-5.72266 -5.80897,-4.53225 -6.2889,-6.47373 -3.70508,-14.99219 0.95803,-3.15847 1.27901,-6.55589 0.875,-9.25 -0.56612,-3.7752 -0.4171,-4.25781 1.31446,-4.25781 1.12243,0 2.44632,-1.08305 3.11328,-2.54688 2.78179,-6.10536 -0.20325,-14.68643 -5.31836,-15.28515 -0.20091,-0.0235 -0.4183,-0.0345 -0.64844,-0.0332 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0800"
d="m 232.69727,593.39844 c 0.43204,-0.0202 0.91953,0.0541 1.51367,0.1875 3.84919,0.86436 12.80762,4.14788 16.56054,6.07031 5.24921,2.68891 5.78286,5.34375 1.07422,5.34375 -1.36189,0 -3.4713,0.63008 -4.68945,1.40039 -1.21815,0.77032 -4.60106,1.89532 -7.51563,2.5 -8.60083,1.78441 -11.10302,1.48515 -12.2246,-1.46484 -1.50767,-3.96546 -1.18759,-6.14017 1.54492,-10.46875 1.64681,-2.60873 2.44019,-3.5077 3.73633,-3.56836 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0801"
d="m 305.20117,611.04102 c 2.08324,-0.0261 3.40334,0.45058 4.24024,1.45898 1.08525,1.30765 0.39433,1.5 -5.37891,1.5 -6.92936,0 -8.84893,-1.30443 -3.49609,-2.375 1.8605,-0.3721 3.38482,-0.56833 4.63476,-0.58398 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0802"
d="m 113.49414,665.14453 c 2.63963,0.11671 2.5738,1.6669 -0.61914,2.88086 -3.66311,1.39271 -4.6273,1.2163 -4.25,-0.77539 0.21833,-1.15255 1.43917,-1.85612 3.57422,-2.0625 0.48628,-0.047 0.91783,-0.0596 1.29492,-0.043 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g09"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame09"
width="358.99219"
height="238.99217"
x="397.50391"
y="516.50391" />
<path
id="horse09"
d="m 617.08008,547.49609 c -0.7757,0.0234 -1.68194,0.17565 -2.79102,0.42579 -8.23654,1.85763 -9.74576,5.06854 -5.82031,12.39257 l 2.0293,3.78516 -2.63672,2.20117 C 595.6949,576.44874 592.9224,580.17287 590.59766,589.5 c -0.8225,3.3 -1.53168,9.825 -1.57618,14.5 -0.0445,4.675 -0.53007,8.83656 -1.08007,9.24805 -0.55,0.41149 -2.9125,0.47316 -5.25,0.13672 -4.08105,-0.58738 -5.7612,0.5648 -3.16407,2.16992 0.62565,0.38667 0.7133,1.04451 0.20704,1.55078 -0.80796,0.80795 -16.14878,-1.4039 -28.79297,-4.15039 -2.75,-0.59736 -7.925,-0.8373 -11.5,-0.5332 -6.71039,0.5708 -32.95922,5.30868 -36.5,6.58789 -1.1,0.39741 -4.69601,1.77003 -7.99024,3.05078 -12.57601,4.88937 -23.92871,5.91809 -33.43945,3.02929 C 457.72716,623.94032 453.68728,623 452.53516,623 c -3.30703,0 -2.51061,2.92237 1.90625,7 2.69005,2.48344 4,4.54222 4,6.28711 0,1.42703 0.47662,2.8911 1.06054,3.25195 0.58393,0.36089 1.44916,1.67268 1.92188,2.91602 1.17388,3.08754 7.37677,3.82587 16.8789,2.00781 8.43624,-1.61412 17.03372,-5.97447 27.95118,-14.17578 4.0222,-3.02152 7.56585,-5.24079 7.875,-4.93164 0.30916,0.30915 -0.16021,2.36603 -1.04297,4.57226 -1.88237,4.70452 -1.00689,11.48228 2.32617,18.01563 3.26067,6.39144 3.25316,6.39693 -8.7207,5.84766 -5.9125,-0.27119 -11.30524,-0.30019 -11.98243,-0.0645 -0.67719,0.23573 -3.73433,5.5 -6.79492,11.69922 -3.06059,6.19921 -7.06739,12.72541 -8.90234,14.50391 -2.94655,2.85591 -3.57396,3.08619 -5.37891,1.95898 -2.65294,-1.65679 -6.18605,-0.13558 -8.13281,3.50195 -2.1702,4.05508 -0.30561,5.35678 5.46094,3.81446 2.47968,-0.66321 5.57663,-1.20508 6.88281,-1.20508 3.41593,0 5.87532,-2.55576 10.10352,-10.5 4.76932,-8.96092 7.12124,-11.5 10.65429,-11.5 2.21359,0 3.39717,0.90578 5.55078,4.25 4.35823,6.76766 4.9242,8.07853 5.5918,12.94922 0.5193,3.78873 0.30439,4.83927 -1.22266,5.95117 -4.14526,3.01831 -2.67466,11.86654 1.54297,9.2832 1.82015,-1.11486 1.92802,-1.28193 5.30664,-8.23437 l 2.0918,-4.30274 -3.64453,-8.48242 c -2.00413,-4.66515 -3.39205,-8.73293 -3.08398,-9.04101 0.30808,-0.30807 3.94643,-0.52493 8.08398,-0.48243 4.13756,0.0425 9.8654,-0.36876 12.73047,-0.9121 5.60447,-1.06287 15.07555,-5.29032 16.97265,-7.57618 1.98006,-2.38583 7.65663,-1.59135 14.72071,2.0586 9.93668,5.13421 14.58071,6.50372 25.66992,7.57226 18.33789,1.76701 18.30965,1.7519 14.54297,8.76953 -1.09172,2.03397 -3.52545,7.16167 -5.41016,11.39649 -2.98154,6.69936 -3.92597,7.91393 -7.26562,9.34766 -5.54711,2.3814 -22.48625,3.68968 -23.94922,1.8496 C 566.21944,699.62844 564.92367,699 563.94922,699 c -2.76012,0 -8.47269,3.92815 -7.89649,5.42969 1.09228,2.84645 16.17098,3.39857 28.88868,1.05859 4.4,-0.80958 9.9125,-1.76087 12.25,-2.11523 2.3375,-0.35437 4.26184,-1.14703 4.27734,-1.75977 0.0694,-2.74633 5.02567,-10.05985 11.23437,-16.57812 l 6.76172,-7.09961 1.01368,2.66601 c 0.55731,1.46582 1.22267,6.94096 1.47851,12.16797 0.25585,5.227 0.95444,10.09354 1.55274,10.81445 0.59831,0.72091 1.30236,3.02189 1.5625,5.11329 0.76111,6.11898 1.28321,9.59591 1.9375,12.89843 l 0.61328,3.09571 18.52343,0.008 C 644.43629,722.77983 642.14783,720 640.48828,720 c -1.44236,0 -4.14364,-1.26892 -6.00195,-2.82031 l -3.37891,-2.82031 -0.46875,-13.80665 c -0.67003,-19.7562 1.09833,-27.13187 8.42969,-35.17382 5.13045,-5.62771 6.40936,-8.34006 7.80469,-16.53711 0.37968,-2.23049 2.53579,-6.04913 5.52539,-9.78907 4.61501,-5.7733 7.58796,-10.93489 9.9707,-17.31445 1.28,-3.42708 2.98555,-4.10637 15.86914,-6.32031 10.29403,-1.76895 10.29974,-1.76914 14.77734,0.40625 7.56225,3.67402 11.65581,2.27372 13,-4.44727 0.55853,-2.79261 0.0664,-3.40547 -7.375,-9.16211 -4.38564,-3.39269 -9.81675,-8.36736 -12.06835,-11.05664 -2.64328,-3.15711 -6.54482,-6.17716 -11.00977,-8.52343 -7.68026,-4.03586 -10.11078,-4.48846 -10.14258,-1.88477 -0.0117,0.9625 -1.84672,3.04136 -4.07617,4.61914 -3.059,2.16485 -4.83243,2.74873 -7.22852,2.38281 -4.44692,-0.67912 -5.88277,-0.009 -4.70507,2.19141 1.18272,2.20993 0.0393,3.75722 -5.86914,7.94141 -4.78667,3.3898 -10.83032,4.15194 -14.64844,1.84961 -1.12669,-0.6794 -3.54682,-2.13438 -5.37696,-3.23438 -9.76058,-5.8666 -10.55356,-7.88711 -7.07421,-18 1.1,-3.19721 2,-7.13461 2,-8.75 0,-2.03252 0.57726,-3.08786 1.87695,-3.42773 4.22694,-1.10537 5.35959,-9.11081 2.07617,-14.67579 -1.84508,-3.12718 -2.98734,-4.22071 -5.31445,-4.15039 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0900"
d="m 608.21875,599 c 0.84048,0 4.34834,1.3325 7.79492,2.96094 3.44659,1.62843 7.42653,3.25122 8.84571,3.60742 3.53703,0.88774 3.26573,1.57236 -1.66797,4.18555 -4.75818,2.52023 -13.83488,3.10432 -15.48438,0.99609 -2.649,-3.38569 -2.28461,-11.75 0.51172,-11.75 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0901"
d="m 674.13281,610.39453 c 0.5761,0.0125 1.15846,0.0612 1.74024,0.14844 4.68451,0.70249 5.92287,1.93817 2.81836,2.81641 -4.57201,1.29336 -12.25,1.76879 -12.25,0.75781 0,-2.15392 3.65869,-3.80994 7.6914,-3.72266 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole0902"
d="m 471.88086,629 c 0.79254,0 1.72063,0.45 2.06055,1 0.33992,0.55 -0.30895,1 -1.44141,1 -1.13246,0 -2.05859,-0.45 -2.05859,-1 0,-0.55 0.64691,-1 1.43945,-1 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g10"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame10"
width="358.99219"
height="238.99217"
x="771.00391"
y="517.00391" />
<path
id="horse10"
d="m 989.79297,544 c -4.87337,0 -9.7721,2.04839 -10.70313,4.47461 -0.92359,2.40684 0.3818,7.24378 2.46485,9.12891 2.60436,2.35692 2.42171,2.9036 -1.86328,5.53906 -5.68807,3.49841 -11.78173,9.45129 -15.32227,14.96875 -2.63721,4.10976 -3.0908,5.64145 -2.64844,8.93945 0.43871,3.27083 0.17989,4.1681 -1.45117,5.04102 -1.20229,0.64345 -1.75369,1.66407 -1.39844,2.58984 0.32249,0.84039 0.0605,3.28841 -0.58398,5.43945 -0.8677,2.89602 -0.88588,4.84071 -0.0703,7.49805 l 1.10156,3.58984 -4.35742,-0.65429 c -3.81903,-0.5727 -4.43373,-0.4 -5.00391,1.39648 -0.82968,2.61412 -3.42124,2.62874 -15.60742,0.0859 -15.52118,-3.23868 -19.7273,-3.46997 -26.94336,-1.47461 -3.55623,0.98336 -7.36484,2.35937 -8.46484,3.05664 -2.71575,1.72145 -16.52865,5.83598 -24.54883,7.3125 -5.49601,1.01182 -7.64134,0.95197 -13.33789,-0.36914 -3.73322,-0.86583 -7.28508,-1.26533 -7.89453,-0.88867 -0.60945,0.37669 -4.88535,0.58036 -9.50196,0.45312 -6.37071,-0.17558 -9.94033,0.28295 -14.80664,1.90235 -6.78457,2.25776 -7.65128,3.2361 -4.41015,4.9707 1.1,0.5887 2,1.77177 2,2.62891 0,0.85714 -0.9,1.79437 -2,2.08203 -2.90449,0.75954 -2.52157,1.53664 2.5,5.07617 4.34876,3.06529 5.5803,5.4272 3.5,6.71289 -2.28327,1.41114 -0.61583,2.38443 5.99804,3.5 6.28195,1.05959 7.43342,0.9848 11.25,-0.7207 2.33846,-1.04498 7.38563,-2.92757 11.2168,-4.18555 3.83118,-1.25798 8.10618,-3.18863 9.5,-4.28906 1.39383,-1.10043 5.43839,-3.31903 8.98828,-4.93164 3.54988,-1.61261 7.33042,-3.70631 8.40039,-4.65235 1.87447,-1.65735 1.92373,-1.62956 1.34375,0.7793 -2.04821,8.50699 -1.91695,10.41005 1.01953,14.76367 1.58154,2.34477 3.86614,4.95773 5.07813,5.80664 1.21199,0.84891 2.20508,2.15597 2.20508,2.9043 0,1.51471 -6.36544,4.06896 -12.5,5.01562 -9.94203,1.5342 -9.99469,3.39939 -0.37305,13.43946 7.85707,8.19876 10.86314,12.51942 10.86914,15.62109 0.002,1.1275 0.47161,2.51849 1.04492,3.0918 0.72318,0.72318 0.57006,1.43418 -0.5,2.32226 -2.47611,2.05498 -1.8284,5.61507 1.53516,8.44532 1.69219,1.42389 3.49219,2.58984 4,2.58984 1.25443,0 1.18146,-17.72274 -0.0762,-18.5 -0.55,-0.33992 -1,-1.25441 -1,-2.0332 0,-1.05711 0.82368,-1.26031 3.25,-0.80078 5.82233,1.10272 15.86948,5.25743 18.91992,7.82421 1.64007,1.38003 3.67357,2.50977 4.51758,2.50977 1.19471,0 1.39641,0.73157 0.91406,3.30273 -0.78826,4.20179 2.12431,7.69727 6.41211,7.69727 2.77863,0 2.89998,-0.17424 2.28711,-3.25 -0.35617,-1.7875 -1.74793,-5.65853 -3.09375,-8.60156 -1.93333,-4.2278 -3.2097,-5.65879 -6.07813,-6.82032 -1.99676,-0.80855 -6.43954,-2.90001 -9.875,-4.64843 -7.5716,-3.85341 -8.14559,-6.15512 -2.58593,-10.38672 2.01799,-1.53595 5.77697,-4.70547 8.35351,-7.04297 5.76867,-5.23347 7.83199,-5.35111 20.23438,-1.16211 10.87442,3.67291 24.76686,6.86053 30.02539,6.89063 5.34559,0.0306 5.61581,2.04813 1.06445,7.94921 -2.93399,3.80409 -4.67557,5.13129 -7.3457,5.59375 -7.60556,1.31727 -9.88565,3.39898 -6,5.47852 3.88832,2.08097 2.36212,5.09942 -7.34571,14.52734 -8.11711,7.88312 -9.23712,9.36938 -8.51758,11.31446 0.45565,1.23169 0.43933,3.00923 -0.0371,3.94922 -0.47644,0.93999 -1.42128,2.90037 -2.09766,4.35546 -1.07919,2.32164 -0.56641,4.03516 -0.56641,4.03516 l 15.34375,0.008 c -1.65256,-3.02588 -3.85964,-3.63964 -5.54492,-5.11914 l -1.26562,-3.83008 1.51562,-3.22461 c 1.38336,-1.4439 2.51563,-3.04259 2.51563,-3.55273 0,-0.51014 1.74599,-2.73554 3.88086,-4.94531 2.13487,-2.20976 5.29816,-5.52724 7.02929,-7.37305 3.58356,-3.82094 4.17576,-3.83168 17.58203,-0.31055 7.65309,2.01006 8.14077,2.02639 11.49219,0.38282 l 3.5,-1.7168 -0.33203,-12.17773 -0.33203,-12.17969 3.04101,-1.57031 c 1.67169,-0.8646 3.81319,-1.57242 4.75979,-1.57242 0.9465,0 3.6226,-1.98595 5.9473,-4.41211 3.1487,-3.28615 4.509,-5.72068 5.33,-9.54883 1.2805,-5.97095 2.303,-8.07699 8.4903,-17.45703 2.5096,-3.80456 5.7588,-10.10456 7.2207,-14 1.4619,-3.89544 2.9954,-7.45675 3.4062,-7.91406 1.1496,-1.27975 20.0517,-5.8577 23.877,-5.7832 1.8664,0.0363 4.1513,0.75106 5.0781,1.58984 2.0094,1.81843 4.0565,1.92457 7.4317,0.38672 2.5733,-1.17251 4.9226,-5.97773 3.9785,-8.13867 -0.2937,-0.672 -3.6772,-3.92266 -7.5196,-7.22266 -3.8425,-3.3 -8.9521,-7.87559 -11.3554,-10.16797 -5.9607,-5.68557 -11.9732,-9.00075 -18.4102,-10.15039 -4.9988,-0.89279 -5.58,-0.78909 -7.7402,1.37109 -1.2844,1.28439 -5.18,3.69249 -8.6563,5.35157 -6.4485,3.07757 -7.9666,4.85475 -9.4785,11.0957 -1.6001,6.60486 -10.214,7.82814 -16.50585,2.34375 -1.79426,-1.564 -4.35083,-3.5557 -5.67969,-4.42578 l -2.41601,-1.58203 1.88086,-5.91797 c 1.03371,-3.25492 1.99026,-8.80962 2.12695,-12.34375 0.19422,-5.0215 0.64472,-6.63488 2.06055,-7.38086 5.45736,-2.8754 6.86517,-9.9465 3.21289,-16.13672 C 994.43662,544.32759 993.83331,544 989.79297,544 Z"
style="display:none;opacity:1;fill:#000000"
inkscape:connector-curvature="0" />
<path
id="hole1000"
d="m 979.76562,598 c 1.15653,0 14.18641,6.05727 14.37305,6.68164 0.13457,0.45021 -1.465,1.60586 -3.55469,2.56836 -2.08969,0.9625 -3.98839,1.70474 -4.2207,1.64844 -0.23232,-0.0563 -1.92716,-0.45792 -3.76562,-0.89258 -4.6941,-1.10981 -5.27297,-2.00025 -4.08985,-6.28516 0.56491,-2.04594 1.1303,-3.7207 1.25781,-3.7207 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole1001"
d="m 1043.5332,605.43359 c 0.5757,0.012 1.1723,0.0647 1.7813,0.16211 5.0637,0.80971 5.2394,2.04019 0.5722,3.99024 -1.9542,0.81653 -4.8792,1.75007 -6.5,2.07422 -2.5147,0.50295 -2.9453,0.28202 -2.9453,-1.51172 0,-2.86849 3.0622,-4.79894 7.0918,-4.71485 z"
style="display:inline;opacity:1;fill:#000000" />
<path
style="display:inline;opacity:1;fill:#000000"
d="m 897.19141,666.03711 c -1.92921,0.017 -3.87949,0.083 -5.7636,0.53184 -0.63576,0.16636 -0.73008,0.52197 -0.93827,1.20425 -0.10376,0.7823 0.28897,1.46085 0.66236,2.09914 0.92002,1.37654 1.39197,1.41838 2.62073,2.53877 0,0 1.61033,-0.19245 2.0207,-0.48628 1.7852,-1.16286 2.79403,-0.82756 4.36712,-2.26338 0.79221,-0.76992 1.63707,-1.5258 2.20484,-2.48475 0.28408,-0.60077 -0.60798,-0.71373 -1.01351,-0.82243 -1.36814,-0.26581 -2.7702,-0.30593 -4.16037,-0.31716 z"
id="hole1002"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccc" />
<path
id="hole1003"
d="m 985.23633,678 c 1.24589,0 5.48727,11.73392 4.70117,13.00586 -0.74393,1.20368 -6.82631,1.15339 -11.12109,-0.0918 -2.79585,-0.81061 -6.27582,-3.58611 -5.26758,-4.20117 0.21587,-0.13169 2.72163,-2.14655 5.57031,-4.47656 C 981.96781,679.90631 984.72119,678 985.23633,678 Z"
style="display:inline;opacity:1;fill:#000000" />
</g>
<g
id="g11"
style="display:inline">
<rect
style="display:inline;opacity:0.38000039;fill:none;stroke:#000000;stroke-width:1.00782073;stroke-opacity:1"
id="frame11"
width="358.99219"
height="238.99217"
x="1143.5039"
y="517.00391" />
<path
id="horse11"
d="m 1328.6973,543.20508 c -0.718,-0.0112 -1.471,-5e-4 -2.2227,0.0352 -5.2331,0.24822 -5.5075,0.39909 -6.3984,3.51954 -0.7127,2.49621 -0.5147,4.17936 0.8418,7.1875 2.2445,4.9774 1.411,8.54161 -2.4629,10.54492 -4.3176,2.2327 -5.0994,4.47097 -5.7285,16.39648 l -0.5664,10.7461 2.7871,2.1914 2.789,2.19336 -1.7617,3.9043 c -0.9681,2.14679 -1.4777,4.36 -1.1328,4.91797 0.3448,0.55797 -0.4374,2.25119 -1.7383,3.76367 l -2.3652,2.75 -5.8985,-2.11719 C 1296.4212,606.2158 1288.0513,604 1285.0488,604 c -1.421,0 -6.9763,1.16615 -12.3457,2.5918 -5.3694,1.42566 -12.4583,3.24589 -15.7539,4.04492 -10.0147,2.42803 -14.5078,8.37357 -14.5078,19.19531 0,12.71437 2.9937,21.30356 12.3574,35.45703 l 5.4317,8.21094 -0.9942,13.5 c -1.3714,18.6436 -1.3182,18.12061 -2.1836,21.75977 -0.6438,2.70754 1.0112,3.09146 1.8067,6.32617 1.5864,6.45058 5.668,9.04101 -6.918,9.58594 l 38.2051,-0.73438 -4.4356,-4.83789 c -5.7494,-6.26862 -6.8183,-8.97009 -9.3632,-19.09961 -2.8706,-11.42575 -2.6173,-16.18768 1.7324,-32.65625 0.749,-2.83589 2.8641,-6.95398 4.6992,-9.15039 1.835,-2.19641 3.8998,-5.35582 4.5898,-7.02148 1.8995,-4.58589 3.6943,-4.62642 10.9688,-0.25196 13.1809,7.92626 20.2107,9.79774 41.1035,10.94727 l 11.5,0.63281 -0.2305,17.89453 c -0.1543,12.05613 -0.7252,19.83016 -1.75,23.83008 -2.1861,8.53283 -0.2232,9.97997 -0.02,13.51758 0.2312,4.01368 -4.2864,3.84691 -5.6289,5.95898 l 24.0098,-0.10547 c -5.5345,-0.10471 -9.1716,-1.98283 -12.1993,-6.65039 -2.0248,-3.12161 -1.6658,-15.65437 0.6036,-21.08593 0.7997,-1.914 2.0041,-7.36228 2.6777,-12.10743 1.1043,-7.77948 3.0683,-13.07236 4.3594,-11.75 1.1225,1.14964 4.0309,22.28964 4.4023,31.99805 0.3882,10.14815 0.5023,10.59226 3.3828,13.23438 2.4988,2.29194 2.4711,4.72556 1.5664,6.41601 l 11.5196,0.0156 -2.3282,-4.58204 c -6.6599,-7.82719 -8.6681,-7.90413 -9.3711,-25.50976 -0.3556,-8.90577 -0.026,-16.4724 1.0606,-24.32813 1.4296,-10.33777 1.9089,-11.83541 5.1191,-16.04101 4.6423,-6.08174 5.039,-7.33617 5.125,-16.20508 0.054,-5.54442 0.8833,-9.97153 3.1817,-16.97852 1.7099,-5.21314 3.5236,-11.96314 4.0312,-15 2.4567,-14.69609 3.5568,-16.43384 9.7754,-15.43945 2.3162,0.37038 4.2129,1.02867 4.2129,1.46289 0,0.43422 -2.1375,1.60631 -4.75,2.60547 -2.6125,0.99915 -4.0422,1.95489 -3.1758,2.12305 0.8665,0.16816 4.9908,-1.06256 9.166,-2.73438 8.6307,-3.45588 10.0188,-3.6368 11.7598,-1.53906 1.8026,2.17199 4.026,1.85035 7.0195,-1.01758 1.9764,-1.89358 2.5217,-3.24512 2.1993,-5.4414 -0.636,-4.33378 -4.926,-7.57646 -19.9688,-15.10157 -3.4369,-1.7193 -6.4927,-3.52113 -6.791,-4.0039 -0.2984,-0.48278 -2.5913,-1.78477 -5.0957,-2.89258 -2.5044,-1.10781 -5.4436,-3.14645 -6.5313,-4.5293 -1.0878,-1.38285 -2.5899,-2.51367 -3.3379,-2.51367 -2.0133,0 -2.727,3.39497 -1.3496,6.41797 1.1201,2.45833 0.8878,2.98406 -3.2207,7.33789 -2.4341,2.57945 -4.6712,4.927 -4.9726,5.2168 -0.3014,0.28979 -1.7693,2.64101 -3.2617,5.22461 -1.4923,2.58361 -5.1777,6.85861 -8.1895,9.5 -3.0119,2.6414 -5.4783,5.53452 -5.4883,6.42968 -0.018,2.38903 -2.1511,3.77268 -7.2988,4.73438 -2.5149,0.46983 -5.3115,1.5928 -6.2148,2.49609 -4.0146,4.01463 -8.2444,0.0636 -7.6094,-7.10742 0.1392,-1.57168 3.3274,-1.6316 4.8672,-0.0918 0.8642,0.86414 1.5056,0.86982 2.5254,0.0234 0.8164,-0.67751 1.7375,-0.77068 2.291,-0.23047 0.5536,0.54039 2.2344,0.35028 4.1777,-0.47461 2.4797,-1.05257 3.1728,-1.90053 2.918,-3.57031 -0.53,-3.47281 -3.5337,-5.04946 -8.2656,-4.33984 -6.7545,1.0129 -9.7095,-1.16117 -11.1836,-8.22852 -0.6697,-3.21039 -1.8935,-7.1258 -2.7188,-8.70117 -2.2493,-4.29372 -1.8724,-7.94318 1.1074,-10.71289 2.4381,-2.26625 2.5704,-2.84265 2.0215,-8.85156 -0.323,-3.5354 -1.1603,-6.80256 -1.8594,-7.25977 -0.5242,-0.34291 -2.3597,-0.57376 -4.5136,-0.60742 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole1100"
d="m 1254.7305,638.6582 c 0.2509,-0.29848 1.94,2.64367 5.0703,8.82422 3.663,7.23227 4.6941,10.27559 4.4531,13.15039 l -0.3125,3.74024 -2.873,-3.7793 c -1.9967,-2.62802 -3.0178,-5.32176 -3.3477,-8.83594 -0.261,-2.7804 -1.1111,-6.85863 -1.8887,-9.0625 -0.8862,-2.51183 -1.2521,-3.85801 -1.1015,-4.03711 z"
style="display:inline;opacity:1;fill:#000000" />
<path
id="hole1101"
d="m 1266.9414,690.5 c 1.1094,0 4.1749,10.69397 5.752,20.06055 0.8663,5.14518 1.4657,6.31454 3.9668,7.75 1.6203,0.92992 2.7627,3.92052 2.5371,4.60742 -0.2257,0.68689 -2.0397,-0.28022 -4.0293,-0.11133 -3.2154,0.27294 -3.8073,-0.0605 -5.3262,-3 -0.9399,-1.81889 -2.2674,-3.75664 -2.9492,-4.30664 -0.6819,-0.55 -1.48,-3.025 -1.7735,-5.5 -0.7077,-5.96738 0.5575,-19.5 1.8223,-19.5 z"
style="display:inline;opacity:1;fill:#000000" />
</g>
</svg>
<!DOCTYPE html>
<html vocab="http://schema.org" lang="ja">
<head>
<title>Three.jsによる馬のアニメーション</title>
<meta charset="utf-8" />
<meta name="description" content="SVGアニメーションのテスト" />
<meta name="keywords" content="Youtube,d3.js,Q.js,jquery" />
<meta name="author" content="sfpgmr" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<script type="text/javascript" src="./pathseg.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.js"></script>
<script type="text/javascript" src="pathSerializer.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.1.2/q.min.js" ></script>
<!--<script type="text/javascript" src="./graphics.js"></script> -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.2/normalize.min.css" />
<style>
body {
margin: 0;
padding: 0;
overflow: hidden;
}
#svg {
display:none;
}
</style>
</head>
<body>
<div id="content"></div>
<div id="svg"></div>
<div id="svgcell"></div>
<script type="text/javascript" src="index.js"></script>
<script></script>
</body>
</html>
//The MIT License (MIT)
//
//Copyright (c) 2015 Satoshi Fujiwara
//
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//
//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.
//
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
/// <reference path="http://cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.js" />
/// <reference path="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.js" />
/// <reference path="..\intellisense\q.intellisense.js" />
/// <reference path="shapeSerializer.js" />
//var fs = require('fs');
//try {
// fs.mkdirSync('./temp');
//} catch(e){
// if(e.code != "EEXIST"){
// throw e;
// }
//}
// リリース時にはコメントアウトすること
// document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] +
// ':35729/livereload.js?snipver=2"></' + 'script>');
// stackoverflowより
// 絶対座標から相対座標への変換
// http://stackoverflow.com/questions/14179333/convert-svg-path-to-relative-commands
function convertToRelative(path) {
function set(type) {
var args = [].slice.call(arguments, 1)
, rcmd = 'createSVGPathSeg'+ type +'Rel'
, rseg = path[rcmd].apply(path, args);
segs.replaceItem(rseg, i);
}
var dx, dy, x0, y0, x1, y1, x2, y2, segs = path.pathSegList;
for (var x = 0, y = 0, i = 0, len = segs.numberOfItems; i < len; i++) {
var seg = segs.getItem(i)
, c = seg.pathSegTypeAsLetter;
if (/[MLHVCSQTAZz]/.test(c)) {
if ('x1' in seg) x1 = seg.x1 - x;
if ('x2' in seg) x2 = seg.x2 - x;
if ('y1' in seg) y1 = seg.y1 - y;
if ('y2' in seg) y2 = seg.y2 - y;
if ('x' in seg) dx = -x + (x = seg.x);
if ('y' in seg) dy = -y + (y = seg.y);
switch (c) {
case 'M': set('Moveto',dx,dy); break;
case 'L': set('Lineto',dx,dy); break;
case 'H': set('LinetoHorizontal',dx); break;
case 'V': set('LinetoVertical',dy); break;
case 'C': set('CurvetoCubic',dx,dy,x1,y1,x2,y2); break;
case 'S': set('CurvetoCubicSmooth',dx,dy,x2,y2); break;
case 'Q': set('CurvetoQuadratic',dx,dy,x1,y1); break;
case 'T': set('CurvetoQuadraticSmooth',dx,dy); break;
case 'A': set('Arc',dx,dy,seg.r1,seg.r2,seg.angle,
seg.largeArcFlag,seg.sweepFlag); break;
case 'Z': case 'z': x = x0; y = y0; break;
}
}
else {
if ('x' in seg) x += seg.x;
if ('y' in seg) y += seg.y;
}
// store the start of a subpath
if (c == 'M' || c == 'm') {
x0 = x;
y0 = y;
}
}
path.setAttribute('d', path.getAttribute('d').replace(/Z/g, 'z'));
}
// svg pathをthree.jsのshapeに変換する
// スペースの処理とy座標を反転するように修正
// From d3-threeD.js
// https://github.com/asutherland/d3-threeD
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
var DEGS_TO_RADS = Math.PI / 180, UNIT_SIZE = 100;
var DIGIT_0 = 48, DIGIT_9 = 57, COMMA = 44, SPACE = 32, PERIOD = 46, MINUS = 45,E = 101;
function transformSVGPath(pathStr) {
var path = new THREE.Path();
var idx = 1, len = pathStr.length, activeCmd,
x = 0, y = 0, nx = 0, ny = 0, firstX = null, firstY = null,
x1 = 0, x2 = 0, y1 = 0, y2 = 0,
rx = 0, ry = 0, xar = 0, laf = 0, sf = 0, cx, cy;
function eatNum() {
var sidx, c, isFloat = false, s;
// eat delims
while (idx < len) {
c = pathStr.charCodeAt(idx);
if (c !== COMMA && c !== SPACE)
break;
idx++;
}
if (c === MINUS)
sidx = idx++;
else
sidx = idx;
// eat number
while (idx < len) {
c = pathStr.charCodeAt(idx);
if (DIGIT_0 <= c && c <= DIGIT_9) {
idx++;
continue;
}
else if (c === PERIOD || c === E || c === MINUS) {
idx++;
isFloat = true;
continue;
}
s = pathStr.substring(sidx, idx);
return isFloat ? parseFloat(s) : parseInt(s);
}
s = pathStr.substring(sidx);
return isFloat ? parseFloat(s) : parseInt(s);
}
function nextIsNum() {
var c;
// do permanently eat any delims...
while (idx < len) {
c = pathStr.charCodeAt(idx);
if (c !== COMMA && c !== SPACE)
break;
idx++;
}
c = pathStr.charCodeAt(idx);
return (c === MINUS || (DIGIT_0 <= c && c <= DIGIT_9));
}
var canRepeat;
activeCmd = pathStr[0];
while (idx <= len) {
canRepeat = true;
switch (activeCmd) {
// moveto commands, become lineto's if repeated
case 'M':
x = eatNum();
y = -eatNum();
path.moveTo(x, y);
activeCmd = 'L';
firstX = x;
firstY = y;
break;
case 'm':
x += eatNum();
y += -eatNum();
path.moveTo(x, y);
activeCmd = 'l';
firstX = x;
firstY = y;
break;
case 'Z':
case 'z':
canRepeat = false;
if (x !== firstX || y !== firstY)
path.lineTo(firstX, firstY);
break;
// - lines!
case 'L':
case 'H':
case 'V':
nx = (activeCmd === 'V') ? x : eatNum();
ny = (activeCmd === 'H') ? y : -eatNum();
path.lineTo(nx, ny);
x = nx;
y = ny;
break;
case 'l':
case 'h':
case 'v':
nx = (activeCmd === 'v') ? x : (x + eatNum());
ny = (activeCmd === 'h') ? y : (y + -eatNum());
path.lineTo(nx, ny);
x = nx;
y = ny;
break;
// - cubic bezier
case 'C':
x1 = eatNum(); y1 = -eatNum();
case 'S':
if (activeCmd === 'S') {
x1 = 2 * x - x2; y1 = 2 * y - y2;
}
x2 = eatNum();
y2 = -eatNum();
nx = eatNum();
ny = -eatNum();
path.bezierCurveTo(x1, y1, x2, y2, nx, ny);
x = nx; y = ny;
break;
case 'c':
x1 = x + eatNum();
y1 = y + -eatNum();
case 's':
if (activeCmd === 's') {
x1 = 2 * x - x2;
y1 = 2 * y - y2;
}
x2 = x + eatNum();
y2 = y + -eatNum();
nx = x + eatNum();
ny = y + -eatNum();
path.bezierCurveTo(x1, y1, x2, y2, nx, ny);
x = nx; y = ny;
break;
// - quadratic bezier
case 'Q':
x1 = eatNum(); y1 = -eatNum();
case 'T':
if (activeCmd === 'T') {
x1 = 2 * x - x1;
y1 = 2 * y - y1;
}
nx = eatNum();
ny = -eatNum();
path.quadraticCurveTo(x1, y1, nx, ny);
x = nx;
y = ny;
break;
case 'q':
x1 = x + eatNum();
y1 = y + -eatNum();
case 't':
if (activeCmd === 't') {
x1 = 2 * x - x1;
y1 = 2 * y - y1;
}
nx = x + eatNum();
ny = y + -eatNum();
path.quadraticCurveTo(x1, y1, nx, ny);
x = nx; y = ny;
break;
// - elliptical arc
case 'A':
rx = eatNum();
ry = eatNum();
xar = eatNum() * DEGS_TO_RADS;
laf = eatNum();
sf = eatNum();
nx = eatNum();
ny = -eatNum();
if (rx !== ry) {
console.warn("Forcing elliptical arc to be a circular one :(",
rx, ry);
}
// SVG implementation notes does all the math for us! woo!
// http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
// step1, using x1 as x1'
x1 = Math.cos(xar) * (x - nx) / 2 + Math.sin(xar) * (y - ny) / 2;
y1 = -Math.sin(xar) * (x - nx) / 2 + Math.cos(xar) * (y - ny) / 2;
// step 2, using x2 as cx'
var norm = Math.sqrt(
(rx*rx * ry*ry - rx*rx * y1*y1 - ry*ry * x1*x1) /
(rx*rx * y1*y1 + ry*ry * x1*x1));
if (laf === sf)
norm = -norm;
x2 = norm * rx * y1 / ry;
y2 = norm * -ry * x1 / rx;
// step 3
cx = Math.cos(xar) * x2 - Math.sin(xar) * y2 + (x + nx) / 2;
cy = Math.sin(xar) * x2 + Math.cos(xar) * y2 + (y + ny) / 2;
var u = new THREE.Vector2(1, 0),
v = new THREE.Vector2((x1 - x2) / rx,
(y1 - y2) / ry);
var startAng = Math.acos(u.dot(v) / u.length() / v.length());
if (u.x * v.y - u.y * v.x < 0)
startAng = -startAng;
// we can reuse 'v' from start angle as our 'u' for delta angle
u.x = (-x1 - x2) / rx;
u.y = (-y1 - y2) / ry;
var deltaAng = Math.acos(v.dot(u) / v.length() / u.length());
// This normalization ends up making our curves fail to triangulate...
if (v.x * u.y - v.y * u.x < 0)
deltaAng = -deltaAng;
if (!sf && deltaAng > 0)
deltaAng -= Math.PI * 2;
if (sf && deltaAng < 0)
deltaAng += Math.PI * 2;
path.absarc(cx, cy, rx, startAng, startAng + deltaAng, sf);
x = nx;
y = ny;
break;
default:
if(activeCmd == ' '){
break;
}
throw new Error("weird path command: " + activeCmd);
}
// just reissue the command
if (canRepeat && nextIsNum())
continue;
activeCmd = pathStr[idx++];
}
return path;
}
// from gist
// https://gist.github.com/gabrielflorit/3758456
function createShape( geometry, color, x, y, z, rx, ry, rz, s ) {
// flat shape
// var geometry = new THREE.ShapeGeometry( shape );
var material = new THREE.MeshBasicMaterial({
color: color,
side: THREE.DoubleSide,
overdraw: true
});
var mesh = new THREE.Mesh( geometry, material );
mesh.position.set( x, y, z );
mesh.rotation.set( rx, ry, rz );
mesh.scale.set( s, s, s );
return mesh;
}
// メイン
window.addEventListener('load',function(){
var WIDTH = window.innerWidth, HEIGHT = window.innerHeight;
var renderer = new THREE.WebGLRenderer({ antialias: false, sortObjects: true });
renderer.setSize(WIDTH, HEIGHT);
renderer.setClearColor(0x000000, 1);
renderer.domElement.id = 'console';
renderer.domElement.className = 'console';
renderer.domElement.style.zIndex = 0;
d3.select('#content').node().appendChild(renderer.domElement);
renderer.clear();
// シーンの作成
var scene = new THREE.Scene();
// カメラの作成
var camera = new THREE.PerspectiveCamera(90.0, WIDTH / HEIGHT);
camera.position.x = 0.0;
camera.position.y = 0.0;
camera.position.z = (WIDTH / 2.0) * HEIGHT / WIDTH;
camera.lookAt(new THREE.Vector3(0.0, 0.0, 0.0));
var horseGroups = [];
window.addEventListener('resize',function()
{
WIDTH = window.innerWidth;
HEIGHT = window.innerHeight;
renderer.setSize(WIDTH,HEIGHT);
camera.aspect = WIDTH / HEIGHT;
camera.position.z = (WIDTH / 2.0) * HEIGHT / WIDTH;
camera.updateProjectionMatrix();
});
var xml = Q.nfbind(d3.xml);
var gto;
// SVGファイルから馬のメッシュを作る
xml('./horse.svg','image/svg+xml')
.then(function(svg){
try {
document.querySelector('#svg').appendChild(svg.firstChild);
var shapes = [];
var loader = new THREE.BufferGeometryLoader();
d3.select('#svg').selectAll('g').each(function(){
var g = d3.select(this);
var boundingBox = g.select('rect').node();
var paths = g.selectAll('path');
var holes = [];
var shape = null;
var shapeId = null;
paths.each(function(){
// 馬セルの取り出しと座標補正
var path = d3.select(this);
convertToRelative(path.node());
var m = path.node().createSVGPathSegMovetoRel
(path.node().pathSegList.getItem(0).x - boundingBox.x.baseVal.value - boundingBox.width.baseVal.value / 2.0,
path.node().pathSegList.getItem(0).y - boundingBox.y.baseVal.value - boundingBox.height.baseVal.value / 2.0
);
path.node().pathSegList.replaceItem(m,0);
path.attr('d',path.attr('d'));
// svg pathからthree.js shapeへの変換
var threePath = transformSVGPath(path.attr('d'));
// シリアライズテスト //
// シリアライズ
var threePathString = JSON.stringify(threePath,null,2);
console.log(threePathString.length);
// デシリアライズ
shape = SF.deserialize(JSON.parse(threePathString)).toShapes();
shapeId = path.attr('id');
});
var shapeGeometry = new THREE.ShapeGeometry( shape );
shapes.push({name:shapeId,shape:shapeGeometry});
});
var ggroup = new THREE.Group();
for(var i = 0; i < 1;++i){
var group = new THREE.Group();
shapes.forEach(function(sm){
var shapeMesh = createShape(sm.shape,0xFFFF00,0,0,0,0,0,0,1.0);
shapeMesh.visible = false;
shapeMesh.name = sm.name;
group.add(shapeMesh);
});
group.position.x = 0;
group.position.y = 0;
// group.position.z = 2000.0 * Math.random() - 1000.0;
horseGroups.push(group);
ggroup.add(group);
}
scene.add(ggroup);
ggroup.name = 'world';
d3.select('#svg').remove();
} catch (e) {
console.log(e + '\n' + e.stack);
}
//レンダリング
var r = 0.0;
(function render(index){
if(index > 10.0) index = 0.0;
var idx = parseInt(index,10);
for(var i = 0,end = horseGroups.length;i< end;++i){
var g = horseGroups[i];
g.getObjectByName('horse' + ('00' + idx.toString(10)).slice(-2)).visible = true;
if(idx == 0){
g.getObjectByName('horse10').visible = false;
} else {
g.getObjectByName('horse' + ('00' + (idx - 1).toString(10)).slice(-2)).visible = false;
}
}
renderer.render(scene,camera);
index += 0.25;
requestAnimationFrame(render.bind(null,index));
})(0);
// console.log(d3.select('#svg').html());
});
});
{
"name": "5e85dd1519d7b1d09626",
"version": "1.0.0",
"description": "SVGからThree.jsのgeometryへの変換",
"main": "app://localhost:35729/index.html",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@gist.github.com:/892dc3eb0775c70130b6.git"
},
"keywords": [
"Node-Webkit"
],
"author": "S.F.",
"license": "MIT",
"devDependencies": {
},
"dependencies": {
"q": "^1.1.2",
"request": "^2.53.0"
},
"window": {
"toolbar": true,
"width": 1280,
"height": 720
}
}
// SVGPathSeg API polyfill
// https://github.com/progers/pathseg
//
// This is a drop-in replacement for the SVGPathSeg and SVGPathSegList APIs that were removed from
// SVG2 (https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html), including the latest spec
// changes which were implemented in Firefox 43 and Chrome 46.
(function() { "use strict";
if (!("SVGPathSeg" in window)) {
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg
window.SVGPathSeg = function(type, typeAsLetter, owningPathSegList) {
this.pathSegType = type;
this.pathSegTypeAsLetter = typeAsLetter;
this._owningPathSegList = owningPathSegList;
}
window.SVGPathSeg.prototype.classname = "SVGPathSeg";
window.SVGPathSeg.PATHSEG_UNKNOWN = 0;
window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;
window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;
window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;
window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;
window.SVGPathSeg.PATHSEG_LINETO_REL = 5;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;
window.SVGPathSeg.PATHSEG_ARC_ABS = 10;
window.SVGPathSeg.PATHSEG_ARC_REL = 11;
window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;
window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;
window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;
window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;
window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;
window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;
// Notify owning PathSegList on any changes so they can be synchronized back to the path element.
window.SVGPathSeg.prototype._segmentChanged = function() {
if (this._owningPathSegList)
this._owningPathSegList.segmentChanged(this);
}
window.SVGPathSegClosePath = function(owningPathSegList) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, "z", owningPathSegList);
}
window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegClosePath.prototype.toString = function() { return "[object SVGPathSegClosePath]"; }
window.SVGPathSegClosePath.prototype._asPathString = function() { return this.pathSegTypeAsLetter; }
window.SVGPathSegClosePath.prototype.clone = function() { return new window.SVGPathSegClosePath(undefined); }
window.SVGPathSegMovetoAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, "M", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegMovetoAbs.prototype.toString = function() { return "[object SVGPathSegMovetoAbs]"; }
window.SVGPathSegMovetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegMovetoAbs.prototype.clone = function() { return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegMovetoRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, "m", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegMovetoRel.prototype.toString = function() { return "[object SVGPathSegMovetoRel]"; }
window.SVGPathSegMovetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegMovetoRel.prototype.clone = function() { return new window.SVGPathSegMovetoRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegMovetoRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegMovetoRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, "L", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoAbs.prototype.toString = function() { return "[object SVGPathSegLinetoAbs]"; }
window.SVGPathSegLinetoAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegLinetoAbs.prototype.clone = function() { return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, "l", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoRel.prototype.toString = function() { return "[object SVGPathSegLinetoRel]"; }
window.SVGPathSegLinetoRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegLinetoRel.prototype.clone = function() { return new window.SVGPathSegLinetoRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegLinetoRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegLinetoRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoCubicAbs = function(owningPathSegList, x, y, x1, y1, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, "C", owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicAbs.prototype.toString = function() { return "[object SVGPathSegCurvetoCubicAbs]"; }
window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x1 + " " + this._y1 + " " + this._x2 + " " + this._y2 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoCubicAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "x1", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "y1", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "x2", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, "y2", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoCubicRel = function(owningPathSegList, x, y, x1, y1, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, "c", owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicRel.prototype.toString = function() { return "[object SVGPathSegCurvetoCubicRel]"; }
window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x1 + " " + this._y1 + " " + this._x2 + " " + this._y2 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoCubicRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "x1", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "y1", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "x2", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, "y2", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoQuadraticAbs = function(owningPathSegList, x, y, x1, y1) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, "Q", owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
}
window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function() { return "[object SVGPathSegCurvetoQuadraticAbs]"; }
window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x1 + " " + this._y1 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, "x1", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, "y1", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoQuadraticRel = function(owningPathSegList, x, y, x1, y1) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, "q", owningPathSegList);
this._x = x;
this._y = y;
this._x1 = x1;
this._y1 = y1;
}
window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function() { return "[object SVGPathSegCurvetoQuadraticRel]"; }
window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x1 + " " + this._y1 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, "x1", { get: function() { return this._x1; }, set: function(x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, "y1", { get: function() { return this._y1; }, set: function(y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegArcAbs = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, "A", owningPathSegList);
this._x = x;
this._y = y;
this._r1 = r1;
this._r2 = r2;
this._angle = angle;
this._largeArcFlag = largeArcFlag;
this._sweepFlag = sweepFlag;
}
window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegArcAbs.prototype.toString = function() { return "[object SVGPathSegArcAbs]"; }
window.SVGPathSegArcAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._r1 + " " + this._r2 + " " + this._angle + " " + (this._largeArcFlag ? "1" : "0") + " " + (this._sweepFlag ? "1" : "0") + " " + this._x + " " + this._y; }
window.SVGPathSegArcAbs.prototype.clone = function() { return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "r1", { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "r2", { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "angle", { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "largeArcFlag", { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcAbs.prototype, "sweepFlag", { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegArcRel = function(owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, "a", owningPathSegList);
this._x = x;
this._y = y;
this._r1 = r1;
this._r2 = r2;
this._angle = angle;
this._largeArcFlag = largeArcFlag;
this._sweepFlag = sweepFlag;
}
window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegArcRel.prototype.toString = function() { return "[object SVGPathSegArcRel]"; }
window.SVGPathSegArcRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._r1 + " " + this._r2 + " " + this._angle + " " + (this._largeArcFlag ? "1" : "0") + " " + (this._sweepFlag ? "1" : "0") + " " + this._x + " " + this._y; }
window.SVGPathSegArcRel.prototype.clone = function() { return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }
Object.defineProperty(window.SVGPathSegArcRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "r1", { get: function() { return this._r1; }, set: function(r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "r2", { get: function() { return this._r2; }, set: function(r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "angle", { get: function() { return this._angle; }, set: function(angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "largeArcFlag", { get: function() { return this._largeArcFlag; }, set: function(largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegArcRel.prototype, "sweepFlag", { get: function() { return this._sweepFlag; }, set: function(sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoHorizontalAbs = function(owningPathSegList, x) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, "H", owningPathSegList);
this._x = x;
}
window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function() { return "[object SVGPathSegLinetoHorizontalAbs]"; }
window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x; }
window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x); }
Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoHorizontalRel = function(owningPathSegList, x) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, "h", owningPathSegList);
this._x = x;
}
window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoHorizontalRel.prototype.toString = function() { return "[object SVGPathSegLinetoHorizontalRel]"; }
window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x; }
window.SVGPathSegLinetoHorizontalRel.prototype.clone = function() { return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x); }
Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoVerticalAbs = function(owningPathSegList, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, "V", owningPathSegList);
this._y = y;
}
window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoVerticalAbs.prototype.toString = function() { return "[object SVGPathSegLinetoVerticalAbs]"; }
window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._y; }
window.SVGPathSegLinetoVerticalAbs.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y); }
Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegLinetoVerticalRel = function(owningPathSegList, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, "v", owningPathSegList);
this._y = y;
}
window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegLinetoVerticalRel.prototype.toString = function() { return "[object SVGPathSegLinetoVerticalRel]"; }
window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._y; }
window.SVGPathSegLinetoVerticalRel.prototype.clone = function() { return new window.SVGPathSegLinetoVerticalRel(undefined, this._y); }
Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoCubicSmoothAbs = function(owningPathSegList, x, y, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, "S", owningPathSegList);
this._x = x;
this._y = y;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function() { return "[object SVGPathSegCurvetoCubicSmoothAbs]"; }
window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x2 + " " + this._y2 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, "x2", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, "y2", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoCubicSmoothRel = function(owningPathSegList, x, y, x2, y2) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, "s", owningPathSegList);
this._x = x;
this._y = y;
this._x2 = x2;
this._y2 = y2;
}
window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function() { return "[object SVGPathSegCurvetoCubicSmoothRel]"; }
window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x2 + " " + this._y2 + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, "x2", { get: function() { return this._x2; }, set: function(x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, "y2", { get: function() { return this._y2; }, set: function(y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoQuadraticSmoothAbs = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, "T", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function() { return "[object SVGPathSegCurvetoQuadraticSmoothAbs]"; }
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
window.SVGPathSegCurvetoQuadraticSmoothRel = function(owningPathSegList, x, y) {
window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, "t", owningPathSegList);
this._x = x;
this._y = y;
}
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function() { return "[object SVGPathSegCurvetoQuadraticSmoothRel]"; }
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function() { return this.pathSegTypeAsLetter + " " + this._x + " " + this._y; }
window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function() { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, "x", { get: function() { return this._x; }, set: function(x) { this._x = x; this._segmentChanged(); }, enumerable: true });
Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, "y", { get: function() { return this._y; }, set: function(y) { this._y = y; this._segmentChanged(); }, enumerable: true });
// Add createSVGPathSeg* functions to window.SVGPathElement.
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement.
window.SVGPathElement.prototype.createSVGPathSegClosePath = function() { return new window.SVGPathSegClosePath(undefined); }
window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function(x, y) { return new window.SVGPathSegMovetoAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function(x, y) { return new window.SVGPathSegMovetoRel(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function(x, y) { return new window.SVGPathSegLinetoAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function(x, y) { return new window.SVGPathSegLinetoRel(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function(x, y, x1, y1, x2, y2) { return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function(x, y, x1, y1) { return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); }
window.SVGPathElement.prototype.createSVGPathSegArcAbs = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
window.SVGPathElement.prototype.createSVGPathSegArcRel = function(x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); }
window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function(x) { return new window.SVGPathSegLinetoHorizontalAbs(undefined, x); }
window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function(x) { return new window.SVGPathSegLinetoHorizontalRel(undefined, x); }
window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function(y) { return new window.SVGPathSegLinetoVerticalAbs(undefined, y); }
window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function(y) { return new window.SVGPathSegLinetoVerticalRel(undefined, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function(x, y, x2, y2) { return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); }
window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function(x, y) { return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); }
}
if (!("SVGPathSegList" in window)) {
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList
window.SVGPathSegList = function(pathElement) {
this._pathElement = pathElement;
this._list = this._parsePath(this._pathElement.getAttribute("d"));
// Use a MutationObserver to catch changes to the path's "d" attribute.
this._mutationObserverConfig = { "attributes": true, "attributeFilter": ["d"] };
this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));
this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
}
window.SVGPathSegList.prototype.classname = "SVGPathSegList";
Object.defineProperty(window.SVGPathSegList.prototype, "numberOfItems", {
get: function() {
this._checkPathSynchronizedToList();
return this._list.length;
},
enumerable: true
});
// Add the pathSegList accessors to window.SVGPathElement.
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData
Object.defineProperty(window.SVGPathElement.prototype, "pathSegList", {
get: function() {
if (!this._pathSegList)
this._pathSegList = new window.SVGPathSegList(this);
return this._pathSegList;
},
enumerable: true
});
// FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList.
Object.defineProperty(window.SVGPathElement.prototype, "normalizedPathSegList", { get: function() { return this.pathSegList; }, enumerable: true });
Object.defineProperty(window.SVGPathElement.prototype, "animatedPathSegList", { get: function() { return this.pathSegList; }, enumerable: true });
Object.defineProperty(window.SVGPathElement.prototype, "animatedNormalizedPathSegList", { get: function() { return this.pathSegList; }, enumerable: true });
// Process any pending mutations to the path element and update the list as needed.
// This should be the first call of all public functions and is needed because
// MutationObservers are not synchronous so we can have pending asynchronous mutations.
window.SVGPathSegList.prototype._checkPathSynchronizedToList = function() {
this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());
}
window.SVGPathSegList.prototype._updateListFromPathMutations = function(mutationRecords) {
if (!this._pathElement)
return;
var hasPathMutations = false;
mutationRecords.forEach(function(record) {
if (record.attributeName == "d")
hasPathMutations = true;
});
if (hasPathMutations)
this._list = this._parsePath(this._pathElement.getAttribute("d"));
}
// Serialize the list and update the path's 'd' attribute.
window.SVGPathSegList.prototype._writeListToPath = function() {
this._pathElementMutationObserver.disconnect();
this._pathElement.setAttribute("d", window.SVGPathSegList._pathSegArrayAsString(this._list));
this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);
}
// When a path segment changes the list needs to be synchronized back to the path element.
window.SVGPathSegList.prototype.segmentChanged = function(pathSeg) {
this._writeListToPath();
}
window.SVGPathSegList.prototype.clear = function() {
this._checkPathSynchronizedToList();
this._list.forEach(function(pathSeg) {
pathSeg._owningPathSegList = null;
});
this._list = [];
this._writeListToPath();
}
window.SVGPathSegList.prototype.initialize = function(newItem) {
this._checkPathSynchronizedToList();
this._list = [newItem];
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}
window.SVGPathSegList.prototype._checkValidIndex = function(index) {
if (isNaN(index) || index < 0 || index >= this.numberOfItems)
throw "INDEX_SIZE_ERR";
}
window.SVGPathSegList.prototype.getItem = function(index) {
this._checkPathSynchronizedToList();
this._checkValidIndex(index);
return this._list[index];
}
window.SVGPathSegList.prototype.insertItemBefore = function(newItem, index) {
this._checkPathSynchronizedToList();
// Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.
if (index > this.numberOfItems)
index = this.numberOfItems;
if (newItem._owningPathSegList) {
// SVG2 spec says to make a copy.
newItem = newItem.clone();
}
this._list.splice(index, 0, newItem);
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}
window.SVGPathSegList.prototype.replaceItem = function(newItem, index) {
this._checkPathSynchronizedToList();
if (newItem._owningPathSegList) {
// SVG2 spec says to make a copy.
newItem = newItem.clone();
}
this._checkValidIndex(index);
this._list[index] = newItem;
newItem._owningPathSegList = this;
this._writeListToPath();
return newItem;
}
window.SVGPathSegList.prototype.removeItem = function(index) {
this._checkPathSynchronizedToList();
this._checkValidIndex(index);
var item = this._list[index];
this._list.splice(index, 1);
this._writeListToPath();
return item;
}
window.SVGPathSegList.prototype.appendItem = function(newItem) {
this._checkPathSynchronizedToList();
if (newItem._owningPathSegList) {
// SVG2 spec says to make a copy.
newItem = newItem.clone();
}
this._list.push(newItem);
newItem._owningPathSegList = this;
// TODO: Optimize this to just append to the existing attribute.
this._writeListToPath();
return newItem;
}
window.SVGPathSegList._pathSegArrayAsString = function(pathSegArray) {
var string = "";
var first = true;
pathSegArray.forEach(function(pathSeg) {
if (first) {
first = false;
string += pathSeg._asPathString();
} else {
string += " " + pathSeg._asPathString();
}
});
return string;
}
// This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.
window.SVGPathSegList.prototype._parsePath = function(string) {
if (!string || string.length == 0)
return [];
var owningPathSegList = this;
var Builder = function() {
this.pathSegList = [];
}
Builder.prototype.appendSegment = function(pathSeg) {
this.pathSegList.push(pathSeg);
}
var Source = function(string) {
this._string = string;
this._currentIndex = 0;
this._endIndex = this._string.length;
this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;
this._skipOptionalSpaces();
}
Source.prototype._isCurrentSpace = function() {
var character = this._string[this._currentIndex];
return character <= " " && (character == " " || character == "\n" || character == "\t" || character == "\r" || character == "\f");
}
Source.prototype._skipOptionalSpaces = function() {
while (this._currentIndex < this._endIndex && this._isCurrentSpace())
this._currentIndex++;
return this._currentIndex < this._endIndex;
}
Source.prototype._skipOptionalSpacesOrDelimiter = function() {
if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) != ",")
return false;
if (this._skipOptionalSpaces()) {
if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == ",") {
this._currentIndex++;
this._skipOptionalSpaces();
}
}
return this._currentIndex < this._endIndex;
}
Source.prototype.hasMoreData = function() {
return this._currentIndex < this._endIndex;
}
Source.prototype.peekSegmentType = function() {
var lookahead = this._string[this._currentIndex];
return this._pathSegTypeFromChar(lookahead);
}
Source.prototype._pathSegTypeFromChar = function(lookahead) {
switch (lookahead) {
case "Z":
case "z":
return window.SVGPathSeg.PATHSEG_CLOSEPATH;
case "M":
return window.SVGPathSeg.PATHSEG_MOVETO_ABS;
case "m":
return window.SVGPathSeg.PATHSEG_MOVETO_REL;
case "L":
return window.SVGPathSeg.PATHSEG_LINETO_ABS;
case "l":
return window.SVGPathSeg.PATHSEG_LINETO_REL;
case "C":
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;
case "c":
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;
case "Q":
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;
case "q":
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;
case "A":
return window.SVGPathSeg.PATHSEG_ARC_ABS;
case "a":
return window.SVGPathSeg.PATHSEG_ARC_REL;
case "H":
return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;
case "h":
return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;
case "V":
return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;
case "v":
return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;
case "S":
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;
case "s":
return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;
case "T":
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;
case "t":
return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;
default:
return window.SVGPathSeg.PATHSEG_UNKNOWN;
}
}
Source.prototype._nextCommandHelper = function(lookahead, previousCommand) {
// Check for remaining coordinates in the current command.
if ((lookahead == "+" || lookahead == "-" || lookahead == "." || (lookahead >= "0" && lookahead <= "9")) && previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {
if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS)
return window.SVGPathSeg.PATHSEG_LINETO_ABS;
if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL)
return window.SVGPathSeg.PATHSEG_LINETO_REL;
return previousCommand;
}
return window.SVGPathSeg.PATHSEG_UNKNOWN;
}
Source.prototype.initialCommandIsMoveTo = function() {
// If the path is empty it is still valid, so return true.
if (!this.hasMoreData())
return true;
var command = this.peekSegmentType();
// Path must start with moveTo.
return command == window.SVGPathSeg.PATHSEG_MOVETO_ABS || command == window.SVGPathSeg.PATHSEG_MOVETO_REL;
}
// Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.
// Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF
Source.prototype._parseNumber = function() {
var exponent = 0;
var integer = 0;
var frac = 1;
var decimal = 0;
var sign = 1;
var expsign = 1;
var startIndex = this._currentIndex;
this._skipOptionalSpaces();
// Read the sign.
if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == "+")
this._currentIndex++;
else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == "-") {
this._currentIndex++;
sign = -1;
}
if (this._currentIndex == this._endIndex || ((this._string.charAt(this._currentIndex) < "0" || this._string.charAt(this._currentIndex) > "9") && this._string.charAt(this._currentIndex) != "."))
// The first character of a number must be one of [0-9+-.].
return undefined;
// Read the integer part, build right-to-left.
var startIntPartIndex = this._currentIndex;
while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= "0" && this._string.charAt(this._currentIndex) <= "9")
this._currentIndex++; // Advance to first non-digit.
if (this._currentIndex != startIntPartIndex) {
var scanIntPartIndex = this._currentIndex - 1;
var multiplier = 1;
while (scanIntPartIndex >= startIntPartIndex) {
integer += multiplier * (this._string.charAt(scanIntPartIndex--) - "0");
multiplier *= 10;
}
}
// Read the decimals.
if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) == ".") {
this._currentIndex++;
// There must be a least one digit following the .
if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < "0" || this._string.charAt(this._currentIndex) > "9")
return undefined;
while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= "0" && this._string.charAt(this._currentIndex) <= "9") {
frac *= 10;
decimal += (this._string.charAt(this._currentIndex) - "0") / frac;
this._currentIndex += 1;
}
}
// Read the exponent part.
if (this._currentIndex != startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) == "e" || this._string.charAt(this._currentIndex) == "E") && (this._string.charAt(this._currentIndex + 1) != "x" && this._string.charAt(this._currentIndex + 1) != "m")) {
this._currentIndex++;
// Read the sign of the exponent.
if (this._string.charAt(this._currentIndex) == "+") {
this._currentIndex++;
} else if (this._string.charAt(this._currentIndex) == "-") {
this._currentIndex++;
expsign = -1;
}
// There must be an exponent.
if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < "0" || this._string.charAt(this._currentIndex) > "9")
return undefined;
while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= "0" && this._string.charAt(this._currentIndex) <= "9") {
exponent *= 10;
exponent += (this._string.charAt(this._currentIndex) - "0");
this._currentIndex++;
}
}
var number = integer + decimal;
number *= sign;
if (exponent)
number *= Math.pow(10, expsign * exponent);
if (startIndex == this._currentIndex)
return undefined;
this._skipOptionalSpacesOrDelimiter();
return number;
}
Source.prototype._parseArcFlag = function() {
if (this._currentIndex >= this._endIndex)
return undefined;
var flag = false;
var flagChar = this._string.charAt(this._currentIndex++);
if (flagChar == "0")
flag = false;
else if (flagChar == "1")
flag = true;
else
return undefined;
this._skipOptionalSpacesOrDelimiter();
return flag;
}
Source.prototype.parseSegment = function() {
var lookahead = this._string[this._currentIndex];
var command = this._pathSegTypeFromChar(lookahead);
if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {
// Possibly an implicit command. Not allowed if this is the first command.
if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN)
return null;
command = this._nextCommandHelper(lookahead, this._previousCommand);
if (command == window.SVGPathSeg.PATHSEG_UNKNOWN)
return null;
} else {
this._currentIndex++;
}
this._previousCommand = command;
switch (command) {
case window.SVGPathSeg.PATHSEG_MOVETO_REL:
return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_MOVETO_ABS:
return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_REL:
return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_ABS:
return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:
return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:
return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:
return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:
return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());
case window.SVGPathSeg.PATHSEG_CLOSEPATH:
this._skipOptionalSpaces();
return new window.SVGPathSegClosePath(owningPathSegList);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:
var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:
var points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:
return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:
return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());
case window.SVGPathSeg.PATHSEG_ARC_REL:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
case window.SVGPathSeg.PATHSEG_ARC_ABS:
var points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};
return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);
default:
throw "Unknown path seg type."
}
}
var builder = new Builder();
var source = new Source(string);
if (!source.initialCommandIsMoveTo())
return [];
while (source.hasMoreData()) {
var pathSeg = source.parseSegment();
if (!pathSeg)
return [];
builder.appendSegment(pathSeg);
}
return builder.pathSegList;
}
}
}());
//The MIT License (MIT)
//
//Copyright (c) 2015 Satoshi Fujiwara
//
//Permission is hereby granted, free of charge, to any person obtaining a copy
//of this software and associated documentation files (the "Software"), to deal
//in the Software without restriction, including without limitation the rights
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//copies of the Software, and to permit persons to whom the Software is
//furnished to do so, subject to the following conditions:
//
//The above copyright notice and this permission notice shall be included in
//all copies or substantial portions of the Software.
//
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//THE SOFTWARE.
/// <reference path="http://cdnjs.cloudflare.com/ajax/libs/d3/3.5.2/d3.js" />
/// <reference path="http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.js" />
/// <reference path="..\intellisense\q.intellisense.js" />
"use strict";
// Node.js で動作しているか
(function () {
var isNode = (typeof process !== "undefined" && typeof require !== "undefined");
// ブラウザ上(非Node.js)で動作しているか
var isBrowser = !isNode
// node-webkitで動作しているか
var isNodeWebkit;
try {
isNodeWebkit = isNode ? (typeof require('nw.gui') !== "undefined") : false;
} catch (e) {
isNodeWebkit = false;
}
if ((isBrowser || isNodeWebkit) && !window['SF']) {
window.SF = {};
}
function mapArray(array){
return array.map(function(d){
if('metadata' in d){
return objArrays[d.metadata.type].factory(d);
} else {
return d;
}
});
}
var objArrays = {
'Vector2': {
factory: function (json) {
var obj = json.object;
return new THREE.Vector2(obj.x, obj.y);
}
},
'Vector3': {
factory: function (json) {
var obj = json.object;
return new THREE.Vector3(obj.x, obj.y, obj.z);
}
},
'EllipseCurve': {
factory: function (json) {
var obj = json.object;
return new THREE.EllipseCurve(obj.aX, obj.aY, obj.xRadius, obj.yRadius, obj.aStartAngle, obj.aEndAngle, obj.aClockwise);
}
},
'ArcCurve': {
factory: function (json) {
var obj = json.object;
return new THREE.ArcCurve(obj.aX, obj.aY, obj.xRadius, obj.aStartAngle, obj.aEndAngle, obj.aClockwise);
}
},
'ClosedSplineCurve3': {
factory: function (json) {
var obj = json.object;
if(obj['points']){
var points = mapArray(obj.points);
return new THREE.ClosedSplineCurve3(points);
}
return new THREE.ClosedSplineCurve3();
}
},
'CubicBezierCurve': {
factory: function (json) {
var o = json.object;
return new THREE.CubicBezierCurve(
objArrays[o.v0.metadata.type].factory(o.v0),
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2),
objArrays[o.v3.metadata.type].factory(o.v3)
);
}
},
'CubicBezierCurve3': {
factory: function (json) {
var o = json.object;
return new THREE.CubicBezierCurve3(
objArrays[o.v0.metadata.type].factory(o.v0),
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2),
objArrays[o.v3.metadata.type].factory(o.v3)
);
}
},
'LineCurve': {
factory: function (json) {
var o = json.object;
return new THREE.LineCurve(
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2)
);
}
},
'LineCurve3': {
factory: function (json) {
var o = json.object;
return new THREE.LineCurve3(
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2)
);
}
},
'QuadraticBezierCurve': {
factory: function (json) {
var o = json.object;
return new THREE.QuadraticBezierCurve(
objArrays[o.v0.metadata.type].factory(o.v0),
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2)
);
}
},
'QuadraticBezierCurve3': {
factory: function (json) {
var o = json.object;
return new THREE.QuadraticBezierCurve3(
objArrays[o.v0.metadata.type].factory(o.v0),
objArrays[o.v1.metadata.type].factory(o.v1),
objArrays[o.v2.metadata.type].factory(o.v2)
);
}
},
'SplineCurve': {
factory: function(json){
var o = json.object;
if(o['points']){
var points = mapArray(o.points);
return new THREE.SplineCurve(points);
} else{
return new THREE.SplineCurve(points);
}
}
},
'SplineCurve3': {
factory: function(json){
var o = json.object;
if(o['points']){
var points = mapArray(o.points);
return new THREE.SplineCurve3(points);
} else{
return new THREE.SplineCurve3(points);
}
}
},
'CurvePath': {
factory:function(json){
var o = json.object;
var instance = new THREE.CurvePath();
if('curves' in o){
instance.curves = mapArray(o.curves);
}
if('bends' in o){
instance.bends = mapArray(o.bends);
}
instance.autoClose = o.autoClose;
return instance;
}
},
'Path': {
factory:function(json){
var o = json.object;
var instance = new THREE.Path();
if('curves' in o){
instance.curves = mapArray(o.curves);
}
if('bends' in o){
instance.bends = mapArray(o.bends);
}
if('actions' in o){
instance.actions = mapArray(o.actions);
}
instance.autoClose = o.autoClose;
return instance;
}
}
}
// 対象オブジェクトのプロトタイプにtoJSONメソッドを定義する
for (var name in objArrays) {
(function () {
var name_ = name;
THREE[name_].prototype.toJSON = function () {
return toJSONBase(this, name_);
};
})();
};
function toJSONBase(obj, name) {
var json = {
"metadata": {
"type": name,
},
"object": {}
};
for (var i in obj) {
if (typeof obj[i] !== 'function') {
json.object[i] = obj[i].toJSON ? obj[i].toJSON() : obj[i];
}
}
return json;
}
SF.deserialize = function (json) {
if (objArrays[json.metadata.type]) {
return objArrays[json.metadata.type].factory(json);
}
}
})();
//(function () {
// // EllipseCurve
// var tobj = new THREE.EllipseCurve(1, 2, 3, 4, 5, 6, 7);
// console.log(tobj);
// var jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// var tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // ArcCurve
// tobj = new THREE.ArcCurve(1, 2, 3, 4, 5, 6);
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // CubicBezierCurve
// tobj = new THREE.CubicBezierCurve(new THREE.Vector2(0, 0), new THREE.Vector2(1, 1), new THREE.Vector2(2, 2), new THREE.Vector2(3, 3));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // CubicBezierCurve3
// tobj = new THREE.CubicBezierCurve(new THREE.Vector3(0, 0, 0), new THREE.Vector3(1, 1, 1), new THREE.Vector3(2, 2, 2), new THREE.Vector3(3, 3, 3));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // LineCurve
// tobj = new THREE.LineCurve(new THREE.Vector2(0, 0), new THREE.Vector2(1, 1));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // LineCurve
// tobj = new THREE.LineCurve3(new THREE.Vector3(0, 0), new THREE.Vector3(1, 1));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // QuadraticBezierCurve
// tobj = new THREE.QuadraticBezierCurve(new THREE.Vector2(0, 0), new THREE.Vector2(1, 1),new THREE.Vector2(2,2));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
// // QuadraticBezierCurve3
// tobj = new THREE.QuadraticBezierCurve3(new THREE.Vector3(0, 0,0), new THREE.Vector3(1, 1,1),new THREE.Vector3(2,2,2));
// console.log(tobj);
// jsonData = JSON.stringify(tobj);
// console.log(jsonData);
// tobj2 = SF.deserialize(JSON.parse(jsonData));
// console.log(tobj2);
//})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment