Created
September 3, 2017 01:01
-
-
Save 46bit/1a2c7120b88d474ab0857e597ce2f34a to your computer and use it in GitHub Desktop.
The pathfinding is evidently broken. I know it doesn't properly account for the gaps between path `to` and `from` - I think it just goes from a `from` to the next `from`. But the pathfinding seems broken on a larger scale, with large detours.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="svg.min.js"></script> | |
| <script src="svg.intersections.js"></script> | |
| </head> | |
| <body> | |
| <div id="drawing" style="height: 900px;"></div> | |
| <script> | |
| var draw = SVG('drawing') | |
| var svg = draw.svg('<?xml version="1.0" encoding="UTF-8"?><svg width="595px" height="842px" viewBox="0 0 595 842" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --><title>floor plan - 6</title><desc>Created with Sketch.</desc><defs><polygon id="path-1" points="338.75 461.230469 380 461.230469 380 360 338.75 360 338.75 339.835938 259.765625 339.835938 259.765625 360 220 360 220 461.230469 259.765625 461.230469 259.765625 480.210938 338.75 480.210938"></polygon></defs><g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="floor-plan---6"><rect id="Rectangle" stroke="#000000" stroke-width="4" fill="#FFFFFF" transform="translate(300.000000, 430.033203) rotate(-270.000000) translate(-300.000000, -430.033203) " x="-50.0332031" y="230.033203" width="700.066406" height="400"></rect><text id="23" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="384.988281" y="57">23</tspan></text><text id="24" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="340.582031" y="57">24</tspan></text><text id="25" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="296.175781" y="57">25</tspan></text><text id="26" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="251.769531" y="57">26</tspan></text><text id="27" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="207.363281" y="57">27</tspan></text><text id="28" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="162.957031" y="57">28</tspan></text><text id="29" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="118.550781" y="57">29</tspan></text><text id="22" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="429.394531" y="57">22</tspan></text><text id="21" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="473.800781" y="57">21</tspan></text><g id="Combined-Shape"><use fill="#DAD9D9" fill-rule="evenodd" xlink:href="#path-1"></use><path stroke="#BABABA" stroke-width="6" d="M377,458.230469 L377,363 L335.75,363 L335.75,342.835938 L262.765625,342.835938 L262.765625,363 L223,363 L223,458.230469 L262.765625,458.230469 L262.765625,477.210938 L335.75,477.210938 L335.75,458.230469 L377,458.230469 Z"></path><use stroke="#000000" stroke-width="4" xlink:href="#path-1"></use></g><text id="30" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="69.5507812" y="103.855263">30</tspan></text><text id="31" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="69.5507812" y="138.454986">31</tspan></text><text id="32" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="69.5507812" y="173.054709">32</tspan></text><text id="33" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="207.654432">33</tspan></text><text id="34" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="242.254155">34</tspan></text><text id="35" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="276.853878">35</tspan></text><text id="36" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="311.453601">36</tspan></text><text id="37" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="346.053324">37</tspan></text><text id="38" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="380.653047">38</tspan></text><text id="39" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="415.25277">39</tspan></text><text id="40" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="449.852493">40</tspan></text><text id="41" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="484.452216">41</tspan></text><text id="42" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="519.051939">42</tspan></text><text id="43" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5507812" y="553.651662">43</tspan></text><text id="44" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5234375" y="588.251385">44</tspan></text><text id="45" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5234375" y="622.851108">45</tspan></text><text id="46" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5234375" y="657.450831">46</tspan></text><text id="47" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5234375" y="692.050554">47</tspan></text><text id="48" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="70.5234375" y="726.650277">48</tspan></text><text id="49" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="69.5234375" y="761.25">49</tspan></text><rect id="Rectangle-3" stroke="#000000" stroke-width="2" fill="#FFFFFF" x="360" y="361" width="20" height="99"></rect><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="340 520 340 640 260 640 260 520"></polygon><path d="M280,680 L221,680 L221,779 L360,779 L360,740 L340,740 L340,680 L301,680 L301,721 L280,721 L280,680 Z" id="Combined-Shape" stroke="#000000" stroke-width="2" fill="#FFFFFF"></path><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="220 580 220 640 180 640 180 580"></polygon><path d="M182.637192,580 C187.808128,580 192,584.191872 192,589.362808 L182.637192,589.362808 L182.637192,580 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(187.318596, 584.681404) scale(-1, 1) rotate(-181.000000) translate(-187.318596, -584.681404) "></path><path d="M284.637192,721 C289.808128,721 294,725.191872 294,730.362808 L284.637192,730.362808 L284.637192,721 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(289.318596, 725.681404) scale(-1, 1) rotate(-181.000000) translate(-289.318596, -725.681404) "></path><path d="M307.637192,680 C312.808128,680 317,684.191872 317,689.362808 L307.637192,689.362808 L307.637192,680 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(312.318596, 684.681404) scale(-1, 1) rotate(-181.000000) translate(-312.318596, -684.681404) "></path><path d="M330.637192,726 C335.808128,726 340,730.191872 340,735.362808 L330.637192,735.362808 L330.637192,726 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(335.318596, 730.681404) scale(-1, 1) rotate(-270.000000) translate(-335.318596, -730.681404) "></path><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="260 520 260 640 220 640 220 520"></polygon><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="420 500 420 580 360 580 360 500"></polygon><path d="M245.637192,520 C250.808128,520 255,524.191872 255,529.362808 L245.637192,529.362808 L245.637192,520 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(250.318596, 524.681404) scale(-1, 1) rotate(-181.000000) translate(-250.318596, -524.681404) "></path><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="420 580 420 640 340 640 340 580"></polygon><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="200 353.230469 180 353.230469 180 340 200 340 200 340"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="200 366.230469 180 366.230469 180 353 200 353 200 353"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="200 467.230469 180 467.230469 180 454 200 454 200 454"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="200 480.230469 180 480.230469 180 467 200 467 200 467"></polyline><text id="Kitchen" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="374.054688" y="731.25">Kitchen</tspan></text><text id="User-research-labs" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="381.828125" y="534.25">User </tspan><tspan x="374.042969" y="544.25">research </tspan><tspan x="382.71875" y="554.25">labs</tspan></text><text id="Observation-rooms" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="356.382812" y="610.25">Observation </tspan><tspan x="367.498047" y="620.25">rooms</tspan></text><text id="GOV.UK-Verify" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="444.560547" y="593.25">GOV.UK</tspan><tspan x="449.074219" y="603.25">Verify</tspan></text><text id="Security" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="444.1875" y="124.25">Security</tspan></text><text id="GaaP" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="237.419922" y="124.25">GaaP</tspan></text><text id="PaaS" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="344.150391" y="124.25">PaaS</tspan></text><text id="GOV.UK-Notify" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="125.949219" y="124.25">GOV.UK</tspan><tspan x="130.029297" y="134.25">Notify</tspan></text><text id="GOV.UK-Pay" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="276.359375" y="303.230469">GOV.UK Pay</tspan></text><text id="GOV.UK" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="125.949219" y="413.25">GOV.UK</tspan></text><text id="Toilets-Stairs" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="277.404297" y="748">Toilets</tspan><tspan x="278.882812" y="758">Stairs</tspan></text><text id="Reception" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="321.664062" y="664">Reception</tspan></text><text id="Internal-IT-Team" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="126.914062" y="731.25">Internal</tspan><tspan x="126.541016" y="741.25">IT Team</tspan></text><text id="Lifts" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="291.556641" y="584.25">Lifts</tspan></text><text id="Stairs" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="228.882812" y="584.25">Stairs</tspan></text><text id="Printers" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="184.882812" y="542.25">Printers</tspan></text><text id="601" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="193.326172" y="613.25">601</tspan></text><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="340 160 340 180 221 180 221 160"></polygon><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="301 180 301 260 221 260 221 180"></polygon><path d="M225.637192,260 C230.808128,260 235,264.191872 235,269.362808 L225.637192,269.362808 L225.637192,260 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(230.318596, 264.681404) scale(-1, -1) rotate(-90.000000) translate(-230.318596, -264.681404) "></path><g id="wheelchair-classic" transform="translate(229.000000, 242.000000)" fill-rule="nonzero" fill="#000000"><path d="M7.5408254,8.53625397 L8.2935873,10.0417778 C8.00304762,10.9222011 7.488,11.6353439 6.74844444,12.1812063 C6.00888889,12.7270688 5.17248677,13 4.2392381,13 C3.47326984,13 2.7645291,12.810709 2.11301587,12.432127 C1.46150265,12.053545 0.946455026,11.5384974 0.567873016,10.8869841 C0.189291005,10.2354709 0,9.52673016 0,8.7607619 C0,7.87153439 0.255322751,7.05714286 0.765968254,6.3175873 C1.27661376,5.57803175 1.95453968,5.06298413 2.79974603,4.77244444 L2.91860317,5.73650794 C2.31991534,6.00063492 1.84008466,6.40562963 1.47911111,6.95149206 C1.11813757,7.4973545 0.937650794,8.10044444 0.937650794,8.7607619 C0.937650794,9.66759788 1.26340741,10.4423704 1.91492063,11.0850794 C2.56643386,11.7277884 3.34120635,12.053545 4.2392381,12.0623492 C4.86433862,12.0623492 5.43661376,11.8994709 5.95606349,11.5737143 C6.47551323,11.2479577 6.88050794,10.8165503 7.17104762,10.2794921 C7.4615873,9.74243386 7.58484656,9.1613545 7.5408254,8.53625397 L7.5408254,8.53625397 Z M11.5819683,9.27580952 L12.0045714,10.1210159 L10.1160635,11.0586667 C10.0544339,11.0938836 9.984,11.1114921 9.9047619,11.1114921 C9.71106878,11.1114921 9.57020106,11.0278519 9.48215873,10.8605714 L7.72571429,7.33447619 L4.2392381,7.33447619 C4.12478307,7.33447619 4.02353439,7.29485714 3.93549206,7.21561905 C3.84744974,7.13638095 3.79462434,7.03953439 3.77701587,6.92507937 L3.06387302,1.18031746 C3.05506878,1.09227513 3.07267725,0.986624339 3.11669841,0.863365079 C3.17832804,0.616846561 3.31479365,0.414349206 3.52609524,0.255873016 C3.73739683,0.0973968254 3.97511111,0.0225608466 4.2392381,0.0313650794 C4.56499471,0.0313650794 4.84673016,0.145820106 5.08444444,0.374730159 C5.32215873,0.603640212 5.43661376,0.880973545 5.42780952,1.20673016 C5.42780952,1.55009524 5.30014815,1.84063492 5.0448254,2.07834921 C4.78950265,2.31606349 4.49456085,2.41731217 4.16,2.38209524 L4.42412698,4.50831746 L7.5408254,4.50831746 L7.5408254,5.4591746 L4.54298413,5.4591746 L4.66184127,6.3968254 L8.01625397,6.3968254 C8.21875132,6.3968254 8.35961905,6.48046561 8.43885714,6.64774603 L10.1160635,10.0021587 L11.5819683,9.27580952 Z" id="Shape"></path></g><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="340 180 340 260 301 260 301 180"></polygon><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="380 210 380 260 340 260 340 210"></polygon><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="380 160 380 210 340 210 340 160"></polygon><path d="M325.637192,160 C330.808128,160 335,164.191872 335,169.362808 L325.637192,169.362808 L325.637192,160 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(330.318596, 164.681404) scale(-1, 1) rotate(-270.000000) translate(-330.318596, -164.681404) "></path><path d="M235.637192,180 C240.808128,180 245,184.191872 245,189.362808 L235.637192,189.362808 L235.637192,180 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(240.318596, 184.681404) scale(-1, 1) rotate(-270.000000) translate(-240.318596, -184.681404) "></path><path d="M275.637192,180 C280.808128,180 285,184.191872 285,189.362808 L275.637192,189.362808 L275.637192,180 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(280.318596, 184.681404) scale(-1, 1) rotate(-270.000000) translate(-280.318596, -184.681404) "></path><path d="M308.637192,180 C313.808128,180 318,184.191872 318,189.362808 L308.637192,189.362808 L308.637192,180 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(313.318596, 184.681404) rotate(-270.000000) translate(-313.318596, -184.681404) "></path><path d="M220.637192,165 C225.808128,165 230,169.191872 230,174.362808 L220.637192,174.362808 L220.637192,165 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(225.318596, 169.681404) scale(-1, 1) rotate(-180.000000) translate(-225.318596, -169.681404) "></path><path d="M345.637192,160 C350.808128,160 355,164.191872 355,169.362808 L345.637192,169.362808 L345.637192,160 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(350.318596, 164.681404) rotate(-270.000000) translate(-350.318596, -164.681404) "></path><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="210 279.5 210 320 180 320 180 279.5"></polygon><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="240 279.5 240 320 210 320 210 279.5"></polygon><path d="M301,630.637192 C306.170936,630.637192 310.362808,634.829064 310.362808,640 L301,640 L301,630.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(305.681404, 635.318596) scale(-1, 1) translate(-305.681404, -635.318596) "></path><path d="M349,630.637192 C354.170936,630.637192 358.362808,634.829064 358.362808,640 L349,640 L349,630.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(353.681404, 635.318596) scale(-1, 1) translate(-353.681404, -635.318596) "></path><path d="M386,630.637192 C391.170936,630.637192 395.362808,634.829064 395.362808,640 L386,640 L386,630.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(390.681404, 635.318596) scale(-1, 1) translate(-390.681404, -635.318596) "></path><path d="M360,529.637192 C365.170936,529.637192 369.362808,533.829064 369.362808,539 L360,539 L360,529.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(364.681404, 534.318596) scale(-1, 1) rotate(-90.000000) translate(-364.681404, -534.318596) "></path><path d="M370,399.637192 C375.170936,399.637192 379.362808,403.829064 379.362808,409 L370,409 L370,399.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(374.681404, 404.318596) rotate(-90.000000) translate(-374.681404, -404.318596) "></path><path d="M360,561.637192 C365.170936,561.637192 369.362808,565.829064 369.362808,571 L360,571 L360,561.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(364.681404, 566.318596) scale(-1, 1) rotate(-90.000000) translate(-364.681404, -566.318596) "></path><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="390 279.5 390 320 360 320 360 279.5"></polygon><text id="602" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="217.826172" y="303.230469">602</tspan></text><text id="Multi-Faith-Room" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="365.642578" y="293">Multi</tspan><tspan x="365.417969" y="303">Faith</tspan><tspan x="363.640625" y="313">Room</tspan></text><text id="O01" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="182.939453" y="477">O01</tspan></text><text id="O02" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="182.939453" y="463">O02</tspan></text><text id="G01" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="182.939453" y="363">G01</tspan></text><text id="G02" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="182.939453" y="349">G02</tspan></text><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" transform="translate(410.000000, 347.615234) scale(-1, 1) translate(-410.000000, -347.615234) " points="420 354.230469 400 354.230469 400 341 420 341 420 341"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" transform="translate(410.000000, 360.615234) scale(-1, 1) translate(-410.000000, -360.615234) " points="420 367.230469 400 367.230469 400 354 420 354 420 354"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" transform="translate(410.000000, 460.615234) scale(-1, 1) translate(-410.000000, -460.615234) " points="420 467.230469 400 467.230469 400 454 420 454 420 454"></polyline><polyline id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" transform="translate(410.000000, 473.615234) scale(-1, 1) translate(-410.000000, -473.615234) " points="420 480.230469 400 480.230469 400 467 420 467 420 467"></polyline><text id="G04" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="401.939453" y="477">G04</tspan></text><text id="G03" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="401.939453" y="463">G03</tspan></text><text id="O04" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="401.939453" y="364">O04</tspan></text><text id="O03" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="401.939453" y="350">O03</tspan></text><text id="603" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="186.826172" y="303.230469">603</tspan></text><polygon id="Rectangle-2" stroke="#000000" stroke-width="2" fill="#FFFFFF" points="420 279.5 420 320 390 320 390 279.5"></polygon><text id="Toilets" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="247.404297" y="222.328125">Toilets</tspan></text><text id="Stairs" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#000000"><tspan x="309.882812" y="222">Stairs</tspan></text><text id="607" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="354.326172" y="243">607</tspan></text><text id="606" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="353.326172" y="193">606</tspan></text><text id="605" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="193.326172" y="203">605</tspan></text><text id="604" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="193.326172" y="243">604</tspan></text><text id="608" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#D0021B"><tspan x="392.326172" y="213">608</tspan></text><path d="M291,630.637192 C296.170936,630.637192 300.362808,634.829064 300.362808,640 L291,640 L291,630.637192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF"></path><path d="M227.5,280.137192 C232.670936,280.137192 236.862808,284.329064 236.862808,289.5 L227.5,289.5 L227.5,280.137192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(232.181404, 284.818596) scale(-1, 1) rotate(-270.000000) translate(-232.181404, -284.818596) "></path><path d="M197.5,280.137192 C202.670936,280.137192 206.862808,284.329064 206.862808,289.5 L197.5,289.5 L197.5,280.137192 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF" transform="translate(202.181404, 284.818596) scale(-1, 1) rotate(-270.000000) translate(-202.181404, -284.818596) "></path><g id="Group" transform="translate(300.000000, 525.500000) rotate(-180.000000) translate(-300.000000, -525.500000) translate(290.000000, 520.000000)" stroke="#000000" fill="#FFFFFF"><path d="M10,0.867661136 C15.1709359,0.867661136 19.3628076,5.05953289 19.3628076,10.2304687 L10,10.2304687 L10,0.867661136 Z" id="Combined-Shape" transform="translate(14.681404, 5.549065) scale(-1, 1) translate(-14.681404, -5.549065) "></path><path d="M0,0.867661136 C5.17093586,0.867661136 9.36280761,5.05953289 9.36280761,10.2304687 L0,10.2304687 L0,0.867661136 Z" id="Combined-Shape"></path></g><path d="M420,381.364265 L420,440.637919" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M180,381.364265 L180,440.637919" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M420,659 L420,761" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M221,660 L221,782" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M311,660 L239,660" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M222,660 L179,660" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M222,660 L179,660" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M392,680 L361,680" id="Path-2" stroke="#000000" stroke-width="2"></path><polyline id="Path-3" stroke="#000000" stroke-width="2" points="219 501 180 501 180 562"></polyline><path d="M241.784782,500 L281.119985,500" id="Path-4" stroke="#000000" stroke-width="2"></path><path d="M360,679 L360,739" id="Path-2" stroke="#000000" stroke-width="2"></path><path d="M400,160 L378,160" id="Path-5" stroke="#000000" stroke-width="2"></path><path d="M400,260 L378,260" id="Path-5" stroke="#000000" stroke-width="2"></path><path d="M421,159 L421,261" id="Path-6" stroke="#000000" stroke-width="2"></path><path d="M180,180 L180,261" id="Path-6" stroke="#000000" stroke-width="2"></path><path d="M221,260 L200,260" id="Path-7" stroke="#000000" stroke-width="2"></path><path d="M221,220 L200,220" id="Path-7" stroke="#000000" stroke-width="2"></path><rect id="Rectangle-5" stroke="#000000" stroke-width="2" fill="#FFFFFF" x="320" y="500" width="20" height="20"></rect><path d="M221,180 L200,180" id="Path-7" stroke="#000000" stroke-width="2"></path><path d="M345.637192,250 C350.808128,250 355,254.191872 355,259.362808 L345.637192,259.362808 L345.637192,250 Z" id="Combined-Shape" stroke="#000000" fill="#FFFFFF"></path><g id="Group-2" transform="translate(184.000000, 394.000000)" stroke="#979797"><polygon id="Path-9" points="11 0 0 0 0 31 11 31 11 28.9980216 2 28.9980216 2 2 11 2"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 2 11 11 2 11 2 2"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 11 11 20 2 20 2 11"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 20 11 29 2 29 2 20"></polygon></g><g id="Group-2" transform="translate(410.500000, 409.500000) scale(-1, 1) translate(-410.500000, -409.500000) translate(405.000000, 394.000000)" stroke="#979797"><polygon id="Path-9" points="11 0 0 0 0 31 11 31 11 28.9980216 2 28.9980216 2 2 11 2"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 2 11 11 2 11 2 2"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 11 11 20 2 20 2 11"></polygon><polygon id="Path-10" fill="#FFFFFF" points="11 20 11 29 2 29 2 20"></polygon></g><path d="M301,721 L339,721" id="Path-14" stroke="#000000" stroke-width="2"></path><g id="wheelchair-classic" transform="translate(314.000000, 695.000000)" fill-rule="nonzero" fill="#000000"><path d="M7.5408254,8.53625397 L8.2935873,10.0417778 C8.00304762,10.9222011 7.488,11.6353439 6.74844444,12.1812063 C6.00888889,12.7270688 5.17248677,13 4.2392381,13 C3.47326984,13 2.7645291,12.810709 2.11301587,12.432127 C1.46150265,12.053545 0.946455026,11.5384974 0.567873016,10.8869841 C0.189291005,10.2354709 0,9.52673016 0,8.7607619 C0,7.87153439 0.255322751,7.05714286 0.765968254,6.3175873 C1.27661376,5.57803175 1.95453968,5.06298413 2.79974603,4.77244444 L2.91860317,5.73650794 C2.31991534,6.00063492 1.84008466,6.40562963 1.47911111,6.95149206 C1.11813757,7.4973545 0.937650794,8.10044444 0.937650794,8.7607619 C0.937650794,9.66759788 1.26340741,10.4423704 1.91492063,11.0850794 C2.56643386,11.7277884 3.34120635,12.053545 4.2392381,12.0623492 C4.86433862,12.0623492 5.43661376,11.8994709 5.95606349,11.5737143 C6.47551323,11.2479577 6.88050794,10.8165503 7.17104762,10.2794921 C7.4615873,9.74243386 7.58484656,9.1613545 7.5408254,8.53625397 L7.5408254,8.53625397 Z M11.5819683,9.27580952 L12.0045714,10.1210159 L10.1160635,11.0586667 C10.0544339,11.0938836 9.984,11.1114921 9.9047619,11.1114921 C9.71106878,11.1114921 9.57020106,11.0278519 9.48215873,10.8605714 L7.72571429,7.33447619 L4.2392381,7.33447619 C4.12478307,7.33447619 4.02353439,7.29485714 3.93549206,7.21561905 C3.84744974,7.13638095 3.79462434,7.03953439 3.77701587,6.92507937 L3.06387302,1.18031746 C3.05506878,1.09227513 3.07267725,0.986624339 3.11669841,0.863365079 C3.17832804,0.616846561 3.31479365,0.414349206 3.52609524,0.255873016 C3.73739683,0.0973968254 3.97511111,0.0225608466 4.2392381,0.0313650794 C4.56499471,0.0313650794 4.84673016,0.145820106 5.08444444,0.374730159 C5.32215873,0.603640212 5.43661376,0.880973545 5.42780952,1.20673016 C5.42780952,1.55009524 5.30014815,1.84063492 5.0448254,2.07834921 C4.78950265,2.31606349 4.49456085,2.41731217 4.16,2.38209524 L4.42412698,4.50831746 L7.5408254,4.50831746 L7.5408254,5.4591746 L4.54298413,5.4591746 L4.66184127,6.3968254 L8.01625397,6.3968254 C8.21875132,6.3968254 8.35961905,6.48046561 8.43885714,6.64774603 L10.1160635,10.0021587 L11.5819683,9.27580952 Z" id="Shape"></path></g><text id="01" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="761.570007">01</tspan></text><text id="02" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="727.434744">02</tspan></text><text id="03" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="693.29948">03</tspan></text><text id="04" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="659.164217">04</tspan></text><text id="05" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="625.028953">05</tspan></text><text id="06" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.523438" y="590.89369">06</tspan></text><text id="07" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="556.758426">07</tspan></text><text id="08" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="522.623163">08</tspan></text><text id="09" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="488.487899">09</tspan></text><text id="10" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="454.352635">10</tspan></text><text id="11" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.769531" y="420.217372">11</tspan></text><text id="12" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="386.082108">12</tspan></text><text id="13" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="351.946845">13</tspan></text><text id="14" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="317.811581">14</tspan></text><text id="15" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="283.676318">15</tspan></text><text id="16" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="249.541054">16</tspan></text><text id="17" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="215.405791">17</tspan></text><text id="18" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="181.270527">18</tspan></text><text id="19" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="147.135264">19</tspan></text><text id="20" font-family="Helvetica-Bold, Helvetica" font-size="8" font-weight="bold" fill="#959595"><tspan x="521.550781" y="113">20</tspan></text><path d="M250.5,511.5 L250.5,540.568884" id="Line-40" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M232.5,652.5 L232.5,673.5" id="Line" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M233.5,671.5 L404.502924,671.5" id="Line-2" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M404.5,650.5 L404.5,765.539124" id="Line-3" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M378.5,693.5 L378.5,765.506944" id="Line-4" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M379.5,766.5 L403.5,766.5" id="Line-5" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M311.5,673.5 L311.5,697.5" id="Line-6" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M289.5,673.5 L289.5,742.615845" id="Line-7" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M351.5,672.5 L351.5,730.50862" id="Line-8" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M255.372532,730.5 L353.5,730.5" id="Line-9" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M189.5,568.5 L189.5,599.644823" id="Line-10" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M371.5,405.5 L394.521729,405.5" id="Line-11" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M351.5,492.5 L351.5,566.5" id="Line-12" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M174.5,84.5 L174.5,775.5" id="Line" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M175.5,145.5 L429.501968,145.5" id="Line-2" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M431.5,82.4647997 L431.5,778.5" id="Line-3" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M415.5,145.496094 L415.5,273.5" id="Line-5" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M433.5,272.5 L416.5,272.5" id="Line-6" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M417.5,273.5 L174.497942,273.5" id="Line-7" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M188.5,185.5 L188.5,146.5" id="Line-8" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M189.5,252.5 L189.5,270.5" id="Line-9" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M350.5,167.5 L350.5,145.5" id="Line-10" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M350.5,247.5 L350.5,271.520824" id="Line-11" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M173.5,330.5 L430.507782,330.5" id="Line-12" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M203.5,273.5 L203.5,290.5" id="Line-13" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M234.5,275.5 L234.5,294.5" id="Line-14" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M408.5,460.5 L394.464331,460.5" id="Line-26" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M230.5,275.5 L230.5,248.5" id="Line-15" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M175.5,171.5 L328.617602,171.5" id="Line-16" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M328.5,173.5 L328.5,147.5" id="Line-17" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M313.5,172.5 L313.5,193.5" id="Line-18" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M242.5,173.5 L242.5,190.5" id="Line-19" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M281.5,172.5 L281.5,195.521729" id="Line-20" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M372.5,274.5 L372.5,296.5" id="Line-21" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M399.5,274.5 L399.5,296.5" id="Line-22" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M394.5,331.5 L394.5,486.52903" id="Line-23" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M432.5,490.5 L176.218904,490.5" id="Line-24" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M406.5,473.5 L395.454639,473.5" id="Line-25" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M412.5,347.5 L395.5,347.5" id="Line-27" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M411.5,361.5 L393.5,361.5" id="Line-28" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M209.5,330.5 L209.5,489.503145" id="Line-29" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M187.5,346.5 L209.5,346.5" id="Line-30" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M371.5,532.5 L352.473702,532.5" id="Line-31" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M371.5,565.5 L351.475016,565.5" id="Line-32" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M174.5,568.5 L198.5,568.5" id="Line-33" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M202.5,512.5 L202.5,567.536352" id="Line-34" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M302.5,508.5 L204.454092,508.5" id="Line-35" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M230.5,491.5 L230.5,510.5" id="Line-36" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M302.5,490.5 L302.5,507.529386" id="Line-37" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M302.5,512.5 L302.5,650.514492" id="Line-38" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M175.5,649.5 L431.531248,649.5" id="Line-39" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><rect id="Rectangle-6" fill="#00FFC6" x="405" y="456" width="9" height="9" rx="4.5"></rect><ellipse id="Oval" fill="#00FFC6" cx="409" cy="474.5" rx="5" ry="4.5"></ellipse><circle id="Oval-2" fill="#00FFC6" cx="250.5" cy="544.5" r="4.5"></circle><circle id="Oval-3" fill="#00FFC6" cx="302" cy="583" r="7"></circle><circle id="Oval-4" fill="#00FFC6" cx="372" cy="533" r="5"></circle><circle id="Oval-5" fill="#00FFC6" cx="371.5" cy="567.5" r="5.5"></circle><circle id="Oval-6" fill="#00FFC6" cx="189" cy="601" r="6"></circle><circle id="Oval-7" fill="#00FFC6" cx="290.5" cy="746.5" r="7.5"></circle><circle id="Oval-8" fill="#00FFC6" cx="311.5" cy="700.5" r="5.5"></circle><circle id="Oval-9" fill="#00FFC6" cx="402" cy="729" r="8"></circle><circle id="Oval-10" fill="#00FFC6" cx="412.5" cy="360.5" r="4.5"></circle><circle id="Oval-11" fill="#00FFC6" cx="412" cy="348" r="5"></circle><circle id="Oval-12" fill="#00FFC6" cx="375.5" cy="300.5" r="7.5"></circle><circle id="Oval-13" fill="#00FFC6" cx="401" cy="299" r="6"></circle><circle id="Oval-14" fill="#00FFC6" cx="234" cy="297" r="5"></circle><circle id="Oval-15" fill="#00FFC6" cx="203" cy="294" r="6"></circle><circle id="Oval-16" fill="#00FFC6" cx="282.5" cy="197.5" r="7.5"></circle><circle id="Oval-17" fill="#00FFC6" cx="242.5" cy="193.5" r="4.5"></circle><circle id="Oval-18" fill="#00FFC6" cx="315" cy="195" r="6"></circle><circle id="Oval-19" fill="#00FFC6" cx="351.5" cy="170.5" r="5.5"></circle><circle id="Oval-20" fill="#00FFC6" cx="351.5" cy="245.5" r="5.5"></circle><circle id="Oval-21" fill="#00FFC6" cx="413" cy="211" r="6"></circle><circle id="Oval-22" fill="#00FFC6" cx="190.5" cy="187.5" r="6.5"></circle><circle id="Oval-23" fill="#00FFC6" cx="189.5" cy="250.5" r="7.5"></circle><circle id="Oval-24" fill="#00FFC6" cx="202.5" cy="542.5" r="7.5"></circle><circle id="Oval-25" fill="#00FFC6" cx="175" cy="162" r="7"></circle><circle id="Oval-26" fill="#00FFC6" cx="375" cy="142" r="6"></circle><circle id="Oval-27" fill="#00FFC6" cx="231.5" cy="247.5" r="5.5"></circle><path d="M209.5,358.5 L189.400249,358.5" id="Line-41" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M186.5,459.5 L208.5,459.5" id="Line-42" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M186.5,472.5 L209.5,472.5" id="Line-43" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M392.5,624.5 L392.5,650.5" id="Line-44" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M355.5,621.5 L355.5,649.5" id="Line-45" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><circle id="Oval-28" fill="#00FFC6" cx="392.5" cy="623.5" r="4.5"></circle><circle id="Oval-29" fill="#00FFC6" cx="356" cy="620" r="5"></circle><circle id="Oval-30" fill="#00FFC6" cx="186.5" cy="472.5" r="2.5"></circle><circle id="Oval-31" fill="#00FFC6" cx="186" cy="460" r="4"></circle><circle id="Oval-32" fill="#00FFC6" cx="186" cy="347" r="3"></circle><circle id="Oval-33" fill="#00FFC6" cx="190" cy="360" r="4"></circle><circle id="Oval-34" fill="#00FFC6" cx="373" cy="407" r="6"></circle><path d="M316.5,729.5 L316.5,744.5" id="Line-46" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M255.5,730.5 L255.5,713.5" id="Line-47" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><circle id="Oval-35" fill="#00FFC6" cx="254" cy="712" r="6"></circle><circle id="Oval-36" fill="#00FFC6" cx="317.5" cy="749.5" r="5.5"></circle><path d="M344.5,489.5 L395.5,462.5" id="Line-48" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M341.5,330.5 L393.5,361.5" id="Line-49" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M209.5,359.5 L257.5,331.5" id="Line-50" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M209.5,462.5 L258.5,489.5" id="Line-51" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><path d="M296.5,274.5 L296.5,330.5" id="Line-52" stroke="#9013FE" stroke-width="5" stroke-linecap="square"></path><circle id="Oval-37" fill="#00FFC6" cx="208.5" cy="408.5" r="4.5"></circle><circle id="Oval-38" fill="#00FFC6" cx="394" cy="406" r="4"></circle></g></g></svg>') | |
| var paths = [] | |
| var intersections = [] | |
| svg.select('path[stroke="#9013FE"]').each(function (i) { | |
| var path_array = this.array().value | |
| if (path_array.length != 2 || path_array[0][0] != "M" || path_array[1][0] != "L" || this.attr("stroke-linecap") != "square") { | |
| console.log("SKIPPED", i, this) | |
| return | |
| } | |
| var start = [path_array[0][1], path_array[0][2]] | |
| var end = [path_array[1][1], path_array[1][2]] | |
| // For now we only allow vertical and horizontal paths. | |
| // @TODO: Comparing floats, so just check they're extremely close. | |
| if (!(start[0] == end[0] || start[1] == end[1])) { | |
| console.log("SKIPPED NON-", i, path_array) | |
| return | |
| } | |
| var width = this.attr("stroke-width") | |
| var bbox = { | |
| "x1": Math.min(start[0], end[0]) - width/2, | |
| "x2": Math.max(start[0], end[0]) + width/2, | |
| "y1": Math.min(start[1], end[1]) - width/2, | |
| "y2": Math.max(start[1], end[1]) + width/2 | |
| } | |
| draw | |
| .rect(bbox.x2 - bbox.x1, bbox.y2 - bbox.y1) | |
| .fill('#0f6') | |
| .attr({x: bbox.x1, y: bbox.y1, "data-id": paths.length}) | |
| paths.push({ | |
| "start": start, | |
| "end": end, | |
| "width": width, | |
| "bbox": bbox | |
| }) | |
| intersections.push({}) | |
| }) | |
| for (var j in paths) { | |
| var path_j = paths[j] | |
| for (var k in paths) { | |
| if (j == k) { | |
| continue | |
| } | |
| var path_k = paths[k] | |
| var intersection = { | |
| "x1": Math.max(path_j.bbox.x1, path_k.bbox.x1), | |
| "x2": Math.min(path_j.bbox.x2, path_k.bbox.x2), | |
| "y1": Math.max(path_j.bbox.y1, path_k.bbox.y1), | |
| "y2": Math.min(path_j.bbox.y2, path_k.bbox.y2) | |
| } | |
| if (intersection.x1 > intersection.x2 || intersection.y1 > intersection.y2) { | |
| continue | |
| } | |
| console.log("INTERSECTION", j, k, intersection) | |
| // draw | |
| // .rect(intersection.x2 - intersection.x1, intersection.y2 - intersection.y1) | |
| // .fill('#f06') | |
| // .attr({x: intersection.x1, y: intersection.y1}) | |
| // For pathing, we probably want to identify the nearest point on each path to | |
| // the intersection. Using an intersection would thus involve: | |
| // - Distance along the current path to its nearest point to the intersection. | |
| // - Distance from current path's nearest point to new path's nearest point. | |
| // And repeat. | |
| // For a horizontal line, midpoint of the intersection (if a crossing) or the | |
| // closest end (if touching.) | |
| var from = [0, 0] | |
| if (path_j.start[0] == path_j.end[0]) { | |
| from[0] = path_j.start[0] | |
| from[1] = (intersection.y1 + intersection.y2) / 2 | |
| } else if (path_j.start[1] == path_j.end[1]) { | |
| from[0] = (intersection.x1 + intersection.x2) / 2 | |
| from[1] = path_j.start[1] | |
| } else { | |
| continue | |
| } | |
| draw | |
| .circle(1) | |
| .fill('#00f') | |
| .attr({cx: from[0], cy: from[1]}) | |
| intersections[j]["path" + k] = { | |
| "type": "path", | |
| "with": k, | |
| "from": from, | |
| } | |
| } | |
| } | |
| var markers = [] | |
| svg.select('circle[fill="#00FFC6"]').each(function (i) { | |
| draw | |
| .circle(this.attr("r") * 2) | |
| .fill('rgba(0, 0, 255, 0.5)') | |
| .attr("cx", this.attr("cx")) | |
| .attr("cy", this.attr("cy")) | |
| markers.push({ | |
| "cx": this.attr("cx"), | |
| "cy": this.attr("cy"), | |
| "r": this.attr("r"), | |
| "bbox": this.bbox(), | |
| "paths": [] | |
| }) | |
| }) | |
| for (i in markers) { | |
| var marker = markers[i] | |
| for (var j in paths) { | |
| var path = paths[j] | |
| var intersection = { | |
| "x1": Math.max(marker.bbox.x, path.bbox.x1), | |
| "x2": Math.min(marker.bbox.x2, path.bbox.x2), | |
| "y1": Math.max(marker.bbox.y, path.bbox.y1), | |
| "y2": Math.min(marker.bbox.y2, path.bbox.y2) | |
| } | |
| if (intersection.x1 > intersection.x2 || intersection.y1 > intersection.y2) { | |
| continue | |
| } | |
| console.log("MARKER INTERSECTION", i, j) | |
| var from = [0, 0] | |
| if (path.start[0] == path.end[0]) { | |
| from[0] = path.start[0] | |
| from[1] = (intersection.y1 + intersection.y2) / 2 | |
| } else if (path.start[1] == path.end[1]) { | |
| from[0] = (intersection.x1 + intersection.x2) / 2 | |
| from[1] = path.start[1] | |
| } else { | |
| continue | |
| } | |
| draw | |
| .circle(1) | |
| .fill('#f00') | |
| .attr({cx: from[0], cy: from[1]}) | |
| intersections[j]["marker" + i] = { | |
| "type": "marker", | |
| "with": i, | |
| "from": from, | |
| } | |
| markers[i].paths.push(j) | |
| } | |
| } | |
| // var id = 0 | |
| // var rect1, rect2 = [] | |
| // setInterval(function () { | |
| // if (rect1) { | |
| // rect1.remove() | |
| // for (i in rect2) { | |
| // rect2[i].remove() | |
| // } | |
| // rect2 = [] | |
| // } | |
| // var path = paths[id] | |
| // rect1 = draw | |
| // .rect(path.bbox.x2 - path.bbox.x1, path.bbox.y2 - path.bbox.y1) | |
| // .fill('#c00') | |
| // .attr({x: path.bbox.x1, y: path.bbox.y1}) | |
| // for (i in intersections[id]) { | |
| // var intersection = intersections[id][i] | |
| // if (intersection.type == "path") { | |
| // var path = paths[intersection.with] | |
| // rect2.push(draw | |
| // .rect(path.bbox.x2 - path.bbox.x1, path.bbox.y2 - path.bbox.y1) | |
| // .fill('#700') | |
| // .attr({x: path.bbox.x1, y: path.bbox.y1})) | |
| // } else { | |
| // var marker = markers[intersection.with] | |
| // rect2.push(draw | |
| // .circle(marker.r * 2) | |
| // .fill('#700') | |
| // .attr({"cx": marker.cx, "cy": marker.cy})) | |
| // } | |
| // } | |
| // id++ | |
| // }, 2000) | |
| function distance_between(a, b) { | |
| return Math.pow(Math.pow(b[1] - a[1], 2) + Math.pow(b[0] - a[0], 2), -2) | |
| } | |
| var start_marker_id = Math.floor(Math.random() * markers.length) | |
| var start_marker = markers[start_marker_id] | |
| var end_marker_id = Math.floor(Math.random() * markers.length) | |
| var end_marker = markers[end_marker_id] | |
| console.log(start_marker_id, end_marker_id) | |
| draw | |
| .circle(start_marker.r * 2) | |
| .fill('#f00') | |
| .attr({"cx": start_marker.cx, "cy": start_marker.cy}) | |
| draw | |
| .circle(end_marker.r * 2) | |
| .fill('#000') | |
| .attr({"cx": end_marker.cx, "cy": end_marker.cy}) | |
| var open_set = start_marker.paths.slice() | |
| var closed_set = {} | |
| var came_from = {} | |
| var best_cost = {} | |
| var best_cost_location = {} | |
| for (i in start_marker.paths) { | |
| // Distance from start_marker to the intersection. | |
| var path_id = start_marker.paths[i] | |
| console.log(path_id) | |
| best_cost[start_marker.paths[i]] = distance_between([start_marker.cx, start_marker.cy], intersections[path_id]["marker" + start_marker_id].from) | |
| best_cost_location[start_marker.paths[i]] = intersections[path_id]["marker" + start_marker_id].from | |
| } | |
| var found = false | |
| while (open_set.length > 0) { | |
| var current_id = open_set.shift() | |
| closed_set[current_id] = true | |
| console.log("A") | |
| for (i in intersections[current_id]) { | |
| var intersection = intersections[current_id][i] | |
| if (intersection.type == "path") { | |
| console.log(current_id, best_cost_location) | |
| var new_cost = best_cost[current_id] + distance_between(intersection.from, best_cost_location[current_id]) | |
| if (!(intersection.with in best_cost) || new_cost < best_cost[intersection.with]) { | |
| best_cost[intersection.with] = new_cost | |
| best_cost_location[intersection.with] = intersection.from | |
| came_from[intersection.with] = current_id | |
| open_set.push(intersection.with) | |
| } | |
| } else if (intersection.with == end_marker_id) { | |
| found = true | |
| var new_cost = best_cost[current_id] + distance_between(intersection.from, best_cost_location[current_id]) | |
| best_cost[intersection.with] = new_cost | |
| best_cost_location[intersection.with] = intersection.from | |
| came_from[intersection.with] = current_id | |
| //break | |
| } | |
| } | |
| } | |
| if (found) { | |
| console.log("FOUND", best_cost[end_marker_id]) | |
| var current_id = end_marker_id | |
| while (current_id != start_marker_id) { | |
| var before = best_cost_location[came_from[current_id]] | |
| var after = best_cost_location[current_id] | |
| draw.line(before[0], before[1], after[0], after[1]).stroke({ width: 1 }) | |
| current_id = came_from[current_id] | |
| } | |
| } | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment