From 352f6b89bed7bc7cdfdccfd7574663c6ac06b1dd Mon Sep 17 00:00:00 2001 From: Yuelin Wang Date: Wed, 16 Jul 2025 15:52:47 +0200 Subject: [PATCH] =?UTF-8?q?Die=20Code=20zur=20automatischen=20Erzeungung?= =?UTF-8?q?=20der=20SVG=20f=C3=BCr=20OFWeiche=20wurde=20funitoniert.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeltaWeiche_1400_700_M_834372400.dwg | Bin 42968 -> 40815 bytes .../DeltaWeiche_1600_800_M_834372403.dwg | Bin 43419 -> 42552 bytes .../SSG/shapes/props/834342001.txt | 2 +- .../SSG/shapes/props/834342002.txt | 2 +- .../SSG/shapes/props/834372004.txt | 2 +- .../SSG/shapes/props/834372005.txt | 2 +- .../SSG/shapes/props/834372010.txt | 2 +- .../SSG/shapes/props/834372011.txt | 2 +- .../SSG/shapes/props/834372024.txt | 2 +- .../SSG/shapes/props/834372025.txt | 2 +- .../SSG/shapes/props/834372030.txt | 2 +- .../SSG/shapes/props/834372031.txt | 2 +- .../SSG/shapes/props/834372050.txt | 2 +- .../SSG/shapes/props/834372051.txt | 2 +- .../SSG/shapes/props/834372400.txt | 8 +- .../SSG/shapes/props/834372401.txt | 8 +- .../SSG/shapes/props/834372403.txt | 8 +- .../SSG/shapes/props/834372404.txt | 8 +- .../SSG/shapes/props/834372420.txt | 46 ++-- .../SSG/shapes/props/834372421.txt | 46 ++-- .../SSG/shapes/props/OFDeltaWeiche.txt | 8 +- Editor2DLibrary/SSG/shapes/svg/834342001.xml | 17 +- Editor2DLibrary/SSG/shapes/svg/834342002.xml | 17 +- Editor2DLibrary/SSG/shapes/svg/834342011.xml | 17 +- Editor2DLibrary/SSG/shapes/svg/834342012.xml | 17 +- Editor2DLibrary/SSG/shapes/svg/834342100.xml | 16 +- Editor2DLibrary/SSG/shapes/svg/834342101.xml | 16 +- Editor2DLibrary/SSG/shapes/svg/834342200.xml | 18 +- Editor2DLibrary/SSG/shapes/svg/834342201.xml | 18 +- Editor2DLibrary/SSG/shapes/svg/834372001.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372002.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372004.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372005.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372007.xml | 25 +- Editor2DLibrary/SSG/shapes/svg/834372008.xml | 25 +- Editor2DLibrary/SSG/shapes/svg/834372010.xml | 25 +- Editor2DLibrary/SSG/shapes/svg/834372011.xml | 25 +- Editor2DLibrary/SSG/shapes/svg/834372021.xml | 27 +- Editor2DLibrary/SSG/shapes/svg/834372022.xml | 27 +- Editor2DLibrary/SSG/shapes/svg/834372024.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372025.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372027.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372028.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372030.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372031.xml | 29 +- Editor2DLibrary/SSG/shapes/svg/834372047.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372048.xml | 33 ++- Editor2DLibrary/SSG/shapes/svg/834372050.xml | 31 ++- Editor2DLibrary/SSG/shapes/svg/834372051.xml | 31 ++- Editor2DLibrary/SSG/shapes/svg/834372100.xml | 34 +-- Editor2DLibrary/SSG/shapes/svg/834372101.xml | 34 +-- Editor2DLibrary/SSG/shapes/svg/834372103.xml | 30 +-- Editor2DLibrary/SSG/shapes/svg/834372104.xml | 30 +-- Editor2DLibrary/SSG/shapes/svg/834372106.xml | 38 +-- Editor2DLibrary/SSG/shapes/svg/834372107.xml | 38 +-- Editor2DLibrary/SSG/shapes/svg/834372109.xml | 34 +-- Editor2DLibrary/SSG/shapes/svg/834372110.xml | 34 +-- Editor2DLibrary/SSG/shapes/svg/834372115.xml | 35 +-- Editor2DLibrary/SSG/shapes/svg/834372116.xml | 38 +-- Editor2DLibrary/SSG/shapes/svg/834372200.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372201.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372203.xml | 32 +-- Editor2DLibrary/SSG/shapes/svg/834372204.xml | 32 +-- Editor2DLibrary/SSG/shapes/svg/834372206.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372207.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372209.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372210.xml | 40 +-- Editor2DLibrary/SSG/shapes/svg/834372215.xml | 41 +-- Editor2DLibrary/SSG/shapes/svg/834372216.xml | 44 ++-- Editor2DLibrary/SSG/shapes/svg/834372400.xml | 35 +-- Editor2DLibrary/SSG/shapes/svg/834372401.xml | 35 +-- Editor2DLibrary/SSG/shapes/svg/834372403.xml | 51 ++-- Editor2DLibrary/SSG/shapes/svg/834372404.xml | 51 ++-- Editor2DLibrary/SSG/shapes/svg/834372420.xml | 60 +++-- Editor2DLibrary/SSG/shapes/svg/834372421.xml | 60 +++-- MAIN_SSG.rdx | 6 +- .../Bogen/Umbrennung fรผr neue 2D shapes.xlsx | Bin 11776 -> 0 bytes .../DeltaWeiche_1400_700_M_834372400.svg | 26 +- .../DeltaWeiche_1600_800_M_834372403.svg | 34 +-- SVGs/Omniflo/bin/01_update_props_OFWeiche.bat | 25 ++ ...bat => 02_svg_optimizer_easy_OFWeiche.bat} | 10 +- ...imze.bat => 02_svg_optimzier_OFWeiche.bat} | 8 +- ...pdate_xml_and_props_in_SSGLib_OFWeiche.bat | 23 ++ .../bin/04_copy_SSG_folder_confirm.bat | 13 + SVGs/Omniflo/bin/setenv.bat | 9 +- .../01_props_step1_omniflo_weichen.py} | 98 ++++++- ...e_dimensions_and_add_connection_points.py} | 26 +- ...ensions_and_connection_points_in_props.py} | 4 +- ...2_svg_step1_convert_polylines_to_lines.py} | 102 ++------ ...svg_step2_find_and_mark_auxiliary_lines.py | 247 ++++++++++++++++++ .../02_svg_step3_scaler.py} | 14 +- .../02_svg_step4_format_optimization.py} | 2 +- ...utomatic_svg_generation_for_P_switches.py} | 8 +- ...vgs_to_xml_and_update_xml_path_in_props.py | 194 ++++++++++++++ .../OFWeiche/json/omniflo_weichen.json | 54 ++-- .../OFWeiche/json/omniflo_weichen_output.json | 154 ++++++----- .../python/OFWeiche/6_update_XML_Strich_WK.py | 69 ----- SVGs/Omniflo/python/OFWeiche/run_OFWeiche.bat | 15 -- 98 files changed, 1895 insertions(+), 1152 deletions(-) delete mode 100644 SVGs/Omniflo/Bogen/Umbrennung fรผr neue 2D shapes.xlsx create mode 100644 SVGs/Omniflo/bin/01_update_props_OFWeiche.bat rename SVGs/Omniflo/bin/{optimize_easy.bat => 02_svg_optimizer_easy_OFWeiche.bat} (77%) rename SVGs/Omniflo/bin/{01_svg_optimze.bat => 02_svg_optimzier_OFWeiche.bat} (55%) create mode 100644 SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat create mode 100644 SVGs/Omniflo/bin/04_copy_SSG_folder_confirm.bat rename SVGs/Omniflo/{python/OFWeiche/1_omniflo_weichen.py => lib/OFWeiche/01_props_step1_omniflo_weichen.py} (82%) rename SVGs/Omniflo/{python/OFWeiche/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py => lib/OFWeiche/01_props_step2_calculations_to_standardize_the_dimensions_and_add_connection_points.py} (87%) rename SVGs/Omniflo/{python/OFWeiche/3_update_dimensions_and_connection_points_in_props.py => lib/OFWeiche/01_props_step3_update_dimensions_and_connection_points_in_props.py} (97%) rename SVGs/Omniflo/lib/{3_svg_optimizer_Step1.py => OFWeiche/02_svg_step1_convert_polylines_to_lines.py} (85%) create mode 100644 SVGs/Omniflo/lib/OFWeiche/02_svg_step2_find_and_mark_auxiliary_lines.py rename SVGs/Omniflo/lib/{3_svg_scaler_Step2.py => OFWeiche/02_svg_step3_scaler.py} (94%) rename SVGs/Omniflo/lib/{3_svg_scaler_Step3.py => OFWeiche/02_svg_step4_format_optimization.py} (98%) rename SVGs/Omniflo/{Weichen/automatisch_P_Weichen_Erzeugung.py => lib/OFWeiche/02_svg_step5_automatic_svg_generation_for_P_switches.py} (92%) create mode 100644 SVGs/Omniflo/lib/OFWeiche/03_convert_svgs_to_xml_and_update_xml_path_in_props.py rename SVGs/Omniflo/{python => lib}/OFWeiche/json/omniflo_weichen.json (98%) rename SVGs/Omniflo/{python => lib}/OFWeiche/json/omniflo_weichen_output.json (98%) delete mode 100644 SVGs/Omniflo/python/OFWeiche/6_update_XML_Strich_WK.py delete mode 100644 SVGs/Omniflo/python/OFWeiche/run_OFWeiche.bat diff --git a/CAD/OmnifloCAD/DeltaWeiche/DeltaWeiche_1400_700_M_834372400.dwg b/CAD/OmnifloCAD/DeltaWeiche/DeltaWeiche_1400_700_M_834372400.dwg index 344e7a5bab6461e678b5d488e821696a3d11c1eb..9dd6ba8b91bc4f46452a613455bc0807171debba 100644 GIT binary patch delta 7189 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 FzW_TpK8OGS delta 9234 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 G@BBZP0m}gZ diff --git a/CAD/OmnifloCAD/DeltaWeiche/DeltaWeiche_1600_800_M_834372403.dwg b/CAD/OmnifloCAD/DeltaWeiche/DeltaWeiche_1600_800_M_834372403.dwg index 5b1a1e5367514f401d37324f288f7f998e84fddf..f3b65791a459d25cc4897794af781a9515c95a13 100644 GIT binary patch delta 6806 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 DQPHh7 delta 7250 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 - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342002.xml b/Editor2DLibrary/SSG/shapes/svg/834342002.xml index 66d2af0..51bba23 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342002.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342002.xml @@ -1,13 +1,14 @@ + - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342011.xml b/Editor2DLibrary/SSG/shapes/svg/834342011.xml index 42d8955..1f8c561 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342011.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342011.xml @@ -1,13 +1,14 @@ + - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342012.xml b/Editor2DLibrary/SSG/shapes/svg/834342012.xml index 43e94ee..556a162 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342012.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342012.xml @@ -1,13 +1,14 @@ + - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342100.xml b/Editor2DLibrary/SSG/shapes/svg/834342100.xml index 52a6b89..71bafa3 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342100.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342100.xml @@ -1,14 +1,14 @@ -๏ปฟ + - - - - - - - + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342101.xml b/Editor2DLibrary/SSG/shapes/svg/834342101.xml index 05e2644..1e819a0 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342101.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342101.xml @@ -1,14 +1,14 @@ -๏ปฟ + - - - - - - - + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342200.xml b/Editor2DLibrary/SSG/shapes/svg/834342200.xml index 66b8d05..0d9b363 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342200.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342200.xml @@ -1,15 +1,15 @@ -๏ปฟ + - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834342201.xml b/Editor2DLibrary/SSG/shapes/svg/834342201.xml index 798fd25..cc3c899 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834342201.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834342201.xml @@ -1,15 +1,15 @@ -๏ปฟ + - - - - - - - - + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372001.xml b/Editor2DLibrary/SSG/shapes/svg/834372001.xml index cb04209..dda59c7 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372001.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372001.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372002.xml b/Editor2DLibrary/SSG/shapes/svg/834372002.xml index e0c9b11..17d4552 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372002.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372002.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372004.xml b/Editor2DLibrary/SSG/shapes/svg/834372004.xml index ce23933..eab39e7 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372004.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372004.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372005.xml b/Editor2DLibrary/SSG/shapes/svg/834372005.xml index 5abba61..f836445 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372005.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372005.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372007.xml b/Editor2DLibrary/SSG/shapes/svg/834372007.xml index dc3c59b..70299e6 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372007.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372007.xml @@ -1,18 +1,17 @@ + - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372008.xml b/Editor2DLibrary/SSG/shapes/svg/834372008.xml index 51bdfeb..ff57d98 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372008.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372008.xml @@ -1,18 +1,17 @@ + - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372010.xml b/Editor2DLibrary/SSG/shapes/svg/834372010.xml index 1e9e18a..5da14e6 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372010.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372010.xml @@ -1,18 +1,17 @@ + - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372011.xml b/Editor2DLibrary/SSG/shapes/svg/834372011.xml index 2ca6e5b..4cb3584 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372011.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372011.xml @@ -1,18 +1,17 @@ + - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372021.xml b/Editor2DLibrary/SSG/shapes/svg/834372021.xml index 736b5e3..b33fb94 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372021.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372021.xml @@ -1,18 +1,19 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372022.xml b/Editor2DLibrary/SSG/shapes/svg/834372022.xml index f047108..406788c 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372022.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372022.xml @@ -1,18 +1,19 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372024.xml b/Editor2DLibrary/SSG/shapes/svg/834372024.xml index 896cae2..2271763 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372024.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372024.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372025.xml b/Editor2DLibrary/SSG/shapes/svg/834372025.xml index ccfd778..33b8631 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372025.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372025.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372027.xml b/Editor2DLibrary/SSG/shapes/svg/834372027.xml index 1c4c265..269bbec 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372027.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372027.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372028.xml b/Editor2DLibrary/SSG/shapes/svg/834372028.xml index bc33392..c3d4456 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372028.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372028.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372030.xml b/Editor2DLibrary/SSG/shapes/svg/834372030.xml index 128dd29..4e27850 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372030.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372030.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372031.xml b/Editor2DLibrary/SSG/shapes/svg/834372031.xml index 7814189..b87e0d1 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372031.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372031.xml @@ -1,18 +1,21 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372047.xml b/Editor2DLibrary/SSG/shapes/svg/834372047.xml index 52bdac2..9244557 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372047.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372047.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372048.xml b/Editor2DLibrary/SSG/shapes/svg/834372048.xml index 75a60b1..1e2a38a 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372048.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372048.xml @@ -1,18 +1,25 @@ + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372050.xml b/Editor2DLibrary/SSG/shapes/svg/834372050.xml index 91cd47d..e677a53 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372050.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372050.xml @@ -1,16 +1,25 @@ + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372051.xml b/Editor2DLibrary/SSG/shapes/svg/834372051.xml index 2e718b0..50611cd 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372051.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372051.xml @@ -1,16 +1,25 @@ + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372100.xml b/Editor2DLibrary/SSG/shapes/svg/834372100.xml index 2a73680..2c250b3 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372100.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372100.xml @@ -1,20 +1,24 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372101.xml b/Editor2DLibrary/SSG/shapes/svg/834372101.xml index 8896aa3..ab7a90c 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372101.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372101.xml @@ -1,20 +1,24 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372103.xml b/Editor2DLibrary/SSG/shapes/svg/834372103.xml index 8a8717d..2cdbf3e 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372103.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372103.xml @@ -1,20 +1,20 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372104.xml b/Editor2DLibrary/SSG/shapes/svg/834372104.xml index a62502c..1e2ade7 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372104.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372104.xml @@ -1,20 +1,20 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372106.xml b/Editor2DLibrary/SSG/shapes/svg/834372106.xml index 2398ae0..07164ef 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372106.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372106.xml @@ -1,20 +1,28 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372107.xml b/Editor2DLibrary/SSG/shapes/svg/834372107.xml index a96ddde..1d15ffb 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372107.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372107.xml @@ -1,20 +1,28 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372109.xml b/Editor2DLibrary/SSG/shapes/svg/834372109.xml index 9b39da3..00e4b56 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372109.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372109.xml @@ -1,20 +1,24 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372110.xml b/Editor2DLibrary/SSG/shapes/svg/834372110.xml index a306232..b0fef28 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372110.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372110.xml @@ -1,20 +1,24 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372115.xml b/Editor2DLibrary/SSG/shapes/svg/834372115.xml index 3742f35..55328ce 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372115.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372115.xml @@ -1,27 +1,28 @@ + - - + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372116.xml b/Editor2DLibrary/SSG/shapes/svg/834372116.xml index 4f159de..036fdb3 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372116.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372116.xml @@ -1,20 +1,28 @@ -๏ปฟ + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372200.xml b/Editor2DLibrary/SSG/shapes/svg/834372200.xml index 022cfda..9f76045 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372200.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372200.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372201.xml b/Editor2DLibrary/SSG/shapes/svg/834372201.xml index 09c4bbb..f99c2b7 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372201.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372201.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372203.xml b/Editor2DLibrary/SSG/shapes/svg/834372203.xml index 32c8feb..c75e1a5 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372203.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372203.xml @@ -1,21 +1,21 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372204.xml b/Editor2DLibrary/SSG/shapes/svg/834372204.xml index 5cb6827..64df862 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372204.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372204.xml @@ -1,21 +1,21 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372206.xml b/Editor2DLibrary/SSG/shapes/svg/834372206.xml index 72ef027..91bda30 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372206.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372206.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372207.xml b/Editor2DLibrary/SSG/shapes/svg/834372207.xml index 5c995b7..d7014e7 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372207.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372207.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372209.xml b/Editor2DLibrary/SSG/shapes/svg/834372209.xml index 1242623..c7f076f 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372209.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372209.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372210.xml b/Editor2DLibrary/SSG/shapes/svg/834372210.xml index 655c79f..1e93722 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372210.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372210.xml @@ -1,21 +1,29 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372215.xml b/Editor2DLibrary/SSG/shapes/svg/834372215.xml index 55b21b1..e3704f0 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372215.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372215.xml @@ -1,32 +1,33 @@ + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372216.xml b/Editor2DLibrary/SSG/shapes/svg/834372216.xml index a8ca62a..ac785f4 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372216.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372216.xml @@ -1,21 +1,33 @@ -๏ปฟ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372400.xml b/Editor2DLibrary/SSG/shapes/svg/834372400.xml index 5cc2f42..542f62a 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372400.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372400.xml @@ -1,20 +1,25 @@ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372401.xml b/Editor2DLibrary/SSG/shapes/svg/834372401.xml index 7c81067..34ea74f 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372401.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372401.xml @@ -1,20 +1,25 @@ + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372403.xml b/Editor2DLibrary/SSG/shapes/svg/834372403.xml index 82c7acf..13e5bce 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372403.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372403.xml @@ -1,24 +1,37 @@ + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372404.xml b/Editor2DLibrary/SSG/shapes/svg/834372404.xml index 0545aa3..b4edce6 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372404.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372404.xml @@ -1,24 +1,37 @@ + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372420.xml b/Editor2DLibrary/SSG/shapes/svg/834372420.xml index f48a3c0..5e60423 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372420.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372420.xml @@ -1,28 +1,42 @@ -๏ปฟ + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Editor2DLibrary/SSG/shapes/svg/834372421.xml b/Editor2DLibrary/SSG/shapes/svg/834372421.xml index a45b741..0ca7e78 100644 --- a/Editor2DLibrary/SSG/shapes/svg/834372421.xml +++ b/Editor2DLibrary/SSG/shapes/svg/834372421.xml @@ -1,28 +1,42 @@ -๏ปฟ + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MAIN_SSG.rdx b/MAIN_SSG.rdx index a1c6ffe..82d9c5e 100644 --- a/MAIN_SSG.rdx +++ b/MAIN_SSG.rdx @@ -1,6 +1,6 @@ ๏ปฟ - + @@ -26466,7 +26466,9 @@ SSGConnectionPoint.x_M - + + $=$Shape_Prototype.OFWeicheDefinition.Hoehe + $=$Shape_Prototype.OFWeicheDefinition.KurvenWinkel diff --git a/SVGs/Omniflo/Bogen/Umbrennung fรผr neue 2D shapes.xlsx b/SVGs/Omniflo/Bogen/Umbrennung fรผr neue 2D shapes.xlsx deleted file mode 100644 index ef4ea72d402f0c62a4c168a91f885f6b5e69e792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11776 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 D$1i(v diff --git a/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1400_700_M_834372400.svg b/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1400_700_M_834372400.svg index 4a1f8a7..9331391 100644 --- a/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1400_700_M_834372400.svg +++ b/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1400_700_M_834372400.svg @@ -6,22 +6,22 @@ - - - - + + + + - - + + - - - - - - - + + + + + + + diff --git a/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1600_800_M_834372403.svg b/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1600_800_M_834372403.svg index 75c0005..5692568 100644 --- a/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1600_800_M_834372403.svg +++ b/SVGs/Omniflo/Weichen/neu_original_backup/DeltaWeiche_1600_800_M_834372403.svg @@ -6,34 +6,34 @@ - + - + - + - - - + + + - + - - + + - - - - - - - - + + + + + + + + diff --git a/SVGs/Omniflo/bin/01_update_props_OFWeiche.bat b/SVGs/Omniflo/bin/01_update_props_OFWeiche.bat new file mode 100644 index 0000000..f21b4b6 --- /dev/null +++ b/SVGs/Omniflo/bin/01_update_props_OFWeiche.bat @@ -0,0 +1,25 @@ +@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 weichen 2D... +echo calculations to standardize the dimensions and add connection points... +echo update dimensions_and_connection_points_in_props... + +echo "[DEBUG] OFWeiche_PATH: %OFWeiche_PATH%" +echo "[DEBUG] PROPS_PATH: %PROPS_PATH%" +echo "[DEBUG] JSON_PATH: %JSON_PATH%" + +python %OFWeiche_PATH%\01_props_step1_omniflo_weichen.py +python %OFWeiche_PATH%\01_props_step2_calculations_to_standardize_the_dimensions_and_add_connection_points.py +python %OFWeiche_PATH%\01_props_step3_update_dimensions_and_connection_points_in_props.py + +pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/optimize_easy.bat b/SVGs/Omniflo/bin/02_svg_optimizer_easy_OFWeiche.bat similarity index 77% rename from SVGs/Omniflo/bin/optimize_easy.bat rename to SVGs/Omniflo/bin/02_svg_optimizer_easy_OFWeiche.bat index 2aed708..743e178 100644 --- a/SVGs/Omniflo/bin/optimize_easy.bat +++ b/SVGs/Omniflo/bin/02_svg_optimizer_easy_OFWeiche.bat @@ -34,10 +34,14 @@ if %ERRORLEVEL% equ 2 set "arg=--tefbogen" if %ERRORLEVEL% equ 3 set "arg=--weichen" if %ERRORLEVEL% equ 4 set "arg=--tefweichen" + REM Execute Python script with selected argument -python %RD_CONF_LIB%\3_svg_optimizer_Step1.py %* -python %RD_CONF_LIB%\3_svg_scaler_Step2.py %* -python %RD_CONF_LIB%\3_svg_scaler_Step3.py %* +python %OFWeiche_PATH%\02_svg_step1_convert_polylines_to_lines.py %arg% +python %OFWeiche_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py %* +python %OFWeiche_PATH%\02_svg_step3_scaler.py %* +python %OFWeiche_PATH%\02_svg_step4_format_optimization.py %* +python %OFWeiche_PATH%\02_svg_step5_automatic_svg_generation_for_P_switches.py %* + REM Check execution status if %ERRORLEVEL% equ 0 ( echo SVG optimization completed successfully! diff --git a/SVGs/Omniflo/bin/01_svg_optimze.bat b/SVGs/Omniflo/bin/02_svg_optimzier_OFWeiche.bat similarity index 55% rename from SVGs/Omniflo/bin/01_svg_optimze.bat rename to SVGs/Omniflo/bin/02_svg_optimzier_OFWeiche.bat index 05ac0c7..48400cb 100644 --- a/SVGs/Omniflo/bin/01_svg_optimze.bat +++ b/SVGs/Omniflo/bin/02_svg_optimzier_OFWeiche.bat @@ -13,9 +13,11 @@ if %ERRORLEVEL% neq 0 ( :: Run the Python script echo Running SVG optimizer... -python %RD_CONF_LIB%\3_svg_optimizer_Step1.py %* -python %RD_CONF_LIB%\3_svg_scaler_Step2.py %* -python %RD_CONF_LIB%\3_svg_scaler_Step3.py %* +python %OFWeiche_PATH%\02_svg_step1_convert_polylines_to_lines.py %arg% +python %OFWeiche_PATH%\02_svg_step2_find_and_mark_auxiliary_lines.py %* +python %OFWeiche_PATH%\02_svg_step3_scaler.py %* +python %OFWeiche_PATH%\02_svg_step4_format_optimization.py %* +python %OFWeiche_PATH%\02_svg_step5_automatic_svg_generation_for_P_switches.py %* :: Check if Python script succeeded if %ERRORLEVEL% equ 0 ( echo SVG optimization completed successfully 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 new file mode 100644 index 0000000..5b9465a --- /dev/null +++ b/SVGs/Omniflo/bin/03_update_xml_and_props_in_SSGLib_OFWeiche.bat @@ -0,0 +1,23 @@ +@echo off +call setenv.bat +setlocal + +:: Check if Python is available +where python >nul 2>&1 +if %ERRORLEVEL% neq 0 ( + echo Error: Python is not found in your PATH + pause + exit /b 1 +) + +:: Run the Python script +echo Running convert svgs to xml and update xml path in Props... + +echo "[DEBUG] OFWeiche_PATH: %OFWeiche_PATH%" +echo "[DEBUG] PROPS_PATH: %PROPS_PATH%" +echo "[DEBUG] SVG_PATH: %SVG_PATH%" +echo "[DEBUG] RD_CONF_OUTPUT: %RD_CONF_OUTPUT%" + +python %OFWeiche_PATH%\03_convert_svgs_to_xml_and_update_xml_path_in_props.py + +pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/04_copy_SSG_folder_confirm.bat b/SVGs/Omniflo/bin/04_copy_SSG_folder_confirm.bat new file mode 100644 index 0000000..59915cb --- /dev/null +++ b/SVGs/Omniflo/bin/04_copy_SSG_folder_confirm.bat @@ -0,0 +1,13 @@ +@echo off +setlocal + +echo Copy operation: +echo Source folder: C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG +echo Destination folder: C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\Editor2DLibrary\SSG +echo/ +choice /c YN /m "Confirm overwrite? (Y/N)" +if errorlevel 2 exit /b + +robocopy "C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG" "C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\Editor2DLibrary\SSG" /E /COPY:DAT /IS /NP +echo Operation complete! +pause \ No newline at end of file diff --git a/SVGs/Omniflo/bin/setenv.bat b/SVGs/Omniflo/bin/setenv.bat index 266226c..d257882 100644 --- a/SVGs/Omniflo/bin/setenv.bat +++ b/SVGs/Omniflo/bin/setenv.bat @@ -6,10 +6,17 @@ set RD_CONF=%cd% set RD_CONF_BIN=%RD_CONF%\bin set RD_CONF_CFG=%RD_CONF%\cfg set RD_CONF_WORK=%RD_CONF%\work -set RD_CONF_OUTPUT=%RD_CONF%\Weichen\outputdir +set RD_CONF_OUTPUT_OFWEICHEN=%RD_CONF%\Weichen\outputdir set RD_CONF_LIB=%RD_CONF%\lib + +set "OFWeiche_PATH=%RD_CONF%\lib\OFWeiche" +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=%OFWeiche_PATH%\json" + + set RD_CONF_BOGEN=%RD_CONF%\Bogen set RD_CONF_TEFBOGEN=%RD_CONF%\TEFBogen set RD_CONF_WEICHEN=%RD_CONF%\Weichen\neu_original_backup diff --git a/SVGs/Omniflo/python/OFWeiche/1_omniflo_weichen.py b/SVGs/Omniflo/lib/OFWeiche/01_props_step1_omniflo_weichen.py similarity index 82% rename from SVGs/Omniflo/python/OFWeiche/1_omniflo_weichen.py rename to SVGs/Omniflo/lib/OFWeiche/01_props_step1_omniflo_weichen.py index add4a7e..3891f22 100644 --- a/SVGs/Omniflo/python/OFWeiche/1_omniflo_weichen.py +++ b/SVGs/Omniflo/lib/OFWeiche/01_props_step1_omniflo_weichen.py @@ -16,7 +16,7 @@ def modify_json_values(json_file): process_einzelweiche_items(data, WeichenKoerperWidth, WeichenkProfileWidth, BogenProfileWidth, WeichenGerade) process_doppelweiche_items(data, BogenProfileWidth, WeichenGerade) process_deltaweiche_items(data, WeichenkProfileWidth) - + process_sternweiche_items(data) # Save changes without confirmation with open(json_file, 'w', encoding='utf-8') as f: json.dump(data, f, indent=2, ensure_ascii=False) @@ -219,9 +219,7 @@ def process_doppelweiche_items(data, BogenProfileWidth, WeichenGerade): item["OFWeiche_CP1_y_mm"] = round(item["Objekt_height_mm"], 3) item["OFWeiche_CP2_x_mm"] = round(BogenProfileWidth/2 * math.cos(angle_rad), 3) item["OFWeiche_CP2_y_mm"] = round(BogenProfileWidth/2 * math.sin(angle_rad), 3) - item["OFWeiche_CP3_x_mm"] = round( - BogenProfileWidth/2 * math.cos(angle_rad) + - item["OFWeiche_center_line_width_mm"], 3) + item["OFWeiche_CP3_x_mm"] = round(BogenProfileWidth/2 * math.cos(angle_rad) + item["OFWeiche_center_line_width_mm"], 3) item["OFWeiche_CP3_y_mm"] = item["OFWeiche_CP2_y_mm"] # Update items with identical ProfilTyp @@ -368,10 +366,10 @@ def process_deltaweiche_items(data, WeichenkProfileWidth): # Calculate control points item["OFWeiche_CP1_x_mm"] = round(item["Objekt_width_mm"]/2, 3) - item["OFWeiche_CP1_y_mm"] = 0 + item["OFWeiche_CP1_y_mm"] = round(item["Objekt_height_mm"], 3) item["OFWeiche_CP2_x_mm"] = 0 - item["OFWeiche_CP2_y_mm"] = round(item["OFWeiche_center_line_height_mm"], 3) - item["OFWeiche_CP3_x_mm"] = round(item["OFWeiche_center_line_width_mm"], 3) + item["OFWeiche_CP2_y_mm"] = round(WeichenkProfileWidth/2+32.5437 , 3) + item["OFWeiche_CP3_x_mm"] = round(item["Objekt_width_mm"], 3) item["OFWeiche_CP3_y_mm"] = item["OFWeiche_CP2_y_mm"] # Update items with identical ProfilTyp @@ -423,7 +421,91 @@ def process_deltaweiche_items(data, WeichenkProfileWidth): for field in fields_to_copy: similar[field] = item[field] - +def process_sternweiche_items(data): + # Filter sternweiche type items + filtered_items = [ + item for item in data + if (item.get("WeichenTyp") == "Sternweiche" and + item.get("Schaltungstyp") == "M" and + item.get("SivasnrTEF") is None and + str(item.get("Sivasnr", "")).isdigit()) + ] + + print(f"\nFound {len(filtered_items)} sternweiche type records") + + for item in filtered_items: + # Calculate related values + if (item["OFWeiche_center_line_width_mm"] is not None and + item["OFWeiche_center_line_height_mm"] is not None): + + # Calculate basic dimensions + item["Objekt_width_mm"] = round(item["OFWeiche_center_line_width_mm"], 3) + item["Objekt_height_mm"] = round(item["OFWeiche_center_line_height_mm"], 3) + + # Calculate control points + + item["OFWeiche_CP1_x_mm"] = round(item["Objekt_width_mm"]/2, 3) + item["OFWeiche_CP1_y_mm"] = round(item["Objekt_height_mm"], 3) + item["OFWeiche_CP2_x_mm"] = 0 + item["OFWeiche_CP2_y_mm"] = round(item["OFWeiche_center_line_height_mm"]/2, 3) + item["OFWeiche_CP3_x_mm"] = round(item["OFWeiche_center_line_width_mm"], 3) + item["OFWeiche_CP3_y_mm"] = item["OFWeiche_CP2_y_mm"] + item["OFWeiche_CP4_x_mm"] = item["OFWeiche_CP1_x_mm"] + item["OFWeiche_CP4_y_mm"] = 0 + + # Update items with identical ProfilTyp + current_profil = item["ProfilTyp"] + exact_matches = [x for x in data + if x["ProfilTyp"] == current_profil and + x is not item and + x.get("SivasnrTEF") is None] + + if exact_matches: + for match in exact_matches: + fields_to_copy = [ + "OFWeiche_center_line_width_mm", + "OFWeiche_center_line_height_mm", + "Objekt_width_mm", + "Objekt_height_mm", + "OFWeiche_CP1_x_mm", + "OFWeiche_CP1_y_mm", + "OFWeiche_CP2_x_mm", + "OFWeiche_CP2_y_mm", + "OFWeiche_CP3_x_mm", + "OFWeiche_CP3_y_mm", + "OFWeiche_CP4_x_mm", + "OFWeiche_CP4_y_mm" + ] + + for field in fields_to_copy: + match[field] = item[field] + + # Find similar items (P-type) + if "WEICHE S C STERN" in item["ProfilTyp"]: + similar_profil = item["ProfilTyp"].replace("KPL. MIT M", "KPL. MIT P") + + similar_items = [x for x in data + if x["ProfilTyp"] == similar_profil and + x.get("SivasnrTEF") is None] + + for similar in similar_items: + fields_to_copy = [ + "OFWeiche_center_line_width_mm", + "OFWeiche_center_line_height_mm", + "Objekt_width_mm", + "Objekt_height_mm", + "OFWeiche_CP1_x_mm", + "OFWeiche_CP1_y_mm", + "OFWeiche_CP2_x_mm", + "OFWeiche_CP2_y_mm", + "OFWeiche_CP3_x_mm", + "OFWeiche_CP3_y_mm", + "OFWeiche_CP4_x_mm", + "OFWeiche_CP4_y_mm" + ] + + for field in fields_to_copy: + similar[field] = item[field] if __name__ == "__main__": json_path = os.environ.get("JSON_PATH", "JSON") input_filename = os.path.join(json_path, "omniflo_weichen.json") diff --git a/SVGs/Omniflo/python/OFWeiche/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py b/SVGs/Omniflo/lib/OFWeiche/01_props_step2_calculations_to_standardize_the_dimensions_and_add_connection_points.py similarity index 87% rename from SVGs/Omniflo/python/OFWeiche/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py rename to SVGs/Omniflo/lib/OFWeiche/01_props_step2_calculations_to_standardize_the_dimensions_and_add_connection_points.py index 6d53903..7bbab53 100644 --- a/SVGs/Omniflo/python/OFWeiche/2_calculations_to_standardize_the_dimensions_and_add_connection_points.py +++ b/SVGs/Omniflo/lib/OFWeiche/01_props_step2_calculations_to_standardize_the_dimensions_and_add_connection_points.py @@ -68,7 +68,7 @@ def process_json_file(input_file, output_file): cp2_dir = 180.0 if "-L-" in profil_typ: cp3_dir = round(360 - kurven_winkel, 1) - elif "--" in profil_typ: + elif "-R-" in profil_typ: cp3_dir = round(kurven_winkel, 1) else: cp3_dir = 0.0 # Default if pattern not found @@ -76,6 +76,11 @@ def process_json_file(input_file, output_file): cp1_dir = 180.0 cp2_dir = round(360 - kurven_winkel, 1) cp3_dir = round(kurven_winkel, 1) + elif weichen_typ == "Dreifachweiche": + cp1_dir = 180.0 + cp2_dir = round(360 - kurven_winkel, 1) + cp3_dir = round(kurven_winkel, 1) + elif weichen_typ == "Dreiwegeweiche": cp1_dir = 180.0 cp2_dir = round(360 - kurven_winkel, 1) @@ -91,11 +96,24 @@ def process_json_file(input_file, output_file): "y": cp4_y, "direction": cp4_dir }) - elif weichen_typ == "Dreifachweiche": - cp1_dir = 0 + + # Add common connection points + elif weichen_typ == "Sternweiche": + cp1_dir = 180 cp2_dir = round(360 - kurven_winkel, 1) cp3_dir = round(kurven_winkel, 1) - # Add common connection points + # CP4 exists for Dreiwegeweiche + cp4_x = round(item["OFWeiche_CP4_x_mm"] * scale*scale_RD_W, 3) + cp4_y = round(item["OFWeiche_CP4_y_mm"] * scale*scale_RD_H, 3) + cp4_dir = 0 + + connection_points.append({ + "id": "cp4", + "x": cp4_x, + "y": cp4_y, + "direction": cp4_dir + }) + connection_points.extend([ { "id": "cp1", diff --git a/SVGs/Omniflo/python/OFWeiche/3_update_dimensions_and_connection_points_in_props.py b/SVGs/Omniflo/lib/OFWeiche/01_props_step3_update_dimensions_and_connection_points_in_props.py similarity index 97% rename from SVGs/Omniflo/python/OFWeiche/3_update_dimensions_and_connection_points_in_props.py rename to SVGs/Omniflo/lib/OFWeiche/01_props_step3_update_dimensions_and_connection_points_in_props.py index b12352a..aa535ff 100644 --- a/SVGs/Omniflo/python/OFWeiche/3_update_dimensions_and_connection_points_in_props.py +++ b/SVGs/Omniflo/lib/OFWeiche/01_props_step3_update_dimensions_and_connection_points_in_props.py @@ -186,6 +186,6 @@ if __name__ == "__main__": json_path = os.environ.get("JSON_PATH", "JSON") json_file_path = os.path.join(json_path, "omniflo_weichen_output.json") - txt_files_dir = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props" - + # txt_files_dir = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props" + txt_files_dir= os.environ.get("PROPS_PATH", "props") process_files(json_file_path, txt_files_dir) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/3_svg_optimizer_Step1.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py similarity index 85% rename from SVGs/Omniflo/lib/3_svg_optimizer_Step1.py rename to SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py index b93071b..f5cf436 100644 --- a/SVGs/Omniflo/lib/3_svg_optimizer_Step1.py +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step1_convert_polylines_to_lines.py @@ -177,69 +177,7 @@ def analyze_and_normalize_path(d, path_type, path_id=""): 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.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 - - normalized.append(f"{cmd} {' '.join(map(str, params))}") - - normalized_path = ' '.join(normalized) - return normalized_path if changed else original_d, report, changed ''' + def optimize_svg(input_path, output_path): """Process single SVG file with all optimizations""" try: @@ -443,21 +381,32 @@ if __name__ == '__main__': args = parser.parse_args() in_dir = None - if args.bogen: - in_dir = os.environ.get('RD_CONF_BOGEN') - if args.tefbogen: - in_dir = os.environ.get('RD_CONF_TEFBOGEN') - if args.weichen: - in_dir = os.environ.get('RD_CONF_WEICHEN') - if args.tefweichen: - in_dir = os.environ.get('RD_CONF_TEFWEICHEN') + if args.inputdir: + in_dir = args.inputdir + else: + if args.bogen: + in_dir = os.environ.get('RD_CONF_BOGEN') + elif args.tefbogen: + in_dir = os.environ.get('RD_CONF_TEFBOGEN') + elif args.weichen: + in_dir = os.environ.get('RD_CONF_WEICHEN') + elif args.tefweichen: + in_dir = os.environ.get('RD_CONF_TEFWEICHEN') out_dir = os.environ.get('RD_CONF_WORK') - if args.outputdir: - out_dir = args.outputdir - + if not out_dir: + print("Error: RD_CONF_WORK environment variable must be set as output directory") + exit(1) + # Check if input directory exists + if not os.path.exists(in_dir): + print(f"Error: Input directory does not exist - {in_dir}") + exit(1) + # Ensure output directory exists (create if doesn't exist, ignore if already exists) + os.makedirs(out_dir, exist_ok=True) + + # Processing logic if args.file: filename = args.file input_path = os.path.join(in_dir, filename) @@ -469,5 +418,8 @@ if __name__ == '__main__': if in_dir: """Batch process SVG files""" batch_process_svgs(in_dir, out_dir) + else: - parser.print_help() \ No newline at end of file + print("Error: No input directory specified") + parser.print_help() + exit(1) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/OFWeiche/02_svg_step2_find_and_mark_auxiliary_lines.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step2_find_and_mark_auxiliary_lines.py new file mode 100644 index 0000000..61e56eb --- /dev/null +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step2_find_and_mark_auxiliary_lines.py @@ -0,0 +1,247 @@ +import os +from lxml import etree +import re +from math import sqrt, isclose +from collections import defaultdict + +# Constants +WEICHEN_PROFILE_WIDTH = 42.000 +L_R_TARGET_LENGTH = 55.7237 +DELTA_TARGET_LENGTH = 53.5437 +MATCH_TOLERANCE = 0.1 # Matching tolerance 0.1mm + +def process_svg_files(directory): + print(f"๐Ÿ” Scanning directory: {directory}") + print("-" * 60) + + result_stats = { + 'total_files': 0, + 'L_R_files': {'with_pairs': [], 'no_pairs': [], 'excess_pairs': []}, + 'Delta_files': {'with_triples': [], 'no_triples': [], 'excess_triples': []} + } + + for filename in os.listdir(directory): + if not filename.endswith('.svg'): + continue + + filepath = os.path.join(directory, filename) + result_stats['total_files'] += 1 + + if '_L_' in filename or '_R_' in filename: + print(f"\n๐Ÿ“„ Processing L/R file: {filename}") + process_lr_file(filepath, filename, result_stats) + elif 'DeltaWeiche' in filename: + print(f"\n๐Ÿ“„ Processing DeltaWeiche file: {filename}") + process_delta_file(filepath, filename, result_stats) + + # Print final statistics + print("\n" + "="*60) + print("๐Ÿ“Š Final processing statistics:") + print(f"Total files processed: {result_stats['total_files']}") + + print("\nL/R type files results:") + print(f"โœ… Files with matching path pairs: {len(result_stats['L_R_files']['with_pairs'])}") + print(f" {result_stats['L_R_files']['with_pairs']}") + print(f"โš ๏ธ Files with no matching paths: {len(result_stats['L_R_files']['no_pairs'])}") + print(f" {result_stats['L_R_files']['no_pairs']}") + print(f"โŒ Files with >2 matching paths: {len(result_stats['L_R_files']['excess_pairs'])}") + print(f" {result_stats['L_R_files']['excess_pairs']}") + + print("\nDeltaWeiche type files results:") + print(f"โœ… Files with matching path triples: {len(result_stats['Delta_files']['with_triples'])}") + print(f" {result_stats['Delta_files']['with_triples']}") + print(f"โš ๏ธ Files with no matching paths: {len(result_stats['Delta_files']['no_triples'])}") + print(f" {result_stats['Delta_files']['no_triples']}") + print(f"โŒ Files with โ‰ 3 matching paths: {len(result_stats['Delta_files']['excess_triples'])}") + print(f" {result_stats['Delta_files']['excess_triples']}") + + print("\nโœจ Processing complete!") + +def process_lr_file(filepath, filename, stats): + try: + tree = etree.parse(filepath) + root = tree.getroot() + + # Find all straight line paths + straight_lines = find_straight_lines(root) + print(f" ๐Ÿ“Š Found {len(straight_lines)} straight paths") + + # Print all straight paths + print("\n ๐Ÿ” All straight path details:") + for line in straight_lines: + print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})โ†’" + f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm") + + # Group by length + length_groups = group_lines_by_length(straight_lines) + + # Only print groups with exactly 2 paths + print("\n ๐Ÿ” Same-length path groups (2 paths):") + perfect_pairs = [group for group in length_groups.values() if len(group) == 2] + for group in perfect_pairs: + print(f" โ”Œ Length group ({group[0]['length']:.4f}mm, 2 paths)") + for line in group: + print(f" โ”‚ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})โ†’" + f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})") + print(" โ””" + "โ”€" * 40) + + if len(perfect_pairs) == 1: + pair = perfect_pairs[0] + original_length = pair[0]['length'] + scale_factor = WEICHEN_PROFILE_WIDTH / original_length + print(f"\n ๐Ÿ”„ Scaling calculation (based on length {original_length:.4f}mm):") + print(f" Scale factor: {scale_factor:.4f}") + + # Print scaled lengths + print("\n ๐Ÿ” Scaled path lengths:") + for line in straight_lines: + scaled_len = line['length'] * scale_factor + print(f" Path{line['index']}: {line['length']:.4f}mm โ†’ {scaled_len:.4f}mm") + + # Find path matching target length (within tolerance) + target_path = find_target_path(straight_lines, scale_factor, L_R_TARGET_LENGTH) + if target_path: + target_path['element'].set('style', 'stroke:none;fill:none;') + tree.write(filepath, encoding='utf-8', xml_declaration=True) + print(f"\n โœ… Hid path{target_path['index']} matching target length {L_R_TARGET_LENGTH:.4f}mm (ยฑ{MATCH_TOLERANCE}mm)") + stats['L_R_files']['with_pairs'].append(filename) + else: + print(f"\n โŒ No path found matching {L_R_TARGET_LENGTH:.4f}mm (ยฑ{MATCH_TOLERANCE}mm)") + stats['L_R_files']['no_pairs'].append(filename) + elif len(perfect_pairs) > 1: + print(f"\n โ— Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}") + stats['L_R_files']['excess_pairs'].append(filename) + else: + print("\n โŒ No same-length path pairs found") + stats['L_R_files']['no_pairs'].append(filename) + + except Exception as e: + print(f" โŒ Processing failed: {str(e)}") + +def process_delta_file(filepath, filename, stats): + try: + tree = etree.parse(filepath) + root = tree.getroot() + + # Find all straight line paths + straight_lines = find_straight_lines(root) + print(f" ๐Ÿ“Š Found {len(straight_lines)} straight paths") + + # Print all straight paths + print("\n ๐Ÿ” All straight path details:") + for line in straight_lines: + print(f" Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})โ†’" + f"({line['p2'][0]:.2f},{line['p2'][1]:.2f}) length={line['length']:.4f}mm") + + # Group by length + length_groups = group_lines_by_length(straight_lines) + + # Only print groups with exactly 3 paths + print("\n ๐Ÿ” Same-length path groups (3 paths):") + perfect_triples = [group for group in length_groups.values() if len(group) == 3] + for group in perfect_triples: + print(f" โ”Œ Length group ({group[0]['length']:.4f}mm, 3 paths)") + for line in group: + print(f" โ”‚ Path{line['index']}: ({line['p1'][0]:.2f},{line['p1'][1]:.2f})โ†’" + f"({line['p2'][0]:.2f},{line['p2'][1]:.2f})") + print(" โ””" + "โ”€" * 40) + + if len(perfect_triples) == 1: + triple = perfect_triples[0] + original_length = triple[0]['length'] + scale_factor = WEICHEN_PROFILE_WIDTH / original_length + print(f"\n ๐Ÿ”„ Scaling calculation (based on length {original_length:.4f}mm):") + print(f" Scale factor: {scale_factor:.4f}") + + # Print scaled lengths + print("\n ๐Ÿ” Scaled path lengths:") + for line in straight_lines: + scaled_len = line['length'] * scale_factor + print(f" Path{line['index']}: {line['length']:.4f}mm โ†’ {scaled_len:.4f}mm") + + # Find all paths matching target length (there might be multiple) + target_paths = [line for line in straight_lines + if abs(line['length'] * scale_factor - DELTA_TARGET_LENGTH) < MATCH_TOLERANCE] + + if target_paths: + for target in target_paths: + target['element'].set('style', 'stroke:none;fill:none;') + tree.write(filepath, encoding='utf-8', xml_declaration=True) + print(f"\n โœ… Hid {len(target_paths)} paths matching target length {DELTA_TARGET_LENGTH:.4f}mm (ยฑ{MATCH_TOLERANCE}mm):") + for target in target_paths: + print(f" - Path{target['index']}") + stats['Delta_files']['with_triples'].append(filename) + else: + print(f"\n โŒ No path found matching {DELTA_TARGET_LENGTH:.4f}mm (ยฑ{MATCH_TOLERANCE}mm)") + stats['Delta_files']['no_triples'].append(filename) + elif len(perfect_triples) > 1: + print(f"\n โ— Found multiple same-length path groups: {[len(g) for g in length_groups.values()]}") + stats['Delta_files']['excess_triples'].append(filename) + else: + print("\n โŒ No same-length path groups (3 paths) found") + stats['Delta_files']['no_triples'].append(filename) + + except Exception as e: + print(f" โŒ Processing failed: {str(e)}") + +def find_straight_lines(root): + """Find all straight line paths""" + lines = [] + paths = root.xpath('.//svg:path|.//svg:g//svg:path', + namespaces={'svg': 'http://www.w3.org/2000/svg'}) + + for i, path in enumerate(paths, 1): + d = path.get('d', '').strip() + if not d: + continue + + if is_straight_line(d): + length, (p1, p2) = calculate_line_length(d) + if length > 0: + lines.append({ + 'index': i, + 'element': path, + 'length': round(length, 4), # Keep 4 decimal places + 'p1': (round(p1[0], 2), round(p1[1], 2)), # Coordinates rounded to 2 decimals + 'p2': (round(p2[0], 2), round(p2[1], 2)) + }) + return lines + +def group_lines_by_length(lines): + """Group straight paths by length""" + groups = defaultdict(list) + for line in lines: + groups[line['length']].append(line) + return groups + +def find_target_path(lines, scale_factor, target_length): + """Find path that matches target length after scaling (within tolerance)""" + for line in lines: + scaled_length = line['length'] * scale_factor + if abs(scaled_length - target_length) < MATCH_TOLERANCE: + return line + return None + +def is_straight_line(d): + """Check if path is strictly a straight line""" + commands = [cmd[0].upper() for cmd in re.findall('([A-Za-z])', d)] + return len(commands) == 2 and commands[0] == 'M' and commands[1] == 'L' + +def calculate_line_length(d): + """Calculate line length and return endpoints""" + points = [] + for cmd, params in re.findall('([A-Za-z])([^A-Za-z]*)', d): + if cmd.upper() in ('M', 'L'): + coords = [float(p) for p in re.findall('[-+]?\d*\.\d+|[-+]?\d+', params)] + points.append((coords[0], coords[1])) + + if len(points) != 2: + return 0, ((0,0), (0,0)) + + length = sqrt((points[1][0]-points[0][0])**2 + (points[1][1]-points[0][1])**2) + return round(length, 4), (points[0], points[1]) # Length rounded to 4 decimals +if __name__ == '__main__': + # Set SVG files directory path + # svg_directory = r'C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\work' + svg_directory =os.environ.get('RD_CONF_WORK') + process_svg_files(svg_directory) \ No newline at end of file diff --git a/SVGs/Omniflo/lib/3_svg_scaler_Step2.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step3_scaler.py similarity index 94% rename from SVGs/Omniflo/lib/3_svg_scaler_Step2.py rename to SVGs/Omniflo/lib/OFWeiche/02_svg_step3_scaler.py index 07a9b5f..fb0416e 100644 --- a/SVGs/Omniflo/lib/3_svg_scaler_Step2.py +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step3_scaler.py @@ -68,15 +68,15 @@ def normalize_stroke_widths2(root, scale): # 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}mm') + 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': - # ๅผบๅˆถ่ฎพ็ฝฎ stroke-width=1๏ผˆๆ— ๅ•ไฝ๏ผ‰ + # set stroke-width=1๏ผˆno unit๏ผ‰ elem.set('stroke-width', '1') - # ็กฎไฟ vector-effect ็”Ÿๆ•ˆ + # set vector-effect elem.set('vector-effect', 'non-scaling-stroke') def scale_svg_file(input_path: str, output_path: str): @@ -99,7 +99,7 @@ def scale_svg_file(input_path: str, output_path: str): if width > height: scale = 1000.0 / width new_width = 1000.0 - new_height = round(height * scale) + new_height = round(height * scale,3) print(f"Scaling base: Width (larger dimension)") else: scale = 1000.0 / height @@ -110,8 +110,8 @@ def scale_svg_file(input_path: str, output_path: str): 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) + 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}') diff --git a/SVGs/Omniflo/lib/3_svg_scaler_Step3.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step4_format_optimization.py similarity index 98% rename from SVGs/Omniflo/lib/3_svg_scaler_Step3.py rename to SVGs/Omniflo/lib/OFWeiche/02_svg_step4_format_optimization.py index 1bf5eef..22ee417 100644 --- a/SVGs/Omniflo/lib/3_svg_scaler_Step3.py +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step4_format_optimization.py @@ -155,6 +155,6 @@ def batch_process_svgs(input_dir: str, output_dir: str): if __name__ == '__main__': input_dir = os.environ.get('RD_CONF_WORK') - output_dir = os.environ.get('RD_CONF_OUTPUT') + output_dir = os.environ.get('RD_CONF_OUTPUT_OFWEICHEN') # Example usage: batch_process_svgs(input_dir, output_dir) \ No newline at end of file diff --git a/SVGs/Omniflo/Weichen/automatisch_P_Weichen_Erzeugung.py b/SVGs/Omniflo/lib/OFWeiche/02_svg_step5_automatic_svg_generation_for_P_switches.py similarity index 92% rename from SVGs/Omniflo/Weichen/automatisch_P_Weichen_Erzeugung.py rename to SVGs/Omniflo/lib/OFWeiche/02_svg_step5_automatic_svg_generation_for_P_switches.py index ad9f819..83554de 100644 --- a/SVGs/Omniflo/Weichen/automatisch_P_Weichen_Erzeugung.py +++ b/SVGs/Omniflo/lib/OFWeiche/02_svg_step5_automatic_svg_generation_for_P_switches.py @@ -107,8 +107,8 @@ def process_svg_files(svg_folder, json_file_path): if __name__ == "__main__": # Configure paths (update these with your actual paths) - svg_folder =r"C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\Weichen\outputdir_Kopie" - json_file_path =r"C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\python\OFWeiche\JSON\omniflo_weichen_output.json" - - process_svg_files(svg_folder, json_file_path) + svg_folder = os.environ.get('RD_CONF_OUTPUT_OFWEICHEN') + json_path = os.environ.get("JSON_PATH", "JSON") + input_filename = os.path.join(json_path, "omniflo_weichen_output.json") + process_svg_files(svg_folder, input_filename) print("Processing complete") diff --git a/SVGs/Omniflo/lib/OFWeiche/03_convert_svgs_to_xml_and_update_xml_path_in_props.py b/SVGs/Omniflo/lib/OFWeiche/03_convert_svgs_to_xml_and_update_xml_path_in_props.py new file mode 100644 index 0000000..1f655ff --- /dev/null +++ b/SVGs/Omniflo/lib/OFWeiche/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 numeric ID from filename""" + match = re.search(r'(\d+)\.svg$', filename) + return match.group(1) if match else None + +def should_skip_stroke_width(element_attrib): + """Check if element should skip stroke-width setting""" + # Check style attribute + if 'style' in element_attrib: + style = element_attrib['style'].lower() + if 'stroke:none' in style and 'fill:none' in style: + return True + + # Check separate stroke and fill attributes + stroke = element_attrib.get('stroke', '').lower() + fill = element_attrib.get('fill', '').lower() + return stroke == 'none' and fill == 'none' + +def create_xml_structure(svg_root): + """Create target XML structure preserving all elements""" + # Create base structure + new_root = ET.Element("svg", xmlns="http://www.w3.org/2000/svg") + g_layer = ET.SubElement(new_root, "g", transform="rotate(0)") + + # Add inner SVG container + inner_svg = ET.SubElement(g_layer, "svg", { + "viewBox": svg_root.attrib.get("viewBox", "0 0 1000 1000"), + "preserveAspectRatio": "none", + "position": "absolute", + "overflow": "visible" + }) + + # Transfer all content + for elem in svg_root: + if elem.tag.endswith("}g"): + # Process group with namespace + new_g = ET.SubElement(inner_svg, "g", attrib={ + k: v for k, v in elem.attrib.items() + if not k.startswith("xmlns") + }) + + # Process all elements within group + for child in elem: + child_tag = child.tag.split("}")[-1] # Remove namespace + child_attrib = {} + + # Preserve all original attributes (except namespace) + for k, v in child.attrib.items(): + if not k.startswith("xmlns"): + child_attrib[k] = v + + # Only add stroke-width if not stroke:none;fill:none + if not should_skip_stroke_width(child.attrib): + child_attrib["stroke-width"] = "1px" + + # Create element with preserved attributes + ET.SubElement(new_g, child_tag, attrib=child_attrib) + + else: + # Process standalone elements (path, circle, etc.) + elem_tag = elem.tag.split("}")[-1] # Remove namespace + elem_attrib = {} + + # Preserve all original attributes (except namespace) + for k, v in elem.attrib.items(): + if not k.startswith("xmlns"): + elem_attrib[k] = v + + # Only add stroke-width if not stroke:none;fill:none + if not should_skip_stroke_width(elem.attrib): + elem_attrib["stroke-width"] = "1px" + + ET.SubElement(inner_svg, elem_tag, attrib=elem_attrib) + + return new_root + +def format_xml(element): + """Generate formatted XML string""" + # Generate XML with declaration + xml_str = ET.tostring(element, encoding="UTF-8", xml_declaration=True) + + # Pretty format with 2-space indent + dom = minidom.parseString(xml_str) + pretty_xml = dom.toprettyxml(indent=" ", encoding="UTF-8").decode("UTF-8") + + # Remove extra empty lines (preserve structure) + lines = [] + for line in pretty_xml.split("\n"): + if line.strip() or line.lstrip().startswith(" 0: - # Save with proper formatting - xml_str = ET.tostring(root, encoding='unicode') - xml_str = xml_str.replace('><', '>\n<') - with open(xml_file_path, 'w', encoding='utf-8') as xml_file: - xml_file.write(xml_str) - print(f"Successfully modified {file_modified_count} path(s) in: {xml_file_name}") - else: - print(f"No target paths found in: {xml_file_name}") - - except Exception as e: - print(f"Error processing {xml_file_name}: {str(e)}") - else: - print(f"XML file not found: {xml_file_name}") - - # Print total modifications summary - print(f"\nTotal paths modified across all files: {total_modified}") - -if __name__ == "__main__": - json_file_path = r"C:\Users\y.wang\Documents\SSG-Ruledesigner-Konfigurator\SVGs\Omniflo\python\OFWeiche\JSON\omniflo_weichen_output.json" - xml_folder_path = r"C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\svg" - process_json_and_modify_xml(json_file_path, xml_folder_path) - - - diff --git a/SVGs/Omniflo/python/OFWeiche/run_OFWeiche.bat b/SVGs/Omniflo/python/OFWeiche/run_OFWeiche.bat deleted file mode 100644 index d4f1a19..0000000 --- a/SVGs/Omniflo/python/OFWeiche/run_OFWeiche.bat +++ /dev/null @@ -1,15 +0,0 @@ -@echo off - -set "OFWeiche_PATH=%~dp0" -set PROPS_PATH=C:\Program Files\RuleDesigner\RDConfigurator Fusion\WebApi\Editor2D\SSG\shapes\props -set "JSON_PATH=%OFWeiche_PATH%JSON" - -echo "[DEBUG] OFWeiche_PATH: %OFWeiche_PATH%" -echo "[DEBUG] PROPS_PATH: %PROPS_PATH%" -echo "[DEBUG] JSON_PATH: %JSON_PATH%" - -python 1_omniflo_weichen.py -python 2_calculations_to_standardize_the_dimensions_and_add_connection_points.py -python 3_update_dimensions_and_connection_points_in_props.py - -pause \ No newline at end of file