diff --git a/Editor2DLibrary/SSG/shapes/props/821104021.txt b/Editor2DLibrary/SSG/shapes/props/821104021.txt
index a00c55b..3f7f03d 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104021.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104021.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 48.321,
+ "y": 48.119,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 978.263,
- "y": 965.835,
+ "y": 961.795,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104024+0_B10081.txt b/Editor2DLibrary/SSG/shapes/props/821104024+0_B10081.txt
index c20a280..f707fb9 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104024+0_B10081.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104024+0_B10081.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_64px.png",
"srcSVG": "SSG/shapes/svg/821104024+0_B10081.xml",
+ "src3D": "SSG/shapes/obj/821104024+0_B10081.stl",
"width": 1992.772,
"height": 1392.387,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 0.0,
- "y": 57.111,
+ "y": 56.957,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 963.134,
- "y": 978.149,
+ "y": 975.51,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 144.904,
- "y": 328.576,
+ "y": 327.689,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 725.908,
- "y": 867.86,
+ "y": 865.519,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104024.txt b/Editor2DLibrary/SSG/shapes/props/821104024.txt
index 93e6e3b..43809aa 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104024.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104024.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 57.111,
+ "y": 56.944,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 963.134,
- "y": 978.149,
+ "y": 975.294,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104025+0_B10090.txt b/Editor2DLibrary/SSG/shapes/props/821104025+0_B10090.txt
index 001b4ef..8f4b300 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104025+0_B10090.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104025+0_B10090.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_64px.png",
"srcSVG": "SSG/shapes/svg/821104025+0_B10090.xml",
+ "src3D": "SSG/shapes/obj/821104025+0_B10090.stl",
"width": 2031.648,
"height": 877.059,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 27.908,
- "y": 90.667,
+ "y": 90.272,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 985.023,
- "y": 617.391,
+ "y": 614.701,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 0.0,
- "y": 521.634,
+ "y": 519.362,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 767.736,
- "y": 875.383,
+ "y": 871.57,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104025+0_B10091.txt b/Editor2DLibrary/SSG/shapes/props/821104025+0_B10091.txt
index eb4a39b..e8c9df3 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104025+0_B10091.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104025+0_B10091.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_64px.png",
"srcSVG": "SSG/shapes/svg/821104025+0_B10091.xml",
+ "src3D": "SSG/shapes/obj/821104025+0_B10091.stl",
"width": 2477.704,
"height": 1031.72,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 153.863,
- "y": 481.027,
+ "y": 478.855,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 938.67,
- "y": 928.792,
+ "y": 924.598,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 0.0,
- "y": 114.661,
+ "y": 114.143,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 981.733,
- "y": 575.075,
+ "y": 572.478,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104025.txt b/Editor2DLibrary/SSG/shapes/props/821104025.txt
index aeadcbb..641c79a 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104025.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104025.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 129.312,
+ "y": 127.293,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 984.593,
- "y": 880.54,
+ "y": 866.791,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104026+0_B10071.txt b/Editor2DLibrary/SSG/shapes/props/821104026+0_B10071.txt
index 0ff0e17..4c89c14 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104026+0_B10071.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104026+0_B10071.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_32xp.png",
"iconBig": "SSG/shapes/img/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_64xp.png",
"srcSVG": "SSG/shapes/svg/821104026+0_B10071.xml",
+ "src3D": "SSG/shapes/obj/821104026+0_B10071.stl",
"width": 2306.032,
"height": 1164.906,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 0.0,
- "y": 68.264,
+ "y": 68.009,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 975.617,
- "y": 931.286,
+ "y": 927.815,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 89.235,
- "y": 392.74,
+ "y": 391.276,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 742.25,
- "y": 928.194,
+ "y": 924.734,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104026.txt b/Editor2DLibrary/SSG/shapes/props/821104026.txt
index 73fd418..f03f607 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104026.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104026.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 69.689,
+ "y": 69.314,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 975.617,
- "y": 950.727,
+ "y": 945.619,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104027+0_B10080.txt b/Editor2DLibrary/SSG/shapes/props/821104027+0_B10080.txt
index 42b3c00..c78d98e 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104027+0_B10080.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104027+0_B10080.txt
@@ -5,15 +5,16 @@
"icon": "SSG/shapes/img/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_64px.png",
"srcSVG": "SSG/shapes/svg/821104027+0_B10080.xml",
+ "src3D": "SSG/shapes/obj/821104027+0_B10080.stl",
"width": 2903.015,
- "height": 2034.72,
+ "height": 2114.237,
"depth": 415.748,
"behaviour": "(NOSTRETCH)(NOSTRETCHONVIEW)(NOROTATE)(NOROTATEONVIEW)(CONTAINER)(HIDEDIMENSIONS)(HIDEROTATION)(HIDEPIN)(ALWAYSFRONT)(ORIGIN=CENTER)",
"connectionPoints": [
{
"id": "cp1",
"x": 0.0,
- "y": 39.082,
+ "y": 37.515,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 974.694,
- "y": 1024.125,
+ "y": 983.056,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 180.84,
- "y": 224.849,
+ "y": 215.834,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 792.42,
- "y": 881.727,
+ "y": 846.37,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104027.txt b/Editor2DLibrary/SSG/shapes/props/821104027.txt
index c2cfecb..050c8bd 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104027.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104027.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 37.612,
+ "y": 37.507,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,8 +32,8 @@
},
{
"id": "cp2",
- "x": 974.694,
- "y": 985.608,
+ "x": 974.695,
+ "y": 982.847,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104028.txt b/Editor2DLibrary/SSG/shapes/props/821104028.txt
index 51e2095..40ee821 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104028.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104028.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 46.861,
+ "y": 46.732,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 967.704,
- "y": 982.071,
+ "y": 979.385,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104029.txt b/Editor2DLibrary/SSG/shapes/props/821104029.txt
index 65879e1..6d20adc 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104029.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104029.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 92.806,
+ "y": 92.191,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 973.738,
- "y": 934.379,
+ "y": 928.18,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104031+0_B10060.txt b/Editor2DLibrary/SSG/shapes/props/821104031+0_B10060.txt
index 0e59239..69efac2 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104031+0_B10060.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104031+0_B10060.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_64px.png",
"srcSVG": "SSG/shapes/svg/821104031+0_B10060.xml",
+ "src3D": "SSG/shapes/obj/821104031+0_B10060.stl",
"width": 3624.064,
"height": 1688.477,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 0.288,
- "y": 70.062,
+ "y": 292.738,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 903.028,
- "y": 742.836,
+ "y": 962.793,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 0.0,
- "y": 293.925,
+ "y": 69.779,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 976.918,
- "y": 1032.566,
+ "y": 805.436,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104031+0_B10070.txt b/Editor2DLibrary/SSG/shapes/props/821104031+0_B10070.txt
index fbbf096..c677079 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104031+0_B10070.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104031+0_B10070.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_64px.png",
"srcSVG": "SSG/shapes/svg/821104031+0_B10070.xml",
+ "src3D": "SSG/shapes/obj/821104031+0_B10070.stl",
"width": 3329.52,
"height": 1566.588,
"depth": 415.748,
@@ -13,7 +14,7 @@
{
"id": "cp1",
"x": 0.514,
- "y": 50.76,
+ "y": 50.557,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,7 +33,7 @@
{
"id": "cp2",
"x": 983.115,
- "y": 775.879,
+ "y": 772.777,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -51,7 +52,7 @@
{
"id": "cp3",
"x": 0.0,
- "y": 292.039,
+ "y": 290.871,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -70,7 +71,7 @@
{
"id": "cp4",
"x": 862.028,
- "y": 946.6,
+ "y": 942.814,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104031.txt b/Editor2DLibrary/SSG/shapes/props/821104031.txt
index c830573..2f568c7 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104031.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104031.txt
@@ -1,4 +1,4 @@
-{
+{
"shapeMode": 0,
"name": "APB 110 R 630/45 400",
"family": "OFBogen",
@@ -13,8 +13,8 @@
"connectionPoints": [
{
"id": "cp1",
- "x": 0,
- "y": 62.531,
+ "x": 0.0,
+ "y": 62.096,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 983.103,
- "y": 955.788,
+ "y": 949.149,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104033+0_B10040.txt b/Editor2DLibrary/SSG/shapes/props/821104033+0_B10040.txt
index 427f52b..29a8e68 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104033+0_B10040.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104033+0_B10040.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R630_90_800_800_821104033_mit_TEF_R725_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R630_90_800_800_821104033_mit_TEF_R725_64px.png",
"srcSVG": "SSG/shapes/svg/821104033+0_B10040.xml",
+ "src3D": "SSG/shapes/obj/821104033+0_B10040.stl",
"width": 3519.848,
"height": 3519.848,
"depth": 415.748,
diff --git a/Editor2DLibrary/SSG/shapes/props/821104033+0_B10050.txt b/Editor2DLibrary/SSG/shapes/props/821104033+0_B10050.txt
index 7c45740..ae3abed 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104033+0_B10050.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104033+0_B10050.txt
@@ -5,6 +5,7 @@
"icon": "SSG/shapes/img/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_32px.png",
"iconBig": "SSG/shapes/img/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_64px.png",
"srcSVG": "SSG/shapes/svg/821104033+0_B10050.xml",
+ "src3D": "SSG/shapes/obj/821104033+0_B10050.stl",
"width": 3103.121,
"height": 3103.121,
"depth": 415.748,
diff --git a/Editor2DLibrary/SSG/shapes/props/821104034.txt b/Editor2DLibrary/SSG/shapes/props/821104034.txt
index 362130e..cbf8d47 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104034.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104034.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 24.155,
+ "y": 24.107,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,8 +32,8 @@
},
{
"id": "cp2",
- "x": 976.906,
- "y": 1000.0,
+ "x": 976.905,
+ "y": 998.027,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104035.txt b/Editor2DLibrary/SSG/shapes/props/821104035.txt
index 02ffa92..3864222 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104035.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104035.txt
@@ -32,7 +32,7 @@
},
{
"id": "cp2",
- "x": 975.938,
+ "x": 0.0,
"y": 1000.0,
"z": 0.0,
"xMin": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104037.txt b/Editor2DLibrary/SSG/shapes/props/821104037.txt
index 96232cd..a00bcd4 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104037.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104037.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 87.358,
+ "y": 86.826,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 973.055,
- "y": 938.231,
+ "y": 932.517,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104041.txt b/Editor2DLibrary/SSG/shapes/props/821104041.txt
index 196112f..a47ed2b 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104041.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104041.txt
@@ -32,7 +32,7 @@
},
{
"id": "cp2",
- "x": 970.546,
+ "x": 0.0,
"y": 1000.0,
"z": 0.0,
"xMin": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104043.txt b/Editor2DLibrary/SSG/shapes/props/821104043.txt
index 1e0604e..12c8146 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104043.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104043.txt
@@ -1,4 +1,4 @@
-{
+{
"shapeMode": 0,
"name": "APB 110 R 650/180 L=150",
"family": "OFBogen",
@@ -13,7 +13,7 @@
"connectionPoints": [
{
"id": "cp1",
- "x": 0.0,
+ "x": 0,
"y": 15.677,
"z": 0.0,
"xMin": "",
@@ -32,7 +32,7 @@
},
{
"id": "cp2",
- "x": 0.0,
+ "x": 0,
"y": 984.323,
"z": 0.0,
"xMin": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104065.txt b/Editor2DLibrary/SSG/shapes/props/821104065.txt
index aa62ab0..a7bc869 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104065.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104065.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 40.025,
+ "y": 39.904,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,8 +32,8 @@
},
{
"id": "cp2",
- "x": 975.004,
- "y": 984.686,
+ "x": 975.003,
+ "y": 981.716,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/821104066.txt b/Editor2DLibrary/SSG/shapes/props/821104066.txt
index a7fa75e..f3c3805 100644
--- a/Editor2DLibrary/SSG/shapes/props/821104066.txt
+++ b/Editor2DLibrary/SSG/shapes/props/821104066.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 33.608,
+ "y": 33.515,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 977.156,
- "y": 1000.0,
+ "y": 997.227,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/OFBogen180.txt b/Editor2DLibrary/SSG/shapes/props/OFBogen180.txt
index 7539887..c70e360 100644
--- a/Editor2DLibrary/SSG/shapes/props/OFBogen180.txt
+++ b/Editor2DLibrary/SSG/shapes/props/OFBogen180.txt
@@ -1,4 +1,4 @@
-{
+{
"shapeMode": 0,
"name": "APB 110 R 650/180 L=150",
"family": "OFBogen",
@@ -13,7 +13,7 @@
"connectionPoints": [
{
"id": "cp1",
- "x": 0.0,
+ "x": 0,
"y": 15.677,
"z": 0.0,
"xMin": "",
@@ -32,7 +32,7 @@
},
{
"id": "cp2",
- "x": 0.0,
+ "x": 0,
"y": 984.323,
"z": 0.0,
"xMin": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/OFBogen22.txt b/Editor2DLibrary/SSG/shapes/props/OFBogen22.txt
index 5efad62..f28a1bd 100644
--- a/Editor2DLibrary/SSG/shapes/props/OFBogen22.txt
+++ b/Editor2DLibrary/SSG/shapes/props/OFBogen22.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 129.312,
+ "y": 127.293,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 984.593,
- "y": 880.54,
+ "y": 866.791,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/OFBogen45.txt b/Editor2DLibrary/SSG/shapes/props/OFBogen45.txt
index f3294d9..a2d2577 100644
--- a/Editor2DLibrary/SSG/shapes/props/OFBogen45.txt
+++ b/Editor2DLibrary/SSG/shapes/props/OFBogen45.txt
@@ -1,4 +1,4 @@
-{
+{
"shapeMode": 0,
"name": "APB 110 R 630/45 400",
"family": "OFBogen",
@@ -13,8 +13,8 @@
"connectionPoints": [
{
"id": "cp1",
- "x": 0,
- "y": 62.531,
+ "x": 0.0,
+ "y": 62.096,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -33,7 +33,7 @@
{
"id": "cp2",
"x": 983.103,
- "y": 955.788,
+ "y": 949.149,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/props/OFBogen67.txt b/Editor2DLibrary/SSG/shapes/props/OFBogen67.txt
index c2236e9..dd5b0be 100644
--- a/Editor2DLibrary/SSG/shapes/props/OFBogen67.txt
+++ b/Editor2DLibrary/SSG/shapes/props/OFBogen67.txt
@@ -14,7 +14,7 @@
{
"id": "cp1",
"x": 0,
- "y": 37.612,
+ "y": 37.507,
"z": 0.0,
"xMin": "",
"xMax": "",
@@ -32,8 +32,8 @@
},
{
"id": "cp2",
- "x": 974.694,
- "y": 985.608,
+ "x": 974.695,
+ "y": 982.847,
"z": 0.0,
"xMin": "",
"xMax": "",
diff --git a/Editor2DLibrary/SSG/shapes/settings.txt b/Editor2DLibrary/SSG/shapes/settings.txt
index 46db968..1360514 100644
--- a/Editor2DLibrary/SSG/shapes/settings.txt
+++ b/Editor2DLibrary/SSG/shapes/settings.txt
@@ -1 +1 @@
-{"categories":{"c_ILS":{"expanded":false},"c_Kreiselmodule":{"expanded":false},"c_Zusatzmodul":{"expanded":false},"c_Foerderer":{"expanded":false},"c_Kurven":{"expanded":false},"c10":{"expanded":false},"c_Background":{"expanded":false},"c_Parts":{"expanded":false},"c_Session":{"expanded":false},"c_Omniflo":{"expanded":true},"c_Boegen":{"expanded":true},"c_Gerade":{"expanded":true},"c_Weichen_90":{"expanded":true},"c_Weichen_45":{"expanded":true},"c_Weichen_Parallel":{"expanded":true},"c_Weichenkoerper":{"expanded":true},"c_Weichenkombinationen":{"expanded":true},"c_TEFElemente":{"expanded":true},"c_OmnifloBogen":{"expanded":true},"c_Boegen_90":{"expanded":false},"c_OmnifloWeiche":{"expanded":false}},"shapes":{}}
\ No newline at end of file
+{"categories":{"c_ILS":{"expanded":false},"c_Kreiselmodule":{"expanded":false},"c_Zusatzmodul":{"expanded":false},"c_Foerderer":{"expanded":false},"c_Kurven":{"expanded":false},"c10":{"expanded":false},"c_Background":{"expanded":false},"c_Parts":{"expanded":false},"c_Session":{"expanded":false},"c_Omniflo":{"expanded":true},"c_Boegen":{"expanded":true},"c_Gerade":{"expanded":true},"c_Weichen_90":{"expanded":true},"c_Weichen_45":{"expanded":true},"c_Weichen_Parallel":{"expanded":true},"c_Weichenkoerper":{"expanded":true},"c_Weichenkombinationen":{"expanded":true},"c_TEFElemente":{"expanded":true},"c_OmnifloBogen":{"expanded":true},"c_Boegen_90":{"expanded":true},"c_OmnifloWeiche":{"expanded":false}},"shapes":{}}
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821094040.xml b/Editor2DLibrary/SSG/shapes/svg/821094040.xml
index a393f6c..253626c 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821094040.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821094040.xml
@@ -1,8 +1,28 @@
-
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821094101.xml b/Editor2DLibrary/SSG/shapes/svg/821094101.xml
index a393f6c..e597a28 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821094101.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821094101.xml
@@ -1,8 +1,32 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104021.xml b/Editor2DLibrary/SSG/shapes/svg/821104021.xml
index 51a9478..cf93b07 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104021.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104021.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104022.xml b/Editor2DLibrary/SSG/shapes/svg/821104022.xml
index 4641049..82977a7 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104022.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104022.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104024+0_B10081.xml b/Editor2DLibrary/SSG/shapes/svg/821104024+0_B10081.xml
index 47f2fe2..12661df 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104024+0_B10081.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104024+0_B10081.xml
@@ -1,14 +1,36 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104024.xml b/Editor2DLibrary/SSG/shapes/svg/821104024.xml
index 8f810b0..5103277 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104024.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104024.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml
index e030f01..32a2d30 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml
@@ -1,11 +1,36 @@
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml
index 8017ca8..09ce1e3 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml
@@ -1,11 +1,36 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104025.xml b/Editor2DLibrary/SSG/shapes/svg/821104025.xml
index 6382b6a..b48a8be 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104025.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104025.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml b/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml
index 8dda93c..bc124d3 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml
@@ -1,11 +1,28 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104026.xml b/Editor2DLibrary/SSG/shapes/svg/821104026.xml
index 46c9d87..76dc70f 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104026.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104026.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml b/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml
index c3bc441..308b70f 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml
@@ -1,14 +1,36 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104027.xml b/Editor2DLibrary/SSG/shapes/svg/821104027.xml
index da7f611..6072b72 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104027.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104027.xml
@@ -1,12 +1,17 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104028.xml b/Editor2DLibrary/SSG/shapes/svg/821104028.xml
index 5774ea4..4447c04 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104028.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104028.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104029.xml b/Editor2DLibrary/SSG/shapes/svg/821104029.xml
index c27310b..eb2ae41 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104029.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104029.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104030.xml b/Editor2DLibrary/SSG/shapes/svg/821104030.xml
index d434478..b2ba4cc 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104030.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104030.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml
index 4f7bac4..149f2c2 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml
@@ -1,11 +1,36 @@
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml
index 0d348f1..5e2c1ea 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml
@@ -1,12 +1,36 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104031.xml b/Editor2DLibrary/SSG/shapes/svg/821104031.xml
index b2dd90b..f85536c 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104031.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104031.xml
@@ -1,12 +1,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml
index eca4ac7..6e2a6d8 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml
@@ -1,13 +1,36 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml
index 6697d39..d71eb1b 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml
@@ -1,12 +1,36 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104033.xml b/Editor2DLibrary/SSG/shapes/svg/821104033.xml
index bf395e7..bd11209 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104033.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104033.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104034.xml b/Editor2DLibrary/SSG/shapes/svg/821104034.xml
index 76121db..ad33896 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104034.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104034.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104035.xml b/Editor2DLibrary/SSG/shapes/svg/821104035.xml
index 1cabccc..2220c81 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104035.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104035.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104037.xml b/Editor2DLibrary/SSG/shapes/svg/821104037.xml
index aa2bdad..7cf89a9 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104037.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104037.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104041.xml b/Editor2DLibrary/SSG/shapes/svg/821104041.xml
index 3dde0b2..5940b49 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104041.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104041.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104043.xml b/Editor2DLibrary/SSG/shapes/svg/821104043.xml
index cc1b82f..8980fe4 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104043.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104043.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104065.xml b/Editor2DLibrary/SSG/shapes/svg/821104065.xml
index 097abb9..adb1f55 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104065.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104065.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/821104066.xml b/Editor2DLibrary/SSG/shapes/svg/821104066.xml
index c48e970..3794994 100644
--- a/Editor2DLibrary/SSG/shapes/svg/821104066.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/821104066.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/OFBogen180.xml b/Editor2DLibrary/SSG/shapes/svg/OFBogen180.xml
index cc1b82f..8980fe4 100644
--- a/Editor2DLibrary/SSG/shapes/svg/OFBogen180.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/OFBogen180.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/OFBogen22.xml b/Editor2DLibrary/SSG/shapes/svg/OFBogen22.xml
index 6382b6a..b48a8be 100644
--- a/Editor2DLibrary/SSG/shapes/svg/OFBogen22.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/OFBogen22.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/OFBogen45.xml b/Editor2DLibrary/SSG/shapes/svg/OFBogen45.xml
index b2dd90b..f85536c 100644
--- a/Editor2DLibrary/SSG/shapes/svg/OFBogen45.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/OFBogen45.xml
@@ -1,12 +1,16 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/OFBogen67.xml b/Editor2DLibrary/SSG/shapes/svg/OFBogen67.xml
index da7f611..ce23cb1 100644
--- a/Editor2DLibrary/SSG/shapes/svg/OFBogen67.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/OFBogen67.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Editor2DLibrary/SSG/shapes/svg/OFBogen90.xml b/Editor2DLibrary/SSG/shapes/svg/OFBogen90.xml
index bf395e7..bd11209 100644
--- a/Editor2DLibrary/SSG/shapes/svg/OFBogen90.xml
+++ b/Editor2DLibrary/SSG/shapes/svg/OFBogen90.xml
@@ -1,12 +1,27 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SVGs/Eckrad-links.svg b/SVGs/ILS/Eckrad-links.svg
similarity index 100%
rename from SVGs/Eckrad-links.svg
rename to SVGs/ILS/Eckrad-links.svg
diff --git a/SVGs/Eckrad-rechts.svg b/SVGs/ILS/Eckrad-rechts.svg
similarity index 100%
rename from SVGs/Eckrad-rechts.svg
rename to SVGs/ILS/Eckrad-rechts.svg
diff --git a/SVGs/Eckrad.svg b/SVGs/ILS/Eckrad.svg
similarity index 100%
rename from SVGs/Eckrad.svg
rename to SVGs/ILS/Eckrad.svg
diff --git a/SVGs/Gefaellestrecke.svg b/SVGs/ILS/Gefaellestrecke.svg
similarity index 100%
rename from SVGs/Gefaellestrecke.svg
rename to SVGs/ILS/Gefaellestrecke.svg
diff --git a/SVGs/Kurve_30.svg b/SVGs/ILS/Kurve_30.svg
similarity index 100%
rename from SVGs/Kurve_30.svg
rename to SVGs/ILS/Kurve_30.svg
diff --git a/SVGs/Kurve_30_L_Gefälle.svg b/SVGs/ILS/Kurve_30_L_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_30_L_Gefälle.svg
rename to SVGs/ILS/Kurve_30_L_Gefälle.svg
diff --git a/SVGs/Kurve_30_L_angetrieben.svg b/SVGs/ILS/Kurve_30_L_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_30_L_angetrieben.svg
rename to SVGs/ILS/Kurve_30_L_angetrieben.svg
diff --git a/SVGs/Kurve_30_R_Gefälle.svg b/SVGs/ILS/Kurve_30_R_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_30_R_Gefälle.svg
rename to SVGs/ILS/Kurve_30_R_Gefälle.svg
diff --git a/SVGs/Kurve_30_R_angetrieben.svg b/SVGs/ILS/Kurve_30_R_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_30_R_angetrieben.svg
rename to SVGs/ILS/Kurve_30_R_angetrieben.svg
diff --git a/SVGs/Kurve_60.svg b/SVGs/ILS/Kurve_60.svg
similarity index 100%
rename from SVGs/Kurve_60.svg
rename to SVGs/ILS/Kurve_60.svg
diff --git a/SVGs/Kurve_60_L_Gefälle.svg b/SVGs/ILS/Kurve_60_L_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_60_L_Gefälle.svg
rename to SVGs/ILS/Kurve_60_L_Gefälle.svg
diff --git a/SVGs/Kurve_60_L_angetrieben.svg b/SVGs/ILS/Kurve_60_L_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_60_L_angetrieben.svg
rename to SVGs/ILS/Kurve_60_L_angetrieben.svg
diff --git a/SVGs/Kurve_60_R_Gefälle.svg b/SVGs/ILS/Kurve_60_R_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_60_R_Gefälle.svg
rename to SVGs/ILS/Kurve_60_R_Gefälle.svg
diff --git a/SVGs/Kurve_60_R_angetrieben.svg b/SVGs/ILS/Kurve_60_R_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_60_R_angetrieben.svg
rename to SVGs/ILS/Kurve_60_R_angetrieben.svg
diff --git a/SVGs/Kurve_90.svg b/SVGs/ILS/Kurve_90.svg
similarity index 100%
rename from SVGs/Kurve_90.svg
rename to SVGs/ILS/Kurve_90.svg
diff --git a/SVGs/Kurve_90_L_Gefälle.svg b/SVGs/ILS/Kurve_90_L_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_90_L_Gefälle.svg
rename to SVGs/ILS/Kurve_90_L_Gefälle.svg
diff --git a/SVGs/Kurve_90_L_angetrieben.svg b/SVGs/ILS/Kurve_90_L_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_90_L_angetrieben.svg
rename to SVGs/ILS/Kurve_90_L_angetrieben.svg
diff --git a/SVGs/Kurve_90_L_eben.svg b/SVGs/ILS/Kurve_90_L_eben.svg
similarity index 100%
rename from SVGs/Kurve_90_L_eben.svg
rename to SVGs/ILS/Kurve_90_L_eben.svg
diff --git a/SVGs/Kurve_90_R_Gefälle.svg b/SVGs/ILS/Kurve_90_R_Gefälle.svg
similarity index 100%
rename from SVGs/Kurve_90_R_Gefälle.svg
rename to SVGs/ILS/Kurve_90_R_Gefälle.svg
diff --git a/SVGs/Kurve_90_R_angetrieben.svg b/SVGs/ILS/Kurve_90_R_angetrieben.svg
similarity index 100%
rename from SVGs/Kurve_90_R_angetrieben.svg
rename to SVGs/ILS/Kurve_90_R_angetrieben.svg
diff --git a/SVGs/Kurve_90_R_eben.svg b/SVGs/ILS/Kurve_90_R_eben.svg
similarity index 100%
rename from SVGs/Kurve_90_R_eben.svg
rename to SVGs/ILS/Kurve_90_R_eben.svg
diff --git a/SVGs/Motorstation-gezeichnet-links_Mpath.svg b/SVGs/ILS/Motorstation-gezeichnet-links_Mpath.svg
similarity index 100%
rename from SVGs/Motorstation-gezeichnet-links_Mpath.svg
rename to SVGs/ILS/Motorstation-gezeichnet-links_Mpath.svg
diff --git a/SVGs/Motorstation-gezeichnet-rechts_Mpath.svg b/SVGs/ILS/Motorstation-gezeichnet-rechts_Mpath.svg
similarity index 100%
rename from SVGs/Motorstation-gezeichnet-rechts_Mpath.svg
rename to SVGs/ILS/Motorstation-gezeichnet-rechts_Mpath.svg
diff --git a/SVGs/Motorstation-gezeichnet_Mpath.svg b/SVGs/ILS/Motorstation-gezeichnet_Mpath.svg
similarity index 100%
rename from SVGs/Motorstation-gezeichnet_Mpath.svg
rename to SVGs/ILS/Motorstation-gezeichnet_Mpath.svg
diff --git a/SVGs/OF_Gerade.svg b/SVGs/ILS/OF_Gerade.svg
similarity index 100%
rename from SVGs/OF_Gerade.svg
rename to SVGs/ILS/OF_Gerade.svg
diff --git a/SVGs/PinBand.svg b/SVGs/ILS/PinBand.svg
similarity index 100%
rename from SVGs/PinBand.svg
rename to SVGs/ILS/PinBand.svg
diff --git a/SVGs/Spannstation-gezeichnet-links_Spath.svg b/SVGs/ILS/Spannstation-gezeichnet-links_Spath.svg
similarity index 100%
rename from SVGs/Spannstation-gezeichnet-links_Spath.svg
rename to SVGs/ILS/Spannstation-gezeichnet-links_Spath.svg
diff --git a/SVGs/Spannstation-gezeichnet-rechts_Spath.svg b/SVGs/ILS/Spannstation-gezeichnet-rechts_Spath.svg
similarity index 100%
rename from SVGs/Spannstation-gezeichnet-rechts_Spath.svg
rename to SVGs/ILS/Spannstation-gezeichnet-rechts_Spath.svg
diff --git a/SVGs/Spannstation-gezeichnet_Spath.svg b/SVGs/ILS/Spannstation-gezeichnet_Spath.svg
similarity index 100%
rename from SVGs/Spannstation-gezeichnet_Spath.svg
rename to SVGs/ILS/Spannstation-gezeichnet_Spath.svg
diff --git a/SVGs/StandardBand.svg b/SVGs/ILS/StandardBand.svg
similarity index 100%
rename from SVGs/StandardBand.svg
rename to SVGs/ILS/StandardBand.svg
diff --git a/SVGs/Steigung_auf.svg b/SVGs/ILS/Steigung_auf.svg
similarity index 100%
rename from SVGs/Steigung_auf.svg
rename to SVGs/ILS/Steigung_auf.svg
diff --git a/SVGs/VarioFörderer.svg b/SVGs/ILS/VarioFörderer.svg
similarity index 100%
rename from SVGs/VarioFörderer.svg
rename to SVGs/ILS/VarioFörderer.svg
diff --git a/SVGs/VarioFörderer_links.svg b/SVGs/ILS/VarioFörderer_links.svg
similarity index 100%
rename from SVGs/VarioFörderer_links.svg
rename to SVGs/ILS/VarioFörderer_links.svg
diff --git a/SVGs/VarioFörderer_rechts.svg b/SVGs/ILS/VarioFörderer_rechts.svg
similarity index 100%
rename from SVGs/VarioFörderer_rechts.svg
rename to SVGs/ILS/VarioFörderer_rechts.svg
diff --git a/SVGs/Weiche_aktiv.svg b/SVGs/ILS/Weiche_aktiv.svg
similarity index 100%
rename from SVGs/Weiche_aktiv.svg
rename to SVGs/ILS/Weiche_aktiv.svg
diff --git a/SVGs/Weiche_passiv.svg b/SVGs/ILS/Weiche_passiv.svg
similarity index 100%
rename from SVGs/Weiche_passiv.svg
rename to SVGs/ILS/Weiche_passiv.svg
diff --git a/SVGs/icon_add_grid_32.png b/SVGs/ILS/icon_add_grid_32.png
similarity index 100%
rename from SVGs/icon_add_grid_32.png
rename to SVGs/ILS/icon_add_grid_32.png
diff --git a/SVGs/icon_add_grid_64x64.svg b/SVGs/ILS/icon_add_grid_64x64.svg
similarity index 100%
rename from SVGs/icon_add_grid_64x64.svg
rename to SVGs/ILS/icon_add_grid_64x64.svg
diff --git a/SVGs/icon_dwg_import_32.png b/SVGs/ILS/icon_dwg_import_32.png
similarity index 100%
rename from SVGs/icon_dwg_import_32.png
rename to SVGs/ILS/icon_dwg_import_32.png
diff --git a/SVGs/icon_dwg_import_64x64.svg b/SVGs/ILS/icon_dwg_import_64x64.svg
similarity index 100%
rename from SVGs/icon_dwg_import_64x64.svg
rename to SVGs/ILS/icon_dwg_import_64x64.svg
diff --git a/SVGs/icon_export_csv_32.png b/SVGs/ILS/icon_export_csv_32.png
similarity index 100%
rename from SVGs/icon_export_csv_32.png
rename to SVGs/ILS/icon_export_csv_32.png
diff --git a/SVGs/icon_export_csv_64x64.svg b/SVGs/ILS/icon_export_csv_64x64.svg
similarity index 100%
rename from SVGs/icon_export_csv_64x64.svg
rename to SVGs/ILS/icon_export_csv_64x64.svg
diff --git a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_optimiert.svg b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_optimiert.svg
index 99c1e2c..1baf909 100644
--- a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_optimiert.svg
+++ b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_optimiert.svg
@@ -4,4 +4,4 @@
-
+
diff --git a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_optimiert.svg b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_optimiert.svg
index e8cbd05..2da371a 100644
--- a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_optimiert.svg
+++ b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_optimiert.svg
@@ -1,6 +1,6 @@
-
+
-
-
+
+
diff --git a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_optimiert.svg b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_optimiert.svg
index 68f6850..ee27f93 100644
--- a/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_optimiert.svg
+++ b/SVGs/Omniflo/Bogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_optimiert.svg
@@ -1,6 +1,6 @@
-
+
-
+
diff --git a/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_new.svg b/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_new.svg
index 20585c9..b990eb2 100644
--- a/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_new.svg
+++ b/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_new.svg
@@ -6,11 +6,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R630_45_400_821104031_new.svg b/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R630_45_400_821104031_new.svg
index 45c676c..686892d 100644
--- a/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R630_45_400_821104031_new.svg
+++ b/SVGs/Omniflo/Bogen/NewSVG/Original/APB_110_R630_45_400_821104031_new.svg
@@ -6,11 +6,11 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10040_TEFBogen_90_R725.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10040_TEFBogen_90_R725.svg
new file mode 100644
index 0000000..0a86354
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10040_TEFBogen_90_R725.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10050_TEFBogen_90_R535.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10050_TEFBogen_90_R535.svg
new file mode 100644
index 0000000..1fd5bd6
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10050_TEFBogen_90_R535.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10060_TEFBogen_45_R725.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10060_TEFBogen_45_R725.svg
new file mode 100644
index 0000000..32f57dc
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10060_TEFBogen_45_R725.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10070_TEFBogen_45_R535.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10070_TEFBogen_45_R535.svg
new file mode 100644
index 0000000..f317a4b
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10070_TEFBogen_45_R535.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10071_TEFBogen_45_R450.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10071_TEFBogen_45_R450.svg
new file mode 100644
index 0000000..4044a53
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10071_TEFBogen_45_R450.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10080_TEFBogen_67_5_R400.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10080_TEFBogen_67_5_R400.svg
new file mode 100644
index 0000000..2e3bda3
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10080_TEFBogen_67_5_R400.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10081_TEFBogen_67_5_R250.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10081_TEFBogen_67_5_R250.svg
new file mode 100644
index 0000000..e599e8d
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10081_TEFBogen_67_5_R250.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10090_TEFBogen_22_5_R450.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10090_TEFBogen_22_5_R450.svg
new file mode 100644
index 0000000..c9deda8
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10090_TEFBogen_22_5_R450.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10091_TEFBogen_22_5_R650.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10091_TEFBogen_22_5_R650.svg
new file mode 100644
index 0000000..e489b20
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/0_B10091_TEFBogen_22_5_R650.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250.svg
new file mode 100644
index 0000000..607519e
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450.svg
new file mode 100644
index 0000000..81d645e
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650.svg
new file mode 100644
index 0000000..9a88084
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450.svg
new file mode 100644
index 0000000..334e711
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400.svg
new file mode 100644
index 0000000..ad55e05
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725.svg
new file mode 100644
index 0000000..41d8753
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535.svg
new file mode 100644
index 0000000..343eb6d
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725.svg
new file mode 100644
index 0000000..114190a
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535.svg b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535.svg
new file mode 100644
index 0000000..bd865b6
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/Alt-Mittellinie/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg
new file mode 100644
index 0000000..9ab3528
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg
new file mode 100644
index 0000000..15a669f
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg
new file mode 100644
index 0000000..fdc4e77
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg
new file mode 100644
index 0000000..b2fc8cb
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg
new file mode 100644
index 0000000..e23d940
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg
new file mode 100644
index 0000000..f3404be
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg
new file mode 100644
index 0000000..2d69e43
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg
new file mode 100644
index 0000000..f86264f
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg
new file mode 100644
index 0000000..8d13535
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg
new file mode 100644
index 0000000..772c725
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg
new file mode 100644
index 0000000..e560298
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg
new file mode 100644
index 0000000..b4fde50
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg
new file mode 100644
index 0000000..77e296d
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg
new file mode 100644
index 0000000..6f68269
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg
new file mode 100644
index 0000000..80ec7af
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg
new file mode 100644
index 0000000..95a19d8
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg
new file mode 100644
index 0000000..57c0d09
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg
new file mode 100644
index 0000000..98ede57
--- /dev/null
+++ b/SVGs/Omniflo/TEFBogen/NewSVG/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_input.json b/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_input.json
new file mode 100644
index 0000000..835eb0b
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_input.json
@@ -0,0 +1,228 @@
+[
+ {
+ "SVGname": "APB_110_R400_45_400_821104021.svg",
+ "Sivasnr": "821104021",
+ "Winkel":45,
+ "center_line_width_mm": 669.491,
+ "center_line_height_mm": 399.505,
+ "Objekt_width_mm":684.367,
+ "Objekt_height_mm":435.421
+ },
+ {
+ "SVGname": "APB_110_R400_67_5_339_821104024.svg",
+ "Sivasnr": "821104024",
+ "Winkel":67.5,
+ "center_line_width_mm": 507.820,
+ "center_line_height_mm": 339.315,
+ "Objekt_width_mm":527.258,
+ "Objekt_height_mm":368.405
+ },
+ {
+ "SVGname": "APB_110_R400_90_500_821104022.svg",
+ "Sivasnr": "821104022",
+ "Winkel":90,
+ "center_line_width_mm": 500,
+ "center_line_height_mm": 500,
+ "Objekt_width_mm":521.040,
+ "Objekt_height_mm":521.040
+ },
+ {
+ "SVGname": "APB_110_R500_90_550_550_821104030.svg",
+ "Sivasnr": "821104030",
+ "Winkel":90,
+ "center_line_width_mm": 550,
+ "center_line_height_mm": 550,
+ "Objekt_width_mm":571.040,
+ "Objekt_height_mm":571.040
+ },
+ {
+ "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.230,
+ "Objekt_width_mm":522.542,
+ "Objekt_height_mm":162.707
+ },
+ {
+ "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.230,
+ "Objekt_width_mm":522.542,
+ "Objekt_height_mm":162.707
+ },
+ {
+ "SVGname": "APB_110_R550_45_191_821104029.svg",
+ "Sivasnr": "821104029",
+ "Winkel":45,
+ "center_line_width_mm": 551.606,
+ "center_line_height_mm": 190.792 ,
+ "Objekt_width_mm":566.483,
+ "Objekt_height_mm":226.709
+ },
+ {
+ "SVGname": "APB_110_R550_45_205_821104037.svg",
+ "Sivasnr": "821104037",
+ "Winkel":45,
+ "center_line_width_mm": 537.249,
+ "center_line_height_mm": 204.932,
+ "Objekt_width_mm":552.126,
+ "Objekt_height_mm":240.849
+ },
+ {
+ "SVGname": "APB_110_R550_45_232_821104026.svg",
+ "Sivasnr": "821104026",
+ "Winkel":45,
+ "center_line_width_mm": 595.265,
+ "center_line_height_mm": 265.998,
+ "Objekt_width_mm":610.142,
+ "Objekt_height_mm":301.914
+ },
+ {
+ "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
+ },
+ {
+ "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
+ },
+ {
+ "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
+ },
+ {
+ "SVGname": "APB_110_R550_67_5_L_185_170_821104065.svg",
+ "Sivasnr": "821104065",
+ "Winkel":67.5,
+ "center_line_width_mm": 758.190,
+ "center_line_height_mm": 496.584,
+ "Objekt_width_mm":777.628,
+ "Objekt_height_mm":525.674
+ },
+ {
+ "SVGname": "APB_110_R550_90_900_605_821104066.svg",
+ "Sivasnr": "821104066",
+ "Winkel":90,
+ "center_line_width_mm": 900,
+ "center_line_height_mm": 605,
+ "Objekt_width_mm":921.040,
+ "Objekt_height_mm":626.040
+ },
+ {
+ "SVGname": "APB_110_R630_45_400_821104031.svg",
+ "Sivasnr": "821104031",
+ "Winkel":45,
+ "center_line_width_mm": 865.613,
+ "center_line_height_mm": 300.559,
+ "Objekt_width_mm":880.491,
+ "Objekt_height_mm":336.475
+ },
+ {
+ "SVGname": "APB_110_R630_45_400_821104031.svg",
+ "Sivasnr": "OFBogen45",
+ "Winkel":45,
+ "center_line_width_mm": 865.613,
+ "center_line_height_mm": 300.559,
+ "Objekt_width_mm":880.491,
+ "Objekt_height_mm":336.475
+ },
+ {
+ "SVGname": "APB_110_R630_90_800_800_821104033.svg",
+ "Sivasnr": "821104033",
+ "Winkel":90,
+ "center_line_width_mm": 800,
+ "center_line_height_mm": 800,
+ "Objekt_width_mm":821.040,
+ "Objekt_height_mm":821.040
+ },
+ {
+ "SVGname": "APB_110_R630_90_800_800_821104033.svg",
+ "Sivasnr": "OFBogen90",
+ "Winkel":90,
+ "center_line_width_mm": 800,
+ "center_line_height_mm": 800,
+ "Objekt_width_mm":821.040,
+ "Objekt_height_mm":821.040
+ },
+
+ {
+ "SVGname": "APB_110_R630_90_850_690_821104041.svg",
+ "Sivasnr": "821104041",
+ "Winkel":90,
+ "center_line_width_mm": 690,
+ "center_line_height_mm": 850,
+ "Objekt_width_mm":711.040,
+ "Objekt_height_mm":871.040
+ },
+ {
+ "SVGname": "APB_110_R630_90_850_870_821104035.svg",
+ "Sivasnr": "821104035",
+ "Winkel":90,
+ "center_line_width_mm": 850,
+ "center_line_height_mm": 870,
+ "Objekt_width_mm":871.04,
+ "Objekt_height_mm":891.04
+ },
+ {
+ "SVGname": "APB_110_R630_90_850_890_821104034.svg",
+ "Sivasnr": "821104034",
+ "Winkel":90,
+ "center_line_width_mm": 890,
+ "center_line_height_mm": 850,
+ "Objekt_width_mm":911.040,
+ "Objekt_height_mm":871.040
+ },
+ {
+ "SVGname": "APB_110_R650_180_L_150_821104043.svg",
+ "Sivasnr": "821104043",
+ "Winkel":180,
+ "center_line_width_mm": 800,
+ "center_line_height_mm": 1300,
+ "Objekt_width_mm":821.040,
+ "Objekt_height_mm":1342.080
+ },
+ {
+ "SVGname": "APB_110_R650_180_L_150_821104043.svg",
+ "Sivasnr": "OFBogen180",
+ "Winkel":180,
+ "center_line_width_mm": 800,
+ "center_line_height_mm": 1300,
+ "Objekt_width_mm":821.040,
+ "Objekt_height_mm":1342.080
+ },
+ {
+ "SVGname": "APB_60_R515_90_650_821094040.svg",
+ "Sivasnr": "821094040",
+ "Winkel":90,
+ "center_line_width_mm": 650.0,
+ "center_line_height_mm": 650.0,
+ "Objekt_width_mm": 671.040,
+ "Objekt_height_mm": 671.040
+ },
+ {
+ "SVGname": "APB_60_R515_90_810_821094101.svg",
+ "Sivasnr": "821094101",
+ "Winkel":90,
+ "center_line_width_mm": 810.0,
+ "center_line_height_mm": 810.0,
+ "Objekt_width_mm": 831.04,
+ "Objekt_height_mm": 831.04
+ }
+]
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_output.json b/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_output.json
new file mode 100644
index 0000000..96adb4e
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/1_SVGErfassung_updated_new_output.json
@@ -0,0 +1,277 @@
+[
+ {
+ "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": 821.04,
+ "Objekt_height_mm": 1342.08,
+ "calculated_objekt_width_mm": 821.04,
+ "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": 821.04,
+ "Objekt_height_mm": 1342.08,
+ "calculated_objekt_width_mm": 821.04,
+ "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
+ }
+]
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/1_calculate_ture_width_and_height_dimensions_with_profile_width.py b/SVGs/Omniflo/python/OFBogen/1_calculate_ture_width_and_height_dimensions_with_profile_width.py
new file mode 100644
index 0000000..afcfe06
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/1_calculate_ture_width_and_height_dimensions_with_profile_width.py
@@ -0,0 +1,151 @@
+''' 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
+
+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"] + sin_value * 21.040
+ calculated_height = processed_item["center_line_height_mm"] + 21.040 + cos_value * 21.040
+ 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__":
+ input_filename = "1_SVGErfassung_updated_new_input.json" # Replace with your input filename
+ output_filename = "1_SVGErfassung_updated_new_output.json" # Replace with desired output filename
+
+ process_json_file(input_filename, output_filename)
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/2_calculated_px_cps_output.json b/SVGs/Omniflo/python/OFBogen/2_calculated_px_cps_output.json
new file mode 100644
index 0000000..5b473c8
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/2_calculated_px_cps_output.json
@@ -0,0 +1,752 @@
+[
+ {
+ "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,
+ "Objekt_width_px": 2586.565,
+ "Objekt_height_px": 1645.674,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 638.912,
+ "scale_factor": 1.4612043,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 48.119,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 978.263,
+ "y": 961.795,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 1992.772,
+ "Objekt_height_px": 1392.387,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 700.764,
+ "scale_factor": 1.8966047,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 56.944,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 963.134,
+ "y": 975.294,
+ "direction": 157.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 1969.271,
+ "Objekt_height_px": 1969.271,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.919238,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 40.381,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 959.619,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2158.246,
+ "Objekt_height_px": 2158.246,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.751191,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 36.845,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 963.155,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 1974.947,
+ "Objekt_height_px": 614.951,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 316.315,
+ "scale_factor": 1.9137218,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 127.293,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 984.593,
+ "y": 866.791,
+ "direction": 112.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 1974.947,
+ "Objekt_height_px": 614.951,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 316.315,
+ "scale_factor": 1.9137218,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 127.293,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 984.593,
+ "y": 866.791,
+ "direction": 112.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2141.022,
+ "Objekt_height_px": 856.847,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 402.877,
+ "scale_factor": 1.765278,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 92.191,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 973.738,
+ "y": 928.18,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2086.76,
+ "Objekt_height_px": 910.289,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 438.894,
+ "scale_factor": 1.8111808,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 86.826,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 973.055,
+ "y": 932.517,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2306.032,
+ "Objekt_height_px": 1141.084,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 497.499,
+ "scale_factor": 1.6389627,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 69.314,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 975.617,
+ "y": 945.619,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2274.749,
+ "Objekt_height_px": 1696.965,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 748.047,
+ "scale_factor": 1.6615022,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 46.732,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 967.704,
+ "y": 979.385,
+ "direction": 157.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2903.015,
+ "Objekt_height_px": 2114.237,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 730.336,
+ "scale_factor": 1.3019223,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 37.507,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 974.695,
+ "y": 982.847,
+ "direction": 157.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2903.015,
+ "Objekt_height_px": 2114.237,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 730.336,
+ "scale_factor": 1.3019223,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 37.507,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 974.695,
+ "y": 982.847,
+ "direction": 157.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2939.045,
+ "Objekt_height_px": 1986.785,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 678.042,
+ "scale_factor": 1.2859619,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 39.904,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 975.003,
+ "y": 981.716,
+ "direction": 157.5
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3481.071,
+ "Objekt_height_px": 2366.118,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 681.6,
+ "scale_factor": 1.0857292,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 33.515,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 977.156,
+ "y": 997.227,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3327.816,
+ "Objekt_height_px": 1271.707,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 384.818,
+ "scale_factor": 1.13573,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 62.096,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 983.103,
+ "y": 949.149,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3327.816,
+ "Objekt_height_px": 1271.707,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 384.818,
+ "scale_factor": 1.13573,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 62.096,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 983.103,
+ "y": 949.149,
+ "direction": 135.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3103.121,
+ "Objekt_height_px": 3103.121,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.217967,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 25.626,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 974.374,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3103.121,
+ "Objekt_height_px": 3103.121,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.217967,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 25.626,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 974.374,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2687.376,
+ "Objekt_height_px": 3292.096,
+ "calculated_SVG_height_px": 1000,
+ "calculated_SVG_width_px": 3.0866042377540064e+16,
+ "scale_factor": 1.1480529,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 24.155,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 0.0,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3292.096,
+ "Objekt_height_px": 3367.686,
+ "calculated_SVG_height_px": 1000,
+ "calculated_SVG_width_px": 3.0866042377540224e+16,
+ "scale_factor": 1.1222841,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 23.613,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 0.0,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3443.276,
+ "Objekt_height_px": 3292.096,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 957.984,
+ "scale_factor": 1.0976466,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 24.107,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 976.905,
+ "y": 998.027,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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": 821.04,
+ "Objekt_height_mm": 1342.08,
+ "calculated_objekt_width_mm": 821.04,
+ "calculated_objekt_height_mm": 1342.08,
+ "Objekt_width_px": 3103.121,
+ "Objekt_height_px": 5072.391,
+ "calculated_SVG_height_px": 1000,
+ "calculated_SVG_width_px": 613.657,
+ "scale_factor": 0.7451121,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 15.677,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 0,
+ "y": 984.323,
+ "direction": 270.0
+ }
+ ]
+ },
+ {
+ "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": 821.04,
+ "Objekt_height_mm": 1342.08,
+ "calculated_objekt_width_mm": 821.04,
+ "calculated_objekt_height_mm": 1342.08,
+ "Objekt_width_px": 3103.121,
+ "Objekt_height_px": 5072.391,
+ "calculated_SVG_height_px": 1000,
+ "calculated_SVG_width_px": 613.657,
+ "scale_factor": 0.7451121,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 15.677,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 0,
+ "y": 984.323,
+ "direction": 270.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 2536.196,
+ "Objekt_height_px": 2536.196,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.490224,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 31.354,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 968.646,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ },
+ {
+ "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,
+ "Objekt_width_px": 3140.916,
+ "Objekt_height_px": 3140.916,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "scale_factor": 1.203312,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": 25.318,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": 974.683,
+ "y": 1000.0,
+ "direction": 180.0
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py b/SVGs/Omniflo/python/OFBogen/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py
new file mode 100644
index 0000000..611ec31
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py
@@ -0,0 +1,175 @@
+''' This Python script processes JSON data containing SVG object measurements and performs several calculations to standardize the dimensions and add connection points. Here's the main logic:
+
+ Data Processing:
+ Converts all numeric fields to floats
+ Determines the dominant dimension (width or height) and scales it to 1000px
+ Calculates the other dimension proportionally
+ Computes two connection points (cp1 and cp2) with their coordinates and directions
+ Error Checking:
+ Validates that connection points stay within the 1000px boundary
+ Provides detailed error reporting
+ Scaling Logic:
+ Uses different scaling approaches based on whether width or height is larger
+ Maintains aspect ratio while standardizing dimensions '''
+import json
+import math
+
+def process_json_item(item):
+ # Ensure all numeric fields are floats
+ item["Winkel"] = float(item["Winkel"])
+ item["center_line_width_mm"] = float(item["center_line_width_mm"])
+ 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.7795, 3)
+ item["Objekt_height_px"] = round(item["Objekt_height_mm"] * 3.7795, 3)
+
+ winkel_rad = math.radians(item["Winkel"])
+ sin_value = math.sin(winkel_rad)
+ cos_value = math.cos(winkel_rad)
+
+
+ # Determine which dimension is larger
+ if item["Objekt_width_mm"] == item["Objekt_height_mm"]:
+ # "Width =Height"
+ scale = round(1000 / item["Objekt_width_mm"], 6)
+ 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"]
+ 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.78/2, 3)
+ else:
+ item["calculated_SVG_height_px"] = round(item["Objekt_height_mm"] * scale+3.78/2/sin_value, 3)
+ scale_RD_H = round(1000 / item["calculated_SVG_height_px"], 6)
+ 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.78/2, 3)
+ else:
+ item["calculated_SVG_width_px"] = round(item["Objekt_width_mm"] * scale+3.78/2/cos_value, 3)
+ scale_RD_W = round(1000 / item["calculated_SVG_width_px"], 6)
+ scale_RD_H = 1
+
+ item["scale_factor"] = scale # Add scale factor
+
+ # Calculate connection points
+ cp1_y = round(21.040 * 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((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)
+ 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
+
+ # Add connection points attributes
+ item["connectionPoints"] = [
+ {
+ "id": "cp1",
+ "x": 0,
+ "y": cp1_y,
+ "direction": 270.0
+ },
+ {
+ "id": "cp2",
+ "x": cp2_x,
+ "y": cp2_y,
+ "direction": cp2_direction
+ }
+ ]
+
+ return item
+
+def check_connection_points(item):
+ """Check if connection point coordinates exceed 1000"""
+ errors = []
+ for cp in item.get("connectionPoints", []):
+ if cp["x"] > 1000 or cp["y"] > 1000:
+ errors.append(f"Connection point {cp['id']} exceeds range: x={cp['x']}, y={cp['y']}")
+ return errors
+
+def process_json_file(input_file, output_file):
+ try:
+ # Read input file
+ with open(input_file, 'r', encoding='utf-8') as f:
+ data = json.load(f)
+
+ # Verify data is a list
+ if not isinstance(data, list):
+ print("Error: JSON data should be an array")
+ return
+
+ # Process each item
+ processed_data = []
+ error_reports = []
+
+ for idx, item in enumerate(data, start=1):
+ try:
+ processed_item = process_json_item(item)
+
+ # Check connection point coordinates
+ errors = check_connection_points(processed_item)
+ if errors:
+ error_msg = f"Item {idx} [{item.get('SVGname')}] coordinate errors:"
+ for err in errors:
+ error_msg += f"\n - {err}"
+ error_reports.append(error_msg)
+
+ processed_data.append(processed_item)
+ except Exception as e:
+ error_msg = f"Error processing item {idx} [{item.get('SVGname')}]: {str(e)}"
+ error_reports.append(error_msg)
+ processed_data.append(item) # Keep original data
+
+ # Write output file
+ with open(output_file, 'w', encoding='utf-8') as f:
+ json.dump(processed_data, f, indent=4, ensure_ascii=False)
+
+ print(f"Processing complete. Results saved to {output_file}")
+
+ # Print error reports
+ if error_reports:
+ print("\n" + "="*50)
+ print("Coordinate Validation Error Report:")
+ print("="*50)
+ for report in error_reports:
+ print("\n" + report)
+ print("\n" + "="*50)
+ print(f"Found {len(error_reports)} coordinate issues")
+ print("="*50)
+ else:
+ print("\nAll connection point coordinates validated successfully - no out-of-range issues found")
+
+ except FileNotFoundError:
+ print(f"Error: Input file '{input_file}' not found")
+ except json.JSONDecodeError as e:
+ print(f"JSON parsing error: {e}")
+ except Exception as e:
+ print(f"Error during processing: {e}")
+
+# Example usage
+if __name__ == "__main__":
+ input_filename = "1_SVGErfassung_updated_new_output.json"
+ output_filename = "2_calculated_px_cps_output.json"
+
+ process_json_file(input_filename, output_filename)
+ process_json_file(input_filename, output_filename)
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/3_update_dimensions_and_connection_points_in_props.py b/SVGs/Omniflo/python/OFBogen/3_update_dimensions_and_connection_points_in_props.py
new file mode 100644
index 0000000..df1bd36
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/3_update_dimensions_and_connection_points_in_props.py
@@ -0,0 +1,134 @@
+''' Script Analysis
+
+This Python script processes JSON and TXT files to update dimensions and connection points in SVG-related data. Here's the main logic:
+ Input Handling:
+ Reads a JSON file containing reference data
+ Processes all TXT files in a specified directory
+ Data Processing:
+ Creates a mapping between Sivasnr (from filenames) and JSON data
+ For each matching TXT file:
+ Updates width and height based on JSON data (converting mm to px)
+ Updates connection points (x, y, direction) from JSON data
+ Preserves the original file structure while updating specific values
+ Reporting:
+ Prints detailed change reports to console
+ Skips files without matching JSON data '''
+import json
+import os
+import glob
+from datetime import datetime
+
+def process_files(json_file_path, txt_files_dir):
+ # Create a log file with timestamp
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
+ log_file_path = os.path.join(txt_files_dir, f"modification_report_OFBogen_{timestamp}.txt")
+
+ # Read JSON file
+ with open(json_file_path, 'r', encoding='utf-8') as f:
+ json_data = json.load(f)
+
+ # Create Sivasnr to JSON data mapping
+ sivasnr_mapping = {item["Sivasnr"]: item for item in json_data}
+
+ # Prepare report content
+ report_content = []
+ report_content.append(f"Modification Report - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
+ report_content.append("="*50 + "\n")
+
+ # Process all TXT files
+ for txt_file_path in glob.glob(os.path.join(txt_files_dir, '*.txt')):
+ # Extract Sivasnr from filename
+ sivasnr = os.path.splitext(os.path.basename(txt_file_path))[0]
+
+ # Check if corresponding JSON data exists
+ if sivasnr in sivasnr_mapping:
+ json_item = sivasnr_mapping[sivasnr]
+
+ # Read TXT file content (using utf-8-sig to handle BOM)
+ with open(txt_file_path, 'r', encoding='utf-8-sig') as f:
+ txt_content = json.load(f)
+
+ # Prepare entry for this file
+ file_entry = []
+ file_entry.append(f"\nProcessing file: {txt_file_path}")
+ file_entry.append("="*50)
+
+ # Record old values
+ old_width = txt_content["width"]
+ old_height = txt_content["height"]
+ old_cps = {cp["id"]: {"x": cp["x"], "y": cp["y"], "direction": cp["direction"]}
+ for cp in txt_content["connectionPoints"]}
+
+ # Update width and height
+ new_width = round(json_item["Objekt_width_mm"] * 3.7795, 3)
+ new_height = round(json_item["Objekt_height_mm"] * 3.7795, 3)
+ txt_content["width"] = new_width
+ txt_content["height"] = new_height
+
+ # Update connectionPoints
+ cp_changes = []
+ for cp in txt_content["connectionPoints"]:
+ cp_id = cp["id"]
+ # Find corresponding connection point in JSON data
+ json_cp = next((item for item in json_item["connectionPoints"] if item["id"] == cp_id), None)
+ if json_cp:
+ # Record old values
+ old_x = cp["x"]
+ old_y = cp["y"]
+ old_dir = cp["direction"]
+
+ # Update values
+ cp["x"] = json_cp["x"]
+ cp["y"] = json_cp["y"]
+ cp["direction"] = json_cp["direction"]
+
+ # Record changes
+ cp_changes.append({
+ "id": cp_id,
+ "x": (old_x, cp["x"]),
+ "y": (old_y, cp["y"]),
+ "direction": (old_dir, cp["direction"])
+ })
+
+ # Write back to TXT file
+ with open(txt_file_path, 'w', encoding='utf-8') as f:
+ json.dump(txt_content, f, indent=2, ensure_ascii=False)
+
+ # Add to report
+ file_entry.append("[Dimension Changes]")
+ file_entry.append(f"width: {old_width} → {new_width}")
+ file_entry.append(f"height: {old_height} → {new_height}")
+
+ if cp_changes:
+ file_entry.append("\n[Connection Point Changes]")
+ for change in cp_changes:
+ file_entry.append(f"Connection point {change['id']}:")
+ file_entry.append(f" x: {change['x'][0]} → {change['x'][1]}")
+ file_entry.append(f" y: {change['y'][0]} → {change['y'][1]}")
+ file_entry.append(f" direction: {change['direction'][0]} → {change['direction'][1]}")
+
+ file_entry.append(f"\nFile {txt_file_path} processed successfully")
+ file_entry.append("="*50)
+
+ # Add this file's entry to main report
+ report_content.extend(file_entry)
+
+ # Also print to console
+ print("\n" + "\n".join(file_entry))
+ else:
+ print(f"\nSkipping file {txt_file_path} (no matching JSON data found)")
+
+ # Write the report file if any changes were made
+ if len(report_content) > 2: # More than just the header
+ with open(log_file_path, 'w', encoding='utf-8') as f:
+ f.write("\n".join(report_content))
+ print(f"\nModification report saved to: {log_file_path}")
+ else:
+ print("\nNo files were modified - no report generated")
+
+# Example usage
+if __name__ == "__main__":
+ json_file_path = "2_calculated_px_cps_output.json"
+ txt_files_dir = "C:/Program Files/RuleDesigner/RDConfigurator Fusion/WebApi/Editor2D/SSG/shapes/props"
+ process_files(json_file_path, txt_files_dir)
+ print("\nAll files processed!")
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/OFBogen/4_OFBogen_SVG_XML_Modifier_Script.py b/SVGs/Omniflo/python/OFBogen/4_OFBogen_SVG_XML_Modifier_Script.py
new file mode 100644
index 0000000..67121c5
--- /dev/null
+++ b/SVGs/Omniflo/python/OFBogen/4_OFBogen_SVG_XML_Modifier_Script.py
@@ -0,0 +1,150 @@
+"""
+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('', '\n')
+
+ 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
+ """
+ # Configure paths
+ json_file_path = r"C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\python\OFBogen\1_SVGErfassung_updated_new_input.json"
+ svg_folder_path = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\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()
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/TEFBogen/.vscode/launch.json b/SVGs/Omniflo/python/TEFBogen/.vscode/launch.json
new file mode 100644
index 0000000..552f3ae
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/.vscode/launch.json
@@ -0,0 +1,16 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Python Debugger: Current File",
+ "type": "debugpy",
+ "request": "launch",
+ "program": "${file}",
+ "args": ["1_TEF_Boegen_input.json"],
+ "console": "integratedTerminal"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input.json b/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input.json
new file mode 100644
index 0000000..9b16066
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input.json
@@ -0,0 +1,166 @@
+
+
+ [{
+ "Sivasnr": "821104033+0_B10040",
+ "ProfilTyp": "APB 110 R 630/90° – 800/800 mit TEF Aussen",
+ "Radius": 630,
+ "KurvenWinkel": 90,
+ "Gruppe_width_mm":931.30,
+ "Gruppe_height_mm":931.30,
+ "OFBogen_center_line_width_mm": 800,
+ "OFBogen_center_line_height_mm": 800,
+ "TEFBogen_center_line_width_mm": 900,
+ "TEFBogen_center_line_height_mm": 900,
+ "OFBogen_CP1_x_mm":0,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":131.30,
+ "TEFBogen_CP1_y_mm":31.30,
+ "SivasnrTEF": "0_B10040",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104033+0_B10050",
+ "ProfilTyp": "APB 110 R 630/90° – 800/800 mit TEF Innen",
+ "Radius": 630,
+ "KurvenWinkel": 90,
+ "Gruppe_width_mm":821.040,
+ "Gruppe_height_mm":821.040,
+ "OFBogen_center_line_width_mm": 800,
+ "OFBogen_center_line_height_mm": 800,
+ "TEFBogen_center_line_width_mm": 700,
+ "TEFBogen_center_line_height_mm": 700,
+ "OFBogen_CP1_x_mm":0,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":21.040,
+ "TEFBogen_CP1_y_mm":121.040,
+ "SivasnrTEF": "0_B10050",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104025+0_B10090",
+ "ProfilTyp": "APB 110 R 550/22,5° – 84/522 mit TEF Innen",
+ "Radius": 550,
+ "KurvenWinkel": 22.5,
+ "Gruppe_width_mm":537.544,
+ "Gruppe_height_mm":232.057,
+ "OFBogen_center_line_width_mm": 514.491,
+ "OFBogen_center_line_height_mm": 122.230,
+ "TEFBogen_center_line_width_mm": 412.692,
+ "TEFBogen_center_line_height_mm": 82.090,
+ "OFBogen_CP1_x_mm":15.002,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":21.040,
+ "TEFBogen_CP1_y_mm":121.049,
+ "SivasnrTEF": "0_B10090",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104025+0_B10091",
+ "ProfilTyp": "APB 110 R 550/22,5° – 84/522 mit TEF Aussen",
+ "Radius": 550,
+ "KurvenWinkel": 22.5,
+ "Gruppe_width_mm":655.564,
+ "Gruppe_height_mm":272.978,
+ "OFBogen_center_line_width_mm": 514.491,
+ "OFBogen_center_line_height_mm": 122.230,
+ "TEFBogen_center_line_width_mm": 643.589,
+ "TEFBogen_center_line_height_mm": 125.683,
+ "OFBogen_CP1_x_mm":100.867,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":131.310,
+ "TEFBogen_CP1_y_mm":31.300,
+ "SivasnrTEF": "0_B10091",
+ "Antriebsart":2
+
+ },
+ {
+ "Sivasnr": "821104026+0_B10071",
+ "ProfilTyp": "APB 110 R 550/45° – 232/610 mit TEF Innen",
+ "Radius": 550,
+ "KurvenWinkel": 45,
+ "Gruppe_width_mm":610.142,
+ "Gruppe_height_mm":308.217,
+ "OFBogen_center_line_width_mm": 595.265,
+ "OFBogen_center_line_height_mm": 265.998,
+ "TEFBogen_center_line_width_mm": 398.432,
+ "TEFBogen_center_line_height_mm": 165.036,
+ "OFBogen_CP1_x_mm":0,
+ "TEFBogen_CP1_x_mm":54.446,
+ "OFBogen_CP1_y_mm":21.040,
+ "TEFBogen_CP1_y_mm":121.049,
+ "SivasnrTEF": "0_B10071",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104031+0_B10060",
+ "ProfilTyp": "APB 110 R 630/45° – 400/825 mit TEF Aussen",
+ "Radius": 630,
+ "KurvenWinkel": 45,
+ "Gruppe_width_mm":958.874,
+ "Gruppe_height_mm":446.746,
+ "OFBogen_center_line_width_mm": 865.614,
+ "OFBogen_center_line_height_mm": 300.559,
+ "TEFBogen_center_line_width_mm": 936.741,
+ "TEFBogen_center_line_height_mm":329.985,
+ "OFBogen_CP1_x_mm":0.276,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":131.310,
+ "TEFBogen_CP1_y_mm":31.30,
+ "SivasnrTEF": "0_B10060",
+ "Antriebsart":2
+ },
+ {
+ "Sivasnr": "821104031+0_B10070",
+ "ProfilTyp": "APB 110 R 630/45° – 400/825 mit TEF Innen",
+ "Radius": 630,
+ "KurvenWinkel": 45,
+ "Gruppe_width_mm":880.942,
+ "Gruppe_height_mm":414.496,
+ "OFBogen_center_line_width_mm": 865.614,
+ "OFBogen_center_line_height_mm": 300.559,
+ "TEFBogen_center_line_width_mm": 759.396,
+ "TEFBogen_center_line_height_mm": 271.313,
+ "OFBogen_CP1_x_mm":0.453,
+ "TEFBogen_CP1_x_mm":0,
+ "OFBogen_CP1_y_mm":21.04,
+ "TEFBogen_CP1_y_mm":121.049,
+ "SivasnrTEF": "0_B10070",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104024+0_B10081",
+ "ProfilTyp": "APB 110 R 400/67,5° – 339/508 mit TEF Innen",
+ "Radius": 400,
+ "KurvenWinkel": 67.5,
+ "Gruppe_width_mm":527.258,
+ "Gruppe_height_mm":368.405,
+ "OFBogen_center_line_width_mm": 507.820,
+ "OFBogen_center_line_height_mm": 339.315,
+ "TEFBogen_center_line_width_mm": 306.339,
+ "TEFBogen_center_line_height_mm": 198.675,
+ "OFBogen_CP1_x_mm":0,
+ "TEFBogen_CP1_x_mm":76.402,
+ "OFBogen_CP1_y_mm":21.040,
+ "TEFBogen_CP1_y_mm":121.049,
+ "SivasnrTEF": "0_B10081",
+ "Antriebsart":1
+ },
+ {
+ "Sivasnr": "821104027+0_B10080",
+ "ProfilTyp": "APB 110 R 550/67,5° – 488/778 mit TEF Innen",
+ "Radius": 550,
+ "KurvenWinkel": 67.5,
+ "Gruppe_width_mm":768.095,
+ "Gruppe_height_mm":559.396,
+ "OFBogen_center_line_width_mm": 748.658,
+ "OFBogen_center_line_height_mm": 530.305,
+ "TEFBogen_center_line_width_mm": 469.752,
+ "TEFBogen_center_line_height_mm": 353.635,
+ "OFBogen_CP1_x_mm":0,
+ "TEFBogen_CP1_x_mm":138.902,
+ "OFBogen_CP1_y_mm":21.040,
+ "TEFBogen_CP1_y_mm":121.050,
+ "SivasnrTEF": "0_B10080",
+ "Antriebsart":1
+ }
+]
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input_processed_output.json b/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input_processed_output.json
new file mode 100644
index 0000000..633129a
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/1_TEF_Boegen_input_processed_output.json
@@ -0,0 +1,506 @@
+[
+ {
+ "Sivasnr": "821104033+0_B10040",
+ "ProfilTyp": "APB 110 R 630/90° – 800/800 mit TEF Aussen",
+ "Radius": 630.0,
+ "KurvenWinkel": 90.0,
+ "Gruppe_width_mm": 931.3,
+ "Gruppe_height_mm": 931.3,
+ "OFBogen_center_line_width_mm": 800.0,
+ "OFBogen_center_line_height_mm": 800.0,
+ "TEFBogen_center_line_width_mm": 900.0,
+ "TEFBogen_center_line_height_mm": 900.0,
+ "OFBogen_CP1_x_mm": 0.0,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 131.3,
+ "TEFBogen_CP1_y_mm": 31.3,
+ "SivasnrTEF": "0_B10040",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 800.0,
+ "TEFBogen_CP2_x_mm": 900.0,
+ "OFBogen_CP2_y_mm": 931.3,
+ "TEFBogen_CP2_y_mm": 931.3,
+ "Gruppe_width_px": 3519.848,
+ "Gruppe_height_px": 3519.848,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.0,
+ "y": 140.986,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 859.014,
+ "y": 1000.0,
+ "direction": 180.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 33.609,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 966.391,
+ "y": 1000.0,
+ "direction": 180.0,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104033+0_B10050",
+ "ProfilTyp": "APB 110 R 630/90° – 800/800 mit TEF Innen",
+ "Radius": 630.0,
+ "KurvenWinkel": 90.0,
+ "Gruppe_width_mm": 821.04,
+ "Gruppe_height_mm": 821.04,
+ "OFBogen_center_line_width_mm": 800.0,
+ "OFBogen_center_line_height_mm": 800.0,
+ "TEFBogen_center_line_width_mm": 700.0,
+ "TEFBogen_center_line_height_mm": 700.0,
+ "OFBogen_CP1_x_mm": 0.0,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.04,
+ "SivasnrTEF": "0_B10050",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 800.0,
+ "TEFBogen_CP2_x_mm": 700.0,
+ "OFBogen_CP2_y_mm": 821.04,
+ "TEFBogen_CP2_y_mm": 821.04,
+ "Gruppe_width_px": 3103.121,
+ "Gruppe_height_px": 3103.121,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 1000.0,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.0,
+ "y": 25.626,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 974.374,
+ "y": 1000.0,
+ "direction": 180.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 147.423,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 852.577,
+ "y": 1000.0,
+ "direction": 180.0,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104025+0_B10090",
+ "ProfilTyp": "APB 110 R 550/22,5° – 84/522 mit TEF Innen",
+ "Radius": 550.0,
+ "KurvenWinkel": 22.5,
+ "Gruppe_width_mm": 537.544,
+ "Gruppe_height_mm": 232.057,
+ "OFBogen_center_line_width_mm": 514.491,
+ "OFBogen_center_line_height_mm": 122.23,
+ "TEFBogen_center_line_width_mm": 412.692,
+ "TEFBogen_center_line_height_mm": 82.09,
+ "OFBogen_CP1_x_mm": 15.002,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.049,
+ "SivasnrTEF": "0_B10090",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 529.493,
+ "TEFBogen_CP2_x_mm": 412.692,
+ "OFBogen_CP2_y_mm": 143.27,
+ "TEFBogen_CP2_y_mm": 203.139,
+ "Gruppe_width_px": 2031.648,
+ "Gruppe_height_px": 877.059,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 433.588,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 27.908,
+ "y": 90.272,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 985.023,
+ "y": 614.701,
+ "direction": 112.5,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 519.362,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 767.736,
+ "y": 871.57,
+ "direction": 112.5,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104025+0_B10091",
+ "ProfilTyp": "APB 110 R 550/22,5° – 84/522 mit TEF Aussen",
+ "Radius": 550.0,
+ "KurvenWinkel": 22.5,
+ "Gruppe_width_mm": 655.564,
+ "Gruppe_height_mm": 272.978,
+ "OFBogen_center_line_width_mm": 514.491,
+ "OFBogen_center_line_height_mm": 122.23,
+ "TEFBogen_center_line_width_mm": 643.589,
+ "TEFBogen_center_line_height_mm": 125.683,
+ "OFBogen_CP1_x_mm": 100.867,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 131.31,
+ "TEFBogen_CP1_y_mm": 31.3,
+ "SivasnrTEF": "0_B10091",
+ "Antriebsart": 2,
+ "OFBogen_CP2_x_mm": 615.358,
+ "TEFBogen_CP2_x_mm": 643.589,
+ "OFBogen_CP2_y_mm": 253.54,
+ "TEFBogen_CP2_y_mm": 156.983,
+ "Gruppe_width_px": 2477.704,
+ "Gruppe_height_px": 1031.72,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 418.291,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 153.863,
+ "y": 478.855,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 938.67,
+ "y": 924.598,
+ "direction": 112.5,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 114.143,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 981.733,
+ "y": 572.478,
+ "direction": 112.5,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104026+0_B10071",
+ "ProfilTyp": "APB 110 R 550/45° – 232/610 mit TEF Innen",
+ "Radius": 550.0,
+ "KurvenWinkel": 45.0,
+ "Gruppe_width_mm": 610.142,
+ "Gruppe_height_mm": 308.217,
+ "OFBogen_center_line_width_mm": 595.265,
+ "OFBogen_center_line_height_mm": 265.998,
+ "TEFBogen_center_line_width_mm": 398.432,
+ "TEFBogen_center_line_height_mm": 165.036,
+ "OFBogen_CP1_x_mm": 0.0,
+ "TEFBogen_CP1_x_mm": 54.446,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.049,
+ "SivasnrTEF": "0_B10071",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 595.265,
+ "TEFBogen_CP2_x_mm": 452.878,
+ "OFBogen_CP2_y_mm": 287.038,
+ "TEFBogen_CP2_y_mm": 286.085,
+ "Gruppe_width_px": 2306.032,
+ "Gruppe_height_px": 1164.906,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 507.046,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.0,
+ "y": 68.009,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 975.617,
+ "y": 927.815,
+ "direction": 135.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 89.235,
+ "y": 391.276,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 742.25,
+ "y": 924.734,
+ "direction": 135.0,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104031+0_B10060",
+ "ProfilTyp": "APB 110 R 630/45° – 400/825 mit TEF Aussen",
+ "Radius": 630.0,
+ "KurvenWinkel": 45.0,
+ "Gruppe_width_mm": 958.874,
+ "Gruppe_height_mm": 446.746,
+ "OFBogen_center_line_width_mm": 865.614,
+ "OFBogen_center_line_height_mm": 300.559,
+ "TEFBogen_center_line_width_mm": 936.741,
+ "TEFBogen_center_line_height_mm": 329.985,
+ "OFBogen_CP1_x_mm": 0.276,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 131.31,
+ "TEFBogen_CP1_y_mm": 31.3,
+ "SivasnrTEF": "0_B10060",
+ "Antriebsart": 2,
+ "OFBogen_CP2_x_mm": 865.89,
+ "TEFBogen_CP2_x_mm": 936.741,
+ "OFBogen_CP2_y_mm": 431.869,
+ "TEFBogen_CP2_y_mm": 361.285,
+ "Gruppe_width_px": 3624.064,
+ "Gruppe_height_px": 1688.477,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 467.797,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.288,
+ "y": 292.738,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 903.028,
+ "y": 962.793,
+ "direction": 135.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 69.779,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 976.918,
+ "y": 805.436,
+ "direction": 135.0,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104031+0_B10070",
+ "ProfilTyp": "APB 110 R 630/45° – 400/825 mit TEF Innen",
+ "Radius": 630.0,
+ "KurvenWinkel": 45.0,
+ "Gruppe_width_mm": 880.942,
+ "Gruppe_height_mm": 414.496,
+ "OFBogen_center_line_width_mm": 865.614,
+ "OFBogen_center_line_height_mm": 300.559,
+ "TEFBogen_center_line_width_mm": 759.396,
+ "TEFBogen_center_line_height_mm": 271.313,
+ "OFBogen_CP1_x_mm": 0.453,
+ "TEFBogen_CP1_x_mm": 0.0,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.049,
+ "SivasnrTEF": "0_B10070",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 866.067,
+ "TEFBogen_CP2_x_mm": 759.396,
+ "OFBogen_CP2_y_mm": 321.599,
+ "TEFBogen_CP2_y_mm": 392.362,
+ "Gruppe_width_px": 3329.52,
+ "Gruppe_height_px": 1566.588,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 472.404,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.514,
+ "y": 50.557,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 983.115,
+ "y": 772.777,
+ "direction": 135.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 0.0,
+ "y": 290.871,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 862.028,
+ "y": 942.814,
+ "direction": 135.0,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104024+0_B10081",
+ "ProfilTyp": "APB 110 R 400/67,5° – 339/508 mit TEF Innen",
+ "Radius": 400.0,
+ "KurvenWinkel": 67.5,
+ "Gruppe_width_mm": 527.258,
+ "Gruppe_height_mm": 368.405,
+ "OFBogen_center_line_width_mm": 507.82,
+ "OFBogen_center_line_height_mm": 339.315,
+ "TEFBogen_center_line_width_mm": 306.339,
+ "TEFBogen_center_line_height_mm": 198.675,
+ "OFBogen_CP1_x_mm": 0.0,
+ "TEFBogen_CP1_x_mm": 76.402,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.049,
+ "SivasnrTEF": "0_B10081",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 507.82,
+ "TEFBogen_CP2_x_mm": 382.741,
+ "OFBogen_CP2_y_mm": 360.355,
+ "TEFBogen_CP2_y_mm": 319.724,
+ "Gruppe_width_px": 1992.772,
+ "Gruppe_height_px": 1392.387,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 700.609,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.0,
+ "y": 56.957,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 963.134,
+ "y": 975.51,
+ "direction": 157.5,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 144.904,
+ "y": 327.689,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 725.908,
+ "y": 865.519,
+ "direction": 157.5,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ },
+ {
+ "Sivasnr": "821104027+0_B10080",
+ "ProfilTyp": "APB 110 R 550/67,5° – 488/778 mit TEF Innen",
+ "Radius": 550.0,
+ "KurvenWinkel": 67.5,
+ "Gruppe_width_mm": 768.095,
+ "Gruppe_height_mm": 559.396,
+ "OFBogen_center_line_width_mm": 748.658,
+ "OFBogen_center_line_height_mm": 530.305,
+ "TEFBogen_center_line_width_mm": 469.752,
+ "TEFBogen_center_line_height_mm": 353.635,
+ "OFBogen_CP1_x_mm": 0.0,
+ "TEFBogen_CP1_x_mm": 138.902,
+ "OFBogen_CP1_y_mm": 21.04,
+ "TEFBogen_CP1_y_mm": 121.05,
+ "SivasnrTEF": "0_B10080",
+ "Antriebsart": 1,
+ "OFBogen_CP2_x_mm": 748.658,
+ "TEFBogen_CP2_x_mm": 608.654,
+ "OFBogen_CP2_y_mm": 551.345,
+ "TEFBogen_CP2_y_mm": 474.685,
+ "Gruppe_width_px": 2903.015,
+ "Gruppe_height_px": 2114.237,
+ "calculated_SVG_width_px": 1000,
+ "calculated_SVG_height_px": 730.18,
+ "connectionPoints": [
+ {
+ "id": "cp1",
+ "x": 0.0,
+ "y": 37.515,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp2",
+ "x": 974.694,
+ "y": 983.056,
+ "direction": 157.5,
+ "linkClass": "Omniflo"
+ },
+ {
+ "id": "cp3",
+ "x": 180.84,
+ "y": 215.834,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ },
+ {
+ "id": "cp4",
+ "x": 792.42,
+ "y": 846.37,
+ "direction": 157.5,
+ "linkClass": "OmnifloTEF"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/TEFBogen/1_process_TEFBogen_json.py b/SVGs/Omniflo/python/TEFBogen/1_process_TEFBogen_json.py
new file mode 100644
index 0000000..5eabb68
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/1_process_TEFBogen_json.py
@@ -0,0 +1,189 @@
+import json
+import sys
+import os
+from datetime import datetime
+
+def convert_to_float(value):
+ """Safely convert value to float, return original if conversion fails"""
+ try:
+ return float(value)
+ except (ValueError, TypeError):
+ return value
+def process_json_file(input_file):
+ # Validate and prepare file paths
+ input_path = os.path.abspath(input_file)
+ if not os.path.isfile(input_path):
+ print(f"Error: Input file not found - {input_path}")
+ sys.exit(1)
+
+ print(f"Reading file: {input_path}")
+
+ # Read JSON file
+ try:
+ with open(input_path, 'r', encoding='utf-8') as f:
+ data = json.load(f)
+ except json.JSONDecodeError as e:
+ print(f"Error: Invalid JSON format in {input_path}")
+ print(f"Details: {str(e)}")
+ sys.exit(1)
+ except Exception as e:
+ print(f"Error reading file {input_path}: {str(e)}")
+ sys.exit(1)
+
+ # Process each item in the JSON array
+ for i, item in enumerate(data):
+ print(f"\nProcessing item {i+1}: {item.get('Sivasnr', 'Unknown')}")
+
+ # Convert numerical values to float
+ for key in item:
+ if isinstance(item[key], (int, float, str)) and any(x in key.lower() for x in ['mm', 'width', 'height', 'radius', 'winkel']):
+ item[key] = convert_to_float(item[key])
+
+ # 1. Add four new attributes and calculate their values
+ print("\nStep 1: Adding four new attributes with calculations")
+
+ # OFBogen_CP2_x_mm
+ of_cp2_x = float(item["OFBogen_CP1_x_mm"]) + float(item["OFBogen_center_line_width_mm"])
+ item["OFBogen_CP2_x_mm"] = round(of_cp2_x, 3)
+ print(f"Added OFBogen_CP2_x_mm: {item['OFBogen_CP2_x_mm']}")
+
+ # TEFBogen_CP2_x_mm
+ tef_cp2_x = float(item["TEFBogen_CP1_x_mm"]) + float(item["TEFBogen_center_line_width_mm"])
+ item["TEFBogen_CP2_x_mm"] = round(tef_cp2_x, 3)
+ print(f"Added TEFBogen_CP2_x_mm: {item['TEFBogen_CP2_x_mm']}")
+
+ # OFBogen_CP2_y_mm
+ of_cp2_y = float(item["OFBogen_CP1_y_mm"]) + float(item["OFBogen_center_line_height_mm"])
+ item["OFBogen_CP2_y_mm"] = round(of_cp2_y, 3)
+ print(f"Added OFBogen_CP2_y_mm: {item['OFBogen_CP2_y_mm']}")
+
+ # TEFBogen_CP2_y_mm
+ tef_cp2_y = float(item["TEFBogen_CP1_y_mm"]) + float(item["TEFBogen_center_line_height_mm"])
+ item["TEFBogen_CP2_y_mm"] = round(tef_cp2_y, 3)
+ print(f"Added TEFBogen_CP2_y_mm: {item['TEFBogen_CP2_y_mm']}")
+
+ # 2. Calculate pixel dimensions and SVG dimensions
+ print("\nStep 2: Calculating pixel and SVG dimensions")
+
+ # Calculate Gruppe_width_px and Gruppe_height_px
+ item["Gruppe_width_px"] = round(float(item["Gruppe_width_mm"]) * 3.7795, 3)
+ item["Gruppe_height_px"] = round(float(item["Gruppe_height_mm"]) * 3.7795, 3)
+ print(f"Calculated Gruppe_width_px: {item['Gruppe_width_px']}")
+ print(f"Calculated Gruppe_height_px: {item['Gruppe_height_px']}")
+
+ # Compare width and height to determine scaling
+ if float(item["Gruppe_width_mm"]) > float(item["Gruppe_height_mm"]):
+ print("Width is larger, setting calculated_SVG_width to 1000px")
+ scale = round(1000 / float(item["Gruppe_width_mm"]), 6)
+ item["calculated_SVG_width_px"] = 1000
+ item["calculated_SVG_height_px"] = round(float(item["Gruppe_height_mm"]) * scale+3.7795/2, 3)
+ scale_RD_H = round(1000 / float(item["calculated_SVG_height_px"]), 6)
+ scale_RD_W = 1
+ elif float(item["Gruppe_width_mm"]) == float(item["Gruppe_height_mm"]):
+ print("Width =Height")
+ scale = round(1000 / float(item["Gruppe_width_mm"]), 6)
+ item["calculated_SVG_width_px"] = 1000
+ item["calculated_SVG_height_px"] = round(float(item["Gruppe_height_mm"]) * scale, 3)
+ scale_RD_H = round(1000 / float(item["calculated_SVG_height_px"]), 6)
+ scale_RD_W = 1
+ else:
+ print("Height is larger, setting calculated_SVG_height to 1000px")
+ scale = round(1000 / float(item["Gruppe_height_mm"]), 6)
+ item["calculated_SVG_height_px"] = 1000
+ item["calculated_SVG_width_px"] = round(float(item["Gruppe_width_mm"]) * scale+3.7795/2, 3)
+ scale_RD_W = round(1000 / float(item["calculated_SVG_width_px"]), 6)
+ scale_RD_H = 1
+
+ print(f"Calculated scale: {scale}")
+ print(f"Calculated calculated_SVG_width_px: {item['calculated_SVG_width_px']}")
+ print(f"Calculated calculated_SVG_height_px: {item['calculated_SVG_height_px']}")
+ print(f"Calculated scale_RD_W: {scale_RD_W}")
+ print(f"Calculated scale_RD_H: {scale_RD_H}")
+
+ # 3. Create connectionPoints array
+ print("\nStep 3: Creating connectionPoints array")
+
+ connection_points = []
+
+ # CP1
+ cp1_x = round(float(item["OFBogen_CP1_x_mm"]) * scale * scale_RD_W, 3)
+ cp1_y = round(float(item["OFBogen_CP1_y_mm"]) * scale * scale_RD_H, 3)
+ cp1 = {
+ "id": "cp1",
+ "x": cp1_x,
+ "y": cp1_y,
+ "direction": 270.0,
+ "linkClass": "Omniflo"
+ }
+ connection_points.append(cp1)
+ print(f"Created CP1: x={cp1_x}, y={cp1_y}, direction=270.0, linkClass=Omniflo")
+
+ # CP2
+ cp2_x = round(float(item["OFBogen_CP2_x_mm"]) * scale * scale_RD_W, 3)
+ cp2_y = round(float(item["OFBogen_CP2_y_mm"]) * scale * scale_RD_H, 3)
+ cp2_direction = round(90 + float(item["KurvenWinkel"]), 1)
+ cp2 = {
+ "id": "cp2",
+ "x": cp2_x,
+ "y": cp2_y,
+ "direction": cp2_direction,
+ "linkClass": "Omniflo"
+ }
+ connection_points.append(cp2)
+ print(f"Created CP2: x={cp2_x}, y={cp2_y}, direction={cp2_direction}, linkClass=Omniflo")
+
+ # CP3
+ cp3_x = round(float(item["TEFBogen_CP1_x_mm"]) * scale * scale_RD_W, 3)
+ cp3_y = round(float(item["TEFBogen_CP1_y_mm"]) * scale * scale_RD_H, 3)
+ cp3 = {
+ "id": "cp3",
+ "x": cp3_x,
+ "y": cp3_y,
+ "direction": 270.0,
+ "linkClass": "OmnifloTEF"
+ }
+ connection_points.append(cp3)
+ print(f"Created CP3: x={cp3_x}, y={cp3_y}, direction=270.0, linkClass=OmnifloTEF")
+
+ # CP4
+ cp4_x = round(float(item["TEFBogen_CP2_x_mm"]) * scale * scale_RD_W, 3)
+ cp4_y = round(float(item["TEFBogen_CP2_y_mm"]) * scale * scale_RD_H, 3)
+ cp4_direction = round(90 + float(item["KurvenWinkel"]), 1)
+ cp4 = {
+ "id": "cp4",
+ "x": cp4_x,
+ "y": cp4_y,
+ "direction": cp4_direction,
+ "linkClass": "OmnifloTEF"
+ }
+ connection_points.append(cp4)
+ print(f"Created CP4: x={cp4_x}, y={cp4_y}, direction={cp4_direction}, linkClass=OmnifloTEF")
+
+ item["connectionPoints"] = connection_points
+
+ # Prepare output path
+ output_dir = os.path.dirname(input_path) or '.' # Handle case when no directory in path
+ base_name = os.path.splitext(os.path.basename(input_path))[0]
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
+ output_path = os.path.join(output_dir, f"{base_name}_processed_output.json")
+
+ # Save processed JSON file
+ try:
+ with open(output_path, 'w', encoding='utf-8') as f:
+ json.dump(data, f, indent=2, ensure_ascii=False)
+ print(f"\nProcessing complete! Results saved to new file: {output_path}")
+ print(f"Original file remains unchanged: {input_path}")
+ except Exception as e:
+ print(f"\nError saving processed file: {str(e)}")
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ try:
+ if len(sys.argv) != 2:
+ raise ValueError("请提供输入文件路径")
+ input_file = sys.argv[1]
+ process_json_file(input_file)
+ except Exception as e:
+ print(f"错误详情: {str(e)}", file=sys.stderr)
+ sys.exit(1)
diff --git a/SVGs/Omniflo/python/TEFBogen/2_update_props_TEF_Boegen_from_json.py b/SVGs/Omniflo/python/TEFBogen/2_update_props_TEF_Boegen_from_json.py
new file mode 100644
index 0000000..0e118e1
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/2_update_props_TEF_Boegen_from_json.py
@@ -0,0 +1,135 @@
+''' Script Analysis
+
+This Python script processes JSON and TXT files to update dimensions and connection points in SVG-related data. Here's the main logic:
+ Input Handling:
+ Reads a JSON file containing reference data
+ Processes all TXT files in a specified directory
+ Data Processing:
+ Creates a mapping between Sivasnr (from filenames) and JSON data
+ For each matching TXT file:
+ Updates width and height based on JSON data (converting mm to px)
+ Updates connection points (x, y, direction) from JSON data
+ Preserves the original file structure while updating specific values
+ Reporting:
+ Prints detailed change reports to console
+ Skips files without matching JSON data '''
+import json
+import os
+import glob
+from datetime import datetime
+
+def process_files(json_file_path, txt_files_dir):
+ # Create a log file with timestamp
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
+ log_file_path = os.path.join(txt_files_dir, f"modification_report_TEFBogen_{timestamp}.txt")
+
+ # Read JSON file
+ with open(json_file_path, 'r', encoding='utf-8') as f:
+ json_data = json.load(f)
+
+ # Create Sivasnr to JSON data mapping
+ sivasnr_mapping = {item["Sivasnr"]: item for item in json_data}
+
+ # Prepare report content
+ report_content = []
+ report_content.append(f"Modification Report - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
+ report_content.append("="*50 + "\n")
+
+ # Process all TXT files
+ for txt_file_path in glob.glob(os.path.join(txt_files_dir, '*.txt')):
+ # Extract Sivasnr from filename
+ sivasnr = os.path.splitext(os.path.basename(txt_file_path))[0]
+
+ # Check if corresponding JSON data exists
+ if sivasnr in sivasnr_mapping:
+ json_item = sivasnr_mapping[sivasnr]
+
+ # Read TXT file content (using utf-8-sig to handle BOM)
+ with open(txt_file_path, 'r', encoding='utf-8-sig') as f:
+ txt_content = json.load(f)
+
+ # Prepare entry for this file
+ file_entry = []
+ file_entry.append(f"\nProcessing file: {txt_file_path}")
+ file_entry.append("="*50)
+
+ # Record old values
+ old_width = txt_content["width"]
+ old_height = txt_content["height"]
+ old_cps = {cp["id"]: {"x": cp["x"], "y": cp["y"], "direction": cp["direction"],"linkClass": cp["linkClass"]}
+ for cp in txt_content["connectionPoints"]}
+
+ # Update width and height
+ new_width = round(json_item["Gruppe_width_px"], 3)
+ new_height = round(json_item["Gruppe_height_px"], 3)
+ txt_content["width"] = new_width
+ txt_content["height"] = new_height
+
+ # Update connectionPoints
+ cp_changes = []
+ for cp in txt_content["connectionPoints"]:
+ cp_id = cp["id"]
+ # Find corresponding connection point in JSON data
+ json_cp = next((item for item in json_item["connectionPoints"] if item["id"] == cp_id), None)
+ if json_cp:
+ # Record old values
+ old_x = cp["x"]
+ old_y = cp["y"]
+ old_dir = cp["direction"]
+ old_linkClass = cp["linkClass"]
+ # Update values
+ cp["x"] = json_cp["x"]
+ cp["y"] = json_cp["y"]
+ cp["direction"] = json_cp["direction"]
+ cp["linkClass"] = json_cp["linkClass"]
+ # Record changes
+ cp_changes.append({
+ "id": cp_id,
+ "x": (old_x, cp["x"]),
+ "y": (old_y, cp["y"]),
+ "direction": (old_dir, cp["direction"]),
+ "linkClass": (old_linkClass, cp["linkClass"])
+ })
+
+ # Write back to TXT file
+ with open(txt_file_path, 'w', encoding='utf-8') as f:
+ json.dump(txt_content, f, indent=2, ensure_ascii=False)
+
+ # Add to report
+ file_entry.append("[Dimension Changes]")
+ file_entry.append(f"width: {old_width} → {new_width}")
+ file_entry.append(f"height: {old_height} → {new_height}")
+
+ if cp_changes:
+ file_entry.append("\n[Connection Point Changes]")
+ for change in cp_changes:
+ file_entry.append(f"Connection point {change['id']}:")
+ file_entry.append(f" x: {change['x'][0]} → {change['x'][1]}")
+ file_entry.append(f" y: {change['y'][0]} → {change['y'][1]}")
+ file_entry.append(f" direction: {change['direction'][0]} → {change['direction'][1]}")
+ file_entry.append(f" linkClass: {change['linkClass'][0]} → {change['linkClass'][1]}")
+ file_entry.append(f"\nFile {txt_file_path} processed successfully")
+ file_entry.append("="*50)
+
+ # Add this file's entry to main report
+ report_content.extend(file_entry)
+
+ # Also print to console
+ print("\n" + "\n".join(file_entry))
+ else:
+ print(f"\nSkipping file {txt_file_path} (no matching JSON data found)")
+
+ # Write the report file if any changes were made
+ if len(report_content) > 2: # More than just the header
+ with open(log_file_path, 'w', encoding='utf-8') as f:
+ f.write("\n".join(report_content))
+ print(f"\nModification report saved to: {log_file_path}")
+ else:
+ print("\nNo files were modified - no report generated")
+
+# Example usage
+if __name__ == "__main__":
+ json_file_path = "1_TEF_Boegen_input_processed_output.json"
+ txt_files_dir = "C:/Program Files/RuleDesigner/RDConfigurator Fusion/WebApi/Editor2D/SSG/shapes/props"
+ process_files(json_file_path, txt_files_dir)
+ print("\nAll files processed!")
\ No newline at end of file
diff --git a/SVGs/Omniflo/python/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py b/SVGs/Omniflo/python/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py
new file mode 100644
index 0000000..09dc438
--- /dev/null
+++ b/SVGs/Omniflo/python/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py
@@ -0,0 +1,172 @@
+"""
+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 enhanced style 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,
+ 'other_groups_processed': 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
+
+ # Remove group attributes
+ for attr in ['stroke-width', 'stroke-miterlimit']:
+ if attr in g.attrib:
+ del g.attrib[attr]
+ stats['modified'] = True
+
+ # Set stroke-width for all path children
+ 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
+
+ # Remove group attributes
+ for attr in ['stroke', 'stroke-width', 'stroke-linejoin']:
+ if attr in g.attrib:
+ del g.attrib[attr]
+ stats['modified'] = True
+
+ # Modify path children
+ 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
+
+ else:
+ # Handle groups without specific stroke color
+ stats['other_groups_processed'] += 1
+
+ # Process elements with style="stroke:#ec2525;"
+ for child in g.findall('.//svg:*[@style]', namespaces):
+ style = child.get('style', '')
+ if 'stroke:#ec2525;' in style:
+ # Remove stroke-width if exists
+ if 'stroke-width' in child.attrib:
+ del child.attrib['stroke-width']
+ stats['modified'] = True
+
+ # Update the style attribute
+
+ 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('', '\n')
+
+ 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
+ """
+ # Configure paths
+ json_file_path = "1_TEF_Boegen_input.json"
+ svg_folder_path = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\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()
\ No newline at end of file