From 62e46562fc7d48cdc130e531536b91b73bed525f Mon Sep 17 00:00:00 2001 From: Yuelin Wang Date: Tue, 23 Sep 2025 10:26:59 +0200 Subject: [PATCH] die TEFBOGEN sind korrigiert. --- CAD/OmnifloCAD/dwg/821104024+0_B10081.dwg | Bin 67080 -> 67781 bytes CAD/OmnifloCAD/dwg/821104025+0_B10090.dwg | Bin 72968 -> 73927 bytes CAD/OmnifloCAD/dwg/821104025+0_B10091.dwg | Bin 74599 -> 75109 bytes CAD/OmnifloCAD/dwg/821104026+0_B10071.dwg | Bin 72738 -> 74119 bytes CAD/OmnifloCAD/dwg/821104027+0_B10080.dwg | Bin 73476 -> 74151 bytes CAD/OmnifloCAD/dwg/821104031+0_B10060.dwg | Bin 63976 -> 66598 bytes CAD/OmnifloCAD/dwg/821104031+0_B10070.dwg | Bin 64935 -> 69829 bytes CAD/OmnifloCAD/dwg/821104033+0_B10040.dwg | Bin 62081 -> 62306 bytes CAD/OmnifloCAD/dwg/821104033+0_B10050.dwg | Bin 62374 -> 62211 bytes .../SSG/shapes/props/821104024+0_B10081.txt | 180 ++++---- .../SSG/shapes/props/821104025+0_B10090.txt | 180 ++++---- .../SSG/shapes/props/821104025+0_B10091.txt | 180 ++++---- .../SSG/shapes/props/821104026+0_B10071.txt | 180 ++++---- .../SSG/shapes/props/821104027+0_B10080.txt | 180 ++++---- .../SSG/shapes/props/821104031+0_B10060.txt | 180 ++++---- .../SSG/shapes/props/821104031+0_B10070.txt | 180 ++++---- .../SSG/shapes/props/821104033+0_B10040.txt | 182 ++++---- .../SSG/shapes/props/821104033+0_B10050.txt | 182 ++++---- .../SSG/shapes/svg/821104024+0_B10081.xml | 48 +-- .../SSG/shapes/svg/821104025+0_B10090.xml | 46 +- .../SSG/shapes/svg/821104025+0_B10091.xml | 46 +- .../SSG/shapes/svg/821104026+0_B10071.xml | 46 +- .../SSG/shapes/svg/821104027+0_B10080.xml | 48 +-- .../SSG/shapes/svg/821104031+0_B10060.xml | 48 +-- .../SSG/shapes/svg/821104031+0_B10070.xml | 57 +-- .../SSG/shapes/svg/821104033+0_B10040.xml | 44 +- .../SSG/shapes/svg/821104033+0_B10050.xml | 44 +- Editor2DLibrary/SSG/shapes/svg/821104043.xml | 2 +- .../APB_110_R650_180_L_150_821104043.svg | 2 +- ...+0_B10081_TEFBogen_67_5_R250_optimized.svg | 25 ++ ...+0_B10090_TEFBogen_22_5_R450_optimized.svg | 23 + ...+0_B10091_TEFBogen_22_5_R650_optimized.svg | 23 + ...26+0_B10071_TEFBogen_45_R450_optimized.svg | 25 ++ ...+0_B10080_TEFBogen_67_5_R400_optimized.svg | 25 ++ ...31+0_B10060_TEFBogen_45_R725_optimized.svg | 25 ++ ...31+0_B10070_TEFBogen_45_R535_optimized.svg | 34 ++ ...33+0_B10040_TEFBogen_90_R725_optimized.svg | 25 ++ ...33+0_B10050_TEFBogen_90_R535_optimized.svg | 25 ++ ...0_B10081_TEFBogen_67_5_R250_optimiert1.svg | 23 - ...0_B10090_TEFBogen_22_5_R450_optimiert1.svg | 23 - ...0_B10091_TEFBogen_22_5_R650_optimiert1.svg | 23 - ...t_0_B10071_TEFBogen_45_R450_optimiert1.svg | 23 - ...0_B10080_TEFBogen_67_5_R400_optimiert1.svg | 23 - ...t_0_B10060_TEFBogen_45_R725_optimiert1.svg | 22 - ...t_0_B10070_TEFBogen_45_R535_optimiert1.svg | 23 - ...t_0_B10040_TEFBogen_90_R725_optimiert1.svg | 23 - ...t_0_B10050_TEFBogen_90_R535_optimiert1.svg | 23 - ...104024+0_B10081_TEFBogen_67_5_R250_new.svg | 31 ++ ...104025+0_B10090_TEFBogen_22_5_R450_new.svg | 29 ++ ...104025+0_B10091_TEFBogen_22_5_R650_new.svg | 29 ++ ...21104026+0_B10071_TEFBogen_45_R450_new.svg | 31 ++ ...104027+0_B10080_TEFBogen_67_5_R400_new.svg | 31 ++ ...21104031+0_B10060_TEFBogen_45_R725_new.svg | 31 ++ ...21104031+0_B10070_TEFBogen_45_R535_new.svg | 40 ++ ...21104033+0_B10040_TEFBogen_90_R725_new.svg | 31 ++ ...21104033+0_B10050_TEFBogen_90_R535_new.svg | 31 ++ ...24_mit_0_B10081_TEFBogen_67_5_R250_new.svg | 29 -- ...25_mit_0_B10090_TEFBogen_22_5_R450_new.svg | 30 -- ...25_mit_0_B10091_TEFBogen_22_5_R650_new.svg | 28 -- ...4026_mit_0_B10071_TEFBogen_45_R450_new.svg | 29 -- ...27_mit_0_B10080_TEFBogen_67_5_R400_new.svg | 29 -- ...4031_mit_0_B10060_TEFBogen_45_R725_new.svg | 31 -- ...4031_mit_0_B10070_TEFBogen_45_R535_new.svg | 28 -- ...4033_mit_0_B10040_TEFBogen_90_R725_new.svg | 29 -- ...4033_mit_0_B10050_TEFBogen_90_R535_new.svg | 29 -- SVGs/Omniflo/bin/02_svg_optimzier_OFBogen.bat | 2 +- .../Omniflo/bin/02_svg_optimzier_TEFBogen.bat | 33 ++ ...update_xml_and_props_in_SSGLib_OFBogen.bat | 6 + ...pdate_xml_and_props_in_SSGLib_OFWeiche.bat | 6 + ...pdate_xml_and_props_in_SSGLib_TEFBogen.bat | 31 ++ ...date_xml_and_props_in_SSGLib_TEFWeiche.bat | 8 +- SVGs/Omniflo/bin/setenv.bat | 3 + ...02_svg_step1_convert_polylines_to_lines.py | 21 +- ...svg_step2_find_and_mark_auxiliary_lines.py | 247 ----------- .../lib/OFBogen/02_svg_step3_scaler.py | 75 +++- ...02_svg_step1_convert_polylines_to_lines.py | 17 +- ...> 01_props_step1_process_TEFBogen_json.py} | 22 +- ...tep2_update_props_TEF_Boegen_from_json.py} | 4 +- ...02_svg_step1_convert_polylines_to_lines.py | 397 ++++++++++++++++++ .../lib/TEFBogen/02_svg_step3_scaler.py | 158 +++++++ .../02_svg_step4_format_optimization.py | 159 +++++++ ...=> 03_TEFBogen_SVG_XML_Modifier_Script.py} | 126 +++--- ...vgs_to_xml_and_update_xml_path_in_props.py | 194 +++++++++ .../lib/TEFBogen/json/1_TEF_Boegen_input.json | 116 ++--- .../TEFBogen/json/1_TEF_Boegen_output.json | 266 ++++++------ .../lib/TEFBogen/run_Modify_color_in_XML.bat | 12 - SVGs/Omniflo/lib/TEFBogen/run_TEFBogen.bat | 11 +- ...02_svg_step1_convert_polylines_to_lines.py | 17 +- ...> 03_TEFWEICHE_SVG_XML_Modifier_Script.py} | 0 89 files changed, 2930 insertions(+), 2038 deletions(-) create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104024+0_B10081_TEFBogen_67_5_R250_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10090_TEFBogen_22_5_R450_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10091_TEFBogen_22_5_R650_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104026+0_B10071_TEFBogen_45_R450_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104027+0_B10080_TEFBogen_67_5_R400_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10060_TEFBogen_45_R725_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10070_TEFBogen_45_R535_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10040_TEFBogen_90_R725_optimized.svg create mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10050_TEFBogen_90_R535_optimized.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104024+0_B10081_TEFBogen_67_5_R250_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104025+0_B10090_TEFBogen_22_5_R450_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104025+0_B10091_TEFBogen_22_5_R650_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104026+0_B10071_TEFBogen_45_R450_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104027+0_B10080_TEFBogen_67_5_R400_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104031+0_B10060_TEFBogen_45_R725_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104031+0_B10070_TEFBogen_45_R535_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104033+0_B10040_TEFBogen_90_R725_new.svg create mode 100644 SVGs/Omniflo/TEFBogen/Original/821104033+0_B10050_TEFBogen_90_R535_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg delete mode 100644 SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg create mode 100644 SVGs/Omniflo/bin/02_svg_optimzier_TEFBogen.bat create mode 100644 SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFBogen.bat delete mode 100644 SVGs/Omniflo/lib/OFBogen/02_svg_step2_find_and_mark_auxiliary_lines.py rename SVGs/Omniflo/lib/TEFBogen/{1_process_TEFBogen_json_1.py => 01_props_step1_process_TEFBogen_json.py} (95%) rename SVGs/Omniflo/lib/TEFBogen/{2_update_props_TEF_Boegen_from_json_1.py => 01_props_step2_update_props_TEF_Boegen_from_json.py} (97%) create mode 100644 SVGs/Omniflo/lib/TEFBogen/02_svg_step1_convert_polylines_to_lines.py create mode 100644 SVGs/Omniflo/lib/TEFBogen/02_svg_step3_scaler.py create mode 100644 SVGs/Omniflo/lib/TEFBogen/02_svg_step4_format_optimization.py rename SVGs/Omniflo/lib/TEFBogen/{4_TEFBogen_SVG_XML_Modifier_Script.py => 03_TEFBogen_SVG_XML_Modifier_Script.py} (51%) create mode 100644 SVGs/Omniflo/lib/TEFBogen/03_convert_svgs_to_xml_and_update_xml_path_in_props.py delete mode 100644 SVGs/Omniflo/lib/TEFBogen/run_Modify_color_in_XML.bat rename SVGs/Omniflo/lib/TEFWeiche/{04_TEFWEICHE_SVG_XML_Modifier_Script.py => 03_TEFWEICHE_SVG_XML_Modifier_Script.py} (100%) diff --git a/CAD/OmnifloCAD/dwg/821104024+0_B10081.dwg b/CAD/OmnifloCAD/dwg/821104024+0_B10081.dwg index e37eb85cfba648cd814c80f84527160f010415b3..14e5ac86c9f9e9926894fdb9bdf948e49838c495 100644 GIT binary patch delta 9502 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 UgqezP4S*#nEI8@^^Gm1y0y5SEhyVZp delta 8643 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 Y2hPH1m>6y;ih{*bKAigh{W8Y?0b~o|_W%F@ diff --git a/CAD/OmnifloCAD/dwg/821104025+0_B10090.dwg b/CAD/OmnifloCAD/dwg/821104025+0_B10090.dwg index 239f0af846093b8be2832b4923ff1ea963b32135..5d2e4b0de6ee99810dc490ad7190397f48bb134d 100644 GIT binary patch delta 9645 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 delta 8656 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 diff --git a/CAD/OmnifloCAD/dwg/821104025+0_B10091.dwg b/CAD/OmnifloCAD/dwg/821104025+0_B10091.dwg index f1b127b245f63cd2f630314e41a466edb5d1abb2..c2f0e7e86acad1984007326fb5b2781bbf503524 100644 GIT binary patch delta 7844 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 delta 7255 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 diff --git a/CAD/OmnifloCAD/dwg/821104026+0_B10071.dwg b/CAD/OmnifloCAD/dwg/821104026+0_B10071.dwg index b6bd74dcd7f4ed598e2d99294febe512596e3fdd..c2deb534f0dc72bb09eb1336103ca5a04b2d55d2 100644 GIT binary patch delta 10543 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 delta 9027 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 delta 9349 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 Bb?X2C diff --git a/CAD/OmnifloCAD/dwg/821104031+0_B10060.dwg b/CAD/OmnifloCAD/dwg/821104031+0_B10060.dwg index 290e3b2146e2f8f5d9f87474ddda8187f7f1fa03..c20a177cf3e699a3d5d16582760b690680aa13bd 100644 GIT binary patch delta 13385 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 delta 10605 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 diff --git a/CAD/OmnifloCAD/dwg/821104031+0_B10070.dwg b/CAD/OmnifloCAD/dwg/821104031+0_B10070.dwg index 67688f99c76efba1c6716784f77acb0461be5580..32e8466ef0a80628d467541b5a22a2d8d21f2721 100644 GIT binary patch delta 18737 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 W3S0~f{Jx9{j>40f|E3Uo^br6_Gf5Nx delta 13611 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 diff --git a/CAD/OmnifloCAD/dwg/821104033+0_B10040.dwg b/CAD/OmnifloCAD/dwg/821104033+0_B10040.dwg index afd774d40eb8021cbee80160b92baa1ab6ca2572..fd7e8eb967e305df3c458e89b26f2606a7ebe085 100644 GIT binary patch delta 6096 zcma)=dt8j!|G>{V&okGinr@m*X_{t6SB<2S(o8eiqS`2gvc;ri5F+*)JrP}0;<02! z5sMTtF0o?PhOQ*HkVLV`tzz9*ztisiUccWTzdwF6z321!obx%KbI#LqKIeH(##7?S zGosK1#WJ>xTFc=yNNr4mg)1^*aq$n7ka2IRFM` zLqPCzu>d#S60BB6uDbu~VPjaAg0Hx-*l}>Mv3VWCq&BQk_SYew?{roZ%S6uCLVvPx zU{Kr2ReC{l#IRv+li6)AUQIM(@<`csYFQ{lC)V0ZG-x^_-PO#{)>|{i?&) zJ*!m!QJW_Do85^dbMUdwpdWd)7eBIm_o1X+M)D=VPnu{GM+us$wPw`kjD#1B)2`pJ z-0jK+(L8p=sLS*}{yK zEgQ=&BK|>g$r4s8psJ*+#&Z*ae!H}K47d0@M2V~t-yDTQC05m*xJGewih=-J3(#;- zm}=evsPkp|`b`%AAZ-~QK=j6;6oTPHr2ng|7K#8E4ip8sFaSXBxw-F$0=HMtz@eJ~28ygpZ><3^5ipsa(^X5J# zV%c&s7XPp7Jjo&;hl;7AI3hr$3qb9_GJ}+N!u5+XJ|I4ge4+fXJeR2eRw)6+?q{spYa20Pyid|EZ-0pOyhI z`jZ2om~3#Q3Zeh08*)?r>-WE!{9kJ6_bb?)H`o5<^YL@a{jmwMw`uUoE5EyIA6PG> zvq{ep{HZJ;nyyhgPtzz3FwR3d=CW^ZKXZbvgG9s#`423>nypc8nx#=5!5CnDi0=8H z_p@Sk-&pJ5i0~K|NSLWnzKFtW3Ns`ZVta7TJwNwZx;>nA(55e%1%AinAs7S9klzp> z+V?h}_A@B+mCt4Y-VYij9IjDL#u#9Ih_Ic*@3ie+76ix!LjXF#Z9^VVBt-_1im923 zsr$)f02*m)-lb7$l4L5TPE<^dou0Z6Jmv5x#UV`)Q`JU_S9yyP%<*+ob?jFk><$E- zT7qU8CP5>5siCbTTfH6_NL1G|Rjm?Lt47s|mC~wI8*mDmfPiwPo~_uR(-~$#=t++^ z9v>Y5{(?LOb-;%i(U=>IK$JKn41iq~Fonb`nEg$_H zxW*`B)v74IM4m_Qls!k*MRev!EvhM@2S%o#5_3Ay;WE-4rrjJxh*M5aar6*XR#1|l zazL0VOl~Qde3qO^F~gY(1egj|p*XFAKHxa^JM|$Z^o2a=g3`d`ejuB-l$}(_9$6)& z*g)9ldh`k0fa>B%!>EJH;0ku4zt>DM#jwo~*6CpYttry-wFh!PAR zc-y2H2Kr=5(@yDpoDC7GIzR`z)*$)_%^vm5l)D%NH0iB?1-|Uol)WZ6nznWeMpd`z z1h+Rx8$n0O!%Vpv5MZVdVmB*=5Qr=A4Rcn$%xB>vLlqGFJr1-Nb_If|juq{kfEK+4 z;4Ao)888u#c?5{)-`+{bj}AncPjnTd*AeL8OPzddIDte3 z^g8blRP&Z@@%HqO>jGl+YaRu&VK<;)2+V_}M4Pzb9jvxL`ez*!GgNhpnBAL$PQq=W zgmuUwA{&Z`MDCuLcdn+_N6>-ezDjog)h6!zN`RA44)=#zW=}5#CquGe3&hPom~I1< zeQ_@x?<42m-PaBFFEOqK-GTc~+Sh-f5BS_fd?x+l_|3@o0Bztq1Lg2&jc=WqrcyIQ z>nQf+PupH4IVlaXmVBiB{W1*?`H;SV0=1yY^ha}Di=PN07lm$M!c`M9HX8^M14cZE3xi51tE3SMH)3jjvfr1})}_!uM&Tin$zf>+03v{u%G-`xXTw zui4QTrYEB9CuoNmPf()+&5QD4y97I}lm5{!BX&&P)s_a!|0jd{}NvAIVy3usNJO5R+ynB6tkiA=?`= z>9}kGBXCV}iB^}M9Z#ZnBKldLC+U|ghO}M23_Y=@gY(B3_-&Ida~`%q@{?>neK_9* z#i{7K`6Am|8Du3}u-8iV*Gn$T5=4YA!=+X>Um)Uo*UDB3bmj$n8K`KX?hM^vGnv&q zG>MaM*8?9D0378{@do!;qhw#k8yv=BGvVKvf_@-hMF7Kp zE*8kAM=iFZpJbUs34QgrCoRbyO;0#6i>}I+(HBp!>4(|wy1!0rLg@7{I``Bs>>r0y z0(*fqi}pGF5b32lt25J)Ss0n)WdGTV51jN~Vzp3O<%Q@iXJ<2ximZTC_vUN>Lgv%x zG3UkU5-@_)=X5<4JA?vW>f9^8#5nD!vwYDvD} zGUIWQUAxGuj>u*+nfg0TO-)`N8MC-=@2xfOjz7dj3%n97OT^j37`rnL@7!I|%+;E+ z4nK7RwxlAb`#?C?C_p!6jKBZ*lQ5%lr)+1@;swaQNe*2^E#8uk?na;d9ZgH9Lgn|M z6+wMY_tQu(;7ME71Ub(2$~CI;0uXlqh}El)j8=1R_RaD_uR z>*vEsI*;Fs*^GLE6xq|-`kS_m1X);aU)0DqDuWZEj^ZJX!nwmFF1LNH&J0PG0K!Bfn1wd3M!i$LFh&XyK-pI_w ztH+u!O!(xO?*LANInN%`&UZ$5;3p*FpBsrPqC|&F*`*vkyOUjNbj5zL$TgLAI9x;S<(_lS-C6^Si z4zOKeBd7-Kazs4R9l57M(29QZz`+7`L9x~ZkWV4Zu2sP1>w#!TE$z}ScDhp)KnzwP z_~e@sJ}hRy8+%l+iw(`89ntnc2~C|_9x7miyJTk;y{cWr-2Gbs+H#5B({AP6dpSUQ z=E^+tHUNDTkbKn~fF55%A5BvTgkFTge#)FU*BT(rx*2EQe#880P?+r&0-5J`Z+z%&qLFh$pHpDCyb*#FUr^E3oD8yeSr3XuNvSssGmHVC^lbIE%EHUn4~wB8^? zg`Tb>VD35n0-7l?6SEM6CW+WgmU;p)2D)r9zkJdk?+S z4;8DVe-_K@2zeoCaDBfDT|Pj-UMw4bk=FuTNIa`lq4uMZfkk7ZychmRY=7d`j^rsM ztM5YqJXfYd`*fmVE6L1uw{1|qlDwMZl|mBP7gf^R7v&WMb~HG4RfWp%@@v5IaJ`1- zchZQw)`ACcgGi(cJBFF=xuQbvZzl@*DeRZXFV!(=c958*M(qd5jO z$JFR}6$#t0JaZfePZ)}Rt6Gif&bGK+oOI1@4RD9v@=w~mhQRS63 z;e|=t|NJ}pjWS={uBbsRecB**M5QiuLZbo*>s!^R<|YXrW4Z43(Aec7vbkN2exv1` zHbJLusL|ag@>(cQVG{42t5Hwy*t6t)w`wT=DqtNORKlDVHL7^?cc1m|ajXwfLNQO~ zJVQo&YyBu>R&_wdj!BQ`pE|{(w|`N?W`<<@d--a#u~rNCw*Wl6E)bRA1v?6QA$>6X z#=>i=9U9$QA1K|MN%wS)2>DzPD80IQ9E9zj_@x@2m<)gB-GKhk5jtZ$;7_OQLnpM_ zhx<#`1oYV(xikTB<%AZoxxew;nj;gL4N0Sa`WcHn6 zfx6=wWx`3E$1sgpA7cC~#jA!MUB}}~4Cj`MEb#nSjnWPC;v8m3Vq%VNBC-zqY%m&3 zg?4yv0Kk%N{KJ{^-$zkC^xz+RMJ*Rtpcl8=cOIvD%-<2P-QW9J6!Si%jn?<95)L)- z-8vd1(mUJhQVM*&SNBo&z>_Q zR5WeHuH%nhb#=6#yHa_A@2rmSFTQf@LQYq1Z%)r`TWczO5=wsbWJBUIAl*~Jfg4p^r;uUTtXEZljC+WWk+ulaC&#r0o5 z9O}9Iw7g;SC96el-_7>eJ|ZZ5wr_%~CThyaG;SK$^V|AoRk-iadnWx{VDU=M%PY z8C>I8e5vfxc{8Uatb`w<=diV2D<`r3Go3S!2$~S&k47%{(Atfq-)-o+z4@x{#f|Eh z5ANT*b-(Ni9@gsd6;+0|K?jvX4v~KFXlk>GL z>-p)Xje?>t9p^7)-rn4r^X5j*-H!75j4QW$zftw4-=810Cdf_g{~u4ZWO}IN=hsJG zpXoW+P{~h7^VnLy@$1iCnoaviBHfi#?=e`7bWml(d&xEpSZo z+wiv_~zS5=QN?*wNTMWY}q!osYiH0$NlgH3{kr68v zEs9&VT4a_-#F$cfrZXWw9OhX?Z;58ngKtDImlpMnkj^pT238x)87=iZUl%=v@OQ$U z_N1|+mlA{otI=uFm@Qg*ZlAYifmTRH#xF|N#-)giD`2#RIG>*pjtYRQNirIB9v0ha zg+x%?VvROl#CKs%8)g(dy*NBBoCtNx2u}=w*d_a3+D)X=#w}kivZ#T^p~8y7$stz7 zKDa8nI!dDTqW|g}1%qjqe%JKzM)Q`e+x?SK{gQrkqAo? z%Tip)$cId<>ahz8OGO|6Y%F6v@nLo}gm`k?p<+BUgAf>F$iqe__B9+bjIaY60OL^D QskGqJ9sTqEpGWim1qQsW@c;k- delta 5697 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 - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - \ 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 32a2d30..e6260e3 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10090.xml @@ -1,36 +1,28 @@ - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + - - - - - - - - \ 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 09ce1e3..4396e83 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104025+0_B10091.xml @@ -1,36 +1,28 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - \ 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 bc124d3..9327226 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104026+0_B10071.xml @@ -1,27 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml b/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml index 308b70f..4d97df5 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104027+0_B10080.xml @@ -1,36 +1,30 @@ - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - \ 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 149f2c2..8cf1186 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10060.xml @@ -1,36 +1,30 @@ - - - - - - - + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - \ 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 5e2c1ea..7e07b7e 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104031+0_B10070.xml @@ -1,36 +1,39 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - \ 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 9ba4067..ad07fa8 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10040.xml @@ -1,26 +1,30 @@ - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - + + + + + + \ 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 bca330a..91ce1c5 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104033+0_B10050.xml @@ -1,26 +1,30 @@ - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - + + + + + + \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/svg/821104043.xml b/Editor2DLibrary/SSG/shapes/svg/821104043.xml index 86f1847..567b3ad 100644 --- a/Editor2DLibrary/SSG/shapes/svg/821104043.xml +++ b/Editor2DLibrary/SSG/shapes/svg/821104043.xml @@ -1,7 +1,7 @@ - + diff --git a/SVGs/Omniflo/OFBogen/Optimiert/APB_110_R650_180_L_150_821104043.svg b/SVGs/Omniflo/OFBogen/Optimiert/APB_110_R650_180_L_150_821104043.svg index 6d05a49..177df52 100644 --- a/SVGs/Omniflo/OFBogen/Optimiert/APB_110_R650_180_L_150_821104043.svg +++ b/SVGs/Omniflo/OFBogen/Optimiert/APB_110_R650_180_L_150_821104043.svg @@ -1,5 +1,5 @@ - + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104024+0_B10081_TEFBogen_67_5_R250_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104024+0_B10081_TEFBogen_67_5_R250_optimized.svg new file mode 100644 index 0000000..cba1563 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104024+0_B10081_TEFBogen_67_5_R250_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10090_TEFBogen_22_5_R450_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10090_TEFBogen_22_5_R450_optimized.svg new file mode 100644 index 0000000..41519be --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10090_TEFBogen_22_5_R450_optimized.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10091_TEFBogen_22_5_R650_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10091_TEFBogen_22_5_R650_optimized.svg new file mode 100644 index 0000000..2de3210 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104025+0_B10091_TEFBogen_22_5_R650_optimized.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104026+0_B10071_TEFBogen_45_R450_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104026+0_B10071_TEFBogen_45_R450_optimized.svg new file mode 100644 index 0000000..31c3a17 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104026+0_B10071_TEFBogen_45_R450_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104027+0_B10080_TEFBogen_67_5_R400_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104027+0_B10080_TEFBogen_67_5_R400_optimized.svg new file mode 100644 index 0000000..d0fd913 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104027+0_B10080_TEFBogen_67_5_R400_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10060_TEFBogen_45_R725_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10060_TEFBogen_45_R725_optimized.svg new file mode 100644 index 0000000..b74727e --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10060_TEFBogen_45_R725_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10070_TEFBogen_45_R535_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10070_TEFBogen_45_R535_optimized.svg new file mode 100644 index 0000000..6d054c6 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104031+0_B10070_TEFBogen_45_R535_optimized.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10040_TEFBogen_90_R725_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10040_TEFBogen_90_R725_optimized.svg new file mode 100644 index 0000000..dc1bb16 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10040_TEFBogen_90_R725_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10050_TEFBogen_90_R535_optimized.svg b/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10050_TEFBogen_90_R535_optimized.svg new file mode 100644 index 0000000..0965779 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Optimiert/821104033+0_B10050_TEFBogen_90_R535_optimized.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg deleted file mode 100644 index 9ab3528..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg deleted file mode 100644 index 15a669f..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg deleted file mode 100644 index fdc4e77..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg deleted file mode 100644 index b2fc8cb..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg deleted file mode 100644 index e23d940..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg deleted file mode 100644 index f3404be..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_optimiert1.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg deleted file mode 100644 index 2d69e43..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg deleted file mode 100644 index f86264f..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg b/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg deleted file mode 100644 index 8d13535..0000000 --- a/SVGs/Omniflo/TEFBogen/Optimiert/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_optimiert1.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/821104024+0_B10081_TEFBogen_67_5_R250_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104024+0_B10081_TEFBogen_67_5_R250_new.svg new file mode 100644 index 0000000..bd28292 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104024+0_B10081_TEFBogen_67_5_R250_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10090_TEFBogen_22_5_R450_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10090_TEFBogen_22_5_R450_new.svg new file mode 100644 index 0000000..df154aa --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10090_TEFBogen_22_5_R450_new.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10091_TEFBogen_22_5_R650_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10091_TEFBogen_22_5_R650_new.svg new file mode 100644 index 0000000..e787bf9 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104025+0_B10091_TEFBogen_22_5_R650_new.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104026+0_B10071_TEFBogen_45_R450_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104026+0_B10071_TEFBogen_45_R450_new.svg new file mode 100644 index 0000000..93c16e6 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104026+0_B10071_TEFBogen_45_R450_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104027+0_B10080_TEFBogen_67_5_R400_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104027+0_B10080_TEFBogen_67_5_R400_new.svg new file mode 100644 index 0000000..5c97985 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104027+0_B10080_TEFBogen_67_5_R400_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10060_TEFBogen_45_R725_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10060_TEFBogen_45_R725_new.svg new file mode 100644 index 0000000..a7f8f83 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10060_TEFBogen_45_R725_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10070_TEFBogen_45_R535_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10070_TEFBogen_45_R535_new.svg new file mode 100644 index 0000000..d0fb43c --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104031+0_B10070_TEFBogen_45_R535_new.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10040_TEFBogen_90_R725_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10040_TEFBogen_90_R725_new.svg new file mode 100644 index 0000000..12dc01f --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10040_TEFBogen_90_R725_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10050_TEFBogen_90_R535_new.svg b/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10050_TEFBogen_90_R535_new.svg new file mode 100644 index 0000000..61063f3 --- /dev/null +++ b/SVGs/Omniflo/TEFBogen/Original/821104033+0_B10050_TEFBogen_90_R535_new.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg deleted file mode 100644 index 772c725..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R400_67_5_339_821104024_mit_0_B10081_TEFBogen_67_5_R250_new.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg deleted file mode 100644 index e560298..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10090_TEFBogen_22_5_R450_new.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg deleted file mode 100644 index b4fde50..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_22_5_84_821104025_mit_0_B10091_TEFBogen_22_5_R650_new.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg deleted file mode 100644 index 77e296d..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_45_232_821104026_mit_0_B10071_TEFBogen_45_R450_new.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg deleted file mode 100644 index 6f68269..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R550_67_5_432_821104027_mit_0_B10080_TEFBogen_67_5_R400_new.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg deleted file mode 100644 index 80ec7af..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10060_TEFBogen_45_R725_new.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg deleted file mode 100644 index 95a19d8..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_45_400_821104031_mit_0_B10070_TEFBogen_45_R535_new.svg +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg deleted file mode 100644 index 57c0d09..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10040_TEFBogen_90_R725_new.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg b/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg deleted file mode 100644 index 98ede57..0000000 --- a/SVGs/Omniflo/TEFBogen/Original/APB_110_R630_90_800_800_821104033_mit_0_B10050_TEFBogen_90_R535_new.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SVGs/Omniflo/bin/02_svg_optimzier_OFBogen.bat b/SVGs/Omniflo/bin/02_svg_optimzier_OFBogen.bat index 7d24a4b..6012e37 100644 --- a/SVGs/Omniflo/bin/02_svg_optimzier_OFBogen.bat +++ b/SVGs/Omniflo/bin/02_svg_optimzier_OFBogen.bat @@ -19,7 +19,7 @@ echo "[DEBUG] Output_PATH: %RD_CONF_OUTPUT_OFBOGEN%" python %OFBogen_PATH%\02_svg_step1_convert_polylines_to_lines.py -python %OFBogen_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py +::python %OFBogen_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py python %OFBogen_PATH%\02_svg_step3_scaler.py python %OFBogen_PATH%\02_svg_step4_format_optimization.py diff --git a/SVGs/Omniflo/bin/02_svg_optimzier_TEFBogen.bat b/SVGs/Omniflo/bin/02_svg_optimzier_TEFBogen.bat new file mode 100644 index 0000000..901db41 --- /dev/null +++ b/SVGs/Omniflo/bin/02_svg_optimzier_TEFBogen.bat @@ -0,0 +1,33 @@ +@echo off +call setenv.bat +setlocal + + +:: Check if Python is available +where python >nul 2>&1 +if %ERRORLEVEL% neq 0 ( + echo Error: Python is not found in your PATH + pause + exit /b 1 +) + +:: Run the Python script +echo Running omnfilo Bogen SVG... + +echo "[DEBUG] TEFBogen_PATH: %TEFBogen_PATH%" +echo "[DEBUG] Output_PATH: %RD_CONF_OUTPUT_TEFBOGEN%" + + +python %TEFBogen_PATH%\02_svg_step1_convert_polylines_to_lines.py +:: python %TEFBogen_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py +python %TEFBogen_PATH%\02_svg_step3_scaler.py +python %TEFBogen_PATH%\02_svg_step4_format_optimization.py + +:: Check if Python script succeeded +if %ERRORLEVEL% equ 0 ( + echo SVG optimization completed successfully +) else ( + echo SVG optimization failed with error %ERRORLEVEL% +) + +pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFBogen.bat b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFBogen.bat index 52fc2b0..19448a7 100644 --- a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFBogen.bat +++ b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFBogen.bat @@ -20,4 +20,10 @@ echo "[DEBUG] RD_CONF_OUTPUT_OFBOGEN: %RD_CONF_OUTPUT_OFBOGEN%" python %OFBogen_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py +:: Check if Python script succeeded +if %ERRORLEVEL% equ 0 ( + echo SVG importation completed successfully +) else ( + echo SVG importation failed with error %ERRORLEVEL% +) pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat index 56bca1b..c0120e1 100644 --- a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat +++ b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat @@ -20,4 +20,10 @@ echo "[DEBUG] RD_CONF_OUTPUT_OFWEICHEN: %RD_CONF_OUTPUT_OFWEICHEN%" python %OFWeiche_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py +:: Check if Python script succeeded +if %ERRORLEVEL% equ 0 ( + echo SVG importation completed successfully +) else ( + echo SVG importation failed with error %ERRORLEVEL% +) pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFBogen.bat b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFBogen.bat new file mode 100644 index 0000000..ebfdcca --- /dev/null +++ b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFBogen.bat @@ -0,0 +1,31 @@ +@echo off +call setenv.bat +setlocal + +:: Check if Python is available +where python >nul 2>&1 +if %ERRORLEVEL% neq 0 ( + echo Error: Python is not found in your PATH + pause + exit /b 1 +) + +:: Run the Python script +echo Running convert svgs to xml and update xml path in Props... + +echo "[DEBUG] TEFBogen_PATH: %TEFBogen_PATH%" +echo "[DEBUG] PROPS_PATH: %PROPS_PATH%" +echo "[DEBUG] SVG_PATH: %SVG_PATH%" +echo "[DEBUG] RD_CONF_OUTPUT_TEFBOGEN: %RD_CONF_OUTPUT_TEFBOGEN%" + +python %TEFBogen_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py +python %TEFBogen_PATH%\03_TEFBogen_SVG_XML_Modifier_Script.py + +:: Check if Python script succeeded +if %ERRORLEVEL% equ 0 ( + echo SVG importation completed successfully +) else ( + echo SVG importation failed with error %ERRORLEVEL% +) + +pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFWeiche.bat b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFWeiche.bat index 5b66775..f04a362 100644 --- a/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFWeiche.bat +++ b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_TEFWeiche.bat @@ -19,6 +19,12 @@ echo "[DEBUG] SVG_PATH: %SVG_PATH%" echo "[DEBUG] RD_CONF_OUTPUT_TEFWEICHEN: %RD_CONF_OUTPUT_TEFWEICHEN%" python %TEFWeiche_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py -python %TEFWeiche_PATH%\04_TEFWEICHE_SVG_XML_Modifier_Script.py +python %TEFWeiche_PATH%\03_TEFWEICHE_SVG_XML_Modifier_Script.py +:: Check if Python script succeeded +if %ERRORLEVEL% equ 0 ( + echo SVG importation completed successfully +) else ( + echo SVG importation failed with error %ERRORLEVEL% +) pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/setenv.bat b/SVGs/Omniflo/bin/setenv.bat index 4e91fc5..6d9ceaf 100644 --- a/SVGs/Omniflo/bin/setenv.bat +++ b/SVGs/Omniflo/bin/setenv.bat @@ -9,6 +9,7 @@ set RD_CONF_WORK=%RD_CONF%\work set RD_CONF_LIB=%RD_CONF%\lib set "OFBogen_PATH=%RD_CONF%\lib\OFBogen" +set "TEFBogen_PATH=%RD_CONF%\lib\TEFBogen" set "OFWeiche_PATH=%RD_CONF%\lib\OFWeiche" set "TEFWeiche_PATH=%RD_CONF%\lib\TEFWeiche" @@ -16,7 +17,9 @@ set "TEFWeiche_PATH=%RD_CONF%\lib\TEFWeiche" set "PROPS_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props" set "SVG_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\svg" +set "JSON_PATH_OFBOGEN=%OFBogen_PATH%\json" set "JSON_PATH_OFWEICHE=%OFWeiche_PATH%\json" +set "JSON_PATH_TEFBOGEN=%TEFBogen_PATH%\json" set "JSON_PATH_TEFWEICHE=%TEFWeiche_PATH%\json" diff --git a/SVGs/Omniflo/lib/OFBogen/02_svg_step1_convert_polylines_to_lines.py b/SVGs/Omniflo/lib/OFBogen/02_svg_step1_convert_polylines_to_lines.py index 482b6ca..ecf04d0 100644 --- a/SVGs/Omniflo/lib/OFBogen/02_svg_step1_convert_polylines_to_lines.py +++ b/SVGs/Omniflo/lib/OFBogen/02_svg_step1_convert_polylines_to_lines.py @@ -4,7 +4,7 @@ import os import re import xml.etree.ElementTree as ET from xml.dom import minidom -import argparse +import shutil def analyze_and_normalize_path(d, path_type, path_id=""): """Strictly normalize path direction and generate detailed report""" @@ -365,6 +365,18 @@ def batch_process_svgs(input_dir, output_dir): print("\nProcessing summary:") print(f"Successfully processed: {success_count} files") print(f"Failed to process: {failure_count} files") +def clear_output_dir(path: str): + + os.makedirs(path, exist_ok=True) + for filename in os.listdir(path): + file_path = os.path.join(path, filename) + try: + if os.path.isdir(file_path): + shutil.rmtree(file_path) # 删除目录 + elif os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) # 删除文件或符号链接 + except Exception as e: + print(f"Failed to delete {file_path}. Reason: {e}") if __name__ == '__main__': input_dir = os.environ.get('RD_CONF_OFBOGEN') @@ -377,7 +389,12 @@ if __name__ == '__main__': if not os.path.exists(input_dir): print(f"Error: Input directory '{input_dir}' does not exist") exit(1) - + # 确保输出目录存在 + os.makedirs(output_dir, exist_ok=True) + + # 清空 output_dir + clear_output_dir(output_dir) + print(f"Starting SVG file processing, working directory: {input_dir}") print("=" * 50) diff --git a/SVGs/Omniflo/lib/OFBogen/02_svg_step2_find_and_mark_auxiliary_lines.py b/SVGs/Omniflo/lib/OFBogen/02_svg_step2_find_and_mark_auxiliary_lines.py deleted file mode 100644 index 61e56eb..0000000 --- a/SVGs/Omniflo/lib/OFBogen/02_svg_step2_find_and_mark_auxiliary_lines.py +++ /dev/null @@ -1,247 +0,0 @@ -import os -from lxml import etree -import re -from math import sqrt, isclose -from collections import defaultdict - -# Constants -WEICHEN_PROFILE_WIDTH = 42.000 -L_R_TARGET_LENGTH = 55.7237 -DELTA_TARGET_LENGTH = 53.5437 -MATCH_TOLERANCE = 0.1 # Matching tolerance 0.1mm - -def process_svg_files(directory): - print(f"🔍 Scanning directory: {directory}") - print("-" * 60) - - result_stats = { - 'total_files': 0, - 'L_R_files': {'with_pairs': [], 'no_pairs': [], 'excess_pairs': []}, - 'Delta_files': {'with_triples': [], 'no_triples': [], 'excess_triples': []} - } - - for filename in os.listdir(directory): - if not filename.endswith('.svg'): - continue - - filepath = os.path.join(directory, filename) - result_stats['total_files'] += 1 - - if '_L_' in filename or '_R_' in filename: - print(f"\n📄 Processing L/R file: {filename}") - process_lr_file(filepath, filename, result_stats) - elif 'DeltaWeiche' in filename: - print(f"\n📄 Processing DeltaWeiche file: {filename}") - process_delta_file(filepath, filename, result_stats) - - # Print final statistics - print("\n" + "="*60) - print("📊 Final processing statistics:") - print(f"Total files processed: {result_stats['total_files']}") - - print("\nL/R type files results:") - print(f"✅ Files with matching path pairs: {len(result_stats['L_R_files']['with_pairs'])}") - print(f" {result_stats['L_R_files']['with_pairs']}") - print(f"⚠️ Files with no matching paths: {len(result_stats['L_R_files']['no_pairs'])}") - print(f" {result_stats['L_R_files']['no_pairs']}") - print(f"❌ Files with >2 matching paths: {len(result_stats['L_R_files']['excess_pairs'])}") - print(f" {result_stats['L_R_files']['excess_pairs']}") - - print("\nDeltaWeiche type files results:") - print(f"✅ Files with matching path triples: {len(result_stats['Delta_files']['with_triples'])}") - print(f" {result_stats['Delta_files']['with_triples']}") - print(f"⚠️ Files with no matching paths: {len(result_stats['Delta_files']['no_triples'])}") - print(f" {result_stats['Delta_files']['no_triples']}") - print(f"❌ Files with ≠3 matching paths: {len(result_stats['Delta_files']['excess_triples'])}") - print(f" {result_stats['Delta_files']['excess_triples']}") - - print("\n✨ Processing complete!") - -def process_lr_file(filepath, filename, stats): - try: - tree = etree.parse(filepath) - root = tree.getroot() - - # Find all straight line paths - straight_lines = find_straight_lines(root) - print(f" 📊 Found {len(straight_lines)} straight paths") - - # Print all straight paths - print("\n 🔍 All straight path details:") - for line in straight_lines: - print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→" - f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm") - - # Group by length - length_groups = group_lines_by_length(straight_lines) - - # Only print groups with exactly 2 paths - print("\n 🔍 Same-length path groups (2 paths):") - perfect_pairs = [group for group in length_groups.values() if len(group) == 2] - for group in perfect_pairs: - print(f" ┌ Length group ({group[0]['length']:.4f}mm, 2 paths)") - for line in group: - print(f" │ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→" - f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})") - print(" └" + "─" * 40) - - if len(perfect_pairs) == 1: - pair = perfect_pairs[0] - original_length = pair[0]['length'] - scale_factor = WEICHEN_PROFILE_WIDTH / original_length - print(f"\n 🔄 Scaling calculation (based on length {original_length:.4f}mm):") - print(f" Scale factor: {scale_factor:.4f}") - - # Print scaled lengths - print("\n 🔍 Scaled path lengths:") - for line in straight_lines: - scaled_len = line['length'] * scale_factor - print(f" Path{line['index']}: {line['length']:.4f}mm → {scaled_len:.4f}mm") - - # Find path matching target length (within tolerance) - target_path = find_target_path(straight_lines, scale_factor, L_R_TARGET_LENGTH) - if target_path: - target_path['element'].set('style', 'stroke:none;fill:none;') - tree.write(filepath, encoding='utf-8', xml_declaration=True) - print(f"\n ✅ Hid path{target_path['index']} matching target length {L_R_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)") - stats['L_R_files']['with_pairs'].append(filename) - else: - print(f"\n ❌ No path found matching {L_R_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)") - stats['L_R_files']['no_pairs'].append(filename) - elif len(perfect_pairs) > 1: - print(f"\n ❗ Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}") - stats['L_R_files']['excess_pairs'].append(filename) - else: - print("\n ❌ No same-length path pairs found") - stats['L_R_files']['no_pairs'].append(filename) - - except Exception as e: - print(f" ❌ Processing failed: {str(e)}") - -def process_delta_file(filepath, filename, stats): - try: - tree = etree.parse(filepath) - root = tree.getroot() - - # Find all straight line paths - straight_lines = find_straight_lines(root) - print(f" 📊 Found {len(straight_lines)} straight paths") - - # Print all straight paths - print("\n 🔍 All straight path details:") - for line in straight_lines: - print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→" - f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm") - - # Group by length - length_groups = group_lines_by_length(straight_lines) - - # Only print groups with exactly 3 paths - print("\n 🔍 Same-length path groups (3 paths):") - perfect_triples = [group for group in length_groups.values() if len(group) == 3] - for group in perfect_triples: - print(f" ┌ Length group ({group[0]['length']:.4f}mm, 3 paths)") - for line in group: - print(f" │ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})→" - f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})") - print(" └" + "─" * 40) - - if len(perfect_triples) == 1: - triple = perfect_triples[0] - original_length = triple[0]['length'] - scale_factor = WEICHEN_PROFILE_WIDTH / original_length - print(f"\n 🔄 Scaling calculation (based on length {original_length:.4f}mm):") - print(f" Scale factor: {scale_factor:.4f}") - - # Print scaled lengths - print("\n 🔍 Scaled path lengths:") - for line in straight_lines: - scaled_len = line['length'] * scale_factor - print(f" Path{line['index']}: {line['length']:.4f}mm → {scaled_len:.4f}mm") - - # Find all paths matching target length (there might be multiple) - target_paths = [line for line in straight_lines - if abs(line['length'] * scale_factor - DELTA_TARGET_LENGTH) < MATCH_TOLERANCE] - - if target_paths: - for target in target_paths: - target['element'].set('style', 'stroke:none;fill:none;') - tree.write(filepath, encoding='utf-8', xml_declaration=True) - print(f"\n ✅ Hid {len(target_paths)} paths matching target length {DELTA_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm):") - for target in target_paths: - print(f" - Path{target['index']}") - stats['Delta_files']['with_triples'].append(filename) - else: - print(f"\n ❌ No path found matching {DELTA_TARGET_LENGTH:.4f}mm (±{MATCH_TOLERANCE}mm)") - stats['Delta_files']['no_triples'].append(filename) - elif len(perfect_triples) > 1: - print(f"\n ❗ Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}") - stats['Delta_files']['excess_triples'].append(filename) - else: - print("\n ❌ No same-length path groups (3 paths) found") - stats['Delta_files']['no_triples'].append(filename) - - except Exception as e: - print(f" ❌ Processing failed: {str(e)}") - -def find_straight_lines(root): - """Find all straight line paths""" - lines = [] - paths = root.xpath('.//svg:path|.//svg:g//svg:path', - namespaces={'svg': 'http://www.w3.org/2000/svg'}) - - for i, path in enumerate(paths, 1): - d = path.get('d', '').strip() - if not d: - continue - - if is_straight_line(d): - length, (p1, p2) = calculate_line_length(d) - if length > 0: - lines.append({ - 'index': i, - 'element': path, - 'length': round(length, 4), # Keep 4 decimal places - 'p1': (round(p1[0], 2), round(p1[1], 2)), # Coordinates rounded to 2 decimals - 'p2': (round(p2[0], 2), round(p2[1], 2)) - }) - return lines - -def group_lines_by_length(lines): - """Group straight paths by length""" - groups = defaultdict(list) - for line in lines: - groups[line['length']].append(line) - return groups - -def find_target_path(lines, scale_factor, target_length): - """Find path that matches target length after scaling (within tolerance)""" - for line in lines: - scaled_length = line['length'] * scale_factor - if abs(scaled_length - target_length) < MATCH_TOLERANCE: - return line - return None - -def is_straight_line(d): - """Check if path is strictly a straight line""" - commands = [cmd[0].upper() for cmd in re.findall('([A-Za-z])', d)] - return len(commands) == 2 and commands[0] == 'M' and commands[1] == 'L' - -def calculate_line_length(d): - """Calculate line length and return endpoints""" - points = [] - for cmd, params in re.findall('([A-Za-z])([^A-Za-z]*)', d): - if cmd.upper() in ('M', 'L'): - coords = [float(p) for p in re.findall('[-+]?\d*\.\d+|[-+]?\d+', params)] - points.append((coords[0], coords[1])) - - if len(points) != 2: - return 0, ((0,0), (0,0)) - - length = sqrt((points[1][0]-points[0][0])**2 + (points[1][1]-points[0][1])**2) - return round(length, 4), (points[0], points[1]) # Length rounded to 4 decimals -if __name__ == '__main__': - # Set SVG files directory path - # svg_directory = r'C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\work' - svg_directory =os.environ.get('RD_CONF_WORK') - process_svg_files(svg_directory) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/OFBogen/02_svg_step3_scaler.py b/SVGs/Omniflo/lib/OFBogen/02_svg_step3_scaler.py index fb0416e..a88facd 100644 --- a/SVGs/Omniflo/lib/OFBogen/02_svg_step3_scaler.py +++ b/SVGs/Omniflo/lib/OFBogen/02_svg_step3_scaler.py @@ -1,8 +1,67 @@ import os import re import xml.etree.ElementTree as ET -from typing import Tuple, List +from typing import Tuple, List,Optional +import math +def arc_to_points(x0, y0, rx, ry, phi, large_arc, sweep, x1, y1, steps=100): + """ + 将SVG弧命令近似为一系列点 + 用公式计算中心和角度范围,然后采样,得到边界安全点 + """ + phi = math.radians(phi) + dx2 = (x0 - x1) / 2.0 + dy2 = (y0 - y1) / 2.0 + cos_phi = math.cos(phi) + sin_phi = math.sin(phi) + # Step 1: Transform to ellipse coordinate system + x_ = cos_phi * dx2 + sin_phi * dy2 + y_ = -sin_phi * dx2 + cos_phi * dy2 + + # Step 2: Correct radii + rx = abs(rx) + ry = abs(ry) + lam = (x_**2)/(rx**2) + (y_**2)/(ry**2) + if lam > 1: + rx *= math.sqrt(lam) + ry *= math.sqrt(lam) + + # Step 3: Compute center + sign = 1 if large_arc != sweep else -1 + coef = sign * math.sqrt( + max(0, ((rx**2 * ry**2) - (rx**2 * y_**2) - (ry**2 * x_**2)) / + ((rx**2 * y_**2) + (ry**2 * x_**2))) + ) + cx_ = coef * (rx * y_) / ry + cy_ = coef * (-ry * x_) / rx + + cx = cos_phi * cx_ - sin_phi * cy_ + (x0 + x1)/2 + cy = sin_phi * cx_ + cos_phi * cy_ + (y0 + y1)/2 + + # Step 4: Compute angles + def angle(u, v): + dot = u[0]*v[0] + u[1]*v[1] + det = u[0]*v[1] - u[1]*v[0] + return math.atan2(det, dot) + + u = ((x_ - cx_) / rx, (y_ - cy_) / ry) + v = ((-x_ - cx_) / rx, (-y_ - cy_) / ry) + + theta1 = angle((1,0), u) + delta_theta = angle(u, v) + if not sweep and delta_theta > 0: + delta_theta -= 2*math.pi + elif sweep and delta_theta < 0: + delta_theta += 2*math.pi + + # Step 5: Sample points along the arc + points = [] + for i in range(steps+1): + t = theta1 + delta_theta * i/steps + x = cx + rx*math.cos(phi)*math.cos(t) - ry*math.sin(phi)*math.sin(t) + y = cy + rx*math.sin(phi)*math.cos(t) + ry*math.cos(phi)*math.sin(t) + points.append((x,y)) + return points def parse_svg_path(d: str) -> List[Tuple[float, float]]: """Extract all coordinates from SVG path data (including curve control points)""" points = [] @@ -31,13 +90,19 @@ def parse_svg_path(d: str) -> List[Tuple[float, float]]: x += current_pos[0]; y += current_pos[1] points.extend([(x1, y1), (x2, y2), (x, y)]) current_pos = (x, y) - elif cmd in ('A', 'a'): # Arc commands (start/end points only) + elif cmd in ('A', 'a'): for i in range(0, len(args), 7): - x, y = args[i+5], args[i+6] + rx, ry, phi, large_arc, sweep, x, y = args[i:i+7] if cmd.islower(): x += current_pos[0] y += current_pos[1] - points.append((x, y)) + arc_points = arc_to_points( + current_pos[0], current_pos[1], + rx, ry, phi, + int(large_arc), int(sweep), + x, y + ) + points.extend(arc_points) current_pos = (x, y) return points @@ -155,4 +220,4 @@ def batch_process_svg(input_dir: str, output_dir: str): if __name__ == '__main__': input_dir = os.environ.get('RD_CONF_WORK') output_dir = os.environ.get('RD_CONF_WORK') - batch_process_svg(input_dir, output_dir) + batch_process_svg(input_dir, output_dir) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py index d295190..8e3721d 100644 --- a/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py @@ -5,6 +5,7 @@ import re import xml.etree.ElementTree as ET from xml.dom import minidom import argparse +import shutil def analyze_and_normalize_path(d, path_type, path_id=""): """Strictly normalize path direction and generate detailed report""" @@ -337,7 +338,18 @@ def optimize_svg(input_path, output_path): print(f"\nProcessing error: {str(e)}") print("="*60) return False - +def clear_output_dir(path: str): + + os.makedirs(path, exist_ok=True) + for filename in os.listdir(path): + file_path = os.path.join(path, filename) + try: + if os.path.isdir(file_path): + shutil.rmtree(file_path) # 删除目录 + elif os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) # 删除文件或符号链接 + except Exception as e: + print(f"Failed to delete {file_path}. Reason: {e}") def batch_process_svgs(input_dir, output_dir): if not os.path.exists(output_dir): @@ -416,7 +428,8 @@ if __name__ == '__main__': print(f"file {filename} does not exist") if in_dir: - """Batch process SVG files""" + # 清空 output_dir + clear_output_dir(out_dir) batch_process_svgs(in_dir, out_dir) else: diff --git a/SVGs/Omniflo/lib/TEFBogen/1_process_TEFBogen_json_1.py b/SVGs/Omniflo/lib/TEFBogen/01_props_step1_process_TEFBogen_json.py similarity index 95% rename from SVGs/Omniflo/lib/TEFBogen/1_process_TEFBogen_json_1.py rename to SVGs/Omniflo/lib/TEFBogen/01_props_step1_process_TEFBogen_json.py index 4a6660f..5fe0772 100644 --- a/SVGs/Omniflo/lib/TEFBogen/1_process_TEFBogen_json_1.py +++ b/SVGs/Omniflo/lib/TEFBogen/01_props_step1_process_TEFBogen_json.py @@ -19,7 +19,7 @@ def process_json_file(input_filename, output_filename=None): output_filename: Optional output file path. Auto-generated if not provided """ # Get base path from environment variable - json_base_path = os.environ.get("JSON_PATH","JSON") + json_base_path = os.environ.get("JSON_PATH_TEFBOGEN","JSON") if not json_base_path: print("Error: JSON_PATH environment variable not set") print("Please set JSON_PATH in your .bat file") @@ -101,32 +101,32 @@ def process_json_file(input_filename, output_filename=None): print("\nStep 2: Calculating pixel and SVG dimensions") # 计算 Gruppe_width_px 和 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) + item["Gruppe_width_px"] = round(float(item["Gruppe_width_mm"]) * 3.779527592,4) + item["Gruppe_height_px"] = round(float(item["Gruppe_height_mm"]) * 3.779527592, 4) print(f"Calculated Gruppe_width_px: {item['Gruppe_width_px']}") print(f"Calculated Gruppe_height_px: {item['Gruppe_height_px']}") # 比较宽度和高度以确定缩放比例 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) + scale = round(1000 / float(item["Gruppe_width_mm"]), 7) 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) + item["calculated_SVG_height_px"] = round(float(item["Gruppe_height_mm"]) * scale, 4) + scale_RD_H = round(1000 / float(item["calculated_SVG_height_px"]), 7) 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) + item["calculated_SVG_height_px"] = 1000 + scale_RD_H = 1 scale_RD_W = 1 else: print("Height is larger, setting calculated_SVG_height to 1000px") - scale = round(1000 / float(item["Gruppe_height_mm"]), 6) + scale = round(1000 / float(item["Gruppe_height_mm"]), 7) 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) + item["calculated_SVG_width_px"] = round(float(item["Gruppe_width_mm"]) * scale, 4) + scale_RD_W = round(1000 / float(item["calculated_SVG_width_px"]), 7) scale_RD_H = 1 print(f"Calculated scale: {scale}") diff --git a/SVGs/Omniflo/lib/TEFBogen/2_update_props_TEF_Boegen_from_json_1.py b/SVGs/Omniflo/lib/TEFBogen/01_props_step2_update_props_TEF_Boegen_from_json.py similarity index 97% rename from SVGs/Omniflo/lib/TEFBogen/2_update_props_TEF_Boegen_from_json_1.py rename to SVGs/Omniflo/lib/TEFBogen/01_props_step2_update_props_TEF_Boegen_from_json.py index 93360c0..7385c75 100644 --- a/SVGs/Omniflo/lib/TEFBogen/2_update_props_TEF_Boegen_from_json_1.py +++ b/SVGs/Omniflo/lib/TEFBogen/01_props_step2_update_props_TEF_Boegen_from_json.py @@ -53,8 +53,8 @@ def process_files(json_file_path, txt_files_dir): 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) + new_width = round(json_item["Gruppe_width_px"], 4) + new_height = round(json_item["Gruppe_height_px"], 4) txt_content["width"] = new_width txt_content["height"] = new_height diff --git a/SVGs/Omniflo/lib/TEFBogen/02_svg_step1_convert_polylines_to_lines.py b/SVGs/Omniflo/lib/TEFBogen/02_svg_step1_convert_polylines_to_lines.py new file mode 100644 index 0000000..4e91a5a --- /dev/null +++ b/SVGs/Omniflo/lib/TEFBogen/02_svg_step1_convert_polylines_to_lines.py @@ -0,0 +1,397 @@ + +import os +import re +import xml.etree.ElementTree as ET +from xml.dom import minidom +import shutil + +def analyze_and_normalize_path(d, path_type, path_id=""): + """Strictly normalize path direction and generate detailed report""" + original_d = d + report = [] + normalized = [] + changed = False + + # First check if path contains any arc commands + if 'A' in d or 'a' in d: + report.append(" Path contains arc commands - leaving unchanged") + return original_d, report, False + # Ensure path starts with M command + if not d.strip().startswith('M'): + d = 'M' + d[1:] if d.startswith('L') else 'M ' + d + report.append(" Fix: Added M command at path start") + changed = True + + # Parse path commands + commands = [] + current_cmd = None + for token in re.split('([A-Za-z])', d): + if not token: + continue + if token in 'MLAZHVCSQTa-z': + current_cmd = token + else: + if current_cmd: + commands.append((current_cmd, token.strip())) + + prev_x, prev_y = None, None + + for cmd, params in commands: + params = [float(p) for p in re.split('[, ]+', params.strip()) if p] + + if cmd == 'M': + if len(params) >= 2: + x, y = params[0], params[1] + normalized.append(f"M {x} {y}") + prev_x, prev_y = x, y + continue + + if path_type == 'Line segment' and cmd == 'L': + if len(params) >= 2 and prev_x is not None: + x, y = params[0], params[1] + need_swap = x < prev_x or (x == prev_x and y < prev_y) + + if need_swap: + new_segment = [f"M {x} {y}", f"L {prev_x} {prev_y}"] + report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}") + normalized = new_segment + changed = True + else: + normalized.append(f"L {x} {y}") + report.append(" Path direction already correct, no changes made") + + prev_x, prev_y = x, y + continue + + if path_type == 'Arc' and cmd == 'A': + if len(params) >= 7 and prev_x is not None: + rx, ry, xrot, large, sweep, x, y = params[0], params[1], params[2], int(params[3]), int(params[4]), params[5], params[6] + + # Force left-to-right clockwise + need_swap = x < prev_x + new_sweep = 1 + + if need_swap: + new_segment = [f"M {x} {y}", f"A {rx} {ry} {xrot} {large} {new_sweep} {prev_x} {prev_y}"] + report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}") + normalized = new_segment + changed = True + else: + if sweep != new_sweep: + new_segment = [f"A {rx} {ry} {xrot} {large} {new_sweep} {x} {y}"] + report.append(f" Need to adjust sweep to 1 → New path: {' '.join(new_segment)}") + normalized.extend(new_segment) + changed = True + else: + normalized.append(f"A {rx} {ry} {xrot} {large} {sweep} {x} {y}") + report.append(" Arc direction already correct, no changes made") + + prev_x, prev_y = x, y + continue + + normalized.append(f"{cmd} {' '.join(map(str, params))}") + + new_d = ' '.join(normalized) + report_header = f"[{path_id}-Analysis] Type: {path_type}" + full_report = [report_header, f"Original path: {original_d}"] + report + + if changed: + full_report.append(f"Modified path: {new_d}") + else: + full_report.append("Path not modified") + + return new_d, '\n'.join(full_report) +def analyze_and_normalize_path(d, path_type, path_id=""): + """Strictly normalize path direction and generate detailed report""" + original_d = d + report = [] + normalized = [] + changed = False + + # First check if path contains any arc commands + if 'A' in d or 'a' in d: + report_header = f"[{path_id}-Analysis] Type: {path_type} (contains arcs)" + full_report = [report_header, + f"Original path: {original_d}", + " Path contains arc commands - leaving unchanged", + "Path not modified"] + return original_d, '\n'.join(full_report) + + # Ensure path starts with M command + if not d.strip().startswith('M'): + d = 'M' + d[1:] if d.startswith('L') else 'M ' + d + report.append(" Fix: Added M command at path start") + changed = True + + # Parse path commands + commands = [] + current_cmd = None + for token in re.split('([A-Za-z])', d): + if not token: + continue + if token in 'MLAZHVCSQTa-z': + current_cmd = token + else: + if current_cmd: + commands.append((current_cmd, token.strip())) + + prev_x, prev_y = None, None + + for cmd, params in commands: + params = [float(p) for p in re.split('[, ]+', params.strip()) if p] + + if cmd == 'M': + if len(params) >= 2: + x, y = params[0], params[1] + normalized.append(f"M {x} {y}") + prev_x, prev_y = x, y + continue + + if path_type == 'Line segment' and cmd == 'L': + if len(params) >= 2 and prev_x is not None: + x, y = params[0], params[1] + need_swap = x < prev_x or (x == prev_x and y < prev_y) + + if need_swap: + new_segment = [f"M {x} {y}", f"L {prev_x} {prev_y}"] + report.append(f" Need to swap start/end → New path: {' '.join(new_segment)}") + normalized = new_segment + changed = True + else: + normalized.append(f"L {x} {y}") + report.append(" Path direction already correct, no changes made") + + prev_x, prev_y = x, y + continue + + normalized.append(f"{cmd} {' '.join(map(str, params))}") + + new_d = ' '.join(normalized) + report_header = f"[{path_id}-Analysis] Type: {path_type}" + full_report = [report_header, f"Original path: {original_d}"] + report + + if changed: + full_report.append(f"Modified path: {new_d}") + else: + full_report.append("Path not modified") + + return new_d, '\n'.join(full_report) + +def optimize_svg(input_path, output_path): + """Process single SVG file with all optimizations""" + try: + # Register namespace + ET.register_namespace('', 'http://www.w3.org/2000/svg') + + # Parse SVG file + tree = ET.parse(input_path) + root = tree.getroot() + + print(f"\nProcessing file: {os.path.basename(input_path)}") + print("="*60) + + # Create parent map + parent_map = {c: p for p in tree.iter() for c in p} + + # 1. Remove xlink namespace + for attr in list(root.attrib): + if 'xlink' in attr: + del root.attrib[attr] + + # 2. Set standard dimensions + root.set('width', '1e3') + root.set('height', '1e3') + root.set('viewBox', '0 0 1e3 1e3') + + # 3. Remove all clipPath definitions and references + defs = root.find('{http://www.w3.org/2000/svg}defs') + if defs is not None: + clip_paths = defs.findall('{http://www.w3.org/2000/svg}clipPath') + for cp in clip_paths: + defs.remove(cp) + if len(defs) == 0: + root.remove(defs) + + # 4. Remove clip-path attributes + for elem in tree.iter(): + if 'clip-path' in elem.attrib: + del elem.attrib['clip-path'] + + # 5. Force square line caps + for g in root.findall('.//{http://www.w3.org/2000/svg}g'): + g.set('stroke-linecap', 'square') + + # 6. Remove dashed line styles + for elem in tree.iter(): + if 'stroke-dasharray' in elem.attrib: + del elem.attrib['stroke-dasharray'] + + # 7. Completely remove empty groups + removed_groups = True + while removed_groups: + removed_groups = False + for g in root.findall('.//{http://www.w3.org/2000/svg}g'): + is_empty = ( + len(g) == 0 and + not (g.text or '').strip() and + not (g.tail or '').strip() and + all(not k.startswith('{') for k in g.attrib)) + if is_empty: + parent = parent_map.get(g) + if parent is not None: + parent.remove(g) + removed_groups = True + parent_map = {c: p for p in tree.iter() for c in p} + + # 8. Convert polylines to paths + for polyline in root.findall('.//{http://www.w3.org/2000/svg}polyline'): + points = polyline.get('points', '').strip() + if points: + coords = [p for p in re.split(r'[\s,]', points) if p] + path_data = [] + for i in range(0, len(coords), 2): + if i == 0: + path_data.append(f"M {coords[i]} {coords[i+1]}") + else: + path_data.append(f"L {coords[i]} {coords[i+1]}") + + path = ET.Element('{http://www.w3.org/2000/svg}path') + new_d, analysis_report = analyze_and_normalize_path( + ' '.join(path_data), + 'Line segment', + "Polyline conversion" + ) + path.set('d', new_d) + print(f"\n[Polyline conversion analysis]\n{analysis_report}") + + for attr, value in polyline.attrib.items(): + if attr not in ('points', 'stroke-dasharray'): + path.set(attr, value) + + parent = parent_map.get(polyline) + if parent is not None: + parent.remove(polyline) + parent.append(path) + + # 9. Normalize path directions (final step) + group_num = 0 + for g in root.findall('.//{http://www.w3.org/2000/svg}g'): + group_num += 1 + path_num = 0 + group_report = [] + + for path in g.findall('.//{http://www.w3.org/2000/svg}path'): + path_num += 1 + if 'd' not in path.attrib: + continue + + # Auto-detect path type + path_type = 'Arc' if 'A' in path.get('d') else 'Line segment' + path_id = f"Group{group_num}-Path{path_num}" + + new_d, analysis_report = analyze_and_normalize_path( + path.get('d'), + path_type, + path_id + ) + + if new_d != path.get('d'): + path.set('d', new_d) + + group_report.append(analysis_report) + + # Print all path reports for current group + if group_report: + print(f"\n=== Group {group_num} Path Analysis ===") + print('\n\n'.join(group_report)) + + # 10. Update colors and line width + for elem in root.findall('.//*[@stroke]'): + stroke = elem.get('stroke', '').lower() + if stroke == '#0ff' or stroke == 'rgb(0,255,255)': + elem.set('stroke', '#ffe31b') + elif stroke == '#000' or stroke == 'rgb(255,0,0)': + elem.set('stroke', '#FF0000') + elem.set('stroke-width', f'{1}px') + + # Generate final XML + rough_string = ET.tostring(root, encoding='utf-8', xml_declaration=True) + rough_string = rough_string.replace(b'standalone="no"', b'') + + # Format output (remove empty lines) + reparsed = minidom.parseString(rough_string) + pretty_svg = reparsed.toprettyxml(indent=' ', encoding='utf-8') + pretty_svg = b'\n'.join( + line for line in pretty_svg.splitlines() + if line.strip() + ).replace(b'', b'') + + with open(output_path, 'wb') as f: + f.write(pretty_svg) + + print("\n" + "="*60) + return True + + except Exception as e: + print(f"\nProcessing error: {str(e)}") + print("="*60) + return False + +def batch_process_svgs(input_dir, output_dir): + + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + success_count = 0 + failure_count = 0 + + for filename in os.listdir(input_dir): + if os.path.isdir(os.path.join(input_dir, filename)): + continue + if filename.lower().endswith('.svg') or '_new.svg' in filename.lower(): + input_path = os.path.join(input_dir, filename) + output_filename = filename.replace('_new.svg', '_optimized.svg') + output_path = os.path.join(output_dir, output_filename) + + if optimize_svg(input_path, output_path): + success_count += 1 + print(f"✓ Processed successfully: {filename} → {output_filename}") + else: + failure_count += 1 + print(f"✗ Processing failed: {filename}") + print("\n" + "="*60 + "\n") + + print("\nProcessing summary:") + print(f"Successfully processed: {success_count} files") + print(f"Failed to process: {failure_count} files") +def clear_output_dir(path: str): + + os.makedirs(path, exist_ok=True) + for filename in os.listdir(path): + file_path = os.path.join(path, filename) + try: + if os.path.isdir(file_path): + shutil.rmtree(file_path) # 删除目录 + elif os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) # 删除文件或符号链接 + except Exception as e: + print(f"Failed to delete {file_path}. Reason: {e}") + +if __name__ == '__main__': + input_dir = os.environ.get('RD_CONF_TEFBOGEN') + output_dir = os.environ.get('RD_CONF_WORK') + + if not input_dir or not output_dir: + print("Error: Environment variable RD_CONF_WORK is not set") + exit(1) + + if not os.path.exists(input_dir): + print(f"Error: Input directory '{input_dir}' does not exist") + exit(1) + clear_output_dir(output_dir) + print(f"Starting SVG file processing, working directory: {input_dir}") + print("=" * 50) + + batch_process_svgs(input_dir, output_dir) + + print("Processing completed!") \ No newline at end of file diff --git a/SVGs/Omniflo/lib/TEFBogen/02_svg_step3_scaler.py b/SVGs/Omniflo/lib/TEFBogen/02_svg_step3_scaler.py new file mode 100644 index 0000000..fb0416e --- /dev/null +++ b/SVGs/Omniflo/lib/TEFBogen/02_svg_step3_scaler.py @@ -0,0 +1,158 @@ +import os +import re +import xml.etree.ElementTree as ET +from typing import Tuple, List + +def parse_svg_path(d: str) -> List[Tuple[float, float]]: + """Extract all coordinates from SVG path data (including curve control points)""" + points = [] + commands = re.findall( + r'([MmLlCcQqAaHhVvZz])([^MmLlCcQqAaHhVvZz]*)', + d.strip().replace(',', ' ') + ) + current_pos = (0.0, 0.0) + + for cmd, args in commands: + args = list(map(float, re.findall(r'[-+]?\d*\.?\d+', args))) + if cmd in ('M', 'm', 'L', 'l'): # Move/line commands + for i in range(0, len(args), 2): + x, y = args[i], args[i+1] + if cmd.islower(): # Relative coordinates + x += current_pos[0] + y += current_pos[1] + points.append((x, y)) + current_pos = (x, y) + elif cmd in ('C', 'c'): # Cubic Bezier curves + for i in range(0, len(args), 6): + x1, y1, x2, y2, x, y = args[i:i+6] + if cmd.islower(): + x1 += current_pos[0]; y1 += current_pos[1] + x2 += current_pos[0]; y2 += current_pos[1] + x += current_pos[0]; y += current_pos[1] + points.extend([(x1, y1), (x2, y2), (x, y)]) + current_pos = (x, y) + elif cmd in ('A', 'a'): # Arc commands (start/end points only) + for i in range(0, len(args), 7): + x, y = args[i+5], args[i+6] + if cmd.islower(): + x += current_pos[0] + y += current_pos[1] + points.append((x, y)) + current_pos = (x, y) + return points + +def calculate_bounding_box(svg_file: str) -> Tuple[float, float, float, float]: + """Calculate true bounding box of all paths in SVG""" + tree = ET.parse(svg_file) + root = tree.getroot() + all_points = [] + + for path in root.findall('.//{http://www.w3.org/2000/svg}path'): + d = path.get('d', '') + all_points.extend(parse_svg_path(d)) + + if not all_points: + return (0, 0, 0, 0) + + x_min = min(p[0] for p in all_points) + x_max = max(p[0] for p in all_points) + y_min = min(p[1] for p in all_points) + y_max = max(p[1] for p in all_points) + return (x_min, y_min, x_max, y_max) + + +def normalize_stroke_widths2(root, scale): + """Normalize stroke widths to ensure consistent appearance after scaling""" + for elem in root.iter(): + if 'stroke-width' in elem.attrib: + # Remove existing stroke-width + del elem.attrib['stroke-width'] + # Apply scaled stroke width (e.g., 1px → 1/scale) + elem.set('stroke-width', f'{1/scale:.6f}px') + +def apply_non_scaling_stroke(root): + + for elem in root.iter(): + if 'stroke' in elem.attrib and elem.attrib['stroke'] != 'none': + # set stroke-width=1(no unit) + elem.set('stroke-width', '1') + # set vector-effect + elem.set('vector-effect', 'non-scaling-stroke') + +def scale_svg_file(input_path: str, output_path: str): + """Scale SVG file with consistent stroke widths""" + print(f"\nProcessing: {os.path.basename(input_path)}") + + tree = ET.parse(input_path) + root = tree.getroot() + + # Calculate original bounding box + x_min, y_min, x_max, y_max = calculate_bounding_box(input_path) + width = x_max - x_min + height = y_max - y_min + + print(f"Original bounding box: ({x_min:.3f}, {y_min:.3f}) to ({x_max:.3f}, {y_max:.3f})") + print(f"Original dimensions: {width:.3f} (w) × {height:.3f} (h)") + + + # Determine scaling base (larger dimension → 1000px) + if width > height: + scale = 1000.0 / width + new_width = 1000.0 + new_height = round(height * scale,3) + print(f"Scaling base: Width (larger dimension)") + else: + scale = 1000.0 / height + new_height = 1000.0 + new_width = round(width * scale,3) + print(f"Scaling base: Height (larger dimension)") + + print(f"Scale factor: {scale:.6f}") + print(f"New dimensions: {new_width:.3f}px × {new_height:.3f}px") + print(f"ViewBox: 0 0 {new_width:.3f} {new_height:.3f}") + normalize_stroke_widths2(root, scale) + #apply_non_scaling_stroke(root) + # + # Update SVG attributes + root.set('viewBox', f'0 0 {new_width:.3f} {new_height:.3f}') + root.set('width', f'{new_width:.3f}') + root.set('height', f'{new_height:.3f}') + + # Apply translation and scaling + for g in root.findall('{http://www.w3.org/2000/svg}g'): + transform = g.get('transform', '') + new_transform = f'translate({-x_min*scale},{-y_min*scale}) scale({scale})' + if transform: + new_transform = f'{transform} {new_transform}' + g.set('transform', new_transform) + + # Save modified SVG + tree.write(output_path, encoding='utf-8', xml_declaration=True) + print(f"Finished processing: {os.path.basename(input_path)}") + +def batch_process_svg(input_dir: str, output_dir: str): + """Batch process SVG files in directory (non-recursive)""" + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + svg_files = [ + f for f in os.listdir(input_dir) + if f.lower().endswith('.svg') and os.path.isfile(os.path.join(input_dir, f)) + ] + + if not svg_files: + print("No SVG files found in the input directory!") + return + + print(f"\nFound {len(svg_files)} SVG files to process") + for filename in svg_files: + input_path = os.path.join(input_dir, filename) + output_path = os.path.join(output_dir, filename) + scale_svg_file(input_path, output_path) + + print("\nAll files processed successfully!") + +if __name__ == '__main__': + input_dir = os.environ.get('RD_CONF_WORK') + output_dir = os.environ.get('RD_CONF_WORK') + batch_process_svg(input_dir, output_dir) diff --git a/SVGs/Omniflo/lib/TEFBogen/02_svg_step4_format_optimization.py b/SVGs/Omniflo/lib/TEFBogen/02_svg_step4_format_optimization.py new file mode 100644 index 0000000..8ff0b5d --- /dev/null +++ b/SVGs/Omniflo/lib/TEFBogen/02_svg_step4_format_optimization.py @@ -0,0 +1,159 @@ +import re +import os +import xml.etree.ElementTree as ET +from typing import List, Dict, Tuple + +def process_svg_file(input_path: str, output_path: str) -> bool: + """Process SVG file while preserving original dimensions and viewBox""" + try: + # Parse SVG file + tree = ET.parse(input_path) + root = tree.getroot() + + # Store original dimensions and viewBox + original_attrs = { + 'width': root.attrib.get('width', '100%'), + 'height': root.attrib.get('height', '100%'), + 'viewBox': root.attrib.get('viewBox', '') + } + + # Remove namespace prefixes + for elem in root.iter(): + if '}' in elem.tag: + elem.tag = elem.tag.split('}', 1)[1] + for attr in list(elem.attrib): + if '}' in attr: + new_attr = attr.split('}', 1)[1] + elem.attrib[new_attr] = elem.attrib[attr] + del elem.attrib[attr] + + # Process all groups with transforms + for g in root.findall('g'): + if 'transform' in g.attrib: + # Parse transform and convert to matrix + transform = g.attrib['transform'] + matrix_str = convert_transform_to_matrix(transform) + + # Update group attributes + g.attrib['transform'] = matrix_str # Force stroke color + g.attrib['fill'] = 'none' + g.attrib['stroke-linecap'] = 'butt' + g.attrib['vector-effect'] = 'non-scaling-stroke' + + # Format paths within group + for path in g.findall('path'): + path.attrib['d'] = simplify_path_data(path.attrib.get('d', '')) + path.tail = '\n ' # Maintain consistent indentation + + # Set root attributes while preserving original dimensions + root.attrib.update({ + 'version': '1.1', + 'xmlns': 'http://www.w3.org/2000/svg', + 'width': original_attrs['width'], + 'height': original_attrs['height'], + 'viewBox': original_attrs['viewBox'], + 'fill-rule': 'evenodd', + 'stroke-linecap': 'round', + 'stroke-linejoin': 'round', + 'space': 'preserve' + }) + + # Format XML with proper indentation + indent(root) + + # Generate XML string + xml_str = ET.tostring(root, encoding='unicode') + xml_str = '\n' + xml_str + + # Clean up formatting + xml_str = re.sub(r'\n\s*\n', '\n', xml_str) + xml_str = re.sub(r'>\s+<', '>\n<', xml_str) + + # Write to file + with open(output_path, 'w', encoding='utf-8') as f: + f.write(xml_str) + + print(f"Processed: {os.path.basename(input_path)}") + return True + + except Exception as e: + print(f"Failed {os.path.basename(input_path)}: {str(e)}") + return False + +def convert_transform_to_matrix(transform: str) -> str: + """Convert transform string to matrix notation with 4 decimal places""" + tx = ty = 0.0 + translate_match = re.search(r'translate\(([^,]+),\s*([^)]+)\)', transform) + if translate_match: + tx = float(translate_match.group(1)) + ty = float(translate_match.group(2)) + + scale = 1.0 + scale_match = re.search(r'scale\(([^)]+)\)', transform) + if scale_match: + scale = float(scale_match.group(1)) + + return f"matrix({scale:.4f} 0 0 {scale:.4f} {tx:.2f} {ty:.2f})" + +def simplify_path_data(d: str) -> str: + """Simplify path data while maintaining relative commands""" + d = re.sub(r'\s+', ' ', d.strip()) + + def format_number(num_str: str) -> str: + try: + num = float(num_str) + if abs(num) < 0.001 and num != 0: + return f"{num:.0e}".replace('e-0', 'e-') + if abs(num - 1000) < 0.1: + return '1e3' + if abs(num - round(num, 3)) < 0.0001: + return f"{round(num, 3):g}" + return num_str + except ValueError: + return num_str + + parts = [] + for part in re.split(r'([ ,])', d): + if re.match(r'^[-+]?\d*\.?\d+$', part): + parts.append(format_number(part)) + else: + parts.append(part) + + return ''.join(parts).replace(' ,', ',') + +def indent(elem: ET.Element, level: int = 0): + """Properly indent XML elements""" + indent_str = "\n" + level * " " + if len(elem): + if not elem.text or not elem.text.strip(): + elem.text = indent_str + " " + if not elem.tail or not elem.tail.strip(): + elem.tail = indent_str + for child in elem: + indent(child, level + 1) + if not elem.tail or not elem.tail.strip(): + elem.tail = indent_str + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = indent_str + +def batch_process_svgs(input_dir: str, output_dir: str): + """Process all SVG files in a directory""" + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + success_count = 0 + for filename in sorted(os.listdir(input_dir)): + if filename.lower().endswith('.svg'): + input_path = os.path.join(input_dir, filename) + output_path = os.path.join(output_dir, filename) + if process_svg_file(input_path, output_path): + success_count += 1 + + print(f"\nCompleted: {success_count} files processed") + +if __name__ == '__main__': + input_dir = os.environ.get('RD_CONF_WORK') + output_dir = os.environ.get('RD_CONF_OUTPUT_TEFBOGEN') +# Example usage: + batch_process_svgs(input_dir, output_dir) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py b/SVGs/Omniflo/lib/TEFBogen/03_TEFBogen_SVG_XML_Modifier_Script.py similarity index 51% rename from SVGs/Omniflo/lib/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py rename to SVGs/Omniflo/lib/TEFBogen/03_TEFBogen_SVG_XML_Modifier_Script.py index f6af7cb..09195cf 100644 --- a/SVGs/Omniflo/lib/TEFBogen/4_TEFBogen_SVG_XML_Modifier_Script.py +++ b/SVGs/Omniflo/lib/TEFBogen/03_TEFBogen_SVG_XML_Modifier_Script.py @@ -5,7 +5,8 @@ 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 +4. Processes only red color groups (#FF0000) +5. Provides comprehensive reporting """ import json @@ -15,7 +16,7 @@ from xml.etree.ElementTree import Element, SubElement, tostring def process_xml_file(xml_path): """ - Process a single XML file with enhanced style handling + Process a single XML file focusing on red color groups only Returns modification statistics """ try: @@ -27,68 +28,60 @@ def process_xml_file(xml_path): namespaces = {'svg': 'http://www.w3.org/2000/svg'} stats = { - 'ffe31b_groups': 0, - 'ec2525_groups': 0, - 'other_groups_processed': 0, - 'elements_modified': 0, - 'modified': False + 'ff0000_groups': 0, # Count of #FF0000 groups processed + 'other_red_groups': 0, # Count of other red-style groups processed + 'elements_modified': 0, # Total elements modified + 'modified': False # Whether file was modified } # Process all group elements for g in root.findall('.//svg:g', namespaces): - stroke = g.get('stroke') + stroke = g.get('stroke', '').upper() # Normalize to uppercase for comparison - if stroke == "#ffe31b": - stats['ffe31b_groups'] += 1 + # Process #FF0000 red groups + if stroke == "#FF0000": + stats['ff0000_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 + # Remove group attributes: stroke, stroke-width, stroke-linejoin 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') + # Modify path children: remove stroke-width, set new style + for child in g.findall('.//svg:path', namespaces): + if 'stroke-width' in child.attrib: + del child.attrib['stroke-width'] + stats['modified'] = True + + # Set new style for red stroke with 2px width + child.set('style', 'stroke:#FF0000;stroke-width:2px') stats['elements_modified'] += 1 stats['modified'] = True + # Process other groups with red color in style attributes else: - # Handle groups without specific stroke color - stats['other_groups_processed'] += 1 - - # Process elements with style="stroke:#ec2525;" + # Process elements with style="stroke:#FF0000;" + red_elements_found = False for child in g.findall('.//svg:*[@style]', namespaces): style = child.get('style', '') - if 'stroke:#ec2525;' in style: - # Remove stroke-width if exists + if 'stroke:#FF0000;' in style: + red_elements_found = True + + # Remove stroke-width attribute 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;') + # Update the style attribute with standardized format + child.set('style', 'stroke:#FF0000;stroke-width:2px;') stats['elements_modified'] += 1 stats['modified'] = True + + if red_elements_found: + stats['other_red_groups'] += 1 - # Save changes if modified + # Save changes if modifications were made if stats['modified']: xml_str = ET.tostring(root, encoding='unicode') xml_str = xml_str.replace('><', '>\n<').replace('', '\n') @@ -106,11 +99,19 @@ def main(): """ Main processing function """ - # Configure paths - json_path=os.environ.get("JSON_PATH_TEFBOGEN","JSON") - json_file_path = os.path.join(json_path,"1_TEF_Boegen_input.json") - svg_folder_path = os.environ.get("SVG_PATH","svg") + # Configure paths from environment variables + json_path = os.environ.get("JSON_PATH_TEFBOGEN", "JSON") + json_file_path = os.path.join(json_path, "1_TEF_Boegen_output.json") + svg_folder_path = os.environ.get("SVG_PATH", "svg") + # Statistics for final report + total_stats = { + 'files_processed': 0, + 'files_modified': 0, + 'total_ff0000_groups': 0, + 'total_other_red_groups': 0, + 'total_elements_modified': 0 + } try: # Read and parse JSON file @@ -123,6 +124,8 @@ def main(): return print(f"\nFound {len(data)} items in JSON file") + print("Starting XML file processing...") + print("=" * 60) # Process each item in the JSON array for index, item in enumerate(data, 1): @@ -146,6 +149,7 @@ def main(): continue print(f" Found XML file: {xml_path}") + total_stats['files_processed'] += 1 # Process the XML file stats = process_xml_file(xml_path) @@ -153,22 +157,40 @@ def main(): 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']}") + print(" ✓ File successfully modified") + total_stats['files_modified'] += 1 + total_stats['total_ff0000_groups'] += stats['ff0000_groups'] + total_stats['total_other_red_groups'] += stats['other_red_groups'] + total_stats['total_elements_modified'] += stats['elements_modified'] + + # Print detailed statistics for this file + if stats['ff0000_groups'] > 0: + print(f" - #FF0000 groups processed: {stats['ff0000_groups']}") + if stats['other_red_groups'] > 0: + print(f" - Other red style groups: {stats['other_red_groups']}") + print(f" - Elements modified: {stats['elements_modified']}") else: - print(" No modifications needed") + print(" - No modifications needed (no red groups found)") - print("\nProcessing complete") + # Generate final comprehensive report + print("\n" + "=" * 60) + print("PROCESSING SUMMARY REPORT") + print("=" * 60) + print(f"Total files processed: {total_stats['files_processed']}") + print(f"Total files modified: {total_stats['files_modified']}") + print(f"Total #FF0000 groups processed: {total_stats['total_ff0000_groups']}") + print(f"Total other red style groups: {total_stats['total_other_red_groups']}") + print(f"Total elements modified: {total_stats['total_elements_modified']}") + print("=" * 60) except FileNotFoundError: - print("\nError: JSON file not found") + print("\nError: JSON file not found at specified path") except json.JSONDecodeError: - print("\nError: Invalid JSON format") + print("\nError: Invalid JSON format in input file") except Exception as e: print(f"\nUnexpected error: {str(e)}") if __name__ == "__main__": print("SVG XML Batch Modifier - Starting execution") + print("Focus: Processing only red color groups (#FF0000)") main() \ No newline at end of file diff --git a/SVGs/Omniflo/lib/TEFBogen/03_convert_svgs_to_xml_and_update_xml_path_in_props.py b/SVGs/Omniflo/lib/TEFBogen/03_convert_svgs_to_xml_and_update_xml_path_in_props.py new file mode 100644 index 0000000..21f489a --- /dev/null +++ b/SVGs/Omniflo/lib/TEFBogen/03_convert_svgs_to_xml_and_update_xml_path_in_props.py @@ -0,0 +1,194 @@ +import os +import re +import json +from xml.etree import ElementTree as ET +from xml.dom import minidom + +def extract_sivasnr(filename): + """Extract content before _TEFBogen from filename""" + match = re.search(r'^(.+?)_TEFBogen', filename) + return match.group(1) if match else None + +def should_skip_stroke_width(element_attrib): + """Check if element should skip stroke-width setting""" + # Check style attribute + if 'style' in element_attrib: + style = element_attrib['style'].lower() + if 'stroke:none' in style and 'fill:none' in style: + return True + + # Check separate stroke and fill attributes + stroke = element_attrib.get('stroke', '').lower() + fill = element_attrib.get('fill', '').lower() + return stroke == 'none' and fill == 'none' + +def create_xml_structure(svg_root): + """Create target XML structure preserving all elements""" + # Create base structure + new_root = ET.Element("svg", xmlns="http://www.w3.org/2000/svg") + g_layer = ET.SubElement(new_root, "g", transform="rotate(0)") + + # Add inner SVG container + inner_svg = ET.SubElement(g_layer, "svg", { + "viewBox": svg_root.attrib.get("viewBox", "0 0 1000 1000"), + "preserveAspectRatio": "none", + "position": "absolute", + "overflow": "visible" + }) + + # Transfer all content + for elem in svg_root: + if elem.tag.endswith("}g"): + # Process group with namespace + new_g = ET.SubElement(inner_svg, "g", attrib={ + k: v for k, v in elem.attrib.items() + if not k.startswith("xmlns") + }) + + # Process all elements within group + for child in elem: + child_tag = child.tag.split("}")[-1] # Remove namespace + child_attrib = {} + + # Preserve all original attributes (except namespace) + for k, v in child.attrib.items(): + if not k.startswith("xmlns"): + child_attrib[k] = v + + # Only add stroke-width if not stroke:none;fill:none + if not should_skip_stroke_width(child.attrib): + child_attrib["stroke-width"] = "1px" + + # Create element with preserved attributes + ET.SubElement(new_g, child_tag, attrib=child_attrib) + + else: + # Process standalone elements (path, circle, etc.) + elem_tag = elem.tag.split("}")[-1] # Remove namespace + elem_attrib = {} + + # Preserve all original attributes (except namespace) + for k, v in elem.attrib.items(): + if not k.startswith("xmlns"): + elem_attrib[k] = v + + # Only add stroke-width if not stroke:none;fill:none + if not should_skip_stroke_width(elem.attrib): + elem_attrib["stroke-width"] = "1px" + + ET.SubElement(inner_svg, elem_tag, attrib=elem_attrib) + + return new_root + +def format_xml(element): + """Generate formatted XML string""" + # Generate XML with declaration + xml_str = ET.tostring(element, encoding="UTF-8", xml_declaration=True) + + # Pretty format with 2-space indent + dom = minidom.parseString(xml_str) + pretty_xml = dom.toprettyxml(indent=" ", encoding="UTF-8").decode("UTF-8") + + # Remove extra empty lines (preserve structure) + lines = [] + for line in pretty_xml.split("\n"): + if line.strip() or line.lstrip().startswith("