Add Precise Seam placement feature (#12974)

Co-authored-by: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
This commit is contained in:
Damir Galeev
2026-09-28 14:40:55 -03:00
committed by GitHub
co-authored by Ioannis Giannakas Rodrigo Faselli Ian Bassi
parent 08f086daf3
commit 1846407e93
47 changed files with 3745 additions and 126 deletions
@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Центральные пунктирные линии -->
<rect x="7" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правая стрелка -->
<path d="M9.5,7.5L12.504,4.504L12.5,10.5L9.5,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
<!-- Левая стрелка -->
<path d="M5.501928,7.5L2.497928,4.504L2.501928,10.5L5.501928,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,28 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Левые пунктирные линии -->
<rect x="2" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правые пунктирные линии -->
<rect x="12" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Круг (blocked seam marker) -->
<circle cx="7.5" cy="7.5" r="3.5" style="fill:#B16F6D"/>
<!-- Горизонтальная линия (минус) -->
<rect x="5" y="7" width="5" height="1" style="fill:#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Центральные пунктирные линии -->
<rect x="7" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правая стрелка -->
<path d="M9.5,7.5L12.504,4.504L12.5,10.5L9.5,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
<!-- Левая стрелка -->
<path d="M5.501928,7.5L2.497928,4.504L2.501928,10.5L5.501928,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,29 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Левые пунктирные линии -->
<rect x="2" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правые пунктирные линии -->
<rect x="12" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Круг (enforced seam marker) -->
<circle cx="7.5" cy="7.5" r="3.5" style="fill:#009688"/>
<!-- Крест внутри круга -->
<rect x="7" y="5" width="1" height="5" style="fill:#fff"/>
<rect x="5" y="7" width="5" height="1" style="fill:#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Центральные пунктирные линии -->
<rect x="7" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правая стрелка -->
<path d="M9.5,7.5L12.504,4.504L12.5,10.5L9.5,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Левые пунктирные линии -->
<rect x="2" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правые пунктирные линии -->
<rect x="12" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Круг (neutral seam marker) -->
<circle cx="7.5" cy="7.5" r="3.5" style="fill:#949494"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,16 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Центральные пунктирные линии -->
<rect x="7" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="7" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Левая стрелка -->
<path d="M5.501928,7.5L2.497928,4.504L2.501928,10.5L5.501928,7.5Z" style="fill:#949494;stroke:#949494;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
<!-- Рамка -->
<path d="M0.5,13.5L0.5,1.5C0.5,0.951,0.951,0.5,1.5,0.5L13.5,0.5C14.049,0.5,14.5,0.951,14.5,1.5L14.5,13.5C14.5,14.049,14.049,14.5,13.5,14.5L1.5,14.5C0.951,14.5,0.5,14.049,0.5,13.5Z" style="fill:none;stroke:#949494;stroke-width:1px"/>
<!-- Левые пунктирные линии -->
<rect x="2" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="2" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Правые пунктирные линии -->
<rect x="12" y="1" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="3" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="5" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="7" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="9" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="11" width="1" height="1" style="fill:#009688"/>
<rect x="12" y="13" width="1" height="1" style="fill:#009688"/>
<!-- Галочка (checkmark) -->
<path d="M5.086213,7.556L6.953213,9.867L10.420213,4.444" style="fill:none;stroke:#949494;stroke-width:1.41px;stroke-linecap:round;stroke-linejoin:round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB