Обнаружить дыры в пути SVG
Я пытаюсь автоматически обнаружить дыры в Path
генерируется в paper.js
, Это пример экспортированного пути SVG из paper.js path
:
M515,366c-2.09642,0 -9.78222,7.0868 -12,8c-17.99572,7.41 -40.11172,9.64117 -59,14c-56.24553,12.97974 -114.37749,17 -172,17c-26.16443,0 -55.89581,3.5635 -81,-6c-29.41378,-11.20525 -42.97557,-23.19689 -64,-45c-4.74749,-4.92332 -9.98811,-9.3461 -15,-14c-4.32148,-4.0128 -15.00528,-6.45414 -13,-12c20.6382,-57.07751 47.34464,-112.044 77,-165c2.74649,-4.90444 41.77922,-17.03377 45,-18c43.05975,-12.91792 85.36776,-14 130,-14c35.90112,0 68.15669,7.609 103,15c5.30817,1.12597 10.85218,1.28406 16,3c20.36756,6.78919 39.25741,19.77677 58,30c12.72407,6.9404 26.85966,13.19549 39,21c13.66622,8.78543 26.61256,25.02093 35,39c1.62698,2.71163 1.43107,6.25437 3,9c6.96779,12.19363 18.2447,19.77039 33,21c7.48131,0.62344 18.71281,1.68166 26,0c17.13095,-3.9533 48.5867,-30.24003 61,-42c3.09891,-2.93581 4.89656,-7.06898 8,-10c7.65351,-7.22831 17.74709,-12.08774 25,-20c20.03331,-21.85452 13.41755,-48.46996 -10,-65c-19.67166,-13.88588 -50.02314,-18.24868 -73,-22c-18.71417,-3.05538 -37.21,-7.4522 -56,-10c-30.23976,-4.10031 -61.58884,-2 -92,-2c-9.66667,0 -19.41656,-1.26574 -29,0c-42.62772,5.63008 -89.90819,41.77048 -106,82c-1.73138,4.32845 -4.28751,19.25137 -1,24c8.52445,12.31309 41.01357,23.46985 54,28c7.9622,2.77751 15.87957,5.72628 24,8c8.56503,2.39821 17.27234,4.28564 26,6c9.94784,1.95404 19.97064,3.52026 30,5c42.15738,6.21994 84.45487,8.62758 127,10c30.14274,0.97235 61.93654,3.5074 92,0c27.97076,-3.26326 53.56633,-10.38188 82,-11c32.52494,-0.70706 81.39532,-6.20936 99,29c3.91534,7.83068 6.51402,45.59814 8,56c4.38078,30.66544 6.68039,67.2181 -18,90c-21.12684,19.5017 -55.54179,16.23612 -82,18c-58.33491,3.88899 -118.00502,5.77648 -175,-9c-9.48988,-2.46034 -18.41399,-6.94585 -28,-9c-10.18092,-2.18163 -21.63708,-2.20285 -32,-3c-3.12635,-0.24049 -8.23541,-3 -10,-3z
Этот SVG-путь содержит несколько заполненных областей и некоторые дыры, но это все один путь, и я хочу добиться того, чтобы отделить пути, которые заполняются, и пути, которые представляют пустые пространства внутри. Я не мог найти ничего, что я не знаю, есть ли какой-то алгоритм или что-то, что я могу использовать внутри paper.js
или прямо на SVG
строка.
1 ответ
Это нетривиально.
Возможно, для вас будет достаточно определить, пересекается ли сам путь? Не каждое самопересечение приведет к "дыре". Это будет зависеть от правила заполнения и направления пути.
Но вот вопрос, который дает решение для расчета точек самопересечения пути. Это может быть хорошей отправной точкой, по крайней мере.