diff --git a/data/tests/clean/clean_extreme_slopes_outer/0.json b/data/tests/clean/clean_extreme_slopes_outer/0.json new file mode 100644 index 0000000..705d160 --- /dev/null +++ b/data/tests/clean/clean_extreme_slopes_outer/0.json @@ -0,0 +1,7395 @@ +{ + "shape": { + "elements": [ + { + "end": { + "x": -6.299212598425184, + "y": 241.77418848909892 + }, + "start": { + "x": -6.299212598425184, + "y": 264.00017727256164 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -4.111519021518882, + "y": 239.16699680932555 + }, + "start": { + "x": -6.299212598425184, + "y": 241.77418848909892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -1.6878689286992536, + "y": 237.7677017758152 + }, + "start": { + "x": -4.111519021518882, + "y": 239.16699680932555 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.54446861160039, + "y": 237.7402258620059 + }, + "start": { + "x": -1.6878689286992536, + "y": 237.7677017758152 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.697570648959797, + "y": 220.3236522188829 + }, + "start": { + "x": 24.54446861160039, + "y": 237.7402258620059 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 26.927302171944802, + "y": 212.87880986709015 + }, + "start": { + "x": 24.697570648959797, + "y": 220.3236522188829 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 28.846220588935072, + "y": 208.23397144901136 + }, + "start": { + "x": 26.927302171944802, + "y": 212.87880986709015 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 32.362727283237845, + "y": 201.61685021542215 + }, + "start": { + "x": 28.846220588935072, + "y": 208.23397144901136 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 38.62672771480965, + "y": 193.77027151988455 + }, + "start": { + "x": 32.362727283237845, + "y": 201.61685021542215 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 46.067605550496666, + "y": 187.39488495253892 + }, + "start": { + "x": 38.62672771480965, + "y": 193.77027151988455 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 52.64503951215504, + "y": 183.44572261090406 + }, + "start": { + "x": 46.067605550496666, + "y": 187.39488495253892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 58.57111953810117, + "y": 180.63899144721313 + }, + "start": { + "x": 52.64503951215504, + "y": 183.44572261090406 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 64.74156165849824, + "y": 179.16486273743885 + }, + "start": { + "x": 58.57111953810117, + "y": 180.63899144721313 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 71.52522059736216, + "y": 178.5109398596913 + }, + "start": { + "x": 64.74156165849824, + "y": 179.16486273743885 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 80.44369132056795, + "y": 179.21602541734984 + }, + "start": { + "x": 71.52522059736216, + "y": 178.5109398596913 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 84.25659304067115, + "y": 179.30802509525864 + }, + "start": { + "x": 80.44369132056795, + "y": 179.21602541734984 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 89.18104267547288, + "y": 179.0087632731566 + }, + "start": { + "x": 84.25659304067115, + "y": 179.30802509525864 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 94.4480180725322, + "y": 179.3255780797615 + }, + "start": { + "x": 89.18104267547288, + "y": 179.0087632731566 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 111.81165423289237, + "y": 175.196139253305 + }, + "start": { + "x": 94.4480180725322, + "y": 179.3255780797615 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 116.04835883370788, + "y": 176.14539824523277 + }, + "start": { + "x": 111.81165423289237, + "y": 175.196139253305 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 119.79702874796006, + "y": 177.3045624300616 + }, + "start": { + "x": 116.04835883370788, + "y": 176.14539824523277 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 120.62858581333818, + "y": 177.08529655371993 + }, + "start": { + "x": 119.79702874796006, + "y": 177.3045624300616 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 123.82964199569909, + "y": 174.46501738372345 + }, + "start": { + "x": 120.62858581333818, + "y": 177.08529655371993 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 130.72192146315356, + "y": 169.13849825461605 + }, + "start": { + "x": 123.82964199569909, + "y": 174.46501738372345 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 137.95603395879016, + "y": 162.51482925726742 + }, + "start": { + "x": 130.72192146315356, + "y": 169.13849825461605 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 141.906787476157, + "y": 158.97683055146393 + }, + "start": { + "x": 137.95603395879016, + "y": 162.51482925726742 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 144.2124232892347, + "y": 156.5155624362895 + }, + "start": { + "x": 141.906787476157, + "y": 158.97683055146393 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.50224171949486, + "y": 154.24065893607704 + }, + "start": { + "x": 144.2124232892347, + "y": 156.5155624362895 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 146.4814653720017, + "y": 150.92523802256196 + }, + "start": { + "x": 145.50224171949486, + "y": 154.24065893607704 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.04996862904972, + "y": 143.93843002952417 + }, + "start": { + "x": 146.4814653720017, + "y": 150.92523802256196 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 153.98945494290442, + "y": 126.77567807200023 + }, + "start": { + "x": 148.04996862904972, + "y": 143.93843002952417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 158.6698105789921, + "y": 114.73882891696921 + }, + "start": { + "x": 153.98945494290442, + "y": 126.77567807200023 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 162.71758650404988, + "y": 105.39629544415891 + }, + "start": { + "x": 158.6698105789921, + "y": 114.73882891696921 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 167.07698952589055, + "y": 95.95485256074892 + }, + "start": { + "x": 162.71758650404988, + "y": 105.39629544415891 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 171.43809762602166, + "y": 87.31309689366003 + }, + "start": { + "x": 167.07698952589055, + "y": 95.95485256074892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 176.93704511954965, + "y": 76.996939267262 + }, + "start": { + "x": 171.43809762602166, + "y": 87.31309689366003 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 184.17377411932986, + "y": 64.98452505152864 + }, + "start": { + "x": 176.93704511954965, + "y": 76.996939267262 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 188.93217295778425, + "y": 55.56222956651204 + }, + "start": { + "x": 184.17377411932986, + "y": 64.98452505152864 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.4758032810116, + "y": 44.31853151428383 + }, + "start": { + "x": 188.93217295778425, + "y": 55.56222956651204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 203.9341215470703, + "y": 32.643011662632006 + }, + "start": { + "x": 195.4758032810116, + "y": 44.31853151428383 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 224.32369845803922, + "y": 12.35039956425019 + }, + "start": { + "x": 203.9341215470703, + "y": 32.643011662632006 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.4654542829522, + "y": 6.997111204401762 + }, + "start": { + "x": 224.32369845803922, + "y": 12.35039956425019 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.04851957185102, + "y": -0.5959572918031011 + }, + "start": { + "x": 231.4654542829522, + "y": 6.997111204401762 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 250.54011167334855, + "y": -3.82804958980166 + }, + "start": { + "x": 247.04851957185102, + "y": -0.5959572918031011 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.8841909485406, + "y": -5.439789512399147 + }, + "start": { + "x": 250.54011167334855, + "y": -3.82804958980166 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.5567934013613, + "y": -6.093154927465683 + }, + "start": { + "x": 257.8841909485406, + "y": -5.439789512399147 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 267.50019933141215, + "y": -6.302046633182414 + }, + "start": { + "x": 263.5567934013613, + "y": -6.093154927465683 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 271.47805843954063, + "y": -6.234441034936087 + }, + "start": { + "x": 267.50019933141215, + "y": -6.302046633182414 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.1456028740026, + "y": -5.711964353226846 + }, + "start": { + "x": 271.47805843954063, + "y": -6.234441034936087 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 284.487739907583, + "y": -4.146497238408896 + }, + "start": { + "x": 277.1456028740026, + "y": -5.711964353226846 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 296.1585320748131, + "y": -0.8341122450789987 + }, + "start": { + "x": 284.487739907583, + "y": -4.146497238408896 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 305.95841995325486, + "y": 2.874539207176091 + }, + "start": { + "x": 296.1585320748131, + "y": -0.8341122450789987 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 314.2665588298211, + "y": 6.648316710136296 + }, + "start": { + "x": 305.95841995325486, + "y": 2.874539207176091 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 323.25075159231494, + "y": 11.741634373915602 + }, + "start": { + "x": 314.2665588298211, + "y": 6.648316710136296 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 337.1733339605729, + "y": 21.725520187162417 + }, + "start": { + "x": 323.25075159231494, + "y": 11.741634373915602 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.000065321348, + "y": 31.218709709845594 + }, + "start": { + "x": 337.1733339605729, + "y": 21.725520187162417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 356.3929093265836, + "y": 39.322520199825796 + }, + "start": { + "x": 348.000065321348, + "y": 31.218709709845594 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.9835310479913, + "y": 48.636284604137444 + }, + "start": { + "x": 356.3929093265836, + "y": 39.322520199825796 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 370.8182497423418, + "y": 55.56910434241187 + }, + "start": { + "x": 364.9835310479913, + "y": 48.636284604137444 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 377.5662095272867, + "y": 64.09880307363204 + }, + "start": { + "x": 370.8182497423418, + "y": 55.56910434241187 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 384.8769560653724, + "y": 74.5694687099134 + }, + "start": { + "x": 377.5662095272867, + "y": 64.09880307363204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 391.7477772317769, + "y": 85.44981058966151 + }, + "start": { + "x": 384.8769560653724, + "y": 74.5694687099134 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 397.6574039264488, + "y": 96.18720759571057 + }, + "start": { + "x": 391.7477772317769, + "y": 85.44981058966151 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 402.16360851058727, + "y": 105.44590918096145 + }, + "start": { + "x": 397.6574039264488, + "y": 96.18720759571057 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.20417521368506, + "y": 114.45271773550691 + }, + "start": { + "x": 402.16360851058727, + "y": 105.44590918096145 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.3502366658743, + "y": 116.0055910410055 + }, + "start": { + "x": 406.20417521368506, + "y": 114.45271773550691 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.16368499551317, + "y": 118.65959018291638 + }, + "start": { + "x": 406.3502366658743, + "y": 116.0055910410055 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 404.04909803179675, + "y": 121.04153955548124 + }, + "start": { + "x": 406.16368499551317, + "y": 118.65959018291638 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 401.2800284385459, + "y": 122.61551999646866 + }, + "start": { + "x": 404.04909803179675, + "y": 121.04153955548124 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 395.43838854693587, + "y": 121.79848955787632 + }, + "start": { + "x": 401.2800284385459, + "y": 122.61551999646866 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 393.28837270505926, + "y": 120.53863036024065 + }, + "start": { + "x": 395.43838854693587, + "y": 121.79848955787632 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 383.6903266078355, + "y": 108.19683660653783 + }, + "start": { + "x": 393.28837270505926, + "y": 120.53863036024065 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 379.14333180495004, + "y": 102.9205610858531 + }, + "start": { + "x": 383.6903266078355, + "y": 108.19683660653783 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 374.53661178649065, + "y": 98.01009412262263 + }, + "start": { + "x": 379.14333180495004, + "y": 102.9205610858531 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 369.73111208086567, + "y": 93.23042805304132 + }, + "start": { + "x": 374.53661178649065, + "y": 98.01009412262263 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.70605546236135, + "y": 88.50681857666927 + }, + "start": { + "x": 369.73111208086567, + "y": 93.23042805304132 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 359.5141090378256, + "y": 83.87660606446467 + }, + "start": { + "x": 364.70605546236135, + "y": 88.50681857666927 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 354.2325092016833, + "y": 79.42486534379535 + }, + "start": { + "x": 359.5141090378256, + "y": 83.87660606446467 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.8959133367012, + "y": 75.29850724582289 + }, + "start": { + "x": 354.2325092016833, + "y": 79.42486534379535 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 343.4169832729554, + "y": 71.5558333720104 + }, + "start": { + "x": 348.8959133367012, + "y": 75.29850724582289 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.4773274130216, + "y": 65.8710348119074 + }, + "start": { + "x": 343.4169832729554, + "y": 71.5558333720104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9235970512947, + "y": 61.138756468597485 + }, + "start": { + "x": 334.4773274130216, + "y": 65.8710348119074 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.4706631308083, + "y": 67.53432456180809 + }, + "start": { + "x": 327.9235970512947, + "y": 61.138756468597485 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.6062149869267, + "y": 86.21426691397303 + }, + "start": { + "x": 330.4706631308083, + "y": 67.53432456180809 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.01353850807305, + "y": 96.13283989418257 + }, + "start": { + "x": 334.6062149869267, + "y": 86.21426691397303 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.6720927758552, + "y": 103.59313146910044 + }, + "start": { + "x": 336.01353850807305, + "y": 96.13283989418257 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.9318911096816, + "y": 111.17660544047123 + }, + "start": { + "x": 336.6720927758552, + "y": 103.59313146910044 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.5894358944884, + "y": 118.48366839947543 + }, + "start": { + "x": 336.9318911096816, + "y": 111.17660544047123 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.2327602802784, + "y": 123.32877006830377 + }, + "start": { + "x": 336.5894358944884, + "y": 118.48366839947543 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.68726311025887, + "y": 124.96508224100512 + }, + "start": { + "x": 334.2327602802784, + "y": 123.32877006830377 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9495135099993, + "y": 124.7404159987621 + }, + "start": { + "x": 330.68726311025887, + "y": 124.96508224100512 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 325.4466228091186, + "y": 123.60847698384934 + }, + "start": { + "x": 327.9495135099993, + "y": 124.7404159987621 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 320.57550510869794, + "y": 116.95281744367911 + }, + "start": { + "x": 325.4466228091186, + "y": 123.60847698384934 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 315.4613569129776, + "y": 104.9654969897408 + }, + "start": { + "x": 320.57550510869794, + "y": 116.95281744367911 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 310.73880310110917, + "y": 95.55913823290157 + }, + "start": { + "x": 315.4613569129776, + "y": 104.9654969897408 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 303.4304443267355, + "y": 82.51283243101379 + }, + "start": { + "x": 310.73880310110917, + "y": 95.55913823290157 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 297.6180676757673, + "y": 70.69036310996104 + }, + "start": { + "x": 303.4304443267355, + "y": 82.51283243101379 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 290.3320080978713, + "y": 54.38950095367072 + }, + "start": { + "x": 297.6180676757673, + "y": 70.69036310996104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 287.36892011015556, + "y": 48.789379827834 + }, + "start": { + "x": 290.3320080978713, + "y": 54.38950095367072 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 283.99513088657864, + "y": 44.49768582038909 + }, + "start": { + "x": 287.36892011015556, + "y": 48.789379827834 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 281.99837421411746, + "y": 42.82435240731099 + }, + "start": { + "x": 283.99513088657864, + "y": 44.49768582038909 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.2560957119931, + "y": 40.301503557641254 + }, + "start": { + "x": 281.99837421411746, + "y": 42.82435240731099 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 272.0157743469142, + "y": 39.120130821734435 + }, + "start": { + "x": 277.2560957119931, + "y": 40.301503557641254 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.32976163135186, + "y": 39.080639420736034 + }, + "start": { + "x": 272.0157743469142, + "y": 39.120130821734435 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.7070806815102, + "y": 40.01847880304015 + }, + "start": { + "x": 269.32976163135186, + "y": 39.080639420736034 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.9462882231197, + "y": 42.09409714638436 + }, + "start": { + "x": 263.7070806815102, + "y": 40.01847880304015 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 252.40194121355648, + "y": 44.95683013804827 + }, + "start": { + "x": 257.9462882231197, + "y": 42.09409714638436 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.05592934271587, + "y": 48.5127709022336 + }, + "start": { + "x": 252.40194121355648, + "y": 44.95683013804827 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 241.8308331622285, + "y": 52.71294756144926 + }, + "start": { + "x": 247.05592934271587, + "y": 48.5127709022336 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 237.5058256105656, + "y": 57.14766494404094 + }, + "start": { + "x": 241.8308331622285, + "y": 52.71294756144926 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 235.0112300588856, + "y": 61.32198768905874 + }, + "start": { + "x": 237.5058256105656, + "y": 57.14766494404094 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 234.10446000498973, + "y": 66.04259634650171 + }, + "start": { + "x": 235.0112300588856, + "y": 61.32198768905874 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 233.7432693764132, + "y": 77.1819518050895 + }, + "start": { + "x": 234.10446000498973, + "y": 66.04259634650171 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 232.26146295865524, + "y": 79.64126015015776 + }, + "start": { + "x": 233.7432693764132, + "y": 77.1819518050895 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.5228562151841, + "y": 84.13697174852604 + }, + "start": { + "x": 232.26146295865524, + "y": 79.64126015015776 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 228.2588747472288, + "y": 88.80346776373584 + }, + "start": { + "x": 231.5228562151841, + "y": 84.13697174852604 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 223.87890853354588, + "y": 92.35444304704612 + }, + "start": { + "x": 228.2588747472288, + "y": 88.80346776373584 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.7510652950972, + "y": 96.87291606189422 + }, + "start": { + "x": 223.87890853354588, + "y": 92.35444304704612 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 213.63636257626283, + "y": 99.1458006811262 + }, + "start": { + "x": 216.7510652950972, + "y": 96.87291606189422 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 211.10118432087535, + "y": 101.57008954662409 + }, + "start": { + "x": 213.63636257626283, + "y": 99.1458006811262 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 208.81969613523924, + "y": 104.49631749190105 + }, + "start": { + "x": 211.10118432087535, + "y": 101.57008954662409 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 206.7081318125312, + "y": 107.88368246072545 + }, + "start": { + "x": 208.81969613523924, + "y": 104.49631749190105 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.9260023274847, + "y": 115.43658884302991 + }, + "start": { + "x": 206.7081318125312, + "y": 107.88368246072545 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 199.45372085227075, + "y": 123.46516762849568 + }, + "start": { + "x": 202.9260023274847, + "y": 115.43658884302991 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 197.91812553831994, + "y": 127.45905066024734 + }, + "start": { + "x": 199.45372085227075, + "y": 123.46516762849568 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 194.22498408979428, + "y": 138.7600514654543 + }, + "start": { + "x": 197.91812553831994, + "y": 127.45905066024734 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.63404346101981, + "y": 146.5259316838451 + }, + "start": { + "x": 194.22498408979428, + "y": 138.7600514654543 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.8428276524867, + "y": 152.4946682891155 + }, + "start": { + "x": 191.63404346101981, + "y": 146.5259316838451 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.56259818088282, + "y": 155.14336601806792 + }, + "start": { + "x": 189.8428276524867, + "y": 152.4946682891155 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.00729671232315, + "y": 156.68717988939386 + }, + "start": { + "x": 189.56259818088282, + "y": 155.14336601806792 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.38448312272064, + "y": 158.32269648729502 + }, + "start": { + "x": 190.00729671232315, + "y": 156.68717988939386 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 193.30120719741808, + "y": 159.42069399114553 + }, + "start": { + "x": 191.38448312272064, + "y": 158.32269648729502 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.84219067016775, + "y": 159.8014068411124 + }, + "start": { + "x": 193.30120719741808, + "y": 159.42069399114553 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 204.70525594489098, + "y": 159.4191221528712 + }, + "start": { + "x": 195.84219067016775, + "y": 159.8014068411124 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.8929504846661, + "y": 159.99805008310312 + }, + "start": { + "x": 204.70525594489098, + "y": 159.4191221528712 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 218.6825822083554, + "y": 161.13376252829437 + }, + "start": { + "x": 210.8929504846661, + "y": 159.99805008310312 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 227.55145762676273, + "y": 163.03919069894417 + }, + "start": { + "x": 218.6825822083554, + "y": 161.13376252829437 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.59596903089718, + "y": 166.0354521617686 + }, + "start": { + "x": 227.55145762676273, + "y": 163.03919069894417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 245.4384712280544, + "y": 169.89482831744883 + }, + "start": { + "x": 236.59596903089718, + "y": 166.0354521617686 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 254.4877777996388, + "y": 174.81976803217157 + }, + "start": { + "x": 245.4384712280544, + "y": 169.89482831744883 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 264.17629923945384, + "y": 181.63217613547803 + }, + "start": { + "x": 254.4877777996388, + "y": 174.81976803217157 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.42534210773766, + "y": 185.29629612181333 + }, + "start": { + "x": 264.17629923945384, + "y": 181.63217613547803 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.5632059274622, + "y": 188.21623851318859 + }, + "start": { + "x": 268.42534210773766, + "y": 185.29629612181333 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.1360935374993, + "y": 191.88130337067082 + }, + "start": { + "x": 269.5632059274622, + "y": 188.21623851318859 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 266.9479176307923, + "y": 194.1554142353863 + }, + "start": { + "x": 269.1360935374993, + "y": 191.88130337067082 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 260.47092494758374, + "y": 197.52402404298104 + }, + "start": { + "x": 266.9479176307923, + "y": 194.1554142353863 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 249.64207812245934, + "y": 195.3571423643142 + }, + "start": { + "x": 260.47092494758374, + "y": 197.52402404298104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 243.08543610575387, + "y": 194.23538350506217 + }, + "start": { + "x": 249.64207812245934, + "y": 195.3571423643142 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.0896845141877, + "y": 192.74625143121816 + }, + "start": { + "x": 243.08543610575387, + "y": 194.23538350506217 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 219.18684210475308, + "y": 192.13421860739044 + }, + "start": { + "x": 230.0896845141877, + "y": 192.74625143121816 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.39667271190802, + "y": 192.04286821522524 + }, + "start": { + "x": 219.18684210475308, + "y": 192.13421860739044 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 201.6706447230213, + "y": 192.3127514813268 + }, + "start": { + "x": 210.39667271190802, + "y": 192.04286821522524 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 192.88975971083968, + "y": 192.95823889260524 + }, + "start": { + "x": 201.6706447230213, + "y": 192.3127514813268 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 181.9443620974966, + "y": 194.27083890263273 + }, + "start": { + "x": 192.88975971083968, + "y": 192.95823889260524 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 175.339682782459, + "y": 194.9917530062141 + }, + "start": { + "x": 181.9443620974966, + "y": 194.27083890263273 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 172.55074601267356, + "y": 195.74457977671372 + }, + "start": { + "x": 175.339682782459, + "y": 194.9917530062141 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 170.08680174121517, + "y": 197.28532280357172 + }, + "start": { + "x": 172.55074601267356, + "y": 195.74457977671372 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 165.428703173746, + "y": 201.24812323305554 + }, + "start": { + "x": 170.08680174121517, + "y": 197.28532280357172 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 160.9387417715214, + "y": 204.60430402086712 + }, + "start": { + "x": 165.428703173746, + "y": 201.24812323305554 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 152.87325766356514, + "y": 209.22430649245766 + }, + "start": { + "x": 160.9387417715214, + "y": 204.60430402086712 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 150.39121943692538, + "y": 210.96193184564336 + }, + "start": { + "x": 152.87325766356514, + "y": 209.22430649245766 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 149.24790096002695, + "y": 212.40539839247256 + }, + "start": { + "x": 150.39121943692538, + "y": 210.96193184564336 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.67114870339967, + "y": 217.04939062857284 + }, + "start": { + "x": 149.24790096002695, + "y": 212.40539839247256 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.87878246639295, + "y": 221.82905111990033 + }, + "start": { + "x": 147.67114870339967, + "y": 217.04939062857284 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.42635236358626, + "y": 229.1576845817948 + }, + "start": { + "x": 145.87878246639295, + "y": 221.82905111990033 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.26715449974787, + "y": 234.74693353815118 + }, + "start": { + "x": 147.42635236358626, + "y": 229.1576845817948 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.17318061520916, + "y": 262.48505873690743 + }, + "start": { + "x": 148.26715449974787, + "y": 234.74693353815118 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.26715449974787, + "y": 272.21055184356794 + }, + "start": { + "x": 148.17318061520916, + "y": 262.48505873690743 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.42634736655683, + "y": 277.7997991970304 + }, + "start": { + "x": 148.26715449974787, + "y": 272.21055184356794 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.87878246639295, + "y": 285.1284308707519 + }, + "start": { + "x": 147.42634736655683, + "y": 277.7997991970304 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.67115030899882, + "y": 289.9080767073329 + }, + "start": { + "x": 145.87878246639295, + "y": 285.1284308707519 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 149.2479133253564, + "y": 294.5520903762221 + }, + "start": { + "x": 147.67115030899882, + "y": 289.9080767073329 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 150.3912446995303, + "y": 295.9955551667852 + }, + "start": { + "x": 149.2479133253564, + "y": 294.5520903762221 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 152.87330970143444, + "y": 297.73318904536455 + }, + "start": { + "x": 150.3912446995303, + "y": 295.9955551667852 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 160.93878952461776, + "y": 302.3531863257415 + }, + "start": { + "x": 152.87330970143444, + "y": 297.73318904536455 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 165.4287504843848, + "y": 305.70938198077545 + }, + "start": { + "x": 160.93878952461776, + "y": 302.3531863257415 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 170.0868643364703, + "y": 309.6721898624973 + }, + "start": { + "x": 165.4287504843848, + "y": 305.70938198077545 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 172.55079952258035, + "y": 311.212907844742 + }, + "start": { + "x": 170.0868643364703, + "y": 309.6721898624973 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 177.24540016555036, + "y": 312.21164483309104 + }, + "start": { + "x": 172.55079952258035, + "y": 311.212907844742 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 182.10130931515744, + "y": 312.6609943155306 + }, + "start": { + "x": 177.24540016555036, + "y": 312.21164483309104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 188.59094856810037, + "y": 313.56715360092767 + }, + "start": { + "x": 182.10130931515744, + "y": 312.6609943155306 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 201.67078822529356, + "y": 314.64472070003643 + }, + "start": { + "x": 188.59094856810037, + "y": 313.56715360092767 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.39682865353825, + "y": 314.91459745470763 + }, + "start": { + "x": 201.67078822529356, + "y": 314.64472070003643 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 219.18700997031397, + "y": 314.823240986271 + }, + "start": { + "x": 210.39682865353825, + "y": 314.91459745470763 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.08986601182218, + "y": 314.2111970439678 + }, + "start": { + "x": 219.18700997031397, + "y": 314.823240986271 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 238.80516922828306, + "y": 313.29125228789087 + }, + "start": { + "x": 230.08986601182218, + "y": 314.2111970439678 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.40773770621732, + "y": 312.0201411844375 + }, + "start": { + "x": 238.80516922828306, + "y": 313.29125228789087 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 261.7355447836042, + "y": 309.19144091465483 + }, + "start": { + "x": 247.40773770621732, + "y": 312.0201411844375 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 265.18816115217413, + "y": 310.51035374451425 + }, + "start": { + "x": 261.7355447836042, + "y": 309.19144091465483 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.68317582040174, + "y": 314.75465775643335 + }, + "start": { + "x": 265.18816115217413, + "y": 310.51035374451425 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.615121844417, + "y": 317.34900179119757 + }, + "start": { + "x": 268.68317582040174, + "y": 314.75465775643335 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.9476102228524, + "y": 321.21083109461904 + }, + "start": { + "x": 269.615121844417, + "y": 317.34900179119757 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 264.1760378911803, + "y": 325.3254822109904 + }, + "start": { + "x": 268.9476102228524, + "y": 321.21083109461904 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 254.48759436469103, + "y": 332.1378124711467 + }, + "start": { + "x": 264.1760378911803, + "y": 325.3254822109904 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 245.43820414730567, + "y": 337.062766917863 + }, + "start": { + "x": 254.48759436469103, + "y": 332.1378124711467 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.5956704104147, + "y": 340.92212758883267 + }, + "start": { + "x": 245.43820414730567, + "y": 337.062766917863 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 227.55116995124897, + "y": 343.9183519028313 + }, + "start": { + "x": 236.5956704104147, + "y": 340.92212758883267 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 218.68221715563502, + "y": 345.82376629714173 + }, + "start": { + "x": 227.55116995124897, + "y": 343.9183519028313 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.89262591481835, + "y": 346.9594554598776 + }, + "start": { + "x": 218.68221715563502, + "y": 345.82376629714173 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 204.70524728339484, + "y": 347.5383221630769 + }, + "start": { + "x": 210.89262591481835, + "y": 346.9594554598776 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.84194184819057, + "y": 347.15606420795694 + }, + "start": { + "x": 204.70524728339484, + "y": 347.5383221630769 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 193.30105266682978, + "y": 347.53682311092996 + }, + "start": { + "x": 195.84194184819057, + "y": 347.15606420795694 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.38434247532663, + "y": 348.6348855520347 + }, + "start": { + "x": 193.30105266682978, + "y": 347.53682311092996 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.00722815521573, + "y": 350.2704105130037 + }, + "start": { + "x": 191.38434247532663, + "y": 348.6348855520347 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.56258790626956, + "y": 351.8142504261172 + }, + "start": { + "x": 190.00722815521573, + "y": 350.2704105130037 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.84288828509466, + "y": 354.4630734208498 + }, + "start": { + "x": 189.56258790626956, + "y": 351.8142504261172 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.63416222798267, + "y": 360.43189266895456 + }, + "start": { + "x": 189.84288828509466, + "y": 354.4630734208498 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 194.2249442769385, + "y": 368.1972915307534 + }, + "start": { + "x": 191.63416222798267, + "y": 360.43189266895456 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 197.91825702737847, + "y": 379.498777075308 + }, + "start": { + "x": 194.2249442769385, + "y": 368.1972915307534 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 199.45386970157386, + "y": 383.4926642680346 + }, + "start": { + "x": 197.91825702737847, + "y": 379.498777075308 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.92617290041346, + "y": 391.52125107755285 + }, + "start": { + "x": 199.45386970157386, + "y": 383.4926642680346 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 206.70832892712704, + "y": 399.07412786827916 + }, + "start": { + "x": 202.92617290041346, + "y": 391.52125107755285 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 208.81991271228853, + "y": 402.46146103883746 + }, + "start": { + "x": 206.70832892712704, + "y": 399.07412786827916 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 211.10142089514477, + "y": 405.387639475113 + }, + "start": { + "x": 208.81991271228853, + "y": 402.46146103883746 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 213.63664522943458, + "y": 407.8118955052648 + }, + "start": { + "x": 211.10142089514477, + "y": 405.387639475113 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.75141654941763, + "y": 410.0847823549273 + }, + "start": { + "x": 213.63664522943458, + "y": 407.8118955052648 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 223.8792256568581, + "y": 414.60321136692556 + }, + "start": { + "x": 216.75141654941763, + "y": 410.0847823549273 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 228.25944217335754, + "y": 418.154663088372 + }, + "start": { + "x": 223.8792256568581, + "y": 414.60321136692556 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.52287751082812, + "y": 422.8213585812694 + }, + "start": { + "x": 228.25944217335754, + "y": 418.154663088372 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.7731087224112, + "y": 425.5892773723962 + }, + "start": { + "x": 231.52287751082812, + "y": 422.8213585812694 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.49316559284765, + "y": 426.6563120192592 + }, + "start": { + "x": 231.7731087224112, + "y": 425.5892773723962 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 232.65824141278736, + "y": 427.6570477658781 + }, + "start": { + "x": 231.49316559284765, + "y": 426.6563120192592 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 233.76357966738414, + "y": 430.4018950360664 + }, + "start": { + "x": 232.65824141278736, + "y": 427.6570477658781 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 234.10446000498973, + "y": 440.9148680695502 + }, + "start": { + "x": 233.76357966738414, + "y": 430.4018950360664 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 235.0112300588856, + "y": 445.6354765794306 + }, + "start": { + "x": 234.10446000498973, + "y": 440.9148680695502 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 237.5058256105656, + "y": 449.8097995466608 + }, + "start": { + "x": 235.0112300588856, + "y": 445.6354765794306 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 241.8308331622285, + "y": 454.24451671507427 + }, + "start": { + "x": 237.5058256105656, + "y": 449.8097995466608 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.05592934271587, + "y": 458.4446933027469 + }, + "start": { + "x": 241.8308331622285, + "y": 454.24451671507427 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 252.40194121355648, + "y": 462.00063428219585 + }, + "start": { + "x": 247.05592934271587, + "y": 458.4446933027469 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.9462882231197, + "y": 464.863367273443 + }, + "start": { + "x": 252.40194121355648, + "y": 462.00063428219585 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.7070806815102, + "y": 466.93898565470937 + }, + "start": { + "x": 257.9462882231197, + "y": 464.863367273443 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.32976163135186, + "y": 467.87682486569787 + }, + "start": { + "x": 263.7070806815102, + "y": 466.93898565470937 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 272.0157743469142, + "y": 467.8373335868412 + }, + "start": { + "x": 269.32976163135186, + "y": 467.87682486569787 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.2560957119931, + "y": 466.655960673816 + }, + "start": { + "x": 272.0157743469142, + "y": 467.8373335868412 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 281.99837421411746, + "y": 464.13311202118354 + }, + "start": { + "x": 277.2560957119931, + "y": 466.655960673816 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 283.99513088657864, + "y": 462.4597786704114 + }, + "start": { + "x": 281.99837421411746, + "y": 464.13311202118354 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 287.36892011015556, + "y": 458.16808438259227 + }, + "start": { + "x": 283.99513088657864, + "y": 462.4597786704114 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 290.3320080978713, + "y": 452.5679635272862 + }, + "start": { + "x": 287.36892011015556, + "y": 458.16808438259227 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 297.61806961206344, + "y": 436.2670970637237 + }, + "start": { + "x": 290.3320080978713, + "y": 452.5679635272862 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 303.43044539835205, + "y": 424.44463008994717 + }, + "start": { + "x": 297.61806961206344, + "y": 436.2670970637237 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 310.73880310110917, + "y": 411.3983261915039 + }, + "start": { + "x": 303.43044539835205, + "y": 424.44463008994717 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 315.4613569129776, + "y": 401.9919672786899 + }, + "start": { + "x": 310.73880310110917, + "y": 411.3983261915039 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 321.39879532319867, + "y": 388.0243518668915 + }, + "start": { + "x": 315.4613569129776, + "y": 401.9919672786899 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 324.42956018454106, + "y": 383.6912924445918 + }, + "start": { + "x": 321.39879532319867, + "y": 388.0243518668915 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.63176406324715, + "y": 382.014974116901 + }, + "start": { + "x": 324.42956018454106, + "y": 383.6912924445918 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 331.2026974842644, + "y": 382.574069206359 + }, + "start": { + "x": 327.63176406324715, + "y": 382.014974116901 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.11582439236497, + "y": 384.71365898810353 + }, + "start": { + "x": 331.2026974842644, + "y": 382.574069206359 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.9921930282226, + "y": 394.0206551293793 + }, + "start": { + "x": 334.11582439236497, + "y": 384.71365898810353 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.6720927758552, + "y": 403.3643326980856 + }, + "start": { + "x": 336.9921930282226, + "y": 394.0206551293793 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.01353850807305, + "y": 410.82462437428285 + }, + "start": { + "x": 336.6720927758552, + "y": 403.3643326980856 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.6062149869267, + "y": 420.74319735435165 + }, + "start": { + "x": 336.01353850807305, + "y": 410.82462437428285 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.4706631308083, + "y": 439.4231397065674 + }, + "start": { + "x": 334.6062149869267, + "y": 420.74319735435165 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9235970512947, + "y": 445.818707799896 + }, + "start": { + "x": 330.4706631308083, + "y": 439.4231397065674 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.41738862955907, + "y": 441.1309768606277 + }, + "start": { + "x": 327.9235970512947, + "y": 445.818707799896 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 343.4156526852884, + "y": 435.4025095922685 + }, + "start": { + "x": 334.41738862955907, + "y": 441.1309768606277 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.8959133367012, + "y": 431.6589569568104 + }, + "start": { + "x": 343.4156526852884, + "y": 435.4025095922685 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 354.2325092016833, + "y": 427.53259908479396 + }, + "start": { + "x": 348.8959133367012, + "y": 431.6589569568104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 359.5141090378256, + "y": 423.08085836421265 + }, + "start": { + "x": 354.2325092016833, + "y": 427.53259908479396 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.70605546236135, + "y": 418.45064585149663 + }, + "start": { + "x": 359.5141090378256, + "y": 423.08085836421265 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 369.73111208086567, + "y": 413.7270362879879 + }, + "start": { + "x": 364.70605546236135, + "y": 418.45064585149663 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 374.53661178649065, + "y": 408.9473701458963 + }, + "start": { + "x": 369.73111208086567, + "y": 413.7270362879879 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 379.14333180495004, + "y": 404.0369031827309 + }, + "start": { + "x": 374.53661178649065, + "y": 408.9473701458963 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 383.6903266078355, + "y": 398.76062766234674 + }, + "start": { + "x": 379.14333180495004, + "y": 404.0369031827309 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 393.28837270505926, + "y": 386.41883390825103 + }, + "start": { + "x": 383.6903266078355, + "y": 398.76062766234674 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 395.43838854693587, + "y": 385.1589747106067 + }, + "start": { + "x": 393.28837270505926, + "y": 386.41883390825103 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 401.2800284385459, + "y": 384.34194427201413 + }, + "start": { + "x": 395.43838854693587, + "y": 385.1589747106067 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 404.51773871592377, + "y": 386.1823070648383 + }, + "start": { + "x": 401.2800284385459, + "y": 384.34194427201413 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.2030744982547, + "y": 388.8582534500223 + }, + "start": { + "x": 404.51773871592377, + "y": 386.1823070648383 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.3502366658743, + "y": 390.9518732274748 + }, + "start": { + "x": 406.2030744982547, + "y": 388.8582534500223 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.20417521368506, + "y": 392.50474653294566 + }, + "start": { + "x": 406.3502366658743, + "y": 390.9518732274748 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 402.16360851058727, + "y": 401.51155305186927 + }, + "start": { + "x": 406.20417521368506, + "y": 392.50474653294566 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 397.6574052912606, + "y": 410.77025419299946 + }, + "start": { + "x": 402.16360851058727, + "y": 401.51155305186927 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 391.7477772317769, + "y": 421.5076536789047 + }, + "start": { + "x": 397.6574052912606, + "y": 410.77025419299946 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 384.8769560653724, + "y": 432.38799555880684 + }, + "start": { + "x": 391.7477772317769, + "y": 421.5076536789047 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 377.5662109984595, + "y": 442.8586590877614 + }, + "start": { + "x": 384.8769560653724, + "y": 432.38799555880684 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 370.0217790447457, + "y": 452.3951319514499 + }, + "start": { + "x": 377.5662109984595, + "y": 442.8586590877614 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.65826137572367, + "y": 475.2399027444935 + }, + "start": { + "x": 370.0217790447457, + "y": 452.3951319514499 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 337.22060996991064, + "y": 485.2749572767469 + }, + "start": { + "x": 348.65826137572367, + "y": 475.2399027444935 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 328.65388268609183, + "y": 491.6180337730762 + }, + "start": { + "x": 337.22060996991064, + "y": 485.2749572767469 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 322.52892879238584, + "y": 495.6250457642227 + }, + "start": { + "x": 328.65388268609183, + "y": 491.6180337730762 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 314.2665602495664, + "y": 500.3091469134611 + }, + "start": { + "x": 322.52892879238584, + "y": 495.6250457642227 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 305.95841995325486, + "y": 504.0829250613225 + }, + "start": { + "x": 314.2665602495664, + "y": 500.3091469134611 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 296.1585273975919, + "y": 507.79157828359985 + }, + "start": { + "x": 305.95841995325486, + "y": 504.0829250613225 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 284.487739907583, + "y": 511.1039615233686 + }, + "start": { + "x": 296.1585273975919, + "y": 507.79157828359985 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.1456050684933, + "y": 512.6694284193989 + }, + "start": { + "x": 284.487739907583, + "y": 511.1039615233686 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 271.47805843954063, + "y": 513.1919053034169 + }, + "start": { + "x": 277.1456050684933, + "y": 512.6694284193989 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 267.50019933141215, + "y": 513.2595108992406 + }, + "start": { + "x": 271.47805843954063, + "y": 513.1919053034169 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.5567934013613, + "y": 513.050619364774 + }, + "start": { + "x": 267.50019933141215, + "y": 513.2595108992406 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.88418759807087, + "y": 512.3972533059159 + }, + "start": { + "x": 263.5567934013613, + "y": 513.050619364774 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 250.1396185370248, + "y": 510.69762108410924 + }, + "start": { + "x": 257.88418759807087, + "y": 512.3972533059159 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 248.75473350703632, + "y": 509.01480185379876 + }, + "start": { + "x": 250.1396185370248, + "y": 510.69762108410924 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 246.50506109457197, + "y": 509.27604648880106 + }, + "start": { + "x": 248.75473350703632, + "y": 509.01480185379876 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.91322306950013, + "y": 503.5908209587611 + }, + "start": { + "x": 246.50506109457197, + "y": 509.27604648880106 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.47272124014052, + "y": 499.28814296401504 + }, + "start": { + "x": 236.91322306950013, + "y": 503.5908209587611 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 222.93351495183128, + "y": 493.44956189306083 + }, + "start": { + "x": 230.47272124014052, + "y": 499.28814296401504 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.1198795734582, + "y": 487.44589797869395 + }, + "start": { + "x": 222.93351495183128, + "y": 493.44956189306083 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 209.656896332532, + "y": 480.8755880765099 + }, + "start": { + "x": 216.1198795734582, + "y": 487.44589797869395 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.7860248979664, + "y": 472.92846204928236 + }, + "start": { + "x": 209.656896332532, + "y": 480.8755880765099 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 196.7928759080267, + "y": 464.6463533433233 + }, + "start": { + "x": 202.7860248979664, + "y": 472.92846204928236 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.78942593636165, + "y": 455.1094243035697 + }, + "start": { + "x": 196.7928759080267, + "y": 464.6463533433233 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 184.17386267836412, + "y": 441.97310074636476 + }, + "start": { + "x": 190.78942593636165, + "y": 455.1094243035697 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 176.93706501955413, + "y": 429.96055582099024 + }, + "start": { + "x": 184.17386267836412, + "y": 441.97310074636476 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 171.43818866644224, + "y": 419.64454249799223 + }, + "start": { + "x": 176.93706501955413, + "y": 429.96055582099024 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 167.07705952993064, + "y": 411.00275765603 + }, + "start": { + "x": 171.43818866644224, + "y": 419.64454249799223 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 162.71765560665187, + "y": 401.5613230185424 + }, + "start": { + "x": 167.07705952993064, + "y": 411.00275765603 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 158.6698694151695, + "y": 392.2187784912767 + }, + "start": { + "x": 162.71765560665187, + "y": 401.5613230185424 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 153.9894719798958, + "y": 380.1818360560858 + }, + "start": { + "x": 158.6698694151695, + "y": 392.2187784912767 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.04995291463368, + "y": 363.0189856728436 + }, + "start": { + "x": 153.9894719798958, + "y": 380.1818360560858 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 146.4814925367955, + "y": 356.03234172391166 + }, + "start": { + "x": 148.04995291463368, + "y": 363.0189856728436 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 144.9379040083139, + "y": 351.5274985334466 + }, + "start": { + "x": 146.4814925367955, + "y": 356.03234172391166 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 143.20488621400278, + "y": 349.26746874281633 + }, + "start": { + "x": 144.9379040083139, + "y": 351.5274985334466 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 132.21669862269985, + "y": 339.11094306466174 + }, + "start": { + "x": 143.20488621400278, + "y": 349.26746874281633 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 123.82948486310666, + "y": 332.49232550041893 + }, + "start": { + "x": 132.21669862269985, + "y": 339.11094306466174 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 120.62863614928477, + "y": 329.87220542957766 + }, + "start": { + "x": 123.82948486310666, + "y": 332.49232550041893 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 119.79708028974831, + "y": 329.6528888949321 + }, + "start": { + "x": 120.62863614928477, + "y": 329.87220542957766 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 113.06119367815525, + "y": 331.73574546211483 + }, + "start": { + "x": 119.79708028974831, + "y": 329.6528888949321 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 101.53891778424352, + "y": 330.6529433744287 + }, + "start": { + "x": 113.06119367815525, + "y": 331.73574546211483 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 96.72194082952593, + "y": 328.3788802825004 + }, + "start": { + "x": 101.53891778424352, + "y": 330.6529433744287 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 94.44804562234744, + "y": 327.6318893038393 + }, + "start": { + "x": 96.72194082952593, + "y": 328.3788802825004 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 89.18094583272412, + "y": 327.9486991427987 + }, + "start": { + "x": 94.44804562234744, + "y": 327.6318893038393 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 84.25665019349773, + "y": 327.6494412047385 + }, + "start": { + "x": 89.18094583272412, + "y": 327.9486991427987 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 80.44374917348537, + "y": 327.74143503142625 + }, + "start": { + "x": 84.25665019349773, + "y": 327.6494412047385 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 73.4839824561718, + "y": 328.2916667755204 + }, + "start": { + "x": 80.44374917348537, + "y": 327.74143503142625 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 58.311437612056935, + "y": 326.1954765892323 + }, + "start": { + "x": 73.4839824561718, + "y": 328.2916667755204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 52.645083499708825, + "y": 323.5117655186339 + }, + "start": { + "x": 58.311437612056935, + "y": 326.1954765892323 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 46.067642669974305, + "y": 319.5626062679048 + }, + "start": { + "x": 52.645083499708825, + "y": 323.5117655186339 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 38.62675391956853, + "y": 313.18722025578955 + }, + "start": { + "x": 46.067642669974305, + "y": 319.5626062679048 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 32.36274312313761, + "y": 305.34063919630734 + }, + "start": { + "x": 38.62675391956853, + "y": 313.18722025578955 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 28.846229568016224, + "y": 298.72351203099055 + }, + "start": { + "x": 32.36274312313761, + "y": 305.34063919630734 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 25.97945925725625, + "y": 291.784358013861 + }, + "start": { + "x": 28.846229568016224, + "y": 298.72351203099055 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.05721201087978, + "y": 281.94002046231367 + }, + "start": { + "x": 25.97945925725625, + "y": 291.784358013861 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 23.97322765577215, + "y": 273.14431005309973 + }, + "start": { + "x": 24.05721201087978, + "y": 281.94002046231367 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.490910571051828, + "y": 269.1886687326656 + }, + "start": { + "x": 23.97322765577215, + "y": 273.14431005309973 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -1.6878689286992536, + "y": 269.1886687326656 + }, + "start": { + "x": 24.490910571051828, + "y": 269.1886687326656 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -5.13516515965886, + "y": 267.19837132574503 + }, + "start": { + "x": -1.6878689286992536, + "y": 269.1886687326656 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -6.299212598425184, + "y": 264.00017727256164 + }, + "start": { + "x": -5.13516515965886, + "y": 267.19837132574503 + }, + "type": "LineSegment" + } + ], + "is_path": false, + "type": "general" + }, + "expected_output": { + "elements": [ + { + "end": { + "x": -6.299212598425184, + "y": 241.77418848909892 + }, + "start": { + "x": -6.299212598425184, + "y": 264.00017727256164 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -4.111519021518882, + "y": 239.16699680932555 + }, + "start": { + "x": -6.299212598425184, + "y": 241.77418848909892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -1.6402792499970928, + "y": 237.7402258620059 + }, + "start": { + "x": -4.111519021518882, + "y": 239.16699680932555 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.54446861160039, + "y": 237.7402258620059 + }, + "start": { + "x": -1.6402792499970928, + "y": 237.7402258620059 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.54446861160039, + "y": 220.83484404629775 + }, + "start": { + "x": 24.54446861160039, + "y": 237.7402258620059 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 26.927302171944802, + "y": 212.87880986709015 + }, + "start": { + "x": 24.54446861160039, + "y": 220.83484404629775 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 28.846220588935072, + "y": 208.23397144901136 + }, + "start": { + "x": 26.927302171944802, + "y": 212.87880986709015 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 32.362727283237845, + "y": 201.61685021542215 + }, + "start": { + "x": 28.846220588935072, + "y": 208.23397144901136 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 38.62672771480965, + "y": 193.77027151988455 + }, + "start": { + "x": 32.362727283237845, + "y": 201.61685021542215 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 46.067605550496666, + "y": 187.39488495253892 + }, + "start": { + "x": 38.62672771480965, + "y": 193.77027151988455 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 52.64503951215504, + "y": 183.44572261090406 + }, + "start": { + "x": 46.067605550496666, + "y": 187.39488495253892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 58.57111953810117, + "y": 180.63899144721313 + }, + "start": { + "x": 52.64503951215504, + "y": 183.44572261090406 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 64.74156165849824, + "y": 179.16486273743885 + }, + "start": { + "x": 58.57111953810117, + "y": 180.63899144721313 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 71.52522059736216, + "y": 178.5109398596913 + }, + "start": { + "x": 64.74156165849824, + "y": 179.16486273743885 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 80.44369132056795, + "y": 179.21602541734984 + }, + "start": { + "x": 71.52522059736216, + "y": 178.5109398596913 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 84.25659304067115, + "y": 179.30802509525864 + }, + "start": { + "x": 80.44369132056795, + "y": 179.21602541734984 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 89.18104267547288, + "y": 179.0087632731566 + }, + "start": { + "x": 84.25659304067115, + "y": 179.30802509525864 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 94.4480180725322, + "y": 179.3255780797615 + }, + "start": { + "x": 89.18104267547288, + "y": 179.0087632731566 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 111.81165423289237, + "y": 175.196139253305 + }, + "start": { + "x": 94.4480180725322, + "y": 179.3255780797615 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 116.04835883370788, + "y": 176.14539824523277 + }, + "start": { + "x": 111.81165423289237, + "y": 175.196139253305 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 119.79702874796006, + "y": 177.3045624300616 + }, + "start": { + "x": 116.04835883370788, + "y": 176.14539824523277 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 120.62858581333818, + "y": 177.08529655371993 + }, + "start": { + "x": 119.79702874796006, + "y": 177.3045624300616 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 123.82964199569909, + "y": 174.46501738372345 + }, + "start": { + "x": 120.62858581333818, + "y": 177.08529655371993 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 130.72192146315356, + "y": 169.13849825461605 + }, + "start": { + "x": 123.82964199569909, + "y": 174.46501738372345 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 137.95603395879016, + "y": 162.51482925726742 + }, + "start": { + "x": 130.72192146315356, + "y": 169.13849825461605 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 141.906787476157, + "y": 158.97683055146393 + }, + "start": { + "x": 137.95603395879016, + "y": 162.51482925726742 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 144.2124232892347, + "y": 156.5155624362895 + }, + "start": { + "x": 141.906787476157, + "y": 158.97683055146393 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.50224171949486, + "y": 154.24065893607704 + }, + "start": { + "x": 144.2124232892347, + "y": 156.5155624362895 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 146.4814653720017, + "y": 150.92523802256196 + }, + "start": { + "x": 145.50224171949486, + "y": 154.24065893607704 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.04996862904972, + "y": 143.93843002952417 + }, + "start": { + "x": 146.4814653720017, + "y": 150.92523802256196 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 153.98945494290442, + "y": 126.77567807200023 + }, + "start": { + "x": 148.04996862904972, + "y": 143.93843002952417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 158.6698105789921, + "y": 114.73882891696921 + }, + "start": { + "x": 153.98945494290442, + "y": 126.77567807200023 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 162.71758650404988, + "y": 105.39629544415891 + }, + "start": { + "x": 158.6698105789921, + "y": 114.73882891696921 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 167.07698952589055, + "y": 95.95485256074892 + }, + "start": { + "x": 162.71758650404988, + "y": 105.39629544415891 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 171.43809762602166, + "y": 87.31309689366003 + }, + "start": { + "x": 167.07698952589055, + "y": 95.95485256074892 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 176.93704511954965, + "y": 76.996939267262 + }, + "start": { + "x": 171.43809762602166, + "y": 87.31309689366003 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 184.17377411932986, + "y": 64.98452505152864 + }, + "start": { + "x": 176.93704511954965, + "y": 76.996939267262 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 188.93217295778425, + "y": 55.56222956651204 + }, + "start": { + "x": 184.17377411932986, + "y": 64.98452505152864 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.4758032810116, + "y": 44.31853151428383 + }, + "start": { + "x": 188.93217295778425, + "y": 55.56222956651204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 203.9341215470703, + "y": 32.643011662632006 + }, + "start": { + "x": 195.4758032810116, + "y": 44.31853151428383 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 224.32369845803922, + "y": 12.35039956425019 + }, + "start": { + "x": 203.9341215470703, + "y": 32.643011662632006 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.4654542829522, + "y": 6.997111204401762 + }, + "start": { + "x": 224.32369845803922, + "y": 12.35039956425019 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.04851957185102, + "y": -0.5959572918031011 + }, + "start": { + "x": 231.4654542829522, + "y": 6.997111204401762 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 250.54011167334855, + "y": -3.82804958980166 + }, + "start": { + "x": 247.04851957185102, + "y": -0.5959572918031011 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.8841909485406, + "y": -5.439789512399147 + }, + "start": { + "x": 250.54011167334855, + "y": -3.82804958980166 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.5567934013613, + "y": -6.093154927465683 + }, + "start": { + "x": 257.8841909485406, + "y": -5.439789512399147 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 267.50019933141215, + "y": -6.302046633182414 + }, + "start": { + "x": 263.5567934013613, + "y": -6.093154927465683 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 271.47805843954063, + "y": -6.234441034936087 + }, + "start": { + "x": 267.50019933141215, + "y": -6.302046633182414 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.1456028740026, + "y": -5.711964353226846 + }, + "start": { + "x": 271.47805843954063, + "y": -6.234441034936087 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 284.487739907583, + "y": -4.146497238408896 + }, + "start": { + "x": 277.1456028740026, + "y": -5.711964353226846 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 296.1585320748131, + "y": -0.8341122450789987 + }, + "start": { + "x": 284.487739907583, + "y": -4.146497238408896 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 305.95841995325486, + "y": 2.874539207176091 + }, + "start": { + "x": 296.1585320748131, + "y": -0.8341122450789987 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 314.2665588298211, + "y": 6.648316710136296 + }, + "start": { + "x": 305.95841995325486, + "y": 2.874539207176091 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 323.25075159231494, + "y": 11.741634373915602 + }, + "start": { + "x": 314.2665588298211, + "y": 6.648316710136296 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 337.1733339605729, + "y": 21.725520187162417 + }, + "start": { + "x": 323.25075159231494, + "y": 11.741634373915602 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.000065321348, + "y": 31.218709709845594 + }, + "start": { + "x": 337.1733339605729, + "y": 21.725520187162417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 356.3929093265836, + "y": 39.322520199825796 + }, + "start": { + "x": 348.000065321348, + "y": 31.218709709845594 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.9835310479913, + "y": 48.636284604137444 + }, + "start": { + "x": 356.3929093265836, + "y": 39.322520199825796 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 370.8182497423418, + "y": 55.56910434241187 + }, + "start": { + "x": 364.9835310479913, + "y": 48.636284604137444 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 377.5662095272867, + "y": 64.09880307363204 + }, + "start": { + "x": 370.8182497423418, + "y": 55.56910434241187 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 384.8769560653724, + "y": 74.5694687099134 + }, + "start": { + "x": 377.5662095272867, + "y": 64.09880307363204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 391.7477772317769, + "y": 85.44981058966151 + }, + "start": { + "x": 384.8769560653724, + "y": 74.5694687099134 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 397.6574039264488, + "y": 96.18720759571057 + }, + "start": { + "x": 391.7477772317769, + "y": 85.44981058966151 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 402.16360851058727, + "y": 105.44590918096145 + }, + "start": { + "x": 397.6574039264488, + "y": 96.18720759571057 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.20417521368506, + "y": 114.45271773550691 + }, + "start": { + "x": 402.16360851058727, + "y": 105.44590918096145 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.3502366658743, + "y": 116.0055910410055 + }, + "start": { + "x": 406.20417521368506, + "y": 114.45271773550691 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.16368499551317, + "y": 118.65959018291638 + }, + "start": { + "x": 406.3502366658743, + "y": 116.0055910410055 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 404.04909803179675, + "y": 121.04153955548124 + }, + "start": { + "x": 406.16368499551317, + "y": 118.65959018291638 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 401.2800284385459, + "y": 122.61551999646866 + }, + "start": { + "x": 404.04909803179675, + "y": 121.04153955548124 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 395.43838854693587, + "y": 121.79848955787632 + }, + "start": { + "x": 401.2800284385459, + "y": 122.61551999646866 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 393.28837270505926, + "y": 120.53863036024065 + }, + "start": { + "x": 395.43838854693587, + "y": 121.79848955787632 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 383.6903266078355, + "y": 108.19683660653783 + }, + "start": { + "x": 393.28837270505926, + "y": 120.53863036024065 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 379.14333180495004, + "y": 102.9205610858531 + }, + "start": { + "x": 383.6903266078355, + "y": 108.19683660653783 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 374.53661178649065, + "y": 98.01009412262263 + }, + "start": { + "x": 379.14333180495004, + "y": 102.9205610858531 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 369.73111208086567, + "y": 93.23042805304132 + }, + "start": { + "x": 374.53661178649065, + "y": 98.01009412262263 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.70605546236135, + "y": 88.50681857666927 + }, + "start": { + "x": 369.73111208086567, + "y": 93.23042805304132 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 359.5141090378256, + "y": 83.87660606446467 + }, + "start": { + "x": 364.70605546236135, + "y": 88.50681857666927 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 354.2325092016833, + "y": 79.42486534379535 + }, + "start": { + "x": 359.5141090378256, + "y": 83.87660606446467 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.8959133367012, + "y": 75.29850724582289 + }, + "start": { + "x": 354.2325092016833, + "y": 79.42486534379535 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 343.4169832729554, + "y": 71.5558333720104 + }, + "start": { + "x": 348.8959133367012, + "y": 75.29850724582289 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.4773274130216, + "y": 65.8710348119074 + }, + "start": { + "x": 343.4169832729554, + "y": 71.5558333720104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9235970512947, + "y": 61.138756468597485 + }, + "start": { + "x": 334.4773274130216, + "y": 65.8710348119074 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.4706631308083, + "y": 67.53432456180809 + }, + "start": { + "x": 327.9235970512947, + "y": 61.138756468597485 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.6062149869267, + "y": 86.21426691397303 + }, + "start": { + "x": 330.4706631308083, + "y": 67.53432456180809 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.01353850807305, + "y": 96.13283989418257 + }, + "start": { + "x": 334.6062149869267, + "y": 86.21426691397303 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.6720927758552, + "y": 103.59313146910044 + }, + "start": { + "x": 336.01353850807305, + "y": 96.13283989418257 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.9318911096816, + "y": 111.17660544047123 + }, + "start": { + "x": 336.6720927758552, + "y": 103.59313146910044 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.5894358944884, + "y": 118.48366839947543 + }, + "start": { + "x": 336.9318911096816, + "y": 111.17660544047123 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.2327602802784, + "y": 123.32877006830377 + }, + "start": { + "x": 336.5894358944884, + "y": 118.48366839947543 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.68726311025887, + "y": 124.96508224100512 + }, + "start": { + "x": 334.2327602802784, + "y": 123.32877006830377 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9495135099993, + "y": 124.7404159987621 + }, + "start": { + "x": 330.68726311025887, + "y": 124.96508224100512 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 325.4466228091186, + "y": 123.60847698384934 + }, + "start": { + "x": 327.9495135099993, + "y": 124.7404159987621 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 320.57550510869794, + "y": 116.95281744367911 + }, + "start": { + "x": 325.4466228091186, + "y": 123.60847698384934 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 315.4613569129776, + "y": 104.9654969897408 + }, + "start": { + "x": 320.57550510869794, + "y": 116.95281744367911 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 310.73880310110917, + "y": 95.55913823290157 + }, + "start": { + "x": 315.4613569129776, + "y": 104.9654969897408 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 303.4304443267355, + "y": 82.51283243101379 + }, + "start": { + "x": 310.73880310110917, + "y": 95.55913823290157 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 297.6180676757673, + "y": 70.69036310996104 + }, + "start": { + "x": 303.4304443267355, + "y": 82.51283243101379 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 290.3320080978713, + "y": 54.38950095367072 + }, + "start": { + "x": 297.6180676757673, + "y": 70.69036310996104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 287.36892011015556, + "y": 48.789379827834 + }, + "start": { + "x": 290.3320080978713, + "y": 54.38950095367072 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 283.99513088657864, + "y": 44.49768582038909 + }, + "start": { + "x": 287.36892011015556, + "y": 48.789379827834 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 281.99837421411746, + "y": 42.82435240731099 + }, + "start": { + "x": 283.99513088657864, + "y": 44.49768582038909 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.2560957119931, + "y": 40.301503557641254 + }, + "start": { + "x": 281.99837421411746, + "y": 42.82435240731099 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 272.0157743469142, + "y": 39.120130821734435 + }, + "start": { + "x": 277.2560957119931, + "y": 40.301503557641254 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.32976163135186, + "y": 39.080639420736034 + }, + "start": { + "x": 272.0157743469142, + "y": 39.120130821734435 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.7070806815102, + "y": 40.01847880304015 + }, + "start": { + "x": 269.32976163135186, + "y": 39.080639420736034 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.9462882231197, + "y": 42.09409714638436 + }, + "start": { + "x": 263.7070806815102, + "y": 40.01847880304015 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 252.40194121355648, + "y": 44.95683013804827 + }, + "start": { + "x": 257.9462882231197, + "y": 42.09409714638436 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.05592934271587, + "y": 48.5127709022336 + }, + "start": { + "x": 252.40194121355648, + "y": 44.95683013804827 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 241.8308331622285, + "y": 52.71294756144926 + }, + "start": { + "x": 247.05592934271587, + "y": 48.5127709022336 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 237.5058256105656, + "y": 57.14766494404094 + }, + "start": { + "x": 241.8308331622285, + "y": 52.71294756144926 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 235.0112300588856, + "y": 61.32198768905874 + }, + "start": { + "x": 237.5058256105656, + "y": 57.14766494404094 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 234.10446000498973, + "y": 66.04259634650171 + }, + "start": { + "x": 235.0112300588856, + "y": 61.32198768905874 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 233.7432693764132, + "y": 77.1819518050895 + }, + "start": { + "x": 234.10446000498973, + "y": 66.04259634650171 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 232.26146295865524, + "y": 79.64126015015776 + }, + "start": { + "x": 233.7432693764132, + "y": 77.1819518050895 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.5228562151841, + "y": 84.13697174852604 + }, + "start": { + "x": 232.26146295865524, + "y": 79.64126015015776 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 228.2588747472288, + "y": 88.80346776373584 + }, + "start": { + "x": 231.5228562151841, + "y": 84.13697174852604 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 223.87890853354588, + "y": 92.35444304704612 + }, + "start": { + "x": 228.2588747472288, + "y": 88.80346776373584 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.7510652950972, + "y": 96.87291606189422 + }, + "start": { + "x": 223.87890853354588, + "y": 92.35444304704612 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 213.63636257626283, + "y": 99.1458006811262 + }, + "start": { + "x": 216.7510652950972, + "y": 96.87291606189422 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 211.10118432087535, + "y": 101.57008954662409 + }, + "start": { + "x": 213.63636257626283, + "y": 99.1458006811262 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 208.81969613523924, + "y": 104.49631749190105 + }, + "start": { + "x": 211.10118432087535, + "y": 101.57008954662409 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 206.7081318125312, + "y": 107.88368246072545 + }, + "start": { + "x": 208.81969613523924, + "y": 104.49631749190105 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.9260023274847, + "y": 115.43658884302991 + }, + "start": { + "x": 206.7081318125312, + "y": 107.88368246072545 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 199.45372085227075, + "y": 123.46516762849568 + }, + "start": { + "x": 202.9260023274847, + "y": 115.43658884302991 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 197.91812553831994, + "y": 127.45905066024734 + }, + "start": { + "x": 199.45372085227075, + "y": 123.46516762849568 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 194.22498408979428, + "y": 138.7600514654543 + }, + "start": { + "x": 197.91812553831994, + "y": 127.45905066024734 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.63404346101981, + "y": 146.5259316838451 + }, + "start": { + "x": 194.22498408979428, + "y": 138.7600514654543 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.8428276524867, + "y": 152.4946682891155 + }, + "start": { + "x": 191.63404346101981, + "y": 146.5259316838451 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.56259818088282, + "y": 155.14336601806792 + }, + "start": { + "x": 189.8428276524867, + "y": 152.4946682891155 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.00729671232315, + "y": 156.68717988939386 + }, + "start": { + "x": 189.56259818088282, + "y": 155.14336601806792 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.38448312272064, + "y": 158.32269648729502 + }, + "start": { + "x": 190.00729671232315, + "y": 156.68717988939386 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 193.30120719741808, + "y": 159.42069399114553 + }, + "start": { + "x": 191.38448312272064, + "y": 158.32269648729502 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.84219067016775, + "y": 159.8014068411124 + }, + "start": { + "x": 193.30120719741808, + "y": 159.42069399114553 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 204.70525594489098, + "y": 159.4191221528712 + }, + "start": { + "x": 195.84219067016775, + "y": 159.8014068411124 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.8929504846661, + "y": 159.99805008310312 + }, + "start": { + "x": 204.70525594489098, + "y": 159.4191221528712 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 218.6825822083554, + "y": 161.13376252829437 + }, + "start": { + "x": 210.8929504846661, + "y": 159.99805008310312 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 227.55145762676273, + "y": 163.03919069894417 + }, + "start": { + "x": 218.6825822083554, + "y": 161.13376252829437 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.59596903089718, + "y": 166.0354521617686 + }, + "start": { + "x": 227.55145762676273, + "y": 163.03919069894417 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 245.4384712280544, + "y": 169.89482831744883 + }, + "start": { + "x": 236.59596903089718, + "y": 166.0354521617686 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 254.4877777996388, + "y": 174.81976803217157 + }, + "start": { + "x": 245.4384712280544, + "y": 169.89482831744883 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 264.17629923945384, + "y": 181.63217613547803 + }, + "start": { + "x": 254.4877777996388, + "y": 174.81976803217157 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.42534210773766, + "y": 185.29629612181333 + }, + "start": { + "x": 264.17629923945384, + "y": 181.63217613547803 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.5632059274622, + "y": 188.21623851318859 + }, + "start": { + "x": 268.42534210773766, + "y": 185.29629612181333 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.1360935374993, + "y": 191.88130337067082 + }, + "start": { + "x": 269.5632059274622, + "y": 188.21623851318859 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 266.9479176307923, + "y": 194.1554142353863 + }, + "start": { + "x": 269.1360935374993, + "y": 191.88130337067082 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 260.47092494758374, + "y": 197.52402404298104 + }, + "start": { + "x": 266.9479176307923, + "y": 194.1554142353863 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 249.64207812245934, + "y": 195.3571423643142 + }, + "start": { + "x": 260.47092494758374, + "y": 197.52402404298104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 243.08543610575387, + "y": 194.23538350506217 + }, + "start": { + "x": 249.64207812245934, + "y": 195.3571423643142 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.0896845141877, + "y": 192.74625143121816 + }, + "start": { + "x": 243.08543610575387, + "y": 194.23538350506217 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 219.18684210475308, + "y": 192.13421860739044 + }, + "start": { + "x": 230.0896845141877, + "y": 192.74625143121816 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.39667271190802, + "y": 192.04286821522524 + }, + "start": { + "x": 219.18684210475308, + "y": 192.13421860739044 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 201.6706447230213, + "y": 192.3127514813268 + }, + "start": { + "x": 210.39667271190802, + "y": 192.04286821522524 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 192.88975971083968, + "y": 192.95823889260524 + }, + "start": { + "x": 201.6706447230213, + "y": 192.3127514813268 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 181.9443620974966, + "y": 194.27083890263273 + }, + "start": { + "x": 192.88975971083968, + "y": 192.95823889260524 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 175.339682782459, + "y": 194.9917530062141 + }, + "start": { + "x": 181.9443620974966, + "y": 194.27083890263273 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 172.55074601267356, + "y": 195.74457977671372 + }, + "start": { + "x": 175.339682782459, + "y": 194.9917530062141 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 170.08680174121517, + "y": 197.28532280357172 + }, + "start": { + "x": 172.55074601267356, + "y": 195.74457977671372 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 165.428703173746, + "y": 201.24812323305554 + }, + "start": { + "x": 170.08680174121517, + "y": 197.28532280357172 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 160.9387417715214, + "y": 204.60430402086712 + }, + "start": { + "x": 165.428703173746, + "y": 201.24812323305554 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 152.87325766356514, + "y": 209.22430649245766 + }, + "start": { + "x": 160.9387417715214, + "y": 204.60430402086712 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 150.39121943692538, + "y": 210.96193184564336 + }, + "start": { + "x": 152.87325766356514, + "y": 209.22430649245766 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 149.24790096002695, + "y": 212.40539839247256 + }, + "start": { + "x": 150.39121943692538, + "y": 210.96193184564336 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.67114870339967, + "y": 217.04939062857284 + }, + "start": { + "x": 149.24790096002695, + "y": 212.40539839247256 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.87878246639295, + "y": 221.82905111990033 + }, + "start": { + "x": 147.67114870339967, + "y": 217.04939062857284 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.42635236358626, + "y": 229.1576845817948 + }, + "start": { + "x": 145.87878246639295, + "y": 221.82905111990033 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.26715449974787, + "y": 234.74693353815118 + }, + "start": { + "x": 147.42635236358626, + "y": 229.1576845817948 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.26715449974787, + "y": 272.21055184356794 + }, + "start": { + "x": 148.26715449974787, + "y": 234.74693353815118 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.42634736655683, + "y": 277.7997991970304 + }, + "start": { + "x": 148.26715449974787, + "y": 272.21055184356794 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 145.87878246639295, + "y": 285.1284308707519 + }, + "start": { + "x": 147.42634736655683, + "y": 277.7997991970304 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 147.67115030899882, + "y": 289.9080767073329 + }, + "start": { + "x": 145.87878246639295, + "y": 285.1284308707519 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 149.2479133253564, + "y": 294.5520903762221 + }, + "start": { + "x": 147.67115030899882, + "y": 289.9080767073329 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 150.3912446995303, + "y": 295.9955551667852 + }, + "start": { + "x": 149.2479133253564, + "y": 294.5520903762221 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 152.87330970143444, + "y": 297.73318904536455 + }, + "start": { + "x": 150.3912446995303, + "y": 295.9955551667852 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 160.93878952461776, + "y": 302.3531863257415 + }, + "start": { + "x": 152.87330970143444, + "y": 297.73318904536455 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 165.4287504843848, + "y": 305.70938198077545 + }, + "start": { + "x": 160.93878952461776, + "y": 302.3531863257415 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 170.0868643364703, + "y": 309.6721898624973 + }, + "start": { + "x": 165.4287504843848, + "y": 305.70938198077545 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 172.55079952258035, + "y": 311.212907844742 + }, + "start": { + "x": 170.0868643364703, + "y": 309.6721898624973 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 177.24540016555036, + "y": 312.21164483309104 + }, + "start": { + "x": 172.55079952258035, + "y": 311.212907844742 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 182.10130931515744, + "y": 312.6609943155306 + }, + "start": { + "x": 177.24540016555036, + "y": 312.21164483309104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 188.59094856810037, + "y": 313.56715360092767 + }, + "start": { + "x": 182.10130931515744, + "y": 312.6609943155306 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 201.67078822529356, + "y": 314.64472070003643 + }, + "start": { + "x": 188.59094856810037, + "y": 313.56715360092767 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.39682865353825, + "y": 314.91459745470763 + }, + "start": { + "x": 201.67078822529356, + "y": 314.64472070003643 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 219.18700997031397, + "y": 314.823240986271 + }, + "start": { + "x": 210.39682865353825, + "y": 314.91459745470763 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.08986601182218, + "y": 314.2111970439678 + }, + "start": { + "x": 219.18700997031397, + "y": 314.823240986271 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 238.80516922828306, + "y": 313.29125228789087 + }, + "start": { + "x": 230.08986601182218, + "y": 314.2111970439678 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.40773770621732, + "y": 312.0201411844375 + }, + "start": { + "x": 238.80516922828306, + "y": 313.29125228789087 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 261.7355447836042, + "y": 309.19144091465483 + }, + "start": { + "x": 247.40773770621732, + "y": 312.0201411844375 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 265.18816115217413, + "y": 310.51035374451425 + }, + "start": { + "x": 261.7355447836042, + "y": 309.19144091465483 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.68317582040174, + "y": 314.75465775643335 + }, + "start": { + "x": 265.18816115217413, + "y": 310.51035374451425 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.615121844417, + "y": 317.34900179119757 + }, + "start": { + "x": 268.68317582040174, + "y": 314.75465775643335 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 268.9476102228524, + "y": 321.21083109461904 + }, + "start": { + "x": 269.615121844417, + "y": 317.34900179119757 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 264.1760378911803, + "y": 325.3254822109904 + }, + "start": { + "x": 268.9476102228524, + "y": 321.21083109461904 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 254.48759436469103, + "y": 332.1378124711467 + }, + "start": { + "x": 264.1760378911803, + "y": 325.3254822109904 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 245.43820414730567, + "y": 337.062766917863 + }, + "start": { + "x": 254.48759436469103, + "y": 332.1378124711467 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.5956704104147, + "y": 340.92212758883267 + }, + "start": { + "x": 245.43820414730567, + "y": 337.062766917863 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 227.55116995124897, + "y": 343.9183519028313 + }, + "start": { + "x": 236.5956704104147, + "y": 340.92212758883267 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 218.68221715563502, + "y": 345.82376629714173 + }, + "start": { + "x": 227.55116995124897, + "y": 343.9183519028313 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 210.89262591481835, + "y": 346.9594554598776 + }, + "start": { + "x": 218.68221715563502, + "y": 345.82376629714173 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 204.70524728339484, + "y": 347.5383221630769 + }, + "start": { + "x": 210.89262591481835, + "y": 346.9594554598776 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 195.84194184819057, + "y": 347.15606420795694 + }, + "start": { + "x": 204.70524728339484, + "y": 347.5383221630769 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 193.30105266682978, + "y": 347.53682311092996 + }, + "start": { + "x": 195.84194184819057, + "y": 347.15606420795694 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.38434247532663, + "y": 348.6348855520347 + }, + "start": { + "x": 193.30105266682978, + "y": 347.53682311092996 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.00722815521573, + "y": 350.2704105130037 + }, + "start": { + "x": 191.38434247532663, + "y": 348.6348855520347 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.56258790626956, + "y": 351.8142504261172 + }, + "start": { + "x": 190.00722815521573, + "y": 350.2704105130037 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 189.84288828509466, + "y": 354.4630734208498 + }, + "start": { + "x": 189.56258790626956, + "y": 351.8142504261172 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 191.63416222798267, + "y": 360.43189266895456 + }, + "start": { + "x": 189.84288828509466, + "y": 354.4630734208498 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 194.2249442769385, + "y": 368.1972915307534 + }, + "start": { + "x": 191.63416222798267, + "y": 360.43189266895456 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 197.91825702737847, + "y": 379.498777075308 + }, + "start": { + "x": 194.2249442769385, + "y": 368.1972915307534 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 199.45386970157386, + "y": 383.4926642680346 + }, + "start": { + "x": 197.91825702737847, + "y": 379.498777075308 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.92617290041346, + "y": 391.52125107755285 + }, + "start": { + "x": 199.45386970157386, + "y": 383.4926642680346 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 206.70832892712704, + "y": 399.07412786827916 + }, + "start": { + "x": 202.92617290041346, + "y": 391.52125107755285 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 208.81991271228853, + "y": 402.46146103883746 + }, + "start": { + "x": 206.70832892712704, + "y": 399.07412786827916 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 211.10142089514477, + "y": 405.387639475113 + }, + "start": { + "x": 208.81991271228853, + "y": 402.46146103883746 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 213.63664522943458, + "y": 407.8118955052648 + }, + "start": { + "x": 211.10142089514477, + "y": 405.387639475113 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.75141654941763, + "y": 410.0847823549273 + }, + "start": { + "x": 213.63664522943458, + "y": 407.8118955052648 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 223.8792256568581, + "y": 414.60321136692556 + }, + "start": { + "x": 216.75141654941763, + "y": 410.0847823549273 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 228.25944217335754, + "y": 418.154663088372 + }, + "start": { + "x": 223.8792256568581, + "y": 414.60321136692556 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.52287751082812, + "y": 422.8213585812694 + }, + "start": { + "x": 228.25944217335754, + "y": 418.154663088372 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.7731087224112, + "y": 425.5892773723962 + }, + "start": { + "x": 231.52287751082812, + "y": 422.8213585812694 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 231.49316559284765, + "y": 426.6563120192592 + }, + "start": { + "x": 231.7731087224112, + "y": 425.5892773723962 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 232.65824141278736, + "y": 427.6570477658781 + }, + "start": { + "x": 231.49316559284765, + "y": 426.6563120192592 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 233.76357966738414, + "y": 430.4018950360664 + }, + "start": { + "x": 232.65824141278736, + "y": 427.6570477658781 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 234.10446000498973, + "y": 440.9148680695502 + }, + "start": { + "x": 233.76357966738414, + "y": 430.4018950360664 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 235.0112300588856, + "y": 445.6354765794306 + }, + "start": { + "x": 234.10446000498973, + "y": 440.9148680695502 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 237.5058256105656, + "y": 449.8097995466608 + }, + "start": { + "x": 235.0112300588856, + "y": 445.6354765794306 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 241.8308331622285, + "y": 454.24451671507427 + }, + "start": { + "x": 237.5058256105656, + "y": 449.8097995466608 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 247.05592934271587, + "y": 458.4446933027469 + }, + "start": { + "x": 241.8308331622285, + "y": 454.24451671507427 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 252.40194121355648, + "y": 462.00063428219585 + }, + "start": { + "x": 247.05592934271587, + "y": 458.4446933027469 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.9462882231197, + "y": 464.863367273443 + }, + "start": { + "x": 252.40194121355648, + "y": 462.00063428219585 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.7070806815102, + "y": 466.93898565470937 + }, + "start": { + "x": 257.9462882231197, + "y": 464.863367273443 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 269.32976163135186, + "y": 467.87682486569787 + }, + "start": { + "x": 263.7070806815102, + "y": 466.93898565470937 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 272.0157743469142, + "y": 467.8373335868412 + }, + "start": { + "x": 269.32976163135186, + "y": 467.87682486569787 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.2560957119931, + "y": 466.655960673816 + }, + "start": { + "x": 272.0157743469142, + "y": 467.8373335868412 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 281.99837421411746, + "y": 464.13311202118354 + }, + "start": { + "x": 277.2560957119931, + "y": 466.655960673816 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 283.99513088657864, + "y": 462.4597786704114 + }, + "start": { + "x": 281.99837421411746, + "y": 464.13311202118354 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 287.36892011015556, + "y": 458.16808438259227 + }, + "start": { + "x": 283.99513088657864, + "y": 462.4597786704114 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 290.3320080978713, + "y": 452.5679635272862 + }, + "start": { + "x": 287.36892011015556, + "y": 458.16808438259227 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 297.61806961206344, + "y": 436.2670970637237 + }, + "start": { + "x": 290.3320080978713, + "y": 452.5679635272862 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 303.43044539835205, + "y": 424.44463008994717 + }, + "start": { + "x": 297.61806961206344, + "y": 436.2670970637237 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 310.73880310110917, + "y": 411.3983261915039 + }, + "start": { + "x": 303.43044539835205, + "y": 424.44463008994717 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 315.4613569129776, + "y": 401.9919672786899 + }, + "start": { + "x": 310.73880310110917, + "y": 411.3983261915039 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 321.39879532319867, + "y": 388.0243518668915 + }, + "start": { + "x": 315.4613569129776, + "y": 401.9919672786899 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 324.42956018454106, + "y": 383.6912924445918 + }, + "start": { + "x": 321.39879532319867, + "y": 388.0243518668915 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.63176406324715, + "y": 382.014974116901 + }, + "start": { + "x": 324.42956018454106, + "y": 383.6912924445918 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 331.2026974842644, + "y": 382.574069206359 + }, + "start": { + "x": 327.63176406324715, + "y": 382.014974116901 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.11582439236497, + "y": 384.71365898810353 + }, + "start": { + "x": 331.2026974842644, + "y": 382.574069206359 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.9921930282226, + "y": 394.0206551293793 + }, + "start": { + "x": 334.11582439236497, + "y": 384.71365898810353 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.6720927758552, + "y": 403.3643326980856 + }, + "start": { + "x": 336.9921930282226, + "y": 394.0206551293793 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 336.01353850807305, + "y": 410.82462437428285 + }, + "start": { + "x": 336.6720927758552, + "y": 403.3643326980856 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.6062149869267, + "y": 420.74319735435165 + }, + "start": { + "x": 336.01353850807305, + "y": 410.82462437428285 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 330.4706631308083, + "y": 439.4231397065674 + }, + "start": { + "x": 334.6062149869267, + "y": 420.74319735435165 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 327.9235970512947, + "y": 445.818707799896 + }, + "start": { + "x": 330.4706631308083, + "y": 439.4231397065674 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 334.41738862955907, + "y": 441.1309768606277 + }, + "start": { + "x": 327.9235970512947, + "y": 445.818707799896 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 343.4156526852884, + "y": 435.4025095922685 + }, + "start": { + "x": 334.41738862955907, + "y": 441.1309768606277 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.8959133367012, + "y": 431.6589569568104 + }, + "start": { + "x": 343.4156526852884, + "y": 435.4025095922685 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 354.2325092016833, + "y": 427.53259908479396 + }, + "start": { + "x": 348.8959133367012, + "y": 431.6589569568104 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 359.5141090378256, + "y": 423.08085836421265 + }, + "start": { + "x": 354.2325092016833, + "y": 427.53259908479396 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 364.70605546236135, + "y": 418.45064585149663 + }, + "start": { + "x": 359.5141090378256, + "y": 423.08085836421265 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 369.73111208086567, + "y": 413.7270362879879 + }, + "start": { + "x": 364.70605546236135, + "y": 418.45064585149663 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 374.53661178649065, + "y": 408.9473701458963 + }, + "start": { + "x": 369.73111208086567, + "y": 413.7270362879879 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 379.14333180495004, + "y": 404.0369031827309 + }, + "start": { + "x": 374.53661178649065, + "y": 408.9473701458963 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 383.6903266078355, + "y": 398.76062766234674 + }, + "start": { + "x": 379.14333180495004, + "y": 404.0369031827309 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 393.28837270505926, + "y": 386.41883390825103 + }, + "start": { + "x": 383.6903266078355, + "y": 398.76062766234674 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 395.43838854693587, + "y": 385.1589747106067 + }, + "start": { + "x": 393.28837270505926, + "y": 386.41883390825103 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 401.2800284385459, + "y": 384.34194427201413 + }, + "start": { + "x": 395.43838854693587, + "y": 385.1589747106067 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 404.51773871592377, + "y": 386.1823070648383 + }, + "start": { + "x": 401.2800284385459, + "y": 384.34194427201413 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.2030744982547, + "y": 388.8582534500223 + }, + "start": { + "x": 404.51773871592377, + "y": 386.1823070648383 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.3502366658743, + "y": 390.9518732274748 + }, + "start": { + "x": 406.2030744982547, + "y": 388.8582534500223 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 406.20417521368506, + "y": 392.50474653294566 + }, + "start": { + "x": 406.3502366658743, + "y": 390.9518732274748 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 402.16360851058727, + "y": 401.51155305186927 + }, + "start": { + "x": 406.20417521368506, + "y": 392.50474653294566 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 397.6574052912606, + "y": 410.77025419299946 + }, + "start": { + "x": 402.16360851058727, + "y": 401.51155305186927 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 391.7477772317769, + "y": 421.5076536789047 + }, + "start": { + "x": 397.6574052912606, + "y": 410.77025419299946 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 384.8769560653724, + "y": 432.38799555880684 + }, + "start": { + "x": 391.7477772317769, + "y": 421.5076536789047 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 377.5662109984595, + "y": 442.8586590877614 + }, + "start": { + "x": 384.8769560653724, + "y": 432.38799555880684 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 370.0217790447457, + "y": 452.3951319514499 + }, + "start": { + "x": 377.5662109984595, + "y": 442.8586590877614 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 348.65826137572367, + "y": 475.2399027444935 + }, + "start": { + "x": 370.0217790447457, + "y": 452.3951319514499 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 337.22060996991064, + "y": 485.2749572767469 + }, + "start": { + "x": 348.65826137572367, + "y": 475.2399027444935 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 328.65388268609183, + "y": 491.6180337730762 + }, + "start": { + "x": 337.22060996991064, + "y": 485.2749572767469 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 322.52892879238584, + "y": 495.6250457642227 + }, + "start": { + "x": 328.65388268609183, + "y": 491.6180337730762 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 314.2665602495664, + "y": 500.3091469134611 + }, + "start": { + "x": 322.52892879238584, + "y": 495.6250457642227 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 305.95841995325486, + "y": 504.0829250613225 + }, + "start": { + "x": 314.2665602495664, + "y": 500.3091469134611 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 296.1585273975919, + "y": 507.79157828359985 + }, + "start": { + "x": 305.95841995325486, + "y": 504.0829250613225 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 284.487739907583, + "y": 511.1039615233686 + }, + "start": { + "x": 296.1585273975919, + "y": 507.79157828359985 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 277.1456050684933, + "y": 512.6694284193989 + }, + "start": { + "x": 284.487739907583, + "y": 511.1039615233686 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 271.47805843954063, + "y": 513.1919053034169 + }, + "start": { + "x": 277.1456050684933, + "y": 512.6694284193989 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 267.50019933141215, + "y": 513.2595108992406 + }, + "start": { + "x": 271.47805843954063, + "y": 513.1919053034169 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 263.5567934013613, + "y": 513.050619364774 + }, + "start": { + "x": 267.50019933141215, + "y": 513.2595108992406 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 257.88418759807087, + "y": 512.3972533059159 + }, + "start": { + "x": 263.5567934013613, + "y": 513.050619364774 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 250.1396185370248, + "y": 510.69762108410924 + }, + "start": { + "x": 257.88418759807087, + "y": 512.3972533059159 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 248.75473350703632, + "y": 509.01480185379876 + }, + "start": { + "x": 250.1396185370248, + "y": 510.69762108410924 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 246.50506109457197, + "y": 509.27604648880106 + }, + "start": { + "x": 248.75473350703632, + "y": 509.01480185379876 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 236.91322306950013, + "y": 503.5908209587611 + }, + "start": { + "x": 246.50506109457197, + "y": 509.27604648880106 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 230.47272124014052, + "y": 499.28814296401504 + }, + "start": { + "x": 236.91322306950013, + "y": 503.5908209587611 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 222.93351495183128, + "y": 493.44956189306083 + }, + "start": { + "x": 230.47272124014052, + "y": 499.28814296401504 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 216.1198795734582, + "y": 487.44589797869395 + }, + "start": { + "x": 222.93351495183128, + "y": 493.44956189306083 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 209.656896332532, + "y": 480.8755880765099 + }, + "start": { + "x": 216.1198795734582, + "y": 487.44589797869395 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 202.7860248979664, + "y": 472.92846204928236 + }, + "start": { + "x": 209.656896332532, + "y": 480.8755880765099 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 196.7928759080267, + "y": 464.6463533433233 + }, + "start": { + "x": 202.7860248979664, + "y": 472.92846204928236 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 190.78942593636165, + "y": 455.1094243035697 + }, + "start": { + "x": 196.7928759080267, + "y": 464.6463533433233 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 184.17386267836412, + "y": 441.97310074636476 + }, + "start": { + "x": 190.78942593636165, + "y": 455.1094243035697 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 176.93706501955413, + "y": 429.96055582099024 + }, + "start": { + "x": 184.17386267836412, + "y": 441.97310074636476 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 171.43818866644224, + "y": 419.64454249799223 + }, + "start": { + "x": 176.93706501955413, + "y": 429.96055582099024 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 167.07705952993064, + "y": 411.00275765603 + }, + "start": { + "x": 171.43818866644224, + "y": 419.64454249799223 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 162.71765560665187, + "y": 401.5613230185424 + }, + "start": { + "x": 167.07705952993064, + "y": 411.00275765603 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 158.6698694151695, + "y": 392.2187784912767 + }, + "start": { + "x": 162.71765560665187, + "y": 401.5613230185424 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 153.9894719798958, + "y": 380.1818360560858 + }, + "start": { + "x": 158.6698694151695, + "y": 392.2187784912767 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 148.04995291463368, + "y": 363.0189856728436 + }, + "start": { + "x": 153.9894719798958, + "y": 380.1818360560858 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 146.4814925367955, + "y": 356.03234172391166 + }, + "start": { + "x": 148.04995291463368, + "y": 363.0189856728436 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 144.9379040083139, + "y": 351.5274985334466 + }, + "start": { + "x": 146.4814925367955, + "y": 356.03234172391166 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 143.20488621400278, + "y": 349.26746874281633 + }, + "start": { + "x": 144.9379040083139, + "y": 351.5274985334466 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 132.21669862269985, + "y": 339.11094306466174 + }, + "start": { + "x": 143.20488621400278, + "y": 349.26746874281633 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 123.82948486310666, + "y": 332.49232550041893 + }, + "start": { + "x": 132.21669862269985, + "y": 339.11094306466174 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 120.62863614928477, + "y": 329.87220542957766 + }, + "start": { + "x": 123.82948486310666, + "y": 332.49232550041893 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 119.79708028974831, + "y": 329.6528888949321 + }, + "start": { + "x": 120.62863614928477, + "y": 329.87220542957766 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 113.06119367815525, + "y": 331.73574546211483 + }, + "start": { + "x": 119.79708028974831, + "y": 329.6528888949321 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 101.53891778424352, + "y": 330.6529433744287 + }, + "start": { + "x": 113.06119367815525, + "y": 331.73574546211483 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 96.72194082952593, + "y": 328.3788802825004 + }, + "start": { + "x": 101.53891778424352, + "y": 330.6529433744287 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 94.44804562234744, + "y": 327.6318893038393 + }, + "start": { + "x": 96.72194082952593, + "y": 328.3788802825004 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 89.18094583272412, + "y": 327.9486991427987 + }, + "start": { + "x": 94.44804562234744, + "y": 327.6318893038393 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 84.25665019349773, + "y": 327.6494412047385 + }, + "start": { + "x": 89.18094583272412, + "y": 327.9486991427987 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 80.44374917348537, + "y": 327.74143503142625 + }, + "start": { + "x": 84.25665019349773, + "y": 327.6494412047385 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 73.4839824561718, + "y": 328.2916667755204 + }, + "start": { + "x": 80.44374917348537, + "y": 327.74143503142625 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 58.311437612056935, + "y": 326.1954765892323 + }, + "start": { + "x": 73.4839824561718, + "y": 328.2916667755204 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 52.645083499708825, + "y": 323.5117655186339 + }, + "start": { + "x": 58.311437612056935, + "y": 326.1954765892323 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 46.067642669974305, + "y": 319.5626062679048 + }, + "start": { + "x": 52.645083499708825, + "y": 323.5117655186339 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 38.62675391956853, + "y": 313.18722025578955 + }, + "start": { + "x": 46.067642669974305, + "y": 319.5626062679048 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 32.36274312313761, + "y": 305.34063919630734 + }, + "start": { + "x": 38.62675391956853, + "y": 313.18722025578955 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 28.846229568016224, + "y": 298.72351203099055 + }, + "start": { + "x": 32.36274312313761, + "y": 305.34063919630734 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 25.97945925725625, + "y": 291.784358013861 + }, + "start": { + "x": 28.846229568016224, + "y": 298.72351203099055 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 23.97322765577215, + "y": 281.509914323633 + }, + "start": { + "x": 25.97945925725625, + "y": 291.784358013861 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 23.97322765577215, + "y": 273.14431005309973 + }, + "start": { + "x": 23.97322765577215, + "y": 281.509914323633 + }, + "type": "LineSegment" + }, + { + "end": { + "x": 24.490910571051828, + "y": 269.1886687326656 + }, + "start": { + "x": 23.97322765577215, + "y": 273.14431005309973 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -1.6878689286992536, + "y": 269.1886687326656 + }, + "start": { + "x": 24.490910571051828, + "y": 269.1886687326656 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -5.13516515965886, + "y": 267.19837132574503 + }, + "start": { + "x": -1.6878689286992536, + "y": 269.1886687326656 + }, + "type": "LineSegment" + }, + { + "end": { + "x": -6.299212598425184, + "y": 264.00017727256164 + }, + "start": { + "x": -5.13516515965886, + "y": 267.19837132574503 + }, + "type": "LineSegment" + } + ], + "is_path": false, + "type": "general" + } +} diff --git a/data/tests/offset/inflate/012.json b/data/tests/offset/inflate/012.json index cec5b74..b50667c 100644 --- a/data/tests/offset/inflate/012.json +++ b/data/tests/offset/inflate/012.json @@ -13187,186 +13187,6 @@ "is_path": false, "type": "general" }, - { - "elements": [ - { - "end": { - "x": 8.143047483065775, - "y": 8.166330500857494 - }, - "start": { - "x": 8.142866312292316, - "y": 8.165733260557133 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.146329434233428, - "y": 8.172984659290218 - }, - "start": { - "x": 8.146328343246331, - "y": 8.172983136819942 - }, - "type": "LineSegment" - }, - { - "end": { - "x": 8.146691168477217, - "y": 8.173489749196456 - }, - "start": { - "x": 8.146329434233428, - "y": 8.172984659290218 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.14983684743224, - "y": 8.17649164100589 - }, - "start": { - "x": 8.14933072729011, - "y": 8.17612896033297 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.14983884738681, - "y": 8.176493282325826 - }, - "start": { - "x": 8.14983684743224, - "y": 8.17649164100589 - }, - "type": "LineSegment" - }, - { - "end": { - "x": 8.150319381476857, - "y": 8.176887804846032 - }, - "start": { - "x": 8.14983884738681, - "y": 8.176493282325826 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.16633050085814, - "y": 8.179772501186452 - }, - "start": { - "x": 8.165733260557728, - "y": 8.179953671959924 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.172984659290714, - "y": 8.17649055001884 - }, - "start": { - "x": 8.172983136820545, - "y": 8.17649164100585 - }, - "type": "LineSegment" - }, - { - "end": { - "x": 8.173489749196841, - "y": 8.176128815775145 - }, - "start": { - "x": 8.172984659290714, - "y": 8.17649055001884 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.176491641006338, - "y": 8.172983136820056 - }, - "start": { - "x": 8.17612896033341, - "y": 8.173489256962172 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, - { - "elements": [ - { - "end": { - "x": 8.176493282326293, - "y": 8.172981136865454 - }, - "start": { - "x": 8.176491641006338, - "y": 8.172983136820056 - }, - "type": "LineSegment" - }, - { - "end": { - "x": 8.176887804846427, - "y": 8.172500602775521 - }, - "start": { - "x": 8.176493282326293, - "y": 8.172981136865454 - }, - "type": "LineSegment" - } - ], - "is_path": false, - "type": "general" - }, { "elements": [ { diff --git a/include/shape/clean.hpp b/include/shape/clean.hpp index ba3a5b5..58d825e 100644 --- a/include/shape/clean.hpp +++ b/include/shape/clean.hpp @@ -11,6 +11,9 @@ std::pair remove_redundant_vertices( std::pair remove_redundant_vertices( const ShapeWithHoles& shape); +Shape remove_backtracks( + const Shape& shape); + std::pair remove_aligned_vertices( const Shape& shape); diff --git a/include/shape/shape.hpp b/include/shape/shape.hpp index 746fc05..ff8ce75 100644 --- a/include/shape/shape.hpp +++ b/include/shape/shape.hpp @@ -645,15 +645,11 @@ bool operator==( const Jet& jet_1, const Jet& jet_2); -bool equal( - const Jet& jet_1, - const Jet& jet_2); - -bool strictly_greater( +bool operator<( const Jet& jet_1, const Jet& jet_2); -bool strictly_lesser( +bool operator>( const Jet& jet_1, const Jet& jet_2); diff --git a/src/boolean_operations.cpp b/src/boolean_operations.cpp index 60182b2..2b07184 100644 --- a/src/boolean_operations.cpp +++ b/src/boolean_operations.cpp @@ -481,41 +481,6 @@ std::vector compute_boolean_operation_component( IntersectionTree intersection_tree(shapes, {}, {}); - std::vector element_is_processed(splitted_elements.size(), 0); - for (NodeId node_id = 0; - node_id < (NodeId)graph.nodes.size(); - ++node_id) { - NodeId node_cur_id = node_id; - for (;;) { - const BooleanOperationNode& node = graph.nodes[node_cur_id]; - ElementPos node_degree = 0; - ElementPos element_next_pos = -1; - for (ElementPos element_pos: node.successors) { - if (element_is_processed[element_pos] == 0) { - node_degree++; - element_next_pos = element_pos; - } - } - //std::cout << "node " << node_id - // << " degree " << node_degree << std::endl; - if (node_degree != 1) - break; - //std::cout << "fix element " << element_next_pos << std::endl; - element_is_processed[element_next_pos] = 1; - // Find the reverse arc to fix. - const BooleanOperationArc& arc_next = graph.arcs[element_next_pos]; - for (ElementPos element_pos: graph.nodes[arc_next.end_node_id].successors) { - const BooleanOperationArc& arc = graph.arcs[element_pos]; - if (arc.end_node_id == node_cur_id) { - //std::cout << "fix element " << element_pos << std::endl; - element_is_processed[element_pos] = 1; - break; - } - } - node_cur_id = graph.arcs[element_next_pos].end_node_id; - } - } - // Find an element from the outline. // To do so find, all elements from the original elements with the leftest // point. @@ -528,8 +493,6 @@ std::vector compute_boolean_operation_component( for (ElementPos element_pos = 0; element_pos < (ElementPos)splitted_elements.size(); ++element_pos) { - if (element_is_processed[element_pos]) - continue; const SplittedElement& element = splitted_elements[element_pos]; if (element.original_direction) continue; @@ -615,6 +578,7 @@ std::vector compute_boolean_operation_component( // Find outer loop. //std::cout << "find outer loop..." << std::endl; + std::vector element_is_processed(splitted_elements.size(), 0); ElementPos element_cur_pos = element_start_pos; Shape outline; for (int i = 0;; ++i) { @@ -646,25 +610,14 @@ std::vector compute_boolean_operation_component( const ShapeElement& element_next = splitted_elements[element_pos_next].element; Jet jet = element_next.jet(element_next.start, false) - current_jet; if (largest_jet_element_pos == -1 - || strictly_lesser(largest_jet, jet)) { + || largest_jet < jet) { largest_jet_element_pos = element_pos_next; largest_jet = jet; } } if (largest_jet_element_pos == -1) { - //nlohmann::json json; - //for (ElementPos pos = 0; - // pos < (ElementPos)splitted_elements.size(); - // ++pos) { - // json["elements"][pos] = splitted_elements[pos].element.to_json(); - //} - //std::string file_path = "overlay.json"; - //std::ofstream file{file_path}; - //if (!file.good()) { - // throw std::runtime_error( - // "Unable to open file \"" + file_path + "\"."); - //} - //file << std::setw(4) << json << std::endl; + //compute_union_export_inputs("compute_union_input.json", shapes); + //Writer().add_shapes_with_holes(shapes).write_json("shape.json"); throw std::logic_error( FUNC_SIGNATURE + ": " "largest_jet_element_pos is '-1' in outline."); @@ -755,20 +708,33 @@ std::vector compute_boolean_operation_component( ElementPos largest_jet_element_pos = -1; Jet largest_jet; Jet current_jet = element_cur.jet(element_cur.end, true); + //std::cout << "element_cur_pos " << element_cur_pos + // << " element_cur " << element_cur.to_string() << std::endl; for (ElementPos element_pos_next: node.successors) { const SplittedElement& splitted_element_next = splitted_elements[element_pos_next]; const ShapeElement& element_next = splitted_element_next.element; Jet jet = element_next.jet(element_next.start, false) - current_jet; - if (equal(jet, {0, 0})) - continue; + //std::cout << "element_next_pos " << element_pos_next + // << " element_next " << element_next.to_string() + // << " jet " << jet.to_string() + // << std::endl; if (largest_jet_element_pos == -1 - || strictly_lesser(largest_jet, jet)) { + || largest_jet < jet) { largest_jet_element_pos = element_pos_next; largest_jet = jet; } } - //std::cout << "largest_angle_element_pos " << largest_angle_element_pos << std::endl; + //std::cout << "largest_jet_element_pos " << largest_jet_element_pos << std::endl; if (largest_jet_element_pos == -1) { + //compute_union_export_inputs("compute_union_input.json", shapes); + //Writer().add_shapes_with_holes(shapes).write_json("shape.json"); + + //std::vector elements; + //Writer writer; + //for (const auto& splitted_element: splitted_elements) + // writer.add_element(splitted_element.element); + //writer.write_json("overlay.json"); + throw std::logic_error( FUNC_SIGNATURE + ": " "largest_jet_element_pos is '-1'"); @@ -784,6 +750,25 @@ std::vector compute_boolean_operation_component( //std::cout << "face finished size " << face.elements.size() << std::endl; //std::cout << face.to_string(0) << std::endl; + + // Check if the face is valid. + if (!equal(face.elements.back().end, face.elements.front().start)) { + //std::cout << face.to_string(0) << std::endl; + //std::vector elements; + //Writer writer; + //for (const auto& splitted_element: splitted_elements) { + // //auto mm = splitted_element.element.min_max(); + // //if (mm.first.x < 8.10 || mm.second. x > 8.20 + // // || mm.first.y < 8.10 || mm.second.y > 8.20) + // // continue; + // writer.add_element(splitted_element.element); + //writer.write_json("overlay.json"); + //Writer().add_shapes_with_holes(shapes).write_json("shape.json"); + throw std::logic_error( + FUNC_SIGNATURE + ": " + "face is not closed."); + } + switch (boolean_operation) { case BooleanOperation::Union: { // Fast check. @@ -800,6 +785,9 @@ std::vector compute_boolean_operation_component( if (ok) break; + // Fix backtracks caused by numerical issues. + face = remove_backtracks(face); + // Real check. IntersectionTree::IntersectOutput intersection_output = intersection_tree.intersect( face.find_point_strictly_inside(), diff --git a/src/clean.cpp b/src/clean.cpp index 9561d3e..18e1b41 100644 --- a/src/clean.cpp +++ b/src/clean.cpp @@ -3,6 +3,7 @@ #include "shape/elements_intersections.hpp" #include "shape/equalize.hpp" #include "shape/boolean_operations.hpp" +//#include "shape/writer.hpp" #include @@ -12,11 +13,6 @@ std::pair shape::remove_redundant_vertices( const Shape& shape) { //std::cout << "remove_redundant_vertices " << shape.to_string(2) << std::endl; - //if (!shape.check()) { - // //write_json({{shape}}, {}, "self_intersect.json"); - // throw std::invalid_argument( - // FUNC_SIGNATURE + ": invalid input shape."); - //} if (shape.elements.size() <= 3) return {false, shape}; @@ -170,6 +166,32 @@ std::pair shape::remove_aligned_vertices( return {b, res}; } +Shape shape::remove_backtracks( + const Shape& shape) +{ + // Handle circles. + if (shape.elements.size() == 1) + return shape; + + Shape output; + output.is_path = shape.is_path; + for (ElementPos element_pos = 0; + element_pos < (ElementPos)shape.elements.size(); + ++element_pos) { + const ShapeElement& element = shape.elements[element_pos]; + const ShapeElement& element_next = (element_pos != shape.elements.size())? + shape.elements[element_pos + 1]: + shape.elements[0]; + if (equal(element, element_next.reverse())) { + element_pos++; + continue; + } + output.elements.push_back(element); + } + + return output; +} + namespace { @@ -316,12 +338,6 @@ Shape clean_extreme_slopes_outer_1( shape = shape_new; } - if (!shape.check()) { - std::cout << shape_orig.to_string(0) << std::endl; - //write_json({{shape_orig}, {shape}}, {}, "clean_extreme_slopes_outer_1_output.json"); - throw std::invalid_argument( - FUNC_SIGNATURE + ": invalid output shape."); - } return shape; } @@ -457,17 +473,18 @@ Shape clean_extreme_slopes_inner_1( shape = shape_new; } - if (!shape.check()) { - //write_json({{shape_orig}, {shape}}, {}, "clean_extreme_slopes_outer_2_output.json"); - throw std::invalid_argument( - FUNC_SIGNATURE + ": invalid output shape."); - } return shape; } Shape clean_extreme_slopes_outer_2( const Shape& shape_orig) { + if (!shape_orig.check()) { + throw std::invalid_argument( + FUNC_SIGNATURE + ": " + "invalid input shape."); + } + Shape shape = shape_orig; ElementPos element_prev_pos = shape.elements.size() - 1; for (ElementPos element_cur_pos = 0; @@ -556,12 +573,7 @@ Shape clean_extreme_slopes_outer_2( element_next_pos = element_cur_pos; } - if (!shape.check()) { - //write_json({{shape_orig}, {shape}}, {}, "clean_extreme_slopes_outer_2_output.json"); - throw std::invalid_argument( - FUNC_SIGNATURE + ": " - "invalid shape after extreme slopes cleaning."); - } + return shape; } @@ -661,11 +673,7 @@ Shape clean_extreme_slopes_inner_2( element_next_pos = element_cur_pos; } - if (!shape.check()) { - throw std::invalid_argument( - FUNC_SIGNATURE + ": " - "invalid shape after extreme slopes cleaning."); - } + return shape; } @@ -695,7 +703,13 @@ ShapeWithHoles shape::clean_extreme_slopes_outer( shape = equalize_shape(shape); shape = remove_redundant_vertices(shape).second; shape = remove_aligned_vertices(shape).second; - //write_json({{shape_orig}, {shape}}, {}, "clean_extreme_slopes_outer_output.json"); + + if (!shape.check()) { + throw std::invalid_argument( + FUNC_SIGNATURE + ": " + "invalid shape after extreme slopes cleaning."); + } + return {shape}; } @@ -713,12 +727,21 @@ std::vector shape::clean_extreme_slopes_inner( shape = equalize_shape(shape); shape = remove_redundant_vertices(shape).second; shape = remove_aligned_vertices(shape).second; + + if (!shape.check()) { + throw std::invalid_argument( + FUNC_SIGNATURE + ": " + "invalid shape after extreme slopes cleaning."); + } + return {shape}; } std::vector shape::fix_self_intersections( const ShapeWithHoles& shape) { + //std::cout << "fix_self_intersections" << std::endl; + //Writer().add_shape_with_holes(shape).write_json("fix_self_intersections_input.json"); std::vector shapes = bridge_touching_holes(shape); if (shapes.size() == 1) return {shape}; diff --git a/src/shape.cpp b/src/shape.cpp index 6747214..cae8027 100644 --- a/src/shape.cpp +++ b/src/shape.cpp @@ -498,7 +498,7 @@ Jet shape::operator-( Jet jet; jet.tangent_angle = jet_1.tangent_angle - jet_2.tangent_angle; jet.curvature = jet_1.curvature - jet_2.curvature; - if (strictly_lesser(jet.tangent_angle, 0.0)) + if (jet.tangent_angle < 0.0) jet.tangent_angle += 2 * M_PI; return jet; } @@ -2205,33 +2205,22 @@ bool shape::operator==( return true; } -bool shape::equal( - const Jet& jet_1, - const Jet& jet_2) -{ - if (!equal(jet_1.tangent_angle, jet_2.tangent_angle)) - return false; - if (!equal(jet_1.curvature, jet_2.curvature)) - return false; - return true; -} - -bool shape::strictly_greater( +bool shape::operator<( const Jet& jet_1, const Jet& jet_2) { - if (!equal(jet_1.tangent_angle, jet_2.tangent_angle)) - return strictly_greater(jet_1.tangent_angle, jet_2.tangent_angle); - return strictly_greater(jet_1.curvature, jet_2.curvature); + if (jet_1.tangent_angle != jet_2.tangent_angle) + return jet_1.tangent_angle < jet_2.tangent_angle; + return jet_1.curvature < jet_2.curvature; } -bool shape::strictly_lesser( +bool shape::operator>( const Jet& jet_1, const Jet& jet_2) { - if (!equal(jet_1.tangent_angle, jet_2.tangent_angle)) - return strictly_lesser(jet_1.tangent_angle, jet_2.tangent_angle); - return strictly_lesser(jet_1.curvature, jet_2.curvature); + if (jet_1.tangent_angle != jet_2.tangent_angle) + return jet_1.tangent_angle > jet_2.tangent_angle; + return jet_1.curvature > jet_2.curvature; } bool shape::operator==( diff --git a/src/shapes_intersections.cpp b/src/shapes_intersections.cpp index 86e1d90..f0979bd 100644 --- a/src/shapes_intersections.cpp +++ b/src/shapes_intersections.cpp @@ -169,10 +169,10 @@ bool strictly_intersect( //std::cout << "jet_shape_1 " << jet_shape_1.to_string() << std::endl; //std::cout << "jet_shape_2_1 " << jet_shape_2_1.to_string() << std::endl; //std::cout << "jet_shape_2_2 " << jet_shape_2_2.to_string() << std::endl; - if (strictly_greater(jet_shape_2_1, jet_shape_1)) - return true; - if (strictly_greater(jet_shape_2_2, jet_shape_1)) - return true; + if (jet_shape_2_1 > jet_shape_1) + return true; + if (jet_shape_2_2 > jet_shape_1) + return true; } if (!shape_2.is_path) { if (is_shape_2_hole) @@ -183,10 +183,10 @@ bool strictly_intersect( //std::cout << "jet_shape_2 " << jet_shape_2.to_string() << std::endl; //std::cout << "jet_shape_1_1 " << jet_shape_1_1.to_string() << std::endl; //std::cout << "jet_shape_1_2 " << jet_shape_1_2.to_string() << std::endl; - if (strictly_greater(jet_shape_1_1, jet_shape_2)) - return true; - if (strictly_greater(jet_shape_1_2, jet_shape_2)) - return true; + if (jet_shape_1_1 > jet_shape_2) + return true; + if (jet_shape_1_2 > jet_shape_2) + return true; } } else { auto p = shape_2_element.split(shape_1_element.end); @@ -207,10 +207,10 @@ bool strictly_intersect( //std::cout << "jet_shape_1 " << jet_shape_1.to_string() << std::endl; //std::cout << "jet_shape_2_1 " << jet_shape_2_1.to_string() << std::endl; //std::cout << "jet_shape_2_2 " << jet_shape_2_2.to_string() << std::endl; - if (strictly_greater(jet_shape_2_1, jet_shape_1)) - return true; - if (strictly_greater(jet_shape_2_2, jet_shape_1)) - return true; + if (jet_shape_2_1 > jet_shape_1) + return true; + if (jet_shape_2_2 > jet_shape_1) + return true; } if (!shape_2.is_path) { if (is_shape_2_hole) @@ -221,10 +221,10 @@ bool strictly_intersect( //std::cout << "jet_shape_2 " << jet_shape_2.to_string() << std::endl; //std::cout << "jet_shape_1_1 " << jet_shape_1_1.to_string() << std::endl; //std::cout << "jet_shape_1_2 " << jet_shape_1_2.to_string() << std::endl; - if (strictly_greater(jet_shape_1_1, jet_shape_2)) - return true; - if (strictly_greater(jet_shape_1_2, jet_shape_2)) - return true; + if (jet_shape_1_1 > jet_shape_2) + return true; + if (jet_shape_1_2 > jet_shape_2) + return true; } } } else if (shape_2_element_end_intersect) { @@ -248,9 +248,9 @@ bool strictly_intersect( //std::cout << "jet_shape_1 " << jet_shape_1.to_string() << std::endl; //std::cout << "jet_shape_2_1 " << jet_shape_2_1.to_string() << std::endl; //std::cout << "jet_shape_2_2 " << jet_shape_2_2.to_string() << std::endl; - if (strictly_greater(jet_shape_2_1, jet_shape_1)) + if (jet_shape_2_1 > jet_shape_1) return true; - if (strictly_greater(jet_shape_2_2, jet_shape_1)) + if (jet_shape_2_2 > jet_shape_1) return true; } if (!shape_2.is_path) { @@ -262,9 +262,9 @@ bool strictly_intersect( //std::cout << "jet_shape_2 " << jet_shape_2.to_string() << std::endl; //std::cout << "jet_shape_1_1 " << jet_shape_1_1.to_string() << std::endl; //std::cout << "jet_shape_1_2 " << jet_shape_1_2.to_string() << std::endl; - if (strictly_greater(jet_shape_1_1, jet_shape_2)) + if (jet_shape_1_1 > jet_shape_2) return true; - if (strictly_greater(jet_shape_1_2, jet_shape_2)) + if (jet_shape_1_2 > jet_shape_2) return true; } } diff --git a/test/clean_test.cpp b/test/clean_test.cpp index bb03c58..53977f1 100644 --- a/test/clean_test.cpp +++ b/test/clean_test.cpp @@ -1,8 +1,15 @@ #include "shape/clean.hpp" +//#include "shape/writer.hpp" + #include +#include + +#include + using namespace shape; +namespace fs = boost::filesystem; struct RemoveRedundantVerticesTestParams @@ -31,6 +38,67 @@ INSTANTIATE_TEST_SUITE_P( }})); +struct CleanExtremeSlopesOuterTestParams +{ + Shape shape; + ShapeWithHoles expected_output; + + + template + static CleanExtremeSlopesOuterTestParams from_json( + basic_json& json_item) + { + CleanExtremeSlopesOuterTestParams test_params; + test_params.shape = Shape::from_json(json_item["shape"]); + test_params.expected_output = ShapeWithHoles::from_json(json_item["expected_output"]); + return test_params; + } + + static CleanExtremeSlopesOuterTestParams read_json( + const std::string& file_path) + { + std::ifstream file(file_path); + if (!file.good()) { + throw std::runtime_error( + FUNC_SIGNATURE + ": " + "unable to open file \"" + file_path + "\"."); + } + + nlohmann::json json; + file >> json; + return from_json(json); + } +}; + +class CleanExtremeSlopesOuterTest: public testing::TestWithParam { }; + +TEST_P(CleanExtremeSlopesOuterTest, CleanExtremeSlopesOuter) +{ + CleanExtremeSlopesOuterTestParams test_params = GetParam(); + std::cout << "shape " << test_params.shape.to_string(2) << std::endl; + std::cout << "expected output " << test_params.expected_output.to_string(0) << std::endl; + ShapeWithHoles output = clean_extreme_slopes_outer(test_params.shape); + std::cout << "output " << output.to_string(0) << std::endl; + //Writer().add_shape_with_holes(output).write_json("clean_extreme_slopes_outer_output.json"); + + ASSERT_TRUE(equal(output, test_params.expected_output)); +} + +INSTANTIATE_TEST_SUITE_P( + Shape, + CleanExtremeSlopesOuterTest, + testing::ValuesIn(std::vector{ + { + build_shape({{0, 0}, {1, 0}, {1, 1}, {0, 1}}), + { + {build_shape({{0, 0}, {1, 0}, {1, 1}, {0, 1}})}, + }, + }, + CleanExtremeSlopesOuterTestParams::read_json( + (fs::path("data") / "tests" / "clean" / "clean_extreme_slopes_outer" / "0.json").string()), + })); + + struct FixSelfIntersectionsTestParams { ShapeWithHoles shape; diff --git a/test/shape_test.cpp b/test/shape_test.cpp index 87ee701..b4bdf92 100644 --- a/test/shape_test.cpp +++ b/test/shape_test.cpp @@ -103,7 +103,7 @@ TEST_P(ShapeElementJetTest, ShapeElementJet) Jet jet = test_params.element.jet( test_params.point, test_params.reverse); - EXPECT_TRUE(equal(jet, test_params.expected_jet)); + EXPECT_TRUE(jet == test_params.expected_jet); } INSTANTIATE_TEST_SUITE_P(