alle Bogen sind neu angepasst wegen cps.

This commit is contained in:
2025-09-19 13:56:35 +02:00
parent 317fa75e61
commit 9fb6954858
169 changed files with 3381 additions and 2976 deletions
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 636.238" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="636.238" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.138654px" transform="matrix(7.2122 0 0 7.2122 -2552.99 -2448.44)" vector-effect="non-scaling-stroke">
<path d="M432.418,367.485 A81.041,81.041 0 0,0 375.113,343.749" />
<path d="M 432.418 367.485 L 489.622 424.689" />
<path d="M 353.982 343.749 L 375.113 343.749" />
<path d="M 486.608 427.703 L 492.636 421.675" />
<path d="M 353.982 339.486 L 353.982 348.011" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 692 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="653.63" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 653.63" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 .02294 -.02326)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0"><path d="m954.03 650.98c7.535-7.724 43.273-44.359 43.273-44.359" stroke-linecap="square" stroke-width="3.7795" style="paint-order:fill markers stroke"/><path d="m1.87 33.28h151.71c154.3 0 302.29 62.82 411.4 174.64l410.69 420.88" stroke-width="3.7795" style="paint-order:fill markers stroke"/><path d="m1.8668 1.913v62.728" stroke-width="3.7795" style="paint-order:fill markers stroke"/></g></svg>

Before

Width:  |  Height:  |  Size: 781 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 698.714" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="698.714" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.195794px" transform="matrix(5.1074 0 0 5.1074 -1448.53 -1607.15)" vector-effect="non-scaling-stroke">
<path d="M457.979,414.178 A148.537,148.537 0 0,0 320.749,322.483" />
<path d="M 283.614 314.671 L 283.614 330.296" />
<path d="M 283.614 322.483 L 320.749 322.483" />
<path d="M 457.979 414.178 L 472.19 448.485" />
<path d="M 464.972 451.475 L 479.408 445.496" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 693 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="733.49" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 733.49" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99998 0 0 .99998 .0518 -.044798)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0" stroke-width="3.7796"><path d="m1.8462 1.9346v83.283" style="paint-order:normal"/><path d="m1.838 43.57h188.84c305.51-0.01 580.94 192.87 697.85 488.7l72.252 182.85" style="paint-order:normal"/><path d="m924.07 731.06 73.414-31.883" style="paint-order:normal"/></g></svg>

Before

Width:  |  Height:  |  Size: 665 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.116560px" transform="matrix(8.5793 0 0 8.5793 -2780.81 -2906.51)" vector-effect="non-scaling-stroke">
<path d="M435.984,432.972 A89.4828,89.4828 0 0,0 346.501,343.49" />
<path d="M 431.278 455.343 L 440.691 455.343" />
<path d="M 435.984 432.972 L 435.984 455.343" />
<path d="M 324.131 343.49 L 346.501 343.49" />
<path d="M 324.131 338.783 L 324.131 348.196" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 693 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 .99999 5.7731e-5 -1.5169e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8897 1.8898v80.459"/><path d="m1.8897 42.119h191.2c202.84-7.29e-4 397.37 80.576 540.8 224 143.43 143.43 224.01 337.96 224 540.8v191.2"/><path d="m917.66 998.12h80.45"/></g></svg>

Before

Width:  |  Height:  |  Size: 578 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.102472px" transform="matrix(9.7588 0 0 9.7588 -4165.11 -3318.34)" vector-effect="non-scaling-stroke">
<path d="M525.503,433.536 A89.7237,89.7237 0 0,0 435.78,343.813" />
<path d="M 521.728 442.509 L 529.279 442.509" />
<path d="M 525.503 433.536 L 525.503 442.509" />
<path d="M 426.807 343.813 L 435.78 343.813" />
<path d="M 426.807 340.037 L 426.807 347.588" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="1e3" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -5.2142e-5 -5.2142e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8898 1.8898v73.408"/><path d="m924.7 998.11h73.408"/><path d="m1.8898 38.597h87.228c231.34-0.0027 453.22 91.897 616.8 255.48 163.59 163.58 255.49 385.45 255.49 616.8v87.228"/></g></svg>

Before

Width:  |  Height:  |  Size: 604 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 311.375" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="311.375" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.091947px" transform="matrix(10.8758 0 0 10.8758 -4020.19 -3893.85)" vector-effect="non-scaling-stroke">
<path d="M426.035,369.097 A96.7786,96.7786 0 0,0 388.999,361.73" />
<path d="M 369.644 361.73 L 388.999 361.73" />
<path d="M 426.035 369.097 L 460.174 383.238" />
<path d="M 369.644 358.028 L 369.644 365.432" />
<path d="M 458.757 386.658 L 461.591 379.818" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 693 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="315.12" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 315.12" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99942 0 0 .99942 .0032981 -.0010993)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0" stroke-width="3.7818"><path d="m1.8876 1.892v80.419"/><path d="m1.8876 42.107h209.71c137.7-9.43e-4 274.06 27.185 401.28 80.005l369.88 153.57"/><path d="m967.41 312.84 30.701-74.302"/></g></svg>

Before

Width:  |  Height:  |  Size: 591 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 400.202" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="400.202" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.256048px" transform="matrix(3.9055 0 0 3.9055 -1142.44 -1259.38)" vector-effect="non-scaling-stroke">
<path d="M528.42,404.785 A248.598,248.598 0 0,0 352.636,331.972" />
<path d="M 292.52 331.971 L 352.636 331.971" />
<path d="M 528.42 404.785 L 541.844 418.209" />
<path d="M 292.52 322.462 L 292.52 341.481" />
<path d="M 535.12 424.933 L 548.568 411.484" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 688 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="402.95" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 402.95" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99999 0 0 .99999 .0057172 .0057192)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.884 1.884v73.949"/><path d="m1.884 38.851h233.71c256.33 0.001882 502.17 101.83 683.42 283.09l52.183 52.191"/><path d="m945.06 400.28 52.274-52.29"/></g></svg>

Before

Width:  |  Height:  |  Size: 589 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 436.225" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="436.225" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.119851px" transform="matrix(8.3437 0 0 8.3437 -3164.01 -2996.74)" vector-effect="non-scaling-stroke">
<path d="M486.315,398.698 A119.389,119.389 0 0,0 401.894,363.729" />
<path d="M 379.21 359.162 L 379.21 368.296" />
<path d="M 379.21 363.729 L 401.894 363.729" />
<path d="M 486.315 398.698 L 495.832 408.214" />
<path d="M 492.602 411.444 L 499.061 404.985" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 691 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="438.79" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 438.79" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99998 0 0 .99998 .0078918 .0079242)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8819 1.8818v75.866"/><path d="m1.8819 39.815h188.41c262.99-3e-5 515.22 104.47 701.18 290.44l79.044 79.044"/><path d="m943.69 436.12 53.645-53.645"/></g></svg>

Before

Width:  |  Height:  |  Size: 565 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 494.824" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="494.824" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.289921px" transform="matrix(3.4492 0 0 3.4492 -1007.11 -1107.93)" vector-effect="non-scaling-stroke">
<path d="M524.987,407.755 A261.343,261.343 0 0,0 340.189,331.209" />
<path d="M 291.983 321.212 L 291.983 341.206" />
<path d="M 291.983 331.209 L 340.189 331.209" />
<path d="M 524.987 407.755 L 574.835 457.603" />
<path d="M 567.766 464.672 L 581.904 450.534" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="497.33" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 497.33" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(.00036292 -.00033708)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8894 1.8901v68.678"/><path d="m1.8894 36.226h165.52c237.98 0.0014 466.22 94.579 634.5 262.93l171.22 171.15"/><path d="m948.78 494.66 48.546-48.566" stroke-linejoin="miter"/></g></svg>

Before

Width:  |  Height:  |  Size: 579 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 745.997" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="745.997" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.119101px" transform="matrix(8.3962 0 0 8.3962 -2142.46 -2751.69)" vector-effect="non-scaling-stroke">
<path d="M363.835,399.079 A108.837,108.837 0 0,0 263.283,331.892" />
<path d="M 255.169 327.729 L 255.169 336.056" />
<path d="M 255.169 331.892 L 263.283 331.892" />
<path d="M 363.835 399.079 L 370.423 414.985" />
<path d="M 366.577 416.578 L 374.27 413.392" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 693 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="747.09" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 747.09" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99708 0 0 .99708 -4.3149e-5 3.1033e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8898 1.8897v69.806"/><path d="m1.8898 36.786h68.031c369.07 0.00452 701.8 222.33 843.04 563.31l55.234 133.35"/><path d="m935.95 746.81 64.51-26.723"/></g></svg>

Before

Width:  |  Height:  |  Size: 569 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 728.287" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="728.287" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.171409px" transform="matrix(5.8340 0 0 5.8340 -1917.96 -1856.75)" vector-effect="non-scaling-stroke">
<path d="M478.191,398.728 A122.739,122.739 0 0,0 364.796,322.959" />
<path d="M 491.489 443.099 L 500.164 439.506" />
<path d="M 478.191 398.728 L 495.826 441.303" />
<path d="M 328.755 322.959 L 364.796 322.959" />
<path d="M 328.755 318.264 L 328.755 327.654" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="729.48" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 729.48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1.0017 0 0 1.0017 -7.0728e-5 -2.9756e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7729"><path d="m945.5 725.74 50.3-20.837"/><path d="m1.8865 29.106 208.98 1.1e-5c287.86-0.0012 547.37 173.4 657.53 439.35l102.25 246.87"/><path d="m1.8865 1.8865v54.447"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 574 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 675.998" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="675.998" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.115885px" transform="matrix(8.6292 0 0 8.6292 -2829.56 -2960.27)" vector-effect="non-scaling-stroke">
<path d="M431.197,396.783 A81.9631,81.9631 0 0,0 355.473,346.186" />
<path d="M 327.904 343.051 L 327.904 349.321" />
<path d="M 327.904 346.186 L 355.473 346.186" />
<path d="M 431.197 396.783 L 440.892 420.189" />
<path d="M 437.996 421.389 L 443.789 418.989" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="688.75" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 688.75" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99996 0 0 .99996 8.001e-5 8.001e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7797"><path d="m1.8898 1.8898v54.785"/><path d="m1.8898 29.283h236.87c284.83-6.83e-4 541.62 174.47 650.62 442.05l83.304 204.49"/><path d="m947.8 686.31c10.632-4.4796 49.768-20.968 49.768-20.968"/></g>
</svg>

Before

Width:  |  Height:  |  Size: 596 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 679.706" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="679.706" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.160256px" transform="matrix(6.2400 0 0 6.2400 -2033.25 -2030.41)" vector-effect="non-scaling-stroke">
<path d="M482.436,424.743 A95.6969,95.6969 0 0,0 386.739,329.046" />
<path d="M 478.775 434.313 L 486.097 434.313" />
<path d="M 325.841 329.046 L 386.739 329.046" />
<path d="M 482.436 424.743 L 482.436 434.313" />
<path d="M 325.841 325.386 L 325.841 332.707" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="694.83" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 694.83" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(.019177 -.019326)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8706 1.9091v46.45"/><path d="m1.8706 25.134h378.58c157.78 0.0014 309.09 63.967 420.65 177.83 111.56 113.86 174.24 268.28 174.24 429.3v60.702"/><path d="m952.58 692.96h45.514"/></g></svg>

Before

Width:  |  Height:  |  Size: 578 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 382.145" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="382.145" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.328326px" transform="matrix(3.0458 0 0 3.0458 -598.29 -997.33)" vector-effect="non-scaling-stroke">
<path d="M475.944,404.101 A234.921,234.921 0 0,0 309.83,335.294" />
<path d="M 196.434 335.294 L 309.83 335.294" />
<path d="M 475.944 404.101 L 519.213 447.37" />
<path d="M 196.434 327.449 L 196.434 343.14" />
<path d="M 513.665 452.917 L 524.76 441.822" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 687 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="384.98" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 384.98" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.99998 0 0 .99998 .0086192 .0085736)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7796"><path d="m963.7 382.3 33.641-33.641"/><path d="m1.8811 25.683 343.8 9.8e-5c188.9-0.0024 370.07 75.038 503.65 208.61l131.19 131.19"/><path d="m1.8811 1.8812v47.586"/></g></svg>

Before

Width:  |  Height:  |  Size: 570 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 999.991" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="999.991" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.111111px" transform="matrix(9.0000 0 0 9.0000 -2628.91 -3034.18)" vector-effect="non-scaling-stroke">
<path d="M400.364,425.235 A85.2572,85.2572 0 0,0 315.107,339.978" />
<path d="M 397.517 448.241 L 403.212 448.241" />
<path d="M 400.364 425.235 L 400.364 448.241" />
<path d="M 292.101 339.978 L 315.107 339.978" />
<path d="M 292.101 337.131 L 292.101 342.825" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 .99999 6.9031e-5 3.9431e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8897 1.8897v51.061"/><path d="m1.8897 27.423h206.27c202.74-3e-6 397.17 80.537 540.53 223.89 143.36 143.36 223.9 337.79 223.9 540.53v206.27"/><path d="m947.06 998.12h51.054"/></g></svg>

Before

Width:  |  Height:  |  Size: 583 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 816.318 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="816.318" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.077324px" transform="matrix(12.9326 0 0 12.9326 -5596.77 -4599.54)" vector-effect="non-scaling-stroke">
<path d="M494.018,413.449 A55.9268,55.9268 0 0,0 438.091,357.523" />
<path d="M 432.765 357.523 L 438.091 357.523" />
<path d="M 432.765 355.655 L 432.765 359.39" />
<path d="M 494.018 413.449 L 494.018 432.979" />
<path d="M 492.151 432.979 L 495.886 432.979" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 695 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="817.17" height="1e3" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" version="1.1" viewBox="0 0 817.17 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-.00018248 .00014832)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-linejoin="miter" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8899 1.8896v48.122"/><path d="m1.8899 25.951h68.628c191.14-0.002126 374.45 75.911 509.61 211.04 135.16 135.13 211.09 318.4 211.09 509.5v251.62"/><path d="m767.14 998.11h48.142"/></g></svg>

Before

Width:  |  Height:  |  Size: 607 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 977.560 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="977.560" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.155035px" transform="matrix(6.4502 0 0 6.4502 -1951.68 -1925.67)" vector-effect="non-scaling-stroke">
<path d="M450.473,411.824 A109.616,109.616 0 0,0 340.857,302.207" />
<path d="M 302.578 302.207 L 340.857 302.207" />
<path d="M 450.473 411.824 L 450.473 453.582" />
<path d="M 302.578 298.547 L 302.578 305.868" />
<path d="M 446.813 453.582 L 454.134 453.582" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="978.19" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 978.19 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(.97811 0 0 .97811 .040856 .041845)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.8641"><path d="m1.8903 1.8893v48.097"/><path d="m1.8903 25.938h251.62c191.1 4.14e-4 374.37 75.871 509.49 210.92 135.13 135.05 211.04 318.22 211.04 509.21v274.34"/><path d="m949.98 1020.4h48.132"/></g></svg>

Before

Width:  |  Height:  |  Size: 594 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 956.098" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="956.098" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.096352px" transform="matrix(10.3786 0 0 10.3786 -4410.72 -3688.81)" vector-effect="non-scaling-stroke">
<path d="M519.109,424.279 A66.6295,66.6295 0 0,0 452.48,357.649" />
<path d="M 424.982 355.424 L 424.982 359.874" />
<path d="M 424.982 357.649 L 452.48 357.649" />
<path d="M 519.109 424.279 L 519.109 447.546" />
<path d="M 516.884 447.546 L 521.334 447.546" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="957.89" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 957.89" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(.0015949 -.0016606)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8882 1.8914v46.091"/><path d="m1.8882 24.931h284.31c182.71-3e-4 357.93 72.705 487.13 202.12 129.19 129.42 201.77 304.94 201.77 487.96v240.98"/><path d="m952.1 956h46.012"/></g></svg>

Before

Width:  |  Height:  |  Size: 576 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 111.763 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="111.763" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.126294px" transform="matrix(7.9180 0 0 7.9180 -3145.15 -2510.31)" vector-effect="non-scaling-stroke">
<path d="M411.328,441.351 A61.1669,61.1669 0 0,0 411.328,319.017" />
<path d="M 397.213 441.351 L 411.328 441.351" />
<path d="M 397.213 317.037 L 397.213 320.997" />
<path d="M 397.213 319.017 L 411.328 319.017" />
<path d="M 397.213 439.371 L 397.213 443.331" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="605.29" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 605.29 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(-.013437 .013404)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.9032 1.8764v31.24"/><path d="m1.9032 17.496h112.94c129.65 0.21286 253.92 51.14 345.52 141.6 91.602 90.461 143.05 213.06 143.05 340.89s-51.449 250.43-143.05 340.89c-91.602 90.461-215.87 141.39-345.52 141.6h-112.94"/><path d="m1.9032 966.86v31.24"/></g></svg>

Before

Width:  |  Height:  |  Size: 649 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.163460px" transform="matrix(6.1177 0 0 6.1177 -2484.11 -1886.47)" vector-effect="non-scaling-stroke">
<path d="M564.387,438.937 A125.45,125.45 0 0,0 438.937,313.487" />
<path d="M 406.052 308.362 L 406.052 318.612" />
<path d="M 564.387 438.937 L 564.387 471.822" />
<path d="M 406.052 313.487 L 438.937 313.487" />
<path d="M 559.262 471.822 L 569.512 471.822" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1"
viewBox="0 0 1e3 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795">
<path d="m1.8898 1.8898v62.471" style="paint-order:fill markers stroke" />
<path
d="m1.8898 33.125h200.42c202.78 3e-6 397.25 80.552 540.63 223.94 143.38 143.38 223.94 337.85 223.94 540.63v200.42"
style="paint-order:fill markers stroke" />
<path d="m935.64 998.11h62.471" style="paint-order:fill markers stroke" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 719 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 1000.000 1000.000" version="1.1" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" width="1000.000" height="1000.000" space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-width="0.103357px" transform="matrix(9.6752 0 0 9.6752 -3456.28 -3444.99)" vector-effect="non-scaling-stroke">
<path d="M457.971,422.732 A64.0511,64.0511 0 0,0 393.92,358.681" />
<path d="M 357.231 358.681 L 393.92 358.681" />
<path d="M 457.971 422.732 L 457.971 459.421" />
<path d="M 357.231 356.064 L 357.231 361.298" />
<path d="M 455.355 459.421 L 460.588 459.421" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 694 B

@@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1e3" height="1e3" fill-rule="evenodd" stroke-linecap="square" stroke-linejoin="round" version="1.1" viewBox="0 0 1e3 1e3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(4.6724e-5 3.5824e-5)" fill="none" stroke="#ffe31b" stroke-linecap="square" stroke-miterlimit="0" stroke-width="3.7795"><path d="m1.8897 1.8897v49.547" style="paint-order:fill markers stroke"/><path d="m1.8897 26.667h353.8c163.81-3.95e-4 320.91 65.072 436.74 180.9 115.83 115.83 180.91 272.93 180.91 436.74v353.8" style="paint-order:fill markers stroke"/><path d="m948.56 998.11h49.547" style="paint-order:fill markers stroke"/></g></svg>

Before

Width:  |  Height:  |  Size: 699 B

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="489.622,424.689 432.418,367.485 " />
<polyline points="353.982,343.749 375.113,343.749 " />
<polyline points="486.608,427.703 492.636,421.675 " />
<path d="M432.418,367.485 A81.041,81.041 0 0,0 375.113,343.749 " />
<polyline points="353.982,348.011 353.982,339.486 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 813 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="514.279,325.364 514.279,319.774 " />
<polyline points="603.213,375.639 565.706,338.132 " stroke-dasharray="3.909137,0.434349,0.868697,0.434349,0.868697,0.434349" />
<polyline points="514.279,322.569 528.134,322.569 " stroke-dasharray="3.909137,0.434349,0.868697,0.434349,0.868697,0.434349" />
<polyline points="601.237,377.615 605.189,373.662 " />
<path d="M565.706,338.132 A53.1354,53.1354 0 0,0 528.134,322.569 " stroke-dasharray="3.909137,0.434349,0.868697,0.434349,0.868697,0.434349" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="283.614,314.671 283.614,330.296 " />
<polyline points="283.614,322.483 320.749,322.483 " />
<polyline points="472.19,448.485 457.979,414.178 " />
<path d="M457.979,414.178 A148.537,148.537 0 0,0 320.749,322.483 " />
<polyline points="479.408,445.496 464.972,451.475 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 814 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="355.27,336.861 355.27,339.528 " />
<polyline points="355.27,338.194 361.608,338.194 " stroke-dasharray="1.865086,0.207232,0.414464,0.207232,0.414464,0.207232" />
<polyline points="387.455,359.7 385.03,353.844 " stroke-dasharray="1.865086,0.207232,0.414464,0.207232,0.414464,0.207232" />
<polyline points="388.687,359.189 386.223,360.21 " />
<path d="M385.03,353.844 A25.3514,25.3514 0 0,0 361.608,338.194 " stroke-dasharray="1.865086,0.207232,0.414464,0.207232,0.414464,0.207232" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="431.278,455.343 440.691,455.343 " />
<polyline points="435.984,455.343 435.984,432.972 " />
<polyline points="324.131,343.49 346.501,343.49 " />
<path d="M435.984,432.972 A89.4828,89.4828 0 0,0 346.501,343.49 " />
<polyline points="324.131,348.196 324.131,338.783 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 812 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="392.338,285.758 392.338,276.978 " />
<polyline points="492.27,385.69 501.049,385.69 " />
<polyline points="496.66,385.69 496.66,364.826 " stroke-dasharray="6.139928,0.682214,1.364429,0.682214,1.364429,0.682214" />
<polyline points="392.338,281.368 413.202,281.368 " stroke-dasharray="6.139928,0.682214,1.364429,0.682214,1.364429,0.682214" />
<path d="M496.66,364.826 A83.4577,83.4577 0 0,0 413.202,281.368 " stroke-dasharray="6.139928,0.682214,1.364429,0.682214,1.364429,0.682214" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="521.728,442.509 529.279,442.509 " />
<polyline points="525.503,442.509 525.503,433.536 " />
<polyline points="426.807,343.813 435.78,343.813 " />
<path d="M525.503,433.536 A89.7237,89.7237 0 0,0 435.78,343.813 " />
<polyline points="426.807,347.588 426.807,340.037 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 813 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="376.777,289.574 376.777,278.069 " />
<polyline points="521.406,434.203 532.911,434.203 " />
<polyline points="527.159,434.203 527.159,420.532 " stroke-dasharray="8.046163,0.894018,1.788036,0.894018,1.788036,0.894018" />
<polyline points="376.777,283.822 390.448,283.822 " stroke-dasharray="8.046163,0.894018,1.788036,0.894018,1.788036,0.894018" />
<path d="M527.159,420.532 A136.71,136.71 0 0,0 390.448,283.822 " stroke-dasharray="8.046163,0.894018,1.788036,0.894018,1.788036,0.894018" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="369.644,361.73 388.999,361.73 " />
<polyline points="460.174,383.238 426.035,369.097 " />
<path d="M426.035,369.097 A96.7786,96.7786 0 0,0 388.999,361.73 " />
<polyline points="369.644,365.432 369.644,358.028 " />
<polyline points="461.591,379.818 458.757,386.658 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 812 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="438.674,405.452 438.674,398.655 " />
<polyline points="438.674,402.054 456.441,402.054 " stroke-dasharray="3.361980,0.373553,0.747107,0.373553,0.747107,0.373553" />
<polyline points="521.774,421.796 490.437,408.816 " stroke-dasharray="3.361980,0.373553,0.747107,0.373553,0.747107,0.373553" />
<polyline points="523.074,418.656 520.473,424.936 " />
<path d="M490.437,408.816 A88.8355,88.8355 0 0,0 456.441,402.054 " stroke-dasharray="3.361980,0.373553,0.747107,0.373553,0.747107,0.373553" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="292.52,331.971 352.636,331.971 " />
<polyline points="541.844,418.209 528.42,404.785 " />
<path d="M528.42,404.785 A248.598,248.598 0 0,0 352.636,331.972 " />
<polyline points="292.52,341.481 292.52,322.462 " />
<polyline points="535.12,424.933 548.568,411.484 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 809 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="278.689,349.952 278.689,345.097 " />
<polyline points="278.689,347.524 294.033,347.524 " stroke-dasharray="2.401415,0.266824,0.533648,0.266824,0.533648,0.266824" />
<polyline points="342.328,369.536 338.902,366.11 " stroke-dasharray="2.401415,0.266824,0.533648,0.266824,0.533648,0.266824" />
<polyline points="344.044,367.82 340.612,371.253 " />
<path d="M338.902,366.11 A63.4539,63.4539 0 0,0 294.033,347.524 " stroke-dasharray="2.401415,0.266824,0.533648,0.266824,0.533648,0.266824" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="379.21,368.296 379.21,359.162 " />
<polyline points="379.21,363.729 401.894,363.729 " />
<polyline points="495.832,408.214 486.315,398.698 " />
<path d="M486.315,398.698 A119.389,119.389 0 0,0 401.894,363.729 " />
<polyline points="492.602,411.444 499.061,404.985 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 812 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="157.319,347.804 157.319,327.336 " />
<polyline points="157.319,337.57 208.15,337.57 " stroke-dasharray="10.124718,1.124969,2.249937,1.124969,2.249937,1.124969" />
<polyline points="418.648,437.253 397.323,415.928 " stroke-dasharray="10.124718,1.124969,2.249937,1.124969,2.249937,1.124969" />
<polyline points="425.885,430.017 411.412,444.49 " />
<path d="M397.323,415.928 A267.531,267.531 0 0,0 208.15,337.57 " stroke-dasharray="10.124718,1.124969,2.249937,1.124969,2.249937,1.124969" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="291.983,341.206 291.983,321.212 " />
<polyline points="291.983,331.209 340.189,331.209 " />
<polyline points="574.835,457.603 524.987,407.755 " />
<path d="M524.987,407.755 A261.343,261.343 0 0,0 340.189,331.209 " />
<polyline points="567.766,464.672 581.904,450.534 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,19 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="252.127,319.099 252.127,305.778 " />
<polyline points="252.127,312.438 284.244,312.438 " stroke-dasharray="6.589481,0.732165,1.464329,0.732165,1.464329,0.732165" />
<polyline points="440.574,396.647 407.363,363.436 " stroke-dasharray="6.589481,0.732165,1.464329,0.732165,1.464329,0.732165" />
<polyline points="445.284,391.937 435.864,401.357 " />
<path d="M407.363,363.436 A174.118,174.118 0 0,0 284.244,312.438 " stroke-dasharray="6.589481,0.732165,1.464329,0.732165,1.464329,0.732165" />
</g>
<g clip-path="url(#clipId0)" fill="rgb(0,0,0)" stroke="rgb(0,0,0)" stroke-width="0.1" >
<text transform="matrix(63.3155 0 -0 63.3155 200.007 81.1884)" font-family="Arial,'sans-serif'" font-size="1.39636" >821104026</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="255.169,336.056 255.169,327.729 " />
<polyline points="255.169,331.892 263.283,331.892 " />
<polyline points="370.423,414.985 363.835,399.079 " />
<path d="M363.835,399.079 A108.837,108.837 0 0,0 263.283,331.892 " />
<polyline points="374.27,413.392 366.577,416.578 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 814 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="262.678,386.695 262.678,381.818 " />
<polyline points="262.678,384.256 267.431,384.256 " stroke-dasharray="3.411071,0.379008,0.758016,0.379008,0.758016,0.379008" />
<polyline points="330.189,432.929 326.33,423.612 " stroke-dasharray="3.411071,0.379008,0.758016,0.379008,0.758016,0.379008" />
<polyline points="332.443,431.995 327.936,433.862 " />
<path d="M326.33,423.612 A63.7524,63.7524 0 0,0 267.431,384.256 " stroke-dasharray="3.411071,0.379008,0.758016,0.379008,0.758016,0.379008" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="500.164,439.506 491.489,443.099 " />
<polyline points="495.826,441.303 478.191,398.728 " />
<polyline points="328.755,322.959 364.796,322.959 " />
<path d="M478.191,398.728 A122.739,122.739 0 0,0 364.796,322.959 " />
<polyline points="328.755,327.654 328.755,318.264 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.25" >
<polyline points="479.885,460.698 473.092,463.512 " />
<polyline points="476.488,462.105 462.679,428.766 " stroke-dasharray="0.786384,0.087376,0.174752,0.087376,0.174752,0.087376" />
<polyline points="345.659,369.433 373.881,369.433 " stroke-dasharray="0.786384,0.087376,0.174752,0.087376,0.174752,0.087376" />
<polyline points="345.659,365.757 345.659,373.11 " />
<path d="M462.679,428.766 A96.1136,96.1136 0 0,0 373.881,369.433 " stroke-dasharray="0.786384,0.087376,0.174752,0.087376,0.174752,0.087376" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="327.904,343.051 327.904,349.321 " />
<polyline points="327.904,346.186 355.473,346.186 " />
<polyline points="440.892,420.189 431.197,396.783 " />
<path d="M431.197,396.783 A81.9631,81.9631 0 0,0 355.473,346.186 " />
<polyline points="443.789,418.989 437.996,421.389 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="332.625,370.081 332.625,375.837 " />
<polyline points="332.625,372.959 357.931,372.959 " stroke-dasharray="2.847307,0.316367,0.632735,0.316367,0.632735,0.316367" />
<polyline points="436.34,440.888 427.44,419.403 " stroke-dasharray="2.847307,0.316367,0.632735,0.316367,0.632735,0.316367" />
<polyline points="438.998,439.786 433.681,441.989 " />
<path d="M427.44,419.403 A75.236,75.236 0 0,0 357.931,372.959 " stroke-dasharray="2.847307,0.316367,0.632735,0.316367,0.632735,0.316367" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="478.775,434.313 486.097,434.313 " />
<polyline points="325.841,329.046 386.739,329.046 " />
<polyline points="482.436,434.313 482.436,424.743 " />
<path d="M482.436,424.743 A95.6969,95.6969 0 0,0 386.739,329.046 " />
<polyline points="325.841,332.707 325.841,325.386 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="332.371,362.312 332.371,358.828 " />
<polyline points="405.145,410.661 408.629,410.661 " />
<polyline points="332.371,360.57 361.35,360.57 " stroke-dasharray="2.436480,0.270720,0.541440,0.270720,0.541440,0.270720" />
<polyline points="406.887,410.661 406.887,406.108 " stroke-dasharray="2.436480,0.270720,0.541440,0.270720,0.541440,0.270720" />
<path d="M406.887,406.108 A45.5374,45.5374 0 0,0 361.35,360.57 " stroke-dasharray="2.436480,0.270720,0.541440,0.270720,0.541440,0.270720" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="196.434,335.294 309.83,335.294 " />
<polyline points="519.213,447.37 475.944,404.101 " />
<polyline points="196.434,343.14 196.434,327.449 " />
<path d="M475.944,404.101 A234.921,234.921 0 0,0 309.83,335.294 " />
<polyline points="513.665,452.917 524.76,441.822 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 810 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.25" >
<polyline points="501.322,407.374 503.206,405.49 " />
<polyline points="447.457,387.402 466.711,387.402 " stroke-dasharray="0.284920,0.031658,0.063315,0.031658,0.063315,0.031658" />
<polyline points="502.264,406.432 494.917,399.085 " stroke-dasharray="0.284920,0.031658,0.063315,0.031658,0.063315,0.031658" />
<polyline points="447.457,388.734 447.457,386.069 " />
<path d="M494.917,399.085 A39.8888,39.8888 0 0,0 466.711,387.402 " stroke-dasharray="0.284920,0.031658,0.063315,0.031658,0.063315,0.031658" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="397.517,448.241 403.212,448.241 " />
<polyline points="400.364,448.241 400.364,425.235 " />
<polyline points="292.101,339.978 315.107,339.978 " />
<path d="M400.364,425.235 A85.2572,85.2572 0 0,0 315.107,339.978 " />
<polyline points="292.101,342.825 292.101,337.131 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="539.257,306.484 539.257,298.515 " />
<polyline points="686.768,453.995 694.736,453.995 " />
<polyline points="690.752,453.995 690.752,421.802 " stroke-dasharray="5.572713,0.619190,1.238381,0.619190,1.238381,0.619190" />
<polyline points="539.257,302.5 571.449,302.5 " stroke-dasharray="5.572713,0.619190,1.238381,0.619190,1.238381,0.619190" />
<path d="M690.752,421.802 A119.303,119.303 0 0,0 571.449,302.5 " stroke-dasharray="5.572713,0.619190,1.238381,0.619190,1.238381,0.619190" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="432.765,357.523 438.091,357.523 " />
<polyline points="432.765,355.655 432.765,359.39 " />
<polyline points="494.018,432.979 494.018,413.449 " />
<path d="M494.018,413.449 A55.9268,55.9268 0 0,0 438.091,357.523 " />
<polyline points="492.151,432.979 495.886,432.979 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 814 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="369.001,352.862 375.845,352.862 " stroke-dasharray="3.357156,0.373017,0.746035,0.373017,0.746035,0.373017" />
<polyline points="369.001,350.462 369.001,355.262 " />
<polyline points="447.717,449.831 447.717,424.733 " stroke-dasharray="3.357156,0.373017,0.746035,0.373017,0.746035,0.373017" />
<polyline points="450.117,449.831 445.316,449.831 " />
<path d="M447.717,424.733 A71.8712,71.8712 0 0,0 375.845,352.862 " stroke-dasharray="3.357156,0.373017,0.746035,0.373017,0.746035,0.373017" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="302.578,302.207 340.857,302.207 " />
<path d="M450.473,411.824 A109.616,109.616 0 0,0 340.857,302.207 " />
<polyline points="450.473,411.824 450.473,453.582 " />
<polyline points="302.578,305.868 302.578,298.547 " />
<polyline points="446.813,453.582 454.134,453.582 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.25" >
<polyline points="298.042,296.316 330.26,296.316 " stroke-dasharray="1.464448,0.366112,0.000022,0.366112" />
<path d="M422.52,388.576 A92.2602,92.2602 0 0,0 330.26,296.316 " stroke-dasharray="0.065900,0.007322,0.014644,0.007322,0.014644,0.007322" />
<polyline points="422.52,388.576 422.52,423.723 " stroke-dasharray="1.464448,0.366112,0.000022,0.366112" />
<polyline points="298.042,293.235 298.042,299.397 " />
<polyline points="425.602,423.723 419.439,423.723 " />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 994 B

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<polyline points="424.982,355.424 424.982,359.874 " />
<polyline points="424.982,357.649 452.48,357.649 " />
<polyline points="519.109,447.546 519.109,424.279 " />
<path d="M519.109,424.279 A66.6295,66.6295 0 0,0 452.48,357.649 " />
<polyline points="516.884,447.546 521.334,447.546 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 814 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.25" >
<polyline points="524.996,367.784 524.996,371.869 " />
<polyline points="524.996,369.826 550.237,369.826 " stroke-dasharray="2.020714,0.224524,0.449047,0.224524,0.449047,0.224524" />
<polyline points="613.441,452.345 609.356,452.345 " />
<polyline points="611.398,452.345 611.398,430.987 " stroke-dasharray="2.020714,0.224524,0.449047,0.224524,0.449047,0.224524" />
<path d="M611.398,430.987 A61.1609,61.1609 0 0,0 550.237,369.826 " stroke-dasharray="2.020714,0.224524,0.449047,0.224524,0.449047,0.224524" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<polyline points="397.213,441.351 411.328,441.351 " />
<polyline points="397.213,320.997 397.213,317.037 " />
<polyline points="397.213,319.017 411.328,319.017 " />
<path d="M411.328,441.351 A61.1669,61.1669 0 0,0 411.328,319.017 " />
<polyline points="397.213,443.331 397.213,439.371 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 816 B

@@ -1,16 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.25" >
<polyline points="451.549,474.142 468.208,474.142 " stroke-dasharray="3.268227,0.363136,0.726273,0.363136,0.726273,0.363136" />
<polyline points="451.549,476.479 451.549,471.805 " />
<polyline points="451.549,332.102 451.549,327.428 " />
<polyline points="451.549,329.765 468.208,329.765 " stroke-dasharray="3.268227,0.363136,0.726273,0.363136,0.726273,0.363136" />
<path d="M468.208,474.142 A72.1886,72.1886 0 0,0 468.208,329.765 " stroke-dasharray="3.268227,0.363136,0.726273,0.363136,0.726273,0.363136" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.1" >
<polyline points="406.052,318.612 406.052,308.362 " />
<polyline points="564.387,471.822 564.387,438.937 " />
<polyline points="406.052,313.487 438.937,313.487 " />
<path d="M564.387,438.937 A125.45,125.45 0 0,0 438.937,313.487 " />
<polyline points="559.262,471.822 569.512,471.822 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 813 B

@@ -1,17 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" >
<polyline points="543.899,305.24 543.899,291.856 " />
<polyline points="757.334,505.291 743.95,505.291 " />
</g>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,255,255)" stroke-width="0.1" >
<polyline points="750.642,505.291 750.642,462.352 " stroke-dasharray="9.359980,1.039998,2.079995,1.039998,2.079995,1.039998" />
<polyline points="543.899,298.548 586.838,298.548 " stroke-dasharray="9.359980,1.039998,2.079995,1.039998,2.079995,1.039998" />
<path d="M750.642,462.352 A163.804,163.804 0 0,0 586.838,298.548 " stroke-dasharray="9.359980,1.039998,2.079995,1.039998,2.079995,1.039998" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,16 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<polyline points="393.92,358.681 357.231,358.681 " />
<polyline points="457.971,422.732 457.971,459.421 " />
<path d="M457.971,422.732 A64.0511,64.0511 0 0,0 393.92,358.681 " />
<polyline points="357.231,361.298 357.231,356.064 " />
<polyline points="455.355,459.421 460.588,459.421 " />
</g>
</svg>

After

Width:  |  Height:  |  Size: 814 B

@@ -1,24 +0,0 @@
<?xml version="1.0" standalone="no"?>
<svg viewBox="0 0 1024 768" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" stroke-linecap="round" stroke-linejoin="round" fill-rule="evenodd" xml:space="preserve" >
<defs >
<clipPath id="clipId0" >
<path d="M0,768 1024,768 1024,0 0,0 z" />
</clipPath>
</defs>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.1" />
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<polyline points="537.237,372.671 490.087,372.671 " />
</g>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.25" >
<polyline points="490.087,375.972 490.087,369.369 " />
</g>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<polyline points="619.549,454.982 619.549,502.132 " />
</g>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(0,0,0)" stroke-width="0.25" >
<polyline points="616.247,502.132 622.85,502.132 " />
</g>
<g clip-path="url(#clipId0)" fill="none" stroke="rgb(255,255,0)" stroke-width="0.25" >
<path d="M619.549,454.982 A82.3118,82.3118 0 0,0 537.237,372.671 " />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,33 @@
@echo off
call setenv.bat
setlocal
:: Check if Python is available
where python >nul 2>&1
if %ERRORLEVEL% neq 0 (
echo Error: Python is not found in your PATH
pause
exit /b 1
)
:: Run the Python script
echo Running omnfilo Bogen SVG...
echo "[DEBUG] OFBogen_PATH: %OFBogen_PATH%"
echo "[DEBUG] Output_PATH: %RD_CONF_OUTPUT_OFBOGEN%"
python %OFBogen_PATH%\02_svg_step1_convert_polylines_to_lines.py
python %OFBogen_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py
python %OFBogen_PATH%\02_svg_step3_scaler.py
python %OFBogen_PATH%\02_svg_step4_format_optimization.py
:: Check if Python script succeeded
if %ERRORLEVEL% equ 0 (
echo SVG optimization completed successfully
) else (
echo SVG optimization failed with error %ERRORLEVEL%
)
pause
@@ -0,0 +1,23 @@
@echo off
call setenv.bat
setlocal
:: Check if Python is available
where python >nul 2>&1
if %ERRORLEVEL% neq 0 (
echo Error: Python is not found in your PATH
pause
exit /b 1
)
:: Run the Python script
echo Running convert svgs to xml and update xml path in Props...
echo "[DEBUG] OFBogen_PATH: %OFBogen_PATH%"
echo "[DEBUG] PROPS_PATH: %PROPS_PATH%"
echo "[DEBUG] SVG_PATH: %SVG_PATH%"
echo "[DEBUG] RD_CONF_OUTPUT_OFBOGEN: %RD_CONF_OUTPUT_OFBOGEN%"
python %OFBogen_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py
pause
+2 -1
View File
@@ -8,10 +8,11 @@ set RD_CONF_CFG=%RD_CONF%\cfg
set RD_CONF_WORK=%RD_CONF%\work
set RD_CONF_LIB=%RD_CONF%\lib
set "OFBogen_PATH=%RD_CONF%\lib\OFBogen"
set "OFWeiche_PATH=%RD_CONF%\lib\OFWeiche"
set "TEFWeiche_PATH=%RD_CONF%\lib\TEFWeiche"
set "PROPS_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props"
set "SVG_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\svg"
@@ -22,63 +22,53 @@ def process_json_item(item):
item["center_line_height_mm"] = float(item["center_line_height_mm"])
item["Objekt_width_mm"] = float(item["Objekt_width_mm"])
item["Objekt_height_mm"] = float(item["Objekt_height_mm"])
item["calculated_objekt_width_mm"] = float(item["calculated_objekt_width_mm"])
item["calculated_objekt_height_mm"] = float(item["calculated_objekt_height_mm"])
# Calculate the direct mm to px conversions (requested additions)
item["Objekt_width_px"] = round((item["Objekt_width_mm"] * 3.779527592),4)
item["Objekt_height_px"] = round((item["Objekt_height_mm"] * 3.779527592),4)
winkel_rad = math.radians(item["Winkel"])
sin_value = math.sin(winkel_rad)
cos_value = math.cos(winkel_rad)
profilebreit = 42.0782
# Determine which dimension is larger
if item["Objekt_width_mm"] == item["Objekt_height_mm"]:
# "Width =Height"
scale = round(1000 / item["Objekt_width_mm"], 6)
scale = round(1000 / item["Objekt_width_mm"], 7)
item["calculated_SVG_width_px"] = 1000
item["calculated_SVG_height_px"] = round(item["Objekt_height_mm"] * scale, 3)
scale_RD_H = 1000 / item["calculated_SVG_height_px"]
item["calculated_SVG_height_px"] = 1000
scale_RD_H = 1
scale_RD_W = 1
elif item["Objekt_width_mm"] > item["Objekt_height_mm"]:
# Width is larger, set calculated_SVG width to 1000px
scale = round(1000 / item["Objekt_width_mm"], 7)
item["calculated_SVG_width_px"] = 1000
if item["Winkel"]==180:
item["calculated_SVG_height_px"] = round(item["Objekt_height_mm"] * scale+3.7795/2, 3)
else:
item["calculated_SVG_height_px"] = round(item["Objekt_height_mm"] * scale+3.7795/2/sin_value, 3)
scale_RD_H = round(1000 / item["calculated_SVG_height_px"], 6)
item["calculated_SVG_width_px"] = 1000
item["calculated_SVG_height_px"] = round(item["Objekt_height_mm"] * scale, 4)
scale_RD_H = round(1000 / item["calculated_SVG_height_px"], 7)
scale_RD_W = 1
else:
# Height is larger, set calculated_SVG height to 1000px
scale = round(1000 / item["Objekt_height_mm"], 7)
item["calculated_SVG_height_px"] = 1000
if item["Winkel"]==180:
item["calculated_SVG_width_px"] = round(item["Objekt_width_mm"] * scale+3.7795/2, 3)
else:
item["calculated_SVG_width_px"] = round(item["Objekt_width_mm"] * scale+3.7795/2/sin_value, 3)
scale_RD_W = round(1000 / item["calculated_SVG_width_px"], 6)
item["calculated_SVG_width_px"] = round(item["Objekt_width_mm"] * scale, 4)
scale_RD_W = round(1000 / item["calculated_SVG_width_px"], 7)
scale_RD_H = 1
item["scale_factor"] = scale # Add scale factor
# Calculate connection points
cp1_y = round(21.040 * scale*scale_RD_H, 3)
cp1_y = round(profilebreit/2 * scale*scale_RD_H, 3)
cp2_y = round((profilebreit/2+item["center_line_height_mm"]) * scale * scale_RD_H, 3)
if item["calculated_SVG_height_px"] == item["calculated_SVG_width_px"]:
cp2_x = round(item["center_line_width_mm"] * scale * scale_RD_W, 3)
cp2_y = round((21.040 + item["center_line_height_mm"]) * scale * scale_RD_H, 3)
elif item["calculated_SVG_height_px"] == 1000 and item["calculated_SVG_width_px"] != 1000:
if item["Winkel"]==180:
cp2_x = 0
else:
cp2_x = round((1000/item["Objekt_width_mm"]*item["center_line_width_mm"]), 3)
cp2_y = round(((21.040 + item["center_line_height_mm"]) * scale) * scale_RD_H, 3)
cp2_x = round((item["center_line_width_mm"] * scale) * scale_RD_W, 3)
else:
cp2_x = round((item["center_line_width_mm"] * scale) * scale_RD_W, 3)
cp2_y = round(((21.040 + item["center_line_height_mm"]) * scale) * scale_RD_H, 3)
cp2_direction = round(90 + item["Winkel"], 1) # Keep 1 decimal place
@@ -169,8 +159,9 @@ def process_json_file(input_file, output_file):
# Example usage
if __name__ == "__main__":
json_path=os.environ.get("JSON_PATH","JSON")
input_filename = os.path.join(json_path,"1_SVGErfassung_updated_new_output.json")
#json_path=r"C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\lib\OFBogen\json\1_SVGErfassung_updated_new_input.json"
json_path=os.environ.get("JSON_PATH_BOGEN","JSON")
input_filename = os.path.join(json_path,"1_SVGErfassung_updated_new_input.json")
output_filename =os.path.join(json_path,"2_calculated_px_cps_output.json")
process_json_file(input_filename, output_filename)
@@ -158,10 +158,10 @@ def process_files(json_file_path, txt_files_dir):
# Example usage
if __name__ == "__main__":
json_path = os.environ.get("JSON_PATH", "JSON")
json_path = os.environ.get("JSON_PATH_OFBOGEN", "JSON")
json_file_path = os.path.join(json_path, "2_calculated_px_cps_output.json")
txt_files_dir = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props"
# 确保目录存在
txt_files_dir = os.environ.get("PROPS_PATH", "props")
os.makedirs(txt_files_dir, exist_ok=True)
process_files(json_file_path, txt_files_dir)
print("\nProcessing complete!")
@@ -0,0 +1,386 @@
import os
import re
import xml.etree.ElementTree as ET
from xml.dom import minidom
import argparse
def analyze_and_normalize_path(d, path_type, path_id=""):
"""Strictly normalize path direction and generate detailed report"""
original_d = d
report = []
normalized = []
changed = False
# First check if path contains any arc commands
if 'A' in d or 'a' in d:
report.append(" Path contains arc commands - leaving unchanged")
return original_d, report, False
# Ensure path starts with M command
if not d.strip().startswith('M'):
d = 'M' + d[1:] if d.startswith('L') else 'M ' + d
report.append(" Fix: Added M command at path start")
changed = True
# Parse path commands
commands = []
current_cmd = None
for token in re.split('([A-Za-z])', d):
if not token:
continue
if token in 'MLAZHVCSQTa-z':
current_cmd = token
else:
if current_cmd:
commands.append((current_cmd, token.strip()))
prev_x, prev_y = None, None
for cmd, params in commands:
params = [float(p) for p in re.split('[, ]+', params.strip()) if p]
if cmd == 'M':
if len(params) >= 2:
x, y = params[0], params[1]
normalized.append(f"M {x} {y}")
prev_x, prev_y = x, y
continue
if path_type == 'Line segment' and cmd == 'L':
if len(params) >= 2 and prev_x is not None:
x, y = params[0], params[1]
need_swap = x < prev_x or (x == prev_x and y < prev_y)
if need_swap:
new_segment = [f"M {x} {y}", f"L {prev_x} {prev_y}"]
report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}")
normalized = new_segment
changed = True
else:
normalized.append(f"L {x} {y}")
report.append(" Path direction already correct, no changes made")
prev_x, prev_y = x, y
continue
if path_type == 'Arc' and cmd == 'A':
if len(params) >= 7 and prev_x is not None:
rx, ry, xrot, large, sweep, x, y = params[0], params[1], params[2], int(params[3]), int(params[4]), params[5], params[6]
# Force left-to-right clockwise
need_swap = x < prev_x
new_sweep = 1
if need_swap:
new_segment = [f"M {x} {y}", f"A {rx} {ry} {xrot} {large} {new_sweep} {prev_x} {prev_y}"]
report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}")
normalized = new_segment
changed = True
else:
if sweep != new_sweep:
new_segment = [f"A {rx} {ry} {xrot} {large} {new_sweep} {x} {y}"]
report.append(f" Need to adjust sweep to 1 → New path: {' '.join(new_segment)}")
normalized.extend(new_segment)
changed = True
else:
normalized.append(f"A {rx} {ry} {xrot} {large} {sweep} {x} {y}")
report.append(" Arc direction already correct, no changes made")
prev_x, prev_y = x, y
continue
normalized.append(f"{cmd} {' '.join(map(str, params))}")
new_d = ' '.join(normalized)
report_header = f"[{path_id}-Analysis] Type: {path_type}"
full_report = [report_header, f"Original path: {original_d}"] + report
if changed:
full_report.append(f"Modified path: {new_d}")
else:
full_report.append("Path not modified")
return new_d, '\n'.join(full_report)
def analyze_and_normalize_path(d, path_type, path_id=""):
"""Strictly normalize path direction and generate detailed report"""
original_d = d
report = []
normalized = []
changed = False
# First check if path contains any arc commands
if 'A' in d or 'a' in d:
report_header = f"[{path_id}-Analysis] Type: {path_type} (contains arcs)"
full_report = [report_header,
f"Original path: {original_d}",
" Path contains arc commands - leaving unchanged",
"Path not modified"]
return original_d, '\n'.join(full_report)
# Ensure path starts with M command
if not d.strip().startswith('M'):
d = 'M' + d[1:] if d.startswith('L') else 'M ' + d
report.append(" Fix: Added M command at path start")
changed = True
# Parse path commands
commands = []
current_cmd = None
for token in re.split('([A-Za-z])', d):
if not token:
continue
if token in 'MLAZHVCSQTa-z':
current_cmd = token
else:
if current_cmd:
commands.append((current_cmd, token.strip()))
prev_x, prev_y = None, None
for cmd, params in commands:
params = [float(p) for p in re.split('[, ]+', params.strip()) if p]
if cmd == 'M':
if len(params) >= 2:
x, y = params[0], params[1]
normalized.append(f"M {x} {y}")
prev_x, prev_y = x, y
continue
if path_type == 'Line segment' and cmd == 'L':
if len(params) >= 2 and prev_x is not None:
x, y = params[0], params[1]
need_swap = x < prev_x or (x == prev_x and y < prev_y)
if need_swap:
new_segment = [f"M {x} {y}", f"L {prev_x} {prev_y}"]
report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}")
normalized = new_segment
changed = True
else:
normalized.append(f"L {x} {y}")
report.append(" Path direction already correct, no changes made")
prev_x, prev_y = x, y
continue
normalized.append(f"{cmd} {' '.join(map(str, params))}")
new_d = ' '.join(normalized)
report_header = f"[{path_id}-Analysis] Type: {path_type}"
full_report = [report_header, f"Original path: {original_d}"] + report
if changed:
full_report.append(f"Modified path: {new_d}")
else:
full_report.append("Path not modified")
return new_d, '\n'.join(full_report)
def optimize_svg(input_path, output_path):
"""Process single SVG file with all optimizations"""
try:
# Register namespace
ET.register_namespace('', 'http://www.w3.org/2000/svg')
# Parse SVG file
tree = ET.parse(input_path)
root = tree.getroot()
print(f"\nProcessing file: {os.path.basename(input_path)}")
print("="*60)
# Create parent map
parent_map = {c: p for p in tree.iter() for c in p}
# 1. Remove xlink namespace
for attr in list(root.attrib):
if 'xlink' in attr:
del root.attrib[attr]
# 2. Set standard dimensions
root.set('width', '1e3')
root.set('height', '1e3')
root.set('viewBox', '0 0 1e3 1e3')
# 3. Remove all clipPath definitions and references
defs = root.find('{http://www.w3.org/2000/svg}defs')
if defs is not None:
clip_paths = defs.findall('{http://www.w3.org/2000/svg}clipPath')
for cp in clip_paths:
defs.remove(cp)
if len(defs) == 0:
root.remove(defs)
# 4. Remove clip-path attributes
for elem in tree.iter():
if 'clip-path' in elem.attrib:
del elem.attrib['clip-path']
# 5. Force square line caps
for g in root.findall('.//{http://www.w3.org/2000/svg}g'):
g.set('stroke-linecap', 'square')
# 6. Remove dashed line styles
for elem in tree.iter():
if 'stroke-dasharray' in elem.attrib:
del elem.attrib['stroke-dasharray']
# 7. Completely remove empty groups
removed_groups = True
while removed_groups:
removed_groups = False
for g in root.findall('.//{http://www.w3.org/2000/svg}g'):
is_empty = (
len(g) == 0 and
not (g.text or '').strip() and
not (g.tail or '').strip() and
all(not k.startswith('{') for k in g.attrib))
if is_empty:
parent = parent_map.get(g)
if parent is not None:
parent.remove(g)
removed_groups = True
parent_map = {c: p for p in tree.iter() for c in p}
# 8. Convert polylines to paths
for polyline in root.findall('.//{http://www.w3.org/2000/svg}polyline'):
points = polyline.get('points', '').strip()
if points:
coords = [p for p in re.split(r'[\s,]', points) if p]
path_data = []
for i in range(0, len(coords), 2):
if i == 0:
path_data.append(f"M {coords[i]} {coords[i+1]}")
else:
path_data.append(f"L {coords[i]} {coords[i+1]}")
path = ET.Element('{http://www.w3.org/2000/svg}path')
new_d, analysis_report = analyze_and_normalize_path(
' '.join(path_data),
'Line segment',
"Polyline conversion"
)
path.set('d', new_d)
print(f"\n[Polyline conversion analysis]\n{analysis_report}")
for attr, value in polyline.attrib.items():
if attr not in ('points', 'stroke-dasharray'):
path.set(attr, value)
parent = parent_map.get(polyline)
if parent is not None:
parent.remove(polyline)
parent.append(path)
# 9. Normalize path directions (final step)
group_num = 0
for g in root.findall('.//{http://www.w3.org/2000/svg}g'):
group_num += 1
path_num = 0
group_report = []
for path in g.findall('.//{http://www.w3.org/2000/svg}path'):
path_num += 1
if 'd' not in path.attrib:
continue
# Auto-detect path type
path_type = 'Arc' if 'A' in path.get('d') else 'Line segment'
path_id = f"Group{group_num}-Path{path_num}"
new_d, analysis_report = analyze_and_normalize_path(
path.get('d'),
path_type,
path_id
)
if new_d != path.get('d'):
path.set('d', new_d)
group_report.append(analysis_report)
# Print all path reports for current group
if group_report:
print(f"\n=== Group {group_num} Path Analysis ===")
print('\n\n'.join(group_report))
# 10. Update colors and line width
for elem in root.findall('.//*[@stroke]'):
stroke = elem.get('stroke', '').lower()
if stroke == '#0ff' or stroke == 'rgb(0,255,255)':
elem.set('stroke', '#ffe31b')
elif stroke == '#000' or stroke == 'rgb(255,0,0)'or stroke == 'rgb(0,0,0)':
elem.set('stroke', '#ffe31b')
elem.set('stroke-width', f'{1}px')
# Generate final XML
rough_string = ET.tostring(root, encoding='utf-8', xml_declaration=True)
rough_string = rough_string.replace(b'standalone="no"', b'')
# Format output (remove empty lines)
reparsed = minidom.parseString(rough_string)
pretty_svg = reparsed.toprettyxml(indent=' ', encoding='utf-8')
pretty_svg = b'\n'.join(
line for line in pretty_svg.splitlines()
if line.strip()
).replace(b'<?xml version="1.0" ?>', b'<?xml version="1.0" encoding="utf-8"?>')
with open(output_path, 'wb') as f:
f.write(pretty_svg)
print("\n" + "="*60)
return True
except Exception as e:
print(f"\nProcessing error: {str(e)}")
print("="*60)
return False
def batch_process_svgs(input_dir, output_dir):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
success_count = 0
failure_count = 0
for filename in os.listdir(input_dir):
if os.path.isdir(os.path.join(input_dir, filename)):
continue
if filename.lower().endswith('.svg') or '_new.svg' in filename.lower():
input_path = os.path.join(input_dir, filename)
output_filename = filename.replace('_new.svg', '_optimized.svg')
output_path = os.path.join(output_dir, output_filename)
if optimize_svg(input_path, output_path):
success_count += 1
print(f"✓ Processed successfully: {filename}{output_filename}")
else:
failure_count += 1
print(f"✗ Processing failed: {filename}")
print("\n" + "="*60 + "\n")
print("\nProcessing summary:")
print(f"Successfully processed: {success_count} files")
print(f"Failed to process: {failure_count} files")
if __name__ == '__main__':
input_dir = os.environ.get('RD_CONF_OFBOGEN')
output_dir = os.environ.get('RD_CONF_WORK')
if not input_dir or not output_dir:
print("Error: Environment variable RD_CONF_WORK is not set")
exit(1)
if not os.path.exists(input_dir):
print(f"Error: Input directory '{input_dir}' does not exist")
exit(1)
print(f"Starting SVG file processing, working directory: {input_dir}")
print("=" * 50)
batch_process_svgs(input_dir, output_dir)
print("Processing completed!")
@@ -0,0 +1,247 @@
import os
from lxml import etree
import re
from math import sqrt, isclose
from collections import defaultdict
# Constants
WEICHEN_PROFILE_WIDTH = 42.000
L_R_TARGET_LENGTH = 55.7237
DELTA_TARGET_LENGTH = 53.5437
MATCH_TOLERANCE = 0.1 # Matching tolerance 0.1mm
def process_svg_files(directory):
print(f"🔍 Scanning directory: {directory}")
print("-" * 60)
result_stats = {
'total_files': 0,
'L_R_files': {'with_pairs': [], 'no_pairs': [], 'excess_pairs': []},
'Delta_files': {'with_triples': [], 'no_triples': [], 'excess_triples': []}
}
for filename in os.listdir(directory):
if not filename.endswith('.svg'):
continue
filepath = os.path.join(directory, filename)
result_stats['total_files'] += 1
if '_L_' in filename or '_R_' in filename:
print(f"\n📄 Processing L/R file: {filename}")
process_lr_file(filepath, filename, result_stats)
elif 'DeltaWeiche' in filename:
print(f"\n📄 Processing DeltaWeiche file: {filename}")
process_delta_file(filepath, filename, result_stats)
# Print final statistics
print("\n" + "="*60)
print("📊 Final processing statistics:")
print(f"Total files processed: {result_stats['total_files']}")
print("\nL/R type files results:")
print(f"✅ Files with matching path pairs: {len(result_stats['L_R_files']['with_pairs'])}")
print(f" {result_stats['L_R_files']['with_pairs']}")
print(f"⚠️ Files with no matching paths: {len(result_stats['L_R_files']['no_pairs'])}")
print(f" {result_stats['L_R_files']['no_pairs']}")
print(f"❌ Files with >2 matching paths: {len(result_stats['L_R_files']['excess_pairs'])}")
print(f" {result_stats['L_R_files']['excess_pairs']}")
print("\nDeltaWeiche type files results:")
print(f"✅ Files with matching path triples: {len(result_stats['Delta_files']['with_triples'])}")
print(f" {result_stats['Delta_files']['with_triples']}")
print(f"⚠️ Files with no matching paths: {len(result_stats['Delta_files']['no_triples'])}")
print(f" {result_stats['Delta_files']['no_triples']}")
print(f"❌ Files with ≠3 matching paths: {len(result_stats['Delta_files']['excess_triples'])}")
print(f" {result_stats['Delta_files']['excess_triples']}")
print("\n✨ Processing complete!")
def process_lr_file(filepath, filename, stats):
try:
tree = etree.parse(filepath)
root = tree.getroot()
# Find all straight line paths
straight_lines = find_straight_lines(root)
print(f" 📊 Found {len(straight_lines)} straight paths")
# Print all straight paths
print("\n 🔍 All straight path details:")
for line in straight_lines:
print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→"
f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm")
# Group by length
length_groups = group_lines_by_length(straight_lines)
# Only print groups with exactly 2 paths
print("\n 🔍 Same-length path groups (2 paths):")
perfect_pairs = [group for group in length_groups.values() if len(group) == 2]
for group in perfect_pairs:
print(f" ┌ Length group ({group[0]['length']:.4f}mm, 2 paths)")
for line in group:
print(f" │ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→"
f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})")
print("" + "" * 40)
if len(perfect_pairs) == 1:
pair = perfect_pairs[0]
original_length = pair[0]['length']
scale_factor = WEICHEN_PROFILE_WIDTH / original_length
print(f"\n 🔄 Scaling calculation (based on length {original_length:.4f}mm):")
print(f" Scale factor: {scale_factor:.4f}")
# Print scaled lengths
print("\n 🔍 Scaled path lengths:")
for line in straight_lines:
scaled_len = line['length'] * scale_factor
print(f" Path{line['index']}: {line['length']:.4f}mm → {scaled_len:.4f}mm")
# Find path matching target length (within tolerance)
target_path = find_target_path(straight_lines, scale_factor, L_R_TARGET_LENGTH)
if target_path:
target_path['element'].set('style', 'stroke:none;fill:none;')
tree.write(filepath, encoding='utf-8', xml_declaration=True)
print(f"\n ✅ Hid path{target_path['index']} matching target length {L_R_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)")
stats['L_R_files']['with_pairs'].append(filename)
else:
print(f"\n ❌ No path found matching {L_R_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)")
stats['L_R_files']['no_pairs'].append(filename)
elif len(perfect_pairs) > 1:
print(f"\n ❗ Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}")
stats['L_R_files']['excess_pairs'].append(filename)
else:
print("\n ❌ No same-length path pairs found")
stats['L_R_files']['no_pairs'].append(filename)
except Exception as e:
print(f" ❌ Processing failed: {str(e)}")
def process_delta_file(filepath, filename, stats):
try:
tree = etree.parse(filepath)
root = tree.getroot()
# Find all straight line paths
straight_lines = find_straight_lines(root)
print(f" 📊 Found {len(straight_lines)} straight paths")
# Print all straight paths
print("\n 🔍 All straight path details:")
for line in straight_lines:
print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→"
f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm")
# Group by length
length_groups = group_lines_by_length(straight_lines)
# Only print groups with exactly 3 paths
print("\n 🔍 Same-length path groups (3 paths):")
perfect_triples = [group for group in length_groups.values() if len(group) == 3]
for group in perfect_triples:
print(f" ┌ Length group ({group[0]['length']:.4f}mm, 3 paths)")
for line in group:
print(f" │ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→"
f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})")
print("" + "" * 40)
if len(perfect_triples) == 1:
triple = perfect_triples[0]
original_length = triple[0]['length']
scale_factor = WEICHEN_PROFILE_WIDTH / original_length
print(f"\n 🔄 Scaling calculation (based on length {original_length:.4f}mm):")
print(f" Scale factor: {scale_factor:.4f}")
# Print scaled lengths
print("\n 🔍 Scaled path lengths:")
for line in straight_lines:
scaled_len = line['length'] * scale_factor
print(f" Path{line['index']}: {line['length']:.4f}mm → {scaled_len:.4f}mm")
# Find all paths matching target length (there might be multiple)
target_paths = [line for line in straight_lines
if abs(line['length'] * scale_factor - DELTA_TARGET_LENGTH) < MATCH_TOLERANCE]
if target_paths:
for target in target_paths:
target['element'].set('style', 'stroke:none;fill:none;')
tree.write(filepath, encoding='utf-8', xml_declaration=True)
print(f"\n ✅ Hid {len(target_paths)} paths matching target length {DELTA_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm):")
for target in target_paths:
print(f" - Path{target['index']}")
stats['Delta_files']['with_triples'].append(filename)
else:
print(f"\n ❌ No path found matching {DELTA_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)")
stats['Delta_files']['no_triples'].append(filename)
elif len(perfect_triples) > 1:
print(f"\n ❗ Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}")
stats['Delta_files']['excess_triples'].append(filename)
else:
print("\n ❌ No same-length path groups (3 paths) found")
stats['Delta_files']['no_triples'].append(filename)
except Exception as e:
print(f" ❌ Processing failed: {str(e)}")
def find_straight_lines(root):
"""Find all straight line paths"""
lines = []
paths = root.xpath('.//svg:path|.//svg:g//svg:path',
namespaces={'svg': 'http://www.w3.org/2000/svg'})
for i, path in enumerate(paths, 1):
d = path.get('d', '').strip()
if not d:
continue
if is_straight_line(d):
length, (p1, p2) = calculate_line_length(d)
if length > 0:
lines.append({
'index': i,
'element': path,
'length': round(length, 4), # Keep 4 decimal places
'p1': (round(p1[0], 2), round(p1[1], 2)), # Coordinates rounded to 2 decimals
'p2': (round(p2[0], 2), round(p2[1], 2))
})
return lines
def group_lines_by_length(lines):
"""Group straight paths by length"""
groups = defaultdict(list)
for line in lines:
groups[line['length']].append(line)
return groups
def find_target_path(lines, scale_factor, target_length):
"""Find path that matches target length after scaling (within tolerance)"""
for line in lines:
scaled_length = line['length'] * scale_factor
if abs(scaled_length - target_length) < MATCH_TOLERANCE:
return line
return None
def is_straight_line(d):
"""Check if path is strictly a straight line"""
commands = [cmd[0].upper() for cmd in re.findall('([A-Za-z])', d)]
return len(commands) == 2 and commands[0] == 'M' and commands[1] == 'L'
def calculate_line_length(d):
"""Calculate line length and return endpoints"""
points = []
for cmd, params in re.findall('([A-Za-z])([^A-Za-z]*)', d):
if cmd.upper() in ('M', 'L'):
coords = [float(p) for p in re.findall('[-+]?\d*\.\d+|[-+]?\d+', params)]
points.append((coords[0], coords[1]))
if len(points) != 2:
return 0, ((0,0), (0,0))
length = sqrt((points[1][0]-points[0][0])**2 + (points[1][1]-points[0][1])**2)
return round(length, 4), (points[0], points[1]) # Length rounded to 4 decimals
if __name__ == '__main__':
# Set SVG files directory path
# svg_directory = r'C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\work'
svg_directory =os.environ.get('RD_CONF_WORK')
process_svg_files(svg_directory)
@@ -0,0 +1,158 @@
import os
import re
import xml.etree.ElementTree as ET
from typing import Tuple, List
def parse_svg_path(d: str) -> List[Tuple[float, float]]:
"""Extract all coordinates from SVG path data (including curve control points)"""
points = []
commands = re.findall(
r'([MmLlCcQqAaHhVvZz])([^MmLlCcQqAaHhVvZz]*)',
d.strip().replace(',', ' ')
)
current_pos = (0.0, 0.0)
for cmd, args in commands:
args = list(map(float, re.findall(r'[-+]?\d*\.?\d+', args)))
if cmd in ('M', 'm', 'L', 'l'): # Move/line commands
for i in range(0, len(args), 2):
x, y = args[i], args[i+1]
if cmd.islower(): # Relative coordinates
x += current_pos[0]
y += current_pos[1]
points.append((x, y))
current_pos = (x, y)
elif cmd in ('C', 'c'): # Cubic Bezier curves
for i in range(0, len(args), 6):
x1, y1, x2, y2, x, y = args[i:i+6]
if cmd.islower():
x1 += current_pos[0]; y1 += current_pos[1]
x2 += current_pos[0]; y2 += current_pos[1]
x += current_pos[0]; y += current_pos[1]
points.extend([(x1, y1), (x2, y2), (x, y)])
current_pos = (x, y)
elif cmd in ('A', 'a'): # Arc commands (start/end points only)
for i in range(0, len(args), 7):
x, y = args[i+5], args[i+6]
if cmd.islower():
x += current_pos[0]
y += current_pos[1]
points.append((x, y))
current_pos = (x, y)
return points
def calculate_bounding_box(svg_file: str) -> Tuple[float, float, float, float]:
"""Calculate true bounding box of all paths in SVG"""
tree = ET.parse(svg_file)
root = tree.getroot()
all_points = []
for path in root.findall('.//{http://www.w3.org/2000/svg}path'):
d = path.get('d', '')
all_points.extend(parse_svg_path(d))
if not all_points:
return (0, 0, 0, 0)
x_min = min(p[0] for p in all_points)
x_max = max(p[0] for p in all_points)
y_min = min(p[1] for p in all_points)
y_max = max(p[1] for p in all_points)
return (x_min, y_min, x_max, y_max)
def normalize_stroke_widths2(root, scale):
"""Normalize stroke widths to ensure consistent appearance after scaling"""
for elem in root.iter():
if 'stroke-width' in elem.attrib:
# Remove existing stroke-width
del elem.attrib['stroke-width']
# Apply scaled stroke width (e.g., 1px → 1/scale)
elem.set('stroke-width', f'{1/scale:.6f}px')
def apply_non_scaling_stroke(root):
for elem in root.iter():
if 'stroke' in elem.attrib and elem.attrib['stroke'] != 'none':
# set stroke-width=1no unit
elem.set('stroke-width', '1')
# set vector-effect
elem.set('vector-effect', 'non-scaling-stroke')
def scale_svg_file(input_path: str, output_path: str):
"""Scale SVG file with consistent stroke widths"""
print(f"\nProcessing: {os.path.basename(input_path)}")
tree = ET.parse(input_path)
root = tree.getroot()
# Calculate original bounding box
x_min, y_min, x_max, y_max = calculate_bounding_box(input_path)
width = x_max - x_min
height = y_max - y_min
print(f"Original bounding box: ({x_min:.3f}, {y_min:.3f}) to ({x_max:.3f}, {y_max:.3f})")
print(f"Original dimensions: {width:.3f} (w) × {height:.3f} (h)")
# Determine scaling base (larger dimension → 1000px)
if width > height:
scale = 1000.0 / width
new_width = 1000.0
new_height = round(height * scale,3)
print(f"Scaling base: Width (larger dimension)")
else:
scale = 1000.0 / height
new_height = 1000.0
new_width = round(width * scale,3)
print(f"Scaling base: Height (larger dimension)")
print(f"Scale factor: {scale:.6f}")
print(f"New dimensions: {new_width:.3f}px × {new_height:.3f}px")
print(f"ViewBox: 0 0 {new_width:.3f} {new_height:.3f}")
normalize_stroke_widths2(root, scale)
#apply_non_scaling_stroke(root)
#
# Update SVG attributes
root.set('viewBox', f'0 0 {new_width:.3f} {new_height:.3f}')
root.set('width', f'{new_width:.3f}')
root.set('height', f'{new_height:.3f}')
# Apply translation and scaling
for g in root.findall('{http://www.w3.org/2000/svg}g'):
transform = g.get('transform', '')
new_transform = f'translate({-x_min*scale},{-y_min*scale}) scale({scale})'
if transform:
new_transform = f'{transform} {new_transform}'
g.set('transform', new_transform)
# Save modified SVG
tree.write(output_path, encoding='utf-8', xml_declaration=True)
print(f"Finished processing: {os.path.basename(input_path)}")
def batch_process_svg(input_dir: str, output_dir: str):
"""Batch process SVG files in directory (non-recursive)"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
svg_files = [
f for f in os.listdir(input_dir)
if f.lower().endswith('.svg') and os.path.isfile(os.path.join(input_dir, f))
]
if not svg_files:
print("No SVG files found in the input directory!")
return
print(f"\nFound {len(svg_files)} SVG files to process")
for filename in svg_files:
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
scale_svg_file(input_path, output_path)
print("\nAll files processed successfully!")
if __name__ == '__main__':
input_dir = os.environ.get('RD_CONF_WORK')
output_dir = os.environ.get('RD_CONF_WORK')
batch_process_svg(input_dir, output_dir)
@@ -0,0 +1,160 @@
import re
import os
import xml.etree.ElementTree as ET
from typing import List, Dict, Tuple
def process_svg_file(input_path: str, output_path: str) -> bool:
"""Process SVG file while preserving original dimensions and viewBox"""
try:
# Parse SVG file
tree = ET.parse(input_path)
root = tree.getroot()
# Store original dimensions and viewBox
original_attrs = {
'width': root.attrib.get('width', '100%'),
'height': root.attrib.get('height', '100%'),
'viewBox': root.attrib.get('viewBox', '')
}
# Remove namespace prefixes
for elem in root.iter():
if '}' in elem.tag:
elem.tag = elem.tag.split('}', 1)[1]
for attr in list(elem.attrib):
if '}' in attr:
new_attr = attr.split('}', 1)[1]
elem.attrib[new_attr] = elem.attrib[attr]
del elem.attrib[attr]
# Process all groups with transforms
for g in root.findall('g'):
if 'transform' in g.attrib:
# Parse transform and convert to matrix
transform = g.attrib['transform']
matrix_str = convert_transform_to_matrix(transform)
# Update group attributes
g.attrib['transform'] = matrix_str
g.attrib['stroke'] = '#ffe31b' # Force stroke color
g.attrib['fill'] = 'none'
g.attrib['stroke-linecap'] = 'square'
g.attrib['vector-effect'] = 'non-scaling-stroke'
# Format paths within group
for path in g.findall('path'):
path.attrib['d'] = simplify_path_data(path.attrib.get('d', ''))
path.tail = '\n ' # Maintain consistent indentation
# Set root attributes while preserving original dimensions
root.attrib.update({
'version': '1.1',
'xmlns': 'http://www.w3.org/2000/svg',
'width': original_attrs['width'],
'height': original_attrs['height'],
'viewBox': original_attrs['viewBox'],
'fill-rule': 'evenodd',
'stroke-linecap': 'round',
'stroke-linejoin': 'round',
'space': 'preserve'
})
# Format XML with proper indentation
indent(root)
# Generate XML string
xml_str = ET.tostring(root, encoding='unicode')
xml_str = '<?xml version="1.0" encoding="UTF-8"?>\n' + xml_str
# Clean up formatting
xml_str = re.sub(r'\n\s*\n', '\n', xml_str)
xml_str = re.sub(r'>\s+<', '>\n<', xml_str)
# Write to file
with open(output_path, 'w', encoding='utf-8') as f:
f.write(xml_str)
print(f"Processed: {os.path.basename(input_path)}")
return True
except Exception as e:
print(f"Failed {os.path.basename(input_path)}: {str(e)}")
return False
def convert_transform_to_matrix(transform: str) -> str:
"""Convert transform string to matrix notation with 4 decimal places"""
tx = ty = 0.0
translate_match = re.search(r'translate\(([^,]+),\s*([^)]+)\)', transform)
if translate_match:
tx = float(translate_match.group(1))
ty = float(translate_match.group(2))
scale = 1.0
scale_match = re.search(r'scale\(([^)]+)\)', transform)
if scale_match:
scale = float(scale_match.group(1))
return f"matrix({scale:.4f} 0 0 {scale:.4f} {tx:.2f} {ty:.2f})"
def simplify_path_data(d: str) -> str:
"""Simplify path data while maintaining relative commands"""
d = re.sub(r'\s+', ' ', d.strip())
def format_number(num_str: str) -> str:
try:
num = float(num_str)
if abs(num) < 0.001 and num != 0:
return f"{num:.0e}".replace('e-0', 'e-')
if abs(num - 1000) < 0.1:
return '1e3'
if abs(num - round(num, 3)) < 0.0001:
return f"{round(num, 3):g}"
return num_str
except ValueError:
return num_str
parts = []
for part in re.split(r'([ ,])', d):
if re.match(r'^[-+]?\d*\.?\d+$', part):
parts.append(format_number(part))
else:
parts.append(part)
return ''.join(parts).replace(' ,', ',')
def indent(elem: ET.Element, level: int = 0):
"""Properly indent XML elements"""
indent_str = "\n" + level * " "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = indent_str + " "
if not elem.tail or not elem.tail.strip():
elem.tail = indent_str
for child in elem:
indent(child, level + 1)
if not elem.tail or not elem.tail.strip():
elem.tail = indent_str
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = indent_str
def batch_process_svgs(input_dir: str, output_dir: str):
"""Process all SVG files in a directory"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
success_count = 0
for filename in sorted(os.listdir(input_dir)):
if filename.lower().endswith('.svg'):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, filename)
if process_svg_file(input_path, output_path):
success_count += 1
print(f"\nCompleted: {success_count} files processed")
if __name__ == '__main__':
input_dir = os.environ.get('RD_CONF_WORK')
output_dir = os.environ.get('RD_CONF_OUTPUT_OFBOGEN')
# Example usage:
batch_process_svgs(input_dir, output_dir)
@@ -0,0 +1,194 @@
import os
import re
import json
from xml.etree import ElementTree as ET
from xml.dom import minidom
def extract_sivasnr(filename):
"""Extract numeric ID from filename"""
match = re.search(r'(\d+)\.svg$', filename)
return match.group(1) if match else None
def should_skip_stroke_width(element_attrib):
"""Check if element should skip stroke-width setting"""
# Check style attribute
if 'style' in element_attrib:
style = element_attrib['style'].lower()
if 'stroke:none' in style and 'fill:none' in style:
return True
# Check separate stroke and fill attributes
stroke = element_attrib.get('stroke', '').lower()
fill = element_attrib.get('fill', '').lower()
return stroke == 'none' and fill == 'none'
def create_xml_structure(svg_root):
"""Create target XML structure preserving all elements"""
# Create base structure
new_root = ET.Element("svg", xmlns="http://www.w3.org/2000/svg")
g_layer = ET.SubElement(new_root, "g", transform="rotate(0)")
# Add inner SVG container
inner_svg = ET.SubElement(g_layer, "svg", {
"viewBox": svg_root.attrib.get("viewBox", "0 0 1000 1000"),
"preserveAspectRatio": "none",
"position": "absolute",
"overflow": "visible"
})
# Transfer all content
for elem in svg_root:
if elem.tag.endswith("}g"):
# Process group with namespace
new_g = ET.SubElement(inner_svg, "g", attrib={
k: v for k, v in elem.attrib.items()
if not k.startswith("xmlns")
})
# Process all elements within group
for child in elem:
child_tag = child.tag.split("}")[-1] # Remove namespace
child_attrib = {}
# Preserve all original attributes (except namespace)
for k, v in child.attrib.items():
if not k.startswith("xmlns"):
child_attrib[k] = v
# Only add stroke-width if not stroke:none;fill:none
if not should_skip_stroke_width(child.attrib):
child_attrib["stroke-width"] = "1px"
# Create element with preserved attributes
ET.SubElement(new_g, child_tag, attrib=child_attrib)
else:
# Process standalone elements (path, circle, etc.)
elem_tag = elem.tag.split("}")[-1] # Remove namespace
elem_attrib = {}
# Preserve all original attributes (except namespace)
for k, v in elem.attrib.items():
if not k.startswith("xmlns"):
elem_attrib[k] = v
# Only add stroke-width if not stroke:none;fill:none
if not should_skip_stroke_width(elem.attrib):
elem_attrib["stroke-width"] = "1px"
ET.SubElement(inner_svg, elem_tag, attrib=elem_attrib)
return new_root
def format_xml(element):
"""Generate formatted XML string"""
# Generate XML with declaration
xml_str = ET.tostring(element, encoding="UTF-8", xml_declaration=True)
# Pretty format with 2-space indent
dom = minidom.parseString(xml_str)
pretty_xml = dom.toprettyxml(indent=" ", encoding="UTF-8").decode("UTF-8")
# Remove extra empty lines (preserve structure)
lines = []
for line in pretty_xml.split("\n"):
if line.strip() or line.lstrip().startswith("</"):
lines.append(line)
return "\n".join(lines)
def convert_svg_to_xml(svg_path, output_dir):
"""Convert SVG to target XML format"""
sivasnr = extract_sivasnr(os.path.basename(svg_path))
if not sivasnr:
raise ValueError(f"Invalid filename format: {os.path.basename(svg_path)}")
# Parse original SVG
try:
tree = ET.parse(svg_path)
svg_root = tree.getroot()
except Exception as e:
raise ValueError(f"SVG parsing error: {str(e)}")
# Build new structure
new_xml = create_xml_structure(svg_root)
formatted_xml = format_xml(new_xml)
# Ensure output directory exists
os.makedirs(output_dir, exist_ok=True)
output_path = os.path.join(output_dir, f"{sivasnr}.xml")
# Write file (UTF-8 encoding)
with open(output_path, "w", encoding="UTF-8") as f:
f.write(formatted_xml)
return f"SSG/shapes/svg/{sivasnr}.xml"
def update_txt_file(txt_path, xml_rel_path):
"""Update path in TXT file"""
try:
with open(txt_path, "r", encoding="UTF-8-sig") as f:
data = json.load(f)
if "srcSVG" not in data:
raise ValueError("Missing srcSVG field")
data["srcSVG"] = xml_rel_path
with open(txt_path, "w", encoding="UTF-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
return True
except Exception as e:
print(f"Update failed {os.path.basename(txt_path)}: {str(e)}")
return False
def process_files(svg_dir, txt_dir, output_dir):
"""Batch process files"""
if not all(map(os.path.exists, [svg_dir, txt_dir])):
raise FileNotFoundError("Input directory not found")
results = {"success": 0, "failed": 0}
for svg_file in os.listdir(svg_dir):
if not svg_file.endswith(".svg"):
continue
svg_path = os.path.join(svg_dir, svg_file)
sivasnr = extract_sivasnr(svg_file)
if not sivasnr:
print(f"Skipping invalid file: {svg_file}")
results["failed"] += 1
continue
try:
# Convert file
xml_rel_path = convert_svg_to_xml(svg_path, output_dir)
# Update TXT
txt_path = os.path.join(txt_dir, f"{sivasnr}.txt")
if not os.path.exists(txt_path):
raise FileNotFoundError(f"Corresponding TXT file not found: {sivasnr}.txt")
if update_txt_file(txt_path, xml_rel_path):
print(f"Success: {svg_file}{sivasnr}.xml")
results["success"] += 1
else:
results["failed"] += 1
except Exception as e:
print(f"Processing failed {svg_file}: {str(e)}")
results["failed"] += 1
# Output report
print(f"\nProcessing complete: {results['success']} succeeded, {results['failed']} failed")
if __name__ == "__main__":
# Configuration - modify these paths as needed
SVG_INPUT_FOLDER = os.environ.get('RD_CONF_OUTPUT_OFBOGEN') # Folder containing SVG files
SVG_OUTPUT_FOLDER = os.environ.get("SVG_PATH","svg")
PRORPS_FOLDER = os.environ.get("PROPS_PATH", "props") # Folder containing txt files
# Start processing
process_files(SVG_INPUT_FOLDER, PRORPS_FOLDER, SVG_OUTPUT_FOLDER)
print("\nProcessing complete.")
@@ -1,154 +0,0 @@
''' Key Analysis Points:
Data Safety:
Uses safe_float() to handle potential data conversion issues
Creates copies of items to avoid modifying original data
Geometric Calculations:
Converts angles to radians for trigonometric functions
Performs width/height calculations based on center line measurements and angles
Rounds results to 3 decimal places for consistency
Validation:
Compares calculated values with original values
Flags discrepancies with "Please verify" status
Provides detailed difference metrics
Error Handling:
Preserves original data when processing fails
Tracks and reports all errors
Provides comprehensive statistics
Output:
Generates a new JSON file with calculated fields
Provides detailed console output for verification
Maintains original structure while adding new calculated fields
The script is designed to process SVG measurement data, perform geometric validations, and produce an enhanced dataset while providing thorough feedback about the processing results. '''
import json
import math
import os
def safe_float(value, default=0.0):
"""Safely convert value to float, return default if conversion fails"""
try:
return float(value) if value != '' else default
except (ValueError, TypeError):
return default
def calculate_attributes(item):
"""Calculate and add new attributes to the item based on geometric calculations"""
# Create a copy of the item to avoid modifying the original
processed_item = item.copy()
# Ensure all numeric fields have valid values using safe_float
processed_item["center_line_width_mm"] = safe_float(item.get("center_line_width_mm", 0))
processed_item["center_line_height_mm"] = safe_float(item.get("center_line_height_mm", 0))
processed_item["Objekt_width_mm"] = safe_float(item.get("Objekt_width_mm", 0))
processed_item["Objekt_height_mm"] = safe_float(item.get("Objekt_height_mm", 0))
processed_item["Winkel"] = safe_float(item.get("Winkel", 0))
# Convert angle to radians for trigonometric calculations
winkel_rad = math.radians(processed_item["Winkel"])
sin_value = math.sin(winkel_rad)
cos_value = math.cos(winkel_rad)
# Calculate new dimensions with 3 decimal places precision
if processed_item["Winkel"]!=180:
calculated_width = processed_item["center_line_width_mm"]
calculated_height = processed_item["center_line_height_mm"] + 21.040*2
else:
calculated_width = processed_item["center_line_width_mm"]+21.040
calculated_height = processed_item["center_line_height_mm"]+ 21.040 + 21.040
processed_item["calculated_objekt_width_mm"] = round(calculated_width, 3)
processed_item["calculated_objekt_height_mm"] = round(calculated_height, 3)
# Calculate differences between original and calculated values
width_diff = round(processed_item["Objekt_width_mm"] - processed_item["calculated_objekt_width_mm"], 3)
height_diff = round(processed_item["Objekt_height_mm"] - processed_item["calculated_objekt_height_mm"], 3)
# Prepare comparison results for console output (not saved to JSON)
comparison_results = {
"width": {
"calculated": processed_item["calculated_objekt_width_mm"],
"original": processed_item["Objekt_width_mm"],
"difference": width_diff,
"status": "OK" if abs(width_diff) < 0.001 else "Please verify"
},
"height": {
"calculated": processed_item["calculated_objekt_height_mm"],
"original": processed_item["Objekt_height_mm"],
"difference": height_diff,
"status": "OK" if abs(height_diff) < 0.001 else "Please verify"
}
}
return processed_item, comparison_results
def process_json_file(input_file, output_file):
"""Main function to process JSON file and generate output"""
# Read input file
try:
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
except FileNotFoundError:
print(f"Error: Input file '{input_file}' not found")
return
except json.JSONDecodeError as e:
print(f"JSON parsing error: {e}")
return
# Verify data is a list
if not isinstance(data, list):
print("Error: JSON data should be an array")
return
# Process data
processed_data = []
error_items = []
print("\nStarting JSON data processing...\n")
for idx, item in enumerate(data, start=1):
try:
processed_item, comparison = calculate_attributes(item)
processed_data.append(processed_item)
# Print comparison results to console
print(f"Item {idx} [{item.get('SVGname', 'Unnamed')}] comparison results:")
print(f" Width: Calculated={comparison['width']['calculated']} | Original={comparison['width']['original']} | Difference={comparison['width']['difference']} | {comparison['width']['status']}")
print(f" Height: Calculated={comparison['height']['calculated']} | Original={comparison['height']['original']} | Difference={comparison['height']['difference']} | {comparison['height']['status']}")
print("-" * 60)
except Exception as e:
error_items.append((idx, str(e)))
# Preserve original data (without any processed fields)
processed_data.append(item)
# Print error message to console
print(f"Error processing item {idx} [{item.get('SVGname', 'Unnamed')}]: {str(e)}")
print("-" * 60)
# Write output file
try:
with open(output_file, 'w', encoding='utf-8') as f:
json.dump(processed_data, f, indent=4, ensure_ascii=False)
print(f"\nProcessing complete. Results saved to {output_file}")
except IOError as e:
print(f"Error writing output file: {e}")
return
# Print statistics
total_items = len(data)
success_items = total_items - len(error_items)
print("\nProcessing statistics:")
print(f"Total items: {total_items}")
print(f"Successfully processed: {success_items}")
print(f"Failed items: {len(error_items)}")
# Example usage
if __name__ == "__main__":
json_path=os.environ.get("JSON_PATH","JSON")
input_filename = os.path.join(json_path,"1_SVGErfassung_updated_new_input.json") # Replace with your input filename
output_filename = os.path.join(json_path,"1_SVGErfassung_updated_new_output.json") # Replace with desired output filename
process_json_file(input_filename, output_filename)
@@ -1,150 +0,0 @@
"""
SVG XML Batch Modifier Script
This script:
1. Reads a JSON array of items
2. For each item, extracts the "Sivasnr" value
3. Locates and modifies the corresponding XML file
4. Provides comprehensive reporting
"""
import json
import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element, SubElement, tostring
def process_xml_file(xml_path):
"""
Process a single XML file with proper namespace handling
Returns modification statistics
"""
try:
tree = ET.parse(xml_path)
root = tree.getroot()
# Register and handle SVG namespace
ET.register_namespace('', 'http://www.w3.org/2000/svg')
namespaces = {'svg': 'http://www.w3.org/2000/svg'}
stats = {
'ffe31b_groups': 0,
'ec2525_groups': 0,
'elements_modified': 0,
'modified': False
}
# Process all group elements
for g in root.findall('.//svg:g', namespaces):
stroke = g.get('stroke')
if stroke == "#ffe31b":
stats['ffe31b_groups'] += 1
if 'stroke-width' in g.attrib:
del g.attrib['stroke-width']
stats['modified'] = True
if 'stroke-miterlimit' in g.attrib:
del g.attrib['stroke-miterlimit']
stats['modified'] = True
for child in g.findall('.//svg:path', namespaces):
child.set('stroke-width', '1px')
stats['elements_modified'] += 1
stats['modified'] = True
elif stroke == "#ec2525":
stats['ec2525_groups'] += 1
for attr in ['stroke', 'stroke-width', 'stroke-linejoin']:
if attr in g.attrib:
del g.attrib[attr]
stats['modified'] = True
for child in g.findall('.//svg:path[@stroke-width="1px"]', namespaces):
del child.attrib['stroke-width']
child.set('style', 'stroke:#ec2525;stroke-width:2px')
stats['elements_modified'] += 1
stats['modified'] = True
# Save changes if modified
if stats['modified']:
xml_str = ET.tostring(root, encoding='unicode')
xml_str = xml_str.replace('><', '>\n<').replace('</svg>', '\n</svg>')
with open(xml_path, 'w', encoding='utf-8') as f:
f.write(xml_str)
return stats
except Exception as e:
print(f" Error processing file: {str(e)}")
return None
def main():
"""
Main processing function
"""
json_path=os.environ.get("JSON_PATH","JSON")
json_file_path = os.path.join(json_path,"1_SVGErfassung_updated_new_output.json")
svg_folder_path = os.environ.get("XML_PATH","svg")
try:
# Read and parse JSON file
with open(json_file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# Verify we have a list of items
if not isinstance(data, list):
print("Error: JSON data should be an array of items")
return
print(f"\nFound {len(data)} items in JSON file")
# Process each item in the JSON array
for index, item in enumerate(data, 1):
if not isinstance(item, dict):
print(f"\nItem {index}: Not a dictionary, skipping")
continue
sivasnr = item.get("Sivasnr")
if not sivasnr:
print(f"\nItem {index}: Missing 'Sivasnr' value, skipping")
continue
print(f"\nProcessing item {index}: Sivasnr = {sivasnr}")
# Build XML filename and path
xml_filename = f"{sivasnr}.xml"
xml_path = os.path.join(svg_folder_path, xml_filename)
if not os.path.exists(xml_path):
print(f" XML file not found: {xml_path}")
continue
print(f" Found XML file: {xml_path}")
# Process the XML file
stats = process_xml_file(xml_path)
if stats is None:
print(" Processing failed")
elif stats['modified']:
print(" File successfully modified")
print(f" - #ffe31b groups: {stats['ffe31b_groups']}")
print(f" - #ec2525 groups: {stats['ec2525_groups']}")
print(f" - Elements modified: {stats['elements_modified']}")
else:
print(" No modifications needed")
print("\nProcessing complete")
except FileNotFoundError:
print("\nError: JSON file not found")
except json.JSONDecodeError:
print("\nError: Invalid JSON format")
except Exception as e:
print(f"\nUnexpected error: {str(e)}")
if __name__ == "__main__":
print("SVG XML Batch Modifier - Starting execution")
main()
@@ -3,7 +3,7 @@
"SVGname": "APB_110_R400_45_400_821104021.svg",
"Sivasnr": "821104021",
"Winkel":45,
"center_line_width_mm": 669.491,
"center_line_width_mm": 669.49,
"center_line_height_mm": 399.505,
"Objekt_width_mm":684.367,
"Objekt_height_mm":435.421
@@ -23,8 +23,8 @@
"Winkel":90,
"center_line_width_mm": 500,
"center_line_height_mm": 500,
"Objekt_width_mm":521.040,
"Objekt_height_mm":521.040
"Objekt_width_mm":521.039,
"Objekt_height_mm":521.039
},
{
"SVGname": "APB_110_R500_90_550_550_821104030.svg",
@@ -32,8 +32,8 @@
"Winkel":90,
"center_line_width_mm": 550,
"center_line_height_mm": 550,
"Objekt_width_mm":571.040,
"Objekt_height_mm":571.040
"Objekt_width_mm":571.039,
"Objekt_height_mm":571.039
},
{
"SVGname": "APB_110_R550_22_5_84_821104025.svg",
@@ -42,7 +42,7 @@
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.230,
"Objekt_width_mm":522.542,
"Objekt_height_mm":162.707
"Objekt_height_mm":162.706
},
{
"SVGname": "APB_110_R550_22_5_84_821104025.svg",
@@ -51,7 +51,7 @@
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.230,
"Objekt_width_mm":522.542,
"Objekt_height_mm":162.707
"Objekt_height_mm":162.706
},
{
"SVGname": "APB_110_R550_45_191_821104029.svg",
@@ -60,7 +60,7 @@
"center_line_width_mm": 551.606,
"center_line_height_mm": 190.792 ,
"Objekt_width_mm":566.483,
"Objekt_height_mm":226.709
"Objekt_height_mm":226.708
},
{
"SVGname": "APB_110_R550_45_205_821104037.svg",
@@ -69,7 +69,7 @@
"center_line_width_mm": 537.249,
"center_line_height_mm": 204.932,
"Objekt_width_mm":552.126,
"Objekt_height_mm":240.849
"Objekt_height_mm":240.848
},
{
"SVGname": "APB_110_R550_45_232_821104026.svg",
@@ -113,7 +113,7 @@
"Winkel":67.5,
"center_line_width_mm": 758.190,
"center_line_height_mm": 496.584,
"Objekt_width_mm":777.628,
"Objekt_width_mm":777.627,
"Objekt_height_mm":525.674
},
{
@@ -122,8 +122,8 @@
"Winkel":90,
"center_line_width_mm": 900,
"center_line_height_mm": 605,
"Objekt_width_mm":921.040,
"Objekt_height_mm":626.040
"Objekt_width_mm":921.039,
"Objekt_height_mm":626.039
},
{
"SVGname": "APB_110_R630_45_400_821104031.svg",
@@ -131,7 +131,7 @@
"Winkel":45,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm":880.491,
"Objekt_width_mm":880.49,
"Objekt_height_mm":336.475
},
{
@@ -140,7 +140,7 @@
"Winkel":45,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm":880.491,
"Objekt_width_mm":880.49,
"Objekt_height_mm":336.475
},
{
@@ -149,8 +149,8 @@
"Winkel":90,
"center_line_width_mm": 800,
"center_line_height_mm": 800,
"Objekt_width_mm":821.040,
"Objekt_height_mm":821.040
"Objekt_width_mm":821.039,
"Objekt_height_mm":821.039
},
{
"SVGname": "APB_110_R630_90_800_800_821104033.svg",
@@ -158,8 +158,8 @@
"Winkel":90,
"center_line_width_mm": 800,
"center_line_height_mm": 800,
"Objekt_width_mm":821.040,
"Objekt_height_mm":821.040
"Objekt_width_mm":821.039,
"Objekt_height_mm":821.039
},
{
@@ -168,8 +168,8 @@
"Winkel":90,
"center_line_width_mm": 690,
"center_line_height_mm": 850,
"Objekt_width_mm":711.040,
"Objekt_height_mm":871.040
"Objekt_width_mm":711.039,
"Objekt_height_mm":871.039
},
{
"SVGname": "APB_110_R630_90_850_870_821104035.svg",
@@ -177,8 +177,8 @@
"Winkel":90,
"center_line_width_mm": 850,
"center_line_height_mm": 870,
"Objekt_width_mm":871.04,
"Objekt_height_mm":891.04
"Objekt_width_mm":871.039,
"Objekt_height_mm":891.039
},
{
"SVGname": "APB_110_R630_90_850_890_821104034.svg",
@@ -186,8 +186,8 @@
"Winkel":90,
"center_line_width_mm": 890,
"center_line_height_mm": 850,
"Objekt_width_mm":911.040,
"Objekt_height_mm":871.040
"Objekt_width_mm":911.039,
"Objekt_height_mm":871.039
},
{
"SVGname": "APB_110_R650_180_L_150_821104043.svg",
@@ -196,7 +196,7 @@
"center_line_width_mm": 800,
"center_line_height_mm": 1300,
"Objekt_width_mm":800,
"Objekt_height_mm":1342.080
"Objekt_height_mm":1342.078
},
{
"SVGname": "APB_110_R650_180_L_150_821104043.svg",
@@ -204,8 +204,8 @@
"Winkel":180,
"center_line_width_mm": 800,
"center_line_height_mm": 1300,
"Objekt_width_mm":821.040,
"Objekt_height_mm":1342.080
"Objekt_width_mm":800,
"Objekt_height_mm":1342.078
},
{
"SVGname": "APB_60_R515_90_650_821094040.svg",
@@ -213,8 +213,8 @@
"Winkel":90,
"center_line_width_mm": 650.0,
"center_line_height_mm": 650.0,
"Objekt_width_mm": 671.040,
"Objekt_height_mm": 671.040
"Objekt_width_mm": 671.039,
"Objekt_height_mm": 671.039
},
{
"SVGname": "APB_60_R515_90_810_821094101.svg",
@@ -222,7 +222,7 @@
"Winkel":90,
"center_line_width_mm": 810.0,
"center_line_height_mm": 810.0,
"Objekt_width_mm": 831.04,
"Objekt_height_mm": 831.04
"Objekt_width_mm": 831.039,
"Objekt_height_mm": 831.039
}
]
@@ -1,277 +0,0 @@
[
{
"SVGname": "APB_110_R400_45_400_821104021.svg",
"Sivasnr": "821104021",
"Winkel": 45.0,
"center_line_width_mm": 669.491,
"center_line_height_mm": 399.505,
"Objekt_width_mm": 684.367,
"Objekt_height_mm": 435.421,
"calculated_objekt_width_mm": 684.369,
"calculated_objekt_height_mm": 435.423
},
{
"SVGname": "APB_110_R400_67_5_339_821104024.svg",
"Sivasnr": "821104024",
"Winkel": 67.5,
"center_line_width_mm": 507.82,
"center_line_height_mm": 339.315,
"Objekt_width_mm": 527.258,
"Objekt_height_mm": 368.405,
"calculated_objekt_width_mm": 527.258,
"calculated_objekt_height_mm": 368.407
},
{
"SVGname": "APB_110_R400_90_500_821104022.svg",
"Sivasnr": "821104022",
"Winkel": 90.0,
"center_line_width_mm": 500.0,
"center_line_height_mm": 500.0,
"Objekt_width_mm": 521.04,
"Objekt_height_mm": 521.04,
"calculated_objekt_width_mm": 521.04,
"calculated_objekt_height_mm": 521.04
},
{
"SVGname": "APB_110_R500_90_550_550_821104030.svg",
"Sivasnr": "821104030",
"Winkel": 90.0,
"center_line_width_mm": 550.0,
"center_line_height_mm": 550.0,
"Objekt_width_mm": 571.04,
"Objekt_height_mm": 571.04,
"calculated_objekt_width_mm": 571.04,
"calculated_objekt_height_mm": 571.04
},
{
"SVGname": "APB_110_R550_22_5_84_821104025.svg",
"Sivasnr": "821104025",
"Winkel": 22.5,
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.23,
"Objekt_width_mm": 522.542,
"Objekt_height_mm": 162.707,
"calculated_objekt_width_mm": 522.543,
"calculated_objekt_height_mm": 162.708
},
{
"SVGname": "APB_110_R550_22_5_84_821104025.svg",
"Sivasnr": "OFBogen22",
"Winkel": 22.5,
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.23,
"Objekt_width_mm": 522.542,
"Objekt_height_mm": 162.707,
"calculated_objekt_width_mm": 522.543,
"calculated_objekt_height_mm": 162.708
},
{
"SVGname": "APB_110_R550_45_191_821104029.svg",
"Sivasnr": "821104029",
"Winkel": 45.0,
"center_line_width_mm": 551.606,
"center_line_height_mm": 190.792,
"Objekt_width_mm": 566.483,
"Objekt_height_mm": 226.709,
"calculated_objekt_width_mm": 566.484,
"calculated_objekt_height_mm": 226.71
},
{
"SVGname": "APB_110_R550_45_205_821104037.svg",
"Sivasnr": "821104037",
"Winkel": 45.0,
"center_line_width_mm": 537.249,
"center_line_height_mm": 204.932,
"Objekt_width_mm": 552.126,
"Objekt_height_mm": 240.849,
"calculated_objekt_width_mm": 552.127,
"calculated_objekt_height_mm": 240.85
},
{
"SVGname": "APB_110_R550_45_232_821104026.svg",
"Sivasnr": "821104026",
"Winkel": 45.0,
"center_line_width_mm": 595.265,
"center_line_height_mm": 265.998,
"Objekt_width_mm": 610.142,
"Objekt_height_mm": 301.914,
"calculated_objekt_width_mm": 610.143,
"calculated_objekt_height_mm": 301.916
},
{
"SVGname": "APB_110_R550_67_5_420_821104028.svg",
"Sivasnr": "821104028",
"Winkel": 67.5,
"center_line_width_mm": 582.427,
"center_line_height_mm": 419.902,
"Objekt_width_mm": 601.865,
"Objekt_height_mm": 448.992,
"calculated_objekt_width_mm": 601.865,
"calculated_objekt_height_mm": 448.994
},
{
"SVGname": "APB_110_R550_67_5_432_821104027.svg",
"Sivasnr": "821104027",
"Winkel": 67.5,
"center_line_width_mm": 748.658,
"center_line_height_mm": 530.305,
"Objekt_width_mm": 768.095,
"Objekt_height_mm": 559.396,
"calculated_objekt_width_mm": 768.096,
"calculated_objekt_height_mm": 559.397
},
{
"SVGname": "APB_110_R550_67_5_432_821104027.svg",
"Sivasnr": "OFBogen67",
"Winkel": 67.5,
"center_line_width_mm": 748.658,
"center_line_height_mm": 530.305,
"Objekt_width_mm": 768.095,
"Objekt_height_mm": 559.396,
"calculated_objekt_width_mm": 768.096,
"calculated_objekt_height_mm": 559.397
},
{
"SVGname": "APB_110_R550_67_5_L_185_170_821104065.svg",
"Sivasnr": "821104065",
"Winkel": 67.5,
"center_line_width_mm": 758.19,
"center_line_height_mm": 496.584,
"Objekt_width_mm": 777.628,
"Objekt_height_mm": 525.674,
"calculated_objekt_width_mm": 777.628,
"calculated_objekt_height_mm": 525.676
},
{
"SVGname": "APB_110_R550_90_900_605_821104066.svg",
"Sivasnr": "821104066",
"Winkel": 90.0,
"center_line_width_mm": 900.0,
"center_line_height_mm": 605.0,
"Objekt_width_mm": 921.04,
"Objekt_height_mm": 626.04,
"calculated_objekt_width_mm": 921.04,
"calculated_objekt_height_mm": 626.04
},
{
"SVGname": "APB_110_R630_45_400_821104031.svg",
"Sivasnr": "821104031",
"Winkel": 45.0,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm": 880.491,
"Objekt_height_mm": 336.475,
"calculated_objekt_width_mm": 880.491,
"calculated_objekt_height_mm": 336.477
},
{
"SVGname": "APB_110_R630_45_400_821104031.svg",
"Sivasnr": "OFBogen45",
"Winkel": 45.0,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm": 880.491,
"Objekt_height_mm": 336.475,
"calculated_objekt_width_mm": 880.491,
"calculated_objekt_height_mm": 336.477
},
{
"SVGname": "APB_110_R630_90_800_800_821104033.svg",
"Sivasnr": "821104033",
"Winkel": 90.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 800.0,
"Objekt_width_mm": 821.04,
"Objekt_height_mm": 821.04,
"calculated_objekt_width_mm": 821.04,
"calculated_objekt_height_mm": 821.04
},
{
"SVGname": "APB_110_R630_90_800_800_821104033.svg",
"Sivasnr": "OFBogen90",
"Winkel": 90.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 800.0,
"Objekt_width_mm": 821.04,
"Objekt_height_mm": 821.04,
"calculated_objekt_width_mm": 821.04,
"calculated_objekt_height_mm": 821.04
},
{
"SVGname": "APB_110_R630_90_850_690_821104041.svg",
"Sivasnr": "821104041",
"Winkel": 90.0,
"center_line_width_mm": 690.0,
"center_line_height_mm": 850.0,
"Objekt_width_mm": 711.04,
"Objekt_height_mm": 871.04,
"calculated_objekt_width_mm": 711.04,
"calculated_objekt_height_mm": 871.04
},
{
"SVGname": "APB_110_R630_90_850_870_821104035.svg",
"Sivasnr": "821104035",
"Winkel": 90.0,
"center_line_width_mm": 850.0,
"center_line_height_mm": 870.0,
"Objekt_width_mm": 871.04,
"Objekt_height_mm": 891.04,
"calculated_objekt_width_mm": 871.04,
"calculated_objekt_height_mm": 891.04
},
{
"SVGname": "APB_110_R630_90_850_890_821104034.svg",
"Sivasnr": "821104034",
"Winkel": 90.0,
"center_line_width_mm": 890.0,
"center_line_height_mm": 850.0,
"Objekt_width_mm": 911.04,
"Objekt_height_mm": 871.04,
"calculated_objekt_width_mm": 911.04,
"calculated_objekt_height_mm": 871.04
},
{
"SVGname": "APB_110_R650_180_L_150_821104043.svg",
"Sivasnr": "821104043",
"Winkel": 180.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 1300.0,
"Objekt_width_mm": 800,
"Objekt_height_mm": 1342.08,
"calculated_objekt_width_mm": 800,
"calculated_objekt_height_mm": 1342.08
},
{
"SVGname": "APB_110_R650_180_L_150_821104043.svg",
"Sivasnr": "OFBogen180",
"Winkel": 180.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 1300.0,
"Objekt_width_mm": 800.0,
"Objekt_height_mm": 1342.08,
"calculated_objekt_width_mm": 800.0,
"calculated_objekt_height_mm": 1342.08
},
{
"SVGname": "APB_60_R515_90_650_821094040.svg",
"Sivasnr": "821094040",
"Winkel": 90.0,
"center_line_width_mm": 650.0,
"center_line_height_mm": 650.0,
"Objekt_width_mm": 671.04,
"Objekt_height_mm": 671.04,
"calculated_objekt_width_mm": 671.04,
"calculated_objekt_height_mm": 671.04
},
{
"SVGname": "APB_60_R515_90_810_821094101.svg",
"Sivasnr": "821094101",
"Winkel": 90.0,
"center_line_width_mm": 810.0,
"center_line_height_mm": 810.0,
"Objekt_width_mm": 831.04,
"Objekt_height_mm": 831.04,
"calculated_objekt_width_mm": 831.04,
"calculated_objekt_height_mm": 831.04
}
]
@@ -3,28 +3,26 @@
"SVGname": "APB_110_R400_45_400_821104021.svg",
"Sivasnr": "821104021",
"Winkel": 45.0,
"center_line_width_mm": 669.491,
"center_line_width_mm": 669.49,
"center_line_height_mm": 399.505,
"Objekt_width_mm": 684.367,
"Objekt_height_mm": 435.421,
"calculated_objekt_width_mm": 684.369,
"calculated_objekt_height_mm": 435.423,
"Objekt_width_px": 2586.584,
"Objekt_height_px": 1645.6857,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 638.912,
"calculated_SVG_height_px": 636.239,
"scale_factor": 1.4612043,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 48.119,
"y": 48.319,
"direction": 270.0
},
{
"id": "cp2",
"x": 978.263,
"y": 961.795,
"x": 978.262,
"y": 965.833,
"direction": 135.0
}
]
@@ -37,24 +35,22 @@
"center_line_height_mm": 339.315,
"Objekt_width_mm": 527.258,
"Objekt_height_mm": 368.405,
"calculated_objekt_width_mm": 527.258,
"calculated_objekt_height_mm": 368.407,
"Objekt_width_px": 1992.7862,
"Objekt_height_px": 1392.3969,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 700.764,
"calculated_SVG_height_px": 698.7187,
"scale_factor": 1.8966047,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 56.944,
"y": 57.109,
"direction": 270.0
},
{
"id": "cp2",
"x": 963.134,
"y": 975.294,
"y": 978.147,
"direction": 157.5
}
]
@@ -65,25 +61,23 @@
"Winkel": 90.0,
"center_line_width_mm": 500.0,
"center_line_height_mm": 500.0,
"Objekt_width_mm": 521.04,
"Objekt_height_mm": 521.04,
"calculated_objekt_width_mm": 521.04,
"calculated_objekt_height_mm": 521.04,
"Objekt_width_px": 1969.2851,
"Objekt_height_px": 1969.2851,
"Objekt_width_mm": 521.039,
"Objekt_height_mm": 521.039,
"Objekt_width_px": 1969.2813,
"Objekt_height_px": 1969.2813,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.919238,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.9192421,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 40.381,
"y": 40.379,
"direction": 270.0
},
{
"id": "cp2",
"x": 959.619,
"x": 959.621,
"y": 1000.0,
"direction": 180.0
}
@@ -95,25 +89,23 @@
"Winkel": 90.0,
"center_line_width_mm": 550.0,
"center_line_height_mm": 550.0,
"Objekt_width_mm": 571.04,
"Objekt_height_mm": 571.04,
"calculated_objekt_width_mm": 571.04,
"calculated_objekt_height_mm": 571.04,
"Objekt_width_px": 2158.2614,
"Objekt_height_px": 2158.2614,
"Objekt_width_mm": 571.039,
"Objekt_height_mm": 571.039,
"Objekt_width_px": 2158.2577,
"Objekt_height_px": 2158.2577,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.751191,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.7511939,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 36.845,
"y": 36.844,
"direction": 270.0
},
{
"id": "cp2",
"x": 963.155,
"x": 963.157,
"y": 1000.0,
"direction": 180.0
}
@@ -126,25 +118,23 @@
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.23,
"Objekt_width_mm": 522.542,
"Objekt_height_mm": 162.707,
"calculated_objekt_width_mm": 522.543,
"calculated_objekt_height_mm": 162.708,
"Objekt_height_mm": 162.706,
"Objekt_width_px": 1974.9619,
"Objekt_height_px": 614.9556,
"Objekt_height_px": 614.9518,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 316.314,
"calculated_SVG_height_px": 311.374,
"scale_factor": 1.9137218,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 127.293,
"y": 129.307,
"direction": 270.0
},
{
"id": "cp2",
"x": 984.593,
"y": 866.794,
"y": 880.54,
"direction": 112.5
}
]
@@ -156,25 +146,23 @@
"center_line_width_mm": 514.491,
"center_line_height_mm": 122.23,
"Objekt_width_mm": 522.542,
"Objekt_height_mm": 162.707,
"calculated_objekt_width_mm": 522.543,
"calculated_objekt_height_mm": 162.708,
"Objekt_height_mm": 162.706,
"Objekt_width_px": 1974.9619,
"Objekt_height_px": 614.9556,
"Objekt_height_px": 614.9518,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 316.314,
"calculated_SVG_height_px": 311.374,
"scale_factor": 1.9137218,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 127.293,
"y": 129.307,
"direction": 270.0
},
{
"id": "cp2",
"x": 984.593,
"y": 866.794,
"y": 880.54,
"direction": 112.5
}
]
@@ -186,25 +174,23 @@
"center_line_width_mm": 551.606,
"center_line_height_mm": 190.792,
"Objekt_width_mm": 566.483,
"Objekt_height_mm": 226.709,
"calculated_objekt_width_mm": 566.484,
"calculated_objekt_height_mm": 226.71,
"Objekt_height_mm": 226.708,
"Objekt_width_px": 2141.0381,
"Objekt_height_px": 856.8529,
"Objekt_height_px": 856.8491,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 402.877,
"calculated_SVG_height_px": 400.2026,
"scale_factor": 1.765278,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 92.191,
"y": 92.803,
"direction": 270.0
},
{
"id": "cp2",
"x": 973.738,
"y": 928.18,
"y": 934.379,
"direction": 135.0
}
]
@@ -216,25 +202,23 @@
"center_line_width_mm": 537.249,
"center_line_height_mm": 204.932,
"Objekt_width_mm": 552.126,
"Objekt_height_mm": 240.849,
"calculated_objekt_width_mm": 552.127,
"calculated_objekt_height_mm": 240.85,
"Objekt_height_mm": 240.848,
"Objekt_width_px": 2086.7755,
"Objekt_height_px": 910.2954,
"Objekt_height_px": 910.2917,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 438.894,
"calculated_SVG_height_px": 436.2193,
"scale_factor": 1.8111808,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 86.826,
"y": 87.354,
"direction": 270.0
},
{
"id": "cp2",
"x": 973.055,
"y": 932.517,
"y": 938.231,
"direction": 135.0
}
]
@@ -247,24 +231,22 @@
"center_line_height_mm": 265.998,
"Objekt_width_mm": 610.142,
"Objekt_height_mm": 301.914,
"calculated_objekt_width_mm": 610.143,
"calculated_objekt_height_mm": 301.916,
"Objekt_width_px": 2306.0485,
"Objekt_height_px": 1141.0923,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 497.498,
"calculated_SVG_height_px": 494.8258,
"scale_factor": 1.6389627,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 69.314,
"y": 69.686,
"direction": 270.0
},
{
"id": "cp2",
"x": 975.617,
"y": 945.621,
"y": 950.725,
"direction": 135.0
}
]
@@ -277,24 +259,22 @@
"center_line_height_mm": 419.902,
"Objekt_width_mm": 601.865,
"Objekt_height_mm": 448.992,
"calculated_objekt_width_mm": 601.865,
"calculated_objekt_height_mm": 448.994,
"Objekt_width_px": 2274.7654,
"Objekt_height_px": 1696.9777,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 748.047,
"calculated_SVG_height_px": 746.0012,
"scale_factor": 1.6615022,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 46.732,
"y": 46.859,
"direction": 270.0
},
{
"id": "cp2",
"x": 967.704,
"y": 979.385,
"y": 982.069,
"direction": 157.5
}
]
@@ -307,24 +287,22 @@
"center_line_height_mm": 530.305,
"Objekt_width_mm": 768.095,
"Objekt_height_mm": 559.396,
"calculated_objekt_width_mm": 768.096,
"calculated_objekt_height_mm": 559.397,
"Objekt_width_px": 2903.0362,
"Objekt_height_px": 2114.2526,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 730.336,
"calculated_SVG_height_px": 728.2901,
"scale_factor": 1.3019223,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 37.507,
"y": 37.61,
"direction": 270.0
},
{
"id": "cp2",
"x": 974.695,
"y": 982.847,
"y": 985.606,
"direction": 157.5
}
]
@@ -337,24 +315,22 @@
"center_line_height_mm": 530.305,
"Objekt_width_mm": 768.095,
"Objekt_height_mm": 559.396,
"calculated_objekt_width_mm": 768.096,
"calculated_objekt_height_mm": 559.397,
"Objekt_width_px": 2903.0362,
"Objekt_height_px": 2114.2526,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 730.336,
"calculated_SVG_height_px": 728.2901,
"scale_factor": 1.3019223,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 37.507,
"y": 37.61,
"direction": 270.0
},
{
"id": "cp2",
"x": 974.695,
"y": 982.847,
"y": 985.606,
"direction": 157.5
}
]
@@ -365,26 +341,24 @@
"Winkel": 67.5,
"center_line_width_mm": 758.19,
"center_line_height_mm": 496.584,
"Objekt_width_mm": 777.628,
"Objekt_width_mm": 777.627,
"Objekt_height_mm": 525.674,
"calculated_objekt_width_mm": 777.628,
"calculated_objekt_height_mm": 525.676,
"Objekt_width_px": 2939.0665,
"Objekt_width_px": 2939.0627,
"Objekt_height_px": 1986.7994,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 678.042,
"scale_factor": 1.2859619,
"calculated_SVG_height_px": 675.9976,
"scale_factor": 1.2859636,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 39.904,
"y": 40.023,
"direction": 270.0
},
{
"id": "cp2",
"x": 975.003,
"y": 981.716,
"x": 975.005,
"y": 984.685,
"direction": 157.5
}
]
@@ -395,26 +369,24 @@
"Winkel": 90.0,
"center_line_width_mm": 900.0,
"center_line_height_mm": 605.0,
"Objekt_width_mm": 921.04,
"Objekt_height_mm": 626.04,
"calculated_objekt_width_mm": 921.04,
"calculated_objekt_height_mm": 626.04,
"Objekt_width_px": 3481.0961,
"Objekt_height_px": 2366.1355,
"Objekt_width_mm": 921.039,
"Objekt_height_mm": 626.039,
"Objekt_width_px": 3481.0923,
"Objekt_height_px": 2366.1317,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 681.6,
"scale_factor": 1.0857292,
"calculated_SVG_height_px": 679.7096,
"scale_factor": 1.0857304,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 33.515,
"y": 33.607,
"direction": 270.0
},
{
"id": "cp2",
"x": 977.156,
"y": 997.227,
"x": 977.157,
"y": 1000.0,
"direction": 180.0
}
]
@@ -425,26 +397,24 @@
"Winkel": 45.0,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm": 880.491,
"Objekt_width_mm": 880.49,
"Objekt_height_mm": 336.475,
"calculated_objekt_width_mm": 880.491,
"calculated_objekt_height_mm": 336.477,
"Objekt_width_px": 3327.84,
"Objekt_width_px": 3327.8362,
"Objekt_height_px": 1271.7165,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 384.817,
"scale_factor": 1.13573,
"calculated_SVG_height_px": 382.1452,
"scale_factor": 1.1357312,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 62.096,
"y": 62.528,
"direction": 270.0
},
{
"id": "cp2",
"x": 983.103,
"y": 949.152,
"x": 983.104,
"y": 955.786,
"direction": 135.0
}
]
@@ -455,26 +425,24 @@
"Winkel": 45.0,
"center_line_width_mm": 865.613,
"center_line_height_mm": 300.559,
"Objekt_width_mm": 880.491,
"Objekt_width_mm": 880.49,
"Objekt_height_mm": 336.475,
"calculated_objekt_width_mm": 880.491,
"calculated_objekt_height_mm": 336.477,
"Objekt_width_px": 3327.84,
"Objekt_width_px": 3327.8362,
"Objekt_height_px": 1271.7165,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 384.817,
"scale_factor": 1.13573,
"calculated_SVG_height_px": 382.1452,
"scale_factor": 1.1357312,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 62.096,
"y": 62.528,
"direction": 270.0
},
{
"id": "cp2",
"x": 983.103,
"y": 949.152,
"x": 983.104,
"y": 955.786,
"direction": 135.0
}
]
@@ -485,25 +453,23 @@
"Winkel": 90.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 800.0,
"Objekt_width_mm": 821.04,
"Objekt_height_mm": 821.04,
"calculated_objekt_width_mm": 821.04,
"calculated_objekt_height_mm": 821.04,
"Objekt_width_px": 3103.1433,
"Objekt_height_px": 3103.1433,
"Objekt_width_mm": 821.039,
"Objekt_height_mm": 821.039,
"Objekt_width_px": 3103.1396,
"Objekt_height_px": 3103.1396,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.217967,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.2179689,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 25.626,
"y": 25.625,
"direction": 270.0
},
{
"id": "cp2",
"x": 974.374,
"x": 974.375,
"y": 1000.0,
"direction": 180.0
}
@@ -515,25 +481,23 @@
"Winkel": 90.0,
"center_line_width_mm": 800.0,
"center_line_height_mm": 800.0,
"Objekt_width_mm": 821.04,
"Objekt_height_mm": 821.04,
"calculated_objekt_width_mm": 821.04,
"calculated_objekt_height_mm": 821.04,
"Objekt_width_px": 3103.1433,
"Objekt_height_px": 3103.1433,
"Objekt_width_mm": 821.039,
"Objekt_height_mm": 821.039,
"Objekt_width_px": 3103.1396,
"Objekt_height_px": 3103.1396,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.217967,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.2179689,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 25.626,
"y": 25.625,
"direction": 270.0
},
{
"id": "cp2",
"x": 974.374,
"x": 974.375,
"y": 1000.0,
"direction": 180.0
}
@@ -545,25 +509,23 @@
"Winkel": 90.0,
"center_line_width_mm": 690.0,
"center_line_height_mm": 850.0,
"Objekt_width_mm": 711.04,
"Objekt_height_mm": 871.04,
"calculated_objekt_width_mm": 711.04,
"calculated_objekt_height_mm": 871.04,
"Objekt_width_px": 2687.3953,
"Objekt_height_px": 3292.1197,
"Objekt_width_mm": 711.039,
"Objekt_height_mm": 871.039,
"Objekt_width_px": 2687.3915,
"Objekt_height_px": 3292.1159,
"calculated_SVG_height_px": 1000,
"calculated_SVG_width_px": 818.201,
"scale_factor": 1.1480529,
"calculated_SVG_width_px": 816.3113,
"scale_factor": 1.1480542,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 24.155,
"y": 24.154,
"direction": 270.0
},
{
"id": "cp2",
"x": 970.41,
"x": 970.411,
"y": 1000.0,
"direction": 180.0
}
@@ -575,25 +537,23 @@
"Winkel": 90.0,
"center_line_width_mm": 850.0,
"center_line_height_mm": 870.0,
"Objekt_width_mm": 871.04,
"Objekt_height_mm": 891.04,
"calculated_objekt_width_mm": 871.04,
"calculated_objekt_height_mm": 891.04,
"Objekt_width_px": 3292.1197,
"Objekt_height_px": 3367.7103,
"Objekt_width_mm": 871.039,
"Objekt_height_mm": 891.039,
"Objekt_width_px": 3292.1159,
"Objekt_height_px": 3367.7065,
"calculated_SVG_height_px": 1000,
"calculated_SVG_width_px": 979.444,
"scale_factor": 1.1222841,
"calculated_SVG_width_px": 977.5543,
"scale_factor": 1.1222853,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 23.613,
"y": 23.612,
"direction": 270.0
},
{
"id": "cp2",
"x": 975.845,
"x": 975.846,
"y": 1000.0,
"direction": 180.0
}
@@ -605,26 +565,24 @@
"Winkel": 90.0,
"center_line_width_mm": 890.0,
"center_line_height_mm": 850.0,
"Objekt_width_mm": 911.04,
"Objekt_height_mm": 871.04,
"calculated_objekt_width_mm": 911.04,
"calculated_objekt_height_mm": 871.04,
"Objekt_width_px": 3443.3008,
"Objekt_height_px": 3292.1197,
"Objekt_width_mm": 911.039,
"Objekt_height_mm": 871.039,
"Objekt_width_px": 3443.297,
"Objekt_height_px": 3292.1159,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 957.984,
"scale_factor": 1.0976466,
"calculated_SVG_height_px": 956.0941,
"scale_factor": 1.0976479,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 24.107,
"y": 24.154,
"direction": 270.0
},
{
"id": "cp2",
"x": 976.905,
"y": 998.027,
"x": 976.907,
"y": 1000.0,
"direction": 180.0
}
]
@@ -636,14 +594,12 @@
"center_line_width_mm": 800.0,
"center_line_height_mm": 1300.0,
"Objekt_width_mm": 800.0,
"Objekt_height_mm": 1342.08,
"calculated_objekt_width_mm": 800.0,
"calculated_objekt_height_mm": 1342.08,
"Objekt_height_mm": 1342.078,
"Objekt_width_px": 3023.6221,
"Objekt_height_px": 5072.4284,
"Objekt_height_px": 5072.4208,
"calculated_SVG_height_px": 1000,
"calculated_SVG_width_px": 597.979,
"scale_factor": 0.7451121,
"calculated_SVG_width_px": 596.0906,
"scale_factor": 0.7451132,
"connectionPoints": [
{
"id": "cp1",
@@ -654,7 +610,7 @@
{
"id": "cp2",
"x": 0,
"y": 984.323,
"y": 984.324,
"direction": 270.0
}
]
@@ -666,14 +622,12 @@
"center_line_width_mm": 800.0,
"center_line_height_mm": 1300.0,
"Objekt_width_mm": 800.0,
"Objekt_height_mm": 1342.08,
"calculated_objekt_width_mm": 800.0,
"calculated_objekt_height_mm": 1342.08,
"Objekt_height_mm": 1342.078,
"Objekt_width_px": 3023.6221,
"Objekt_height_px": 5072.4284,
"Objekt_height_px": 5072.4208,
"calculated_SVG_height_px": 1000,
"calculated_SVG_width_px": 597.979,
"scale_factor": 0.7451121,
"calculated_SVG_width_px": 596.0906,
"scale_factor": 0.7451132,
"connectionPoints": [
{
"id": "cp1",
@@ -684,7 +638,7 @@
{
"id": "cp2",
"x": 0,
"y": 984.323,
"y": 984.324,
"direction": 270.0
}
]
@@ -695,25 +649,23 @@
"Winkel": 90.0,
"center_line_width_mm": 650.0,
"center_line_height_mm": 650.0,
"Objekt_width_mm": 671.04,
"Objekt_height_mm": 671.04,
"calculated_objekt_width_mm": 671.04,
"calculated_objekt_height_mm": 671.04,
"Objekt_width_px": 2536.2142,
"Objekt_height_px": 2536.2142,
"Objekt_width_mm": 671.039,
"Objekt_height_mm": 671.039,
"Objekt_width_px": 2536.2104,
"Objekt_height_px": 2536.2104,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.490224,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.4902264,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 31.354,
"y": 31.353,
"direction": 270.0
},
{
"id": "cp2",
"x": 968.646,
"x": 968.647,
"y": 1000.0,
"direction": 180.0
}
@@ -725,25 +677,23 @@
"Winkel": 90.0,
"center_line_width_mm": 810.0,
"center_line_height_mm": 810.0,
"Objekt_width_mm": 831.04,
"Objekt_height_mm": 831.04,
"calculated_objekt_width_mm": 831.04,
"calculated_objekt_height_mm": 831.04,
"Objekt_width_px": 3140.9386,
"Objekt_height_px": 3140.9386,
"Objekt_width_mm": 831.039,
"Objekt_height_mm": 831.039,
"Objekt_width_px": 3140.9348,
"Objekt_height_px": 3140.9348,
"calculated_SVG_width_px": 1000,
"calculated_SVG_height_px": 1000.0,
"scale_factor": 1.203312,
"calculated_SVG_height_px": 1000,
"scale_factor": 1.203313,
"connectionPoints": [
{
"id": "cp1",
"x": 0,
"y": 25.318,
"y": 25.317,
"direction": 270.0
},
{
"id": "cp2",
"x": 974.683,
"x": 974.684,
"y": 1000.0,
"direction": 180.0
}
@@ -1,12 +0,0 @@
@echo off
set OFBogen_PATH=%~dp0
set XML_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\svg
set JSON_PATH=%OFBogen_PATH%JSON
python 4_OFBogen_SVG_XML_Modifier_Script.py
pause
+11 -4
View File
@@ -3,10 +3,17 @@
set OFBogen_PATH=%~dp0
set PROPS_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props
set JSON_PATH=%OFBogen_PATH%JSON
set JSON_PATH_BOGEN=%OFBogen_PATH%JSON
python 1_calculate_ture_width_and_height_dimensions_with_profile_width.py
python 2_calculations_to_standardize_the_dimensions_and_add_connection_points.py
python 3_update_dimensions_and_connection_points_in_props.py
python 01_props_step1_calculations_to_standardize_the_dimensions_and_add_connection_points.py
python 01_props_step2_update_dimensions_and_connection_points_in_props.py
:: Check if Python script succeeded
if %ERRORLEVEL% equ 0 (
echo update dimensions and connection points in props completed successfully
) else (
echo update dimensions and connection points in props failed with error %ERRORLEVEL%
)
pause