Как закрыть путь двух параллельных квадратичных кривых Безье c, каждая из которых начинается с тега MoveTo - PullRequest
3 голосов
/ 06 января 2020

Я реализую диаграмму Санки с нуля с использованием VueJS и SVG, теперь я столкнулся с трудностями при закрытии путей двух параллельных квадратичных c путей кривой Безье от узлов к узлам.

Где для Например, путем дополнительных вычислений я получил следующие пути

path_1 = "M 35 20.39692701664535 q 162.53571428571428 0 325.07142857142856 64.01601512483994"

path_2 = "M 35 107.65044814340591 q 162.53571428571428 0 325.07142857142856 64.01601512483994"

Пути объединены таким образом, думая, что это будет работать, но не получится

<g>
 <template v-for="(point,index) in sankeyNode">
  <template v-for="(pnode, idex) in Object.entries(point)">
   <template v-for="(paths,idx) in pnode[1].paths" v-if="pnode[1].hasOwnProperty('paths')">
    <g style="stroke-width:1;"  stroke="black" fill="pink" :stroke-opacity="0.3">
     <path :d="paths[0]+' '+paths[1]+' Z'" />
    </g>
   </template>
  </template>
 </template>
</g>

Эти два пути параллельны друг другу, но Я хотел бы сделать их близким путем, чтобы я мог заполнить объединенные пути и выглядел бы как изображение ниже

enter image description here

В настоящее время, когда пути в совокупности это выглядит так

enter image description here

Я попробовал следующее с использованием изображения ниже для иллюстрации

enter image description here

Теперь, когда я добрался до «Точки A», которая является концом Path2, я попытался добавить Вертикальную линию к «Точке B», чтобы из «Точки B» я мог сформировать Квадрати c Кривая Безье для «Точки Е» и закрытия т Путь CABE, а также сделать то же самое для Path1, добавив вертикальную линию к «Точке C к E», затем из точки E сформировала кривую Безье Quadrati c к Точке F и закройте путь GCEF.

Моя попытка не сработала, и я перечитываю SVG-документы, чтобы найти подсказку, как решить эту проблему ..

Пожалуйста, мне нужен кто-то, кто подскажет, как решить эту проблему. Спасибо

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Решение с использованием векторного редактора

Откройте файл * .svg в векторном редакторе

<svg xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="200" viewBox="0 0 400 200">
<g fill="none" stroke="black">
<path d = "M 35 20.39692701664535 q 162.53571428571428 0 325.07142857142856 64.01601512483994"/>
<path d = "M 35 107.65044814340591 q 162.53571428571428 0 325.07142857142856 64.01601512483994"/>
</g>
</svg> 

Вот как это выглядит в редакторе:

enter image description here

Соедините две крайние точки двух кривых Безье.

Разрешается не соединять вторую пару точек с другого конца кривых в векторном редакторе. Это будет сделано с параметром z, который добавит редактор.

enter image description here

Из файла, сохраненного в векторном редакторе, потребуется только path. Скопируйте этот path в другой * .svg файл

Ниже приведен код полученного файла:

<svg xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="200" viewBox="0 0 400 200">
<g fill="#d3d3d3" stroke="black" >

<path d = "M 360.07143,171.66646 C 251.71429,128.98912 143.35714,107.65045 35,107.65045 V 20.396927 c 108.35714,0 216.71429,21.338672 325.07143,64.016015z"/>
</g>
</svg> 
2 голосов
/ 06 января 2020

Поскольку оба пути начинаются слева, мне пришлось повернуть второй путь, чтобы он начинался справа. Затем я соединил атрибуты 2 d для путей и заменил команду M второго пути на L (строка). Также я закрыл путь, добавив команду z в конце. Я надеюсь, что это то, что вам нужно.

<svg viewBox="0 0 400 200">

<path d = "M 35 20.39692701664535 q 162.53571428571428 0 325.07142857142856 64.01601512483994
           L360.07142857142856,171.66646326824585Q197.53571428571428,107.65044814340591 35,107.65044814340591
           z"/>

</svg>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...