diff --git a/Doku/reduce_filesize/filter_zip_no_stl.py b/Doku/reduce_filesize/filter_zip_no_stl.py new file mode 100644 index 0000000..49be176 --- /dev/null +++ b/Doku/reduce_filesize/filter_zip_no_stl.py @@ -0,0 +1,150 @@ +#!/usr/bin/env python3 +""" +Filtert ein ZIP-Archiv und entfernt alle .stl Dateien. +Ausgabe: originalname_heute.zip (oder ersetzt Original mit --replace) +""" + +import zipfile +import sys +import argparse +import shutil +import struct +import zlib +from pathlib import Path + + +def filter_zip_no_stl(source_zip_path: str, replace: bool = False) -> str: + """ + Öffnet ein ZIP und erstellt ein neues ohne .stl Dateien. + + Args: + source_zip_path: Pfad zur Quell-ZIP-Datei + replace: Wenn True, wird das Original ersetzt + + Returns: + Pfad zur erstellten/ersetzten ZIP-Datei + """ + source_path = Path(source_zip_path) + + if not source_path.exists(): + raise FileNotFoundError(f"Datei nicht gefunden: {source_zip_path}") + + if not source_path.suffix.lower() == '.zip': + raise ValueError(f"Keine ZIP-Datei: {source_zip_path}") + + # Temporäres Ziel-ZIP + temp_path = source_path.with_name(f"{source_path.stem}_heute.zip") + + copied_count = 0 + skipped_count = 0 + + print("Filtere ZIP und erstelle neues Archiv mit UTF-8 Encoding...") + + with zipfile.ZipFile(source_path, 'r') as src_zip: + with zipfile.ZipFile(temp_path, 'w', zipfile.ZIP_DEFLATED) as dst_zip: + # Iteriere über alle Dateien im Quell-ZIP + for info in src_zip.infolist(): + # Verzeichnisse überspringen + if info.is_dir(): + continue + + # .stl Dateien überspringen + if info.filename.lower().endswith('.stl'): + skipped_count += 1 + print(f" - {info.filename}") + continue + + # Kopiere Datei ins neue ZIP + try: + # Lese Dateiinhalt + with src_zip.open(info, 'r') as source: + file_data = source.read() + + # Schreibe ins neue ZIP (mit UTF-8 Encoding) + dst_zip.writestr(info.filename, file_data, compress_type=zipfile.ZIP_DEFLATED) + copied_count += 1 + + except Exception as e: + # Fallback: Low-Level Extraktion für problematische Dateien + try: + # Lese direkt aus der ZIP-Datei ohne Validierung + with open(source_path, 'rb') as f: + # Gehe zu Local File Header + f.seek(info.header_offset) + + # Lese Local File Header (30 Bytes) + fheader = f.read(30) + if len(fheader) != 30: + raise Exception("Kann Local File Header nicht lesen") + + # Parse Header (ZIP Local File Header format) + sig, ver, flags, comp_method, mod_time, mod_date, crc, comp_size, uncomp_size, fname_len, extra_len = struct.unpack('<4s5H3I2H', fheader) + if sig != b'PK\x03\x04': + raise Exception("Ungültiger Local File Header") + + # Lese raw filename bytes aus Header + raw_filename_bytes = f.read(fname_len) + + # Überspringe Extra Field + f.seek(info.header_offset + 30 + fname_len + extra_len) + + # Lese komprimierte Daten + compressed_data = f.read(comp_size) + + # Dekomprimiere + if comp_method == 8: # DEFLATE + file_data = zlib.decompress(compressed_data, -zlib.MAX_WBITS) + elif comp_method == 0: # STORED + file_data = compressed_data + else: + raise Exception(f"Unbekannte Kompression: {comp_method}") + + # Dekodiere Dateinamen mit latin-1 (ISO-8859-1) + # latin-1 unterstützt deutsche Umlaute korrekt (\xf6 = ö) + correct_filename = raw_filename_bytes.decode('latin-1', errors='replace') + + # Schreibe ins neue ZIP mit korrigiertem Namen + dst_zip.writestr(correct_filename, file_data, compress_type=zipfile.ZIP_DEFLATED) + copied_count += 1 + print(f" + {correct_filename} (re-encoded)") + + except Exception as e2: + print(f" ! Warnung: Konnte {info.filename} nicht kopieren: {e2}") + skipped_count += 1 + + print(f"\nErgebnis: {copied_count} Datei(en) kopiert, {skipped_count} STL-Datei(en) entfernt") + + if replace: + shutil.move(str(temp_path), str(source_path)) + print(f"Original ersetzt: {source_path}") + return str(source_path) + else: + print(f"Ziel-ZIP: {temp_path}") + return str(temp_path) + + +def main(): + parser = argparse.ArgumentParser( + description="Filtert ZIP-Archive und entfernt alle .stl Dateien." + ) + parser.add_argument( + "zipfile", + help="Pfad zur Quell-ZIP-Datei" + ) + parser.add_argument( + "--replace", + action="store_true", + help="Original-ZIP durch gefilterte Version ersetzen" + ) + + args = parser.parse_args() + + try: + filter_zip_no_stl(args.zipfile, args.replace) + except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e: + print(f"Fehler: {e}", file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/Doku/reduce_filesize/mkexe.bat b/Doku/reduce_filesize/mkexe.bat new file mode 100644 index 0000000..bd2024b --- /dev/null +++ b/Doku/reduce_filesize/mkexe.bat @@ -0,0 +1,10 @@ +echo === EXE erstellen === + +@echo off +call .venv\Scripts\activate.bat +pyinstaller --onefile filter_zip_no_stl.py + +echo. +echo === Fertig! === +move dist\filter_zip_no_stl.exe ..\..\Sessions\removeStls.exe +pause diff --git a/Doku/reduce_filesize/requirements.txt b/Doku/reduce_filesize/requirements.txt new file mode 100644 index 0000000..30adefe --- /dev/null +++ b/Doku/reduce_filesize/requirements.txt @@ -0,0 +1,2 @@ +# Für EXE-Erstellung +pyinstaller>=6.0 \ No newline at end of file diff --git a/Doku/reduce_filesize/setup.bat b/Doku/reduce_filesize/setup.bat new file mode 100644 index 0000000..b537426 --- /dev/null +++ b/Doku/reduce_filesize/setup.bat @@ -0,0 +1,32 @@ +@echo off +echo === Virtuelle Umgebung einrichten === + +REM Prüfen ob Python verfügbar ist +python --version >nul 2>&1 +if errorlevel 1 ( + echo Fehler: Python nicht gefunden! + echo Bitte Python installieren und zum PATH hinzufügen. + pause + exit /b 1 +) + +REM Virtuelle Umgebung erstellen +echo Erstelle .venv ... +python -m venv .venv + +REM Aktivieren und Dependencies installieren +echo Aktiviere .venv und installiere Abhängigkeiten ... +call .venv\Scripts\activate.bat +python -m pip install --upgrade pip +pip install -r requirements.txt + +echo. +echo === Fertig! === +echo. +echo Zum Aktivieren der Umgebung: +echo .venv\Scripts\activate +echo. +echo Zum Erstellen der EXE: +echo pyinstaller --onefile filter_zip_no_stl.py +echo. +pause diff --git a/Editor2DLibrary/SSG/shapes/obj/0_BG080090+834372028.stl b/Editor2DLibrary/SSG/shapes/obj/0_BG080090+834372028.stl new file mode 100644 index 0000000..4937020 Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/0_BG080090+834372028.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/0_BG090090+834372002.stl b/Editor2DLibrary/SSG/shapes/obj/0_BG090090+834372002.stl new file mode 100644 index 0000000..62e7e19 Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/0_BG090090+834372002.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/0_BG190090+834372008.stl b/Editor2DLibrary/SSG/shapes/obj/0_BG190090+834372008.stl new file mode 100644 index 0000000..1c1636a Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/0_BG190090+834372008.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_aus.stl b/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_aus.stl new file mode 100644 index 0000000..62a0823 Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_aus.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_ein.stl b/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_ein.stl new file mode 100644 index 0000000..04ecfcb Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/Gefaellestrecke_rechts_ein.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/Kreiselstrecke.stl b/Editor2DLibrary/SSG/shapes/obj/Kreiselstrecke.stl new file mode 100644 index 0000000..715504e Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/Kreiselstrecke.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/Motor.stl b/Editor2DLibrary/SSG/shapes/obj/Motor.stl new file mode 100644 index 0000000..4c262c8 Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/Motor.stl differ diff --git a/Editor2DLibrary/SSG/shapes/obj/s70.stl b/Editor2DLibrary/SSG/shapes/obj/s70.stl new file mode 100644 index 0000000..5781662 Binary files /dev/null and b/Editor2DLibrary/SSG/shapes/obj/s70.stl differ diff --git a/Editor2DLibrary/SSG/shapes/palettes/c_OmnifloFoerderer.xml b/Editor2DLibrary/SSG/shapes/palettes/c_OmnifloFoerderer.xml new file mode 100644 index 0000000..7d871fd --- /dev/null +++ b/Editor2DLibrary/SSG/shapes/palettes/c_OmnifloFoerderer.xml @@ -0,0 +1,2 @@ +
Kettenförderer
+
\ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/palettes/c_Parts.xml b/Editor2DLibrary/SSG/shapes/palettes/c_Parts.xml index 3098925..b532c2b 100644 --- a/Editor2DLibrary/SSG/shapes/palettes/c_Parts.xml +++ b/Editor2DLibrary/SSG/shapes/palettes/c_Parts.xml @@ -19,4 +19,6 @@
Gefällestrecke2D
AP110_2D
AP110
+
TEFGERADE
+
TEFGerade_2D
\ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/palettes/c_TEFElemente.xml b/Editor2DLibrary/SSG/shapes/palettes/c_TEFElemente.xml index 1609504..5784282 100644 --- a/Editor2DLibrary/SSG/shapes/palettes/c_TEFElemente.xml +++ b/Editor2DLibrary/SSG/shapes/palettes/c_TEFElemente.xml @@ -2,4 +2,5 @@
Umlenkspannst. links für TEF rechts
Antriebst. links für TEF links
Antriebst. rechts für TEF rechts
- +
TEF Gerade
+ \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/props/0_B10010.txt b/Editor2DLibrary/SSG/shapes/props/0_B10010.txt index fd754dd..a083c4f 100644 --- a/Editor2DLibrary/SSG/shapes/props/0_B10010.txt +++ b/Editor2DLibrary/SSG/shapes/props/0_B10010.txt @@ -25,7 +25,7 @@ "zStep": "", "direction": 270.0, "linkClass": "OmnifloTEF", - "label": "", + "label": "TEF", "isDimension": true }, { @@ -44,7 +44,7 @@ "zStep": "", "direction": 270.0, "linkClass": "Omniflo", - "label": "", + "label": "Fahrstrecke", "isDimension": true } ], diff --git a/Editor2DLibrary/SSG/shapes/props/0_B10020.txt b/Editor2DLibrary/SSG/shapes/props/0_B10020.txt index d176dcb..5a9ae93 100644 --- a/Editor2DLibrary/SSG/shapes/props/0_B10020.txt +++ b/Editor2DLibrary/SSG/shapes/props/0_B10020.txt @@ -25,7 +25,7 @@ "zStep": "", "direction": 90.0, "linkClass": "OmnifloTEF", - "label": "", + "label": "TEF", "isDimension": true }, { @@ -44,7 +44,7 @@ "zStep": "", "direction": 90.0, "linkClass": "Omniflo", - "label": "", + "label": "Fahrstrecke", "isDimension": true } ], diff --git a/Editor2DLibrary/SSG/shapes/props/Umlenk_links_TEF_rechts.txt b/Editor2DLibrary/SSG/shapes/props/Umlenk_links_TEF_rechts.txt index 428a213..3c00011 100644 --- a/Editor2DLibrary/SSG/shapes/props/Umlenk_links_TEF_rechts.txt +++ b/Editor2DLibrary/SSG/shapes/props/Umlenk_links_TEF_rechts.txt @@ -25,7 +25,7 @@ "zStep": "", "direction": 270.0, "linkClass": "OmnifloTEF", - "label": "", + "label": "TEF", "isDimension": true }, { @@ -44,7 +44,7 @@ "zStep": "", "direction": 270.0, "linkClass": "Omniflo", - "label": "", + "label": "Fahrstrecke", "isDimension": true } ], diff --git a/Editor2DLibrary/SSG/shapes/props/Umlenk_rechts_TEF_links.txt b/Editor2DLibrary/SSG/shapes/props/Umlenk_rechts_TEF_links.txt index 5e0092d..e856f9f 100644 --- a/Editor2DLibrary/SSG/shapes/props/Umlenk_rechts_TEF_links.txt +++ b/Editor2DLibrary/SSG/shapes/props/Umlenk_rechts_TEF_links.txt @@ -25,7 +25,7 @@ "zStep": "", "direction": 90.0, "linkClass": "OmnifloTEF", - "label": "", + "label": "TEF", "isDimension": true }, { @@ -44,7 +44,7 @@ "zStep": "", "direction": 90.0, "linkClass": "Omniflo", - "label": "", + "label": "Fahrstrecke", "isDimension": true } ], diff --git a/Editor2DLibrary/SSG/shapes/props/s97.txt b/Editor2DLibrary/SSG/shapes/props/s97.txt new file mode 100644 index 0000000..4a5867c --- /dev/null +++ b/Editor2DLibrary/SSG/shapes/props/s97.txt @@ -0,0 +1,69 @@ +{ + "shapeMode": 0, + "name": "TEF Gerade", + "family": "TEF_Gerade", + "icon": "SSG/shapes/img/TEFGerade_32px.png", + "iconBig": "SSG/shapes/img/TEFGerade_64px.png", + "srcSVG": "SSG/shapes/svg/s97.xml", + "width": 158.7402, + "height": 3779.5276, + "depth": 415.748, + "behaviour": "(NOSTRETCH)(NOSTRETCHONVIEW)(NOROTATE)(NOROTATEONVIEW)(CONTAINER)(HIDEDIMENSIONS)(HIDEROTATION)(HIDEPIN)(ALWAYSFRONT)(ORIGIN=CENTER)", + "group3d": [ + { + "source": "s_ap110", + "id": "g0", + "width": 158.7402, + "height": 3779.5276, + "depth": 415.748, + "x": 0.0, + "y": 0.0, + "z": 207.874, + "rotation": "0;0;0", + "data": "", + "color": "#FFFF00", + "colorOpacity": 1.0 + } + ], + "connectionPoints": [ + { + "id": "cp1", + "x": 500.0, + "y": 0.0, + "z": 0.0, + "xMin": "", + "xMax": "", + "xStep": "", + "yMin": "", + "yMax": "", + "yStep": "", + "zMin": "", + "zMax": "", + "zStep": "", + "direction": 0.0, + "linkClass": "OmnifloTEF", + "label": "", + "isDimension": true + }, + { + "id": "cp2", + "x": 500.0, + "y": 1000.0, + "z": 0.0, + "xMin": "", + "xMax": "", + "xStep": "", + "yMin": "", + "yMax": "", + "yStep": "", + "zMin": "", + "zMax": "", + "zStep": "", + "direction": 180.0, + "linkClass": "OmnifloTEF", + "label": "", + "isDimension": true + } + ], + "eventClass": "OnInserted,OnDoubleclick,OnPasted,OnLinked,OnRemoved" +} \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/props/s_TEFGerade.txt b/Editor2DLibrary/SSG/shapes/props/s_TEFGerade.txt index 97d56fb..08edebe 100644 --- a/Editor2DLibrary/SSG/shapes/props/s_TEFGerade.txt +++ b/Editor2DLibrary/SSG/shapes/props/s_TEFGerade.txt @@ -1,69 +1,12 @@ { "shapeMode": 0, - "name": "TEF Gerade", - "family": "TEFGerade", - "icon": "SSG/shapes/img/TEFGerade_32px.png", - "iconBig": "SSG/shapes/img/TEFGerade_64px.png", + "name": "TEFGERADE", + "icon": "SSG/shapes/img/", "srcSVG": "SSG/shapes/svg/s_TEFGerade.xml", - "width": 158.7402, + "src3D": "SSG/shapes/obj/s_TEFGerade.stl", + "width": 236.5984, "height": 3779.5276, - "depth": 415.748, - "behaviour": "(NOSTRETCH)(NOSTRETCHONVIEW)(NOROTATE)(NOROTATEONVIEW)(CONTAINER)(HIDEDIMENSIONS)(HIDEROTATION)(HIDEPIN)(ALWAYSFRONT)(ORIGIN=CENTER)", - "group3d": [ - { - "source": "s_ap110", - "id": "g0", - "width": 158.7402, - "height": 3779.5276, - "depth": 415.748, - "x": 0.0, - "y": 0.0, - "z": 207.874, - "rotation": "0;0;0", - "data": "", - "color": "#FFFF00", - "colorOpacity": 1.0 - } - ], - "connectionPoints": [ - { - "id": "cp1", - "x": 500.0, - "y": 0.0, - "z": 0.0, - "xMin": "", - "xMax": "", - "xStep": "", - "yMin": "", - "yMax": "", - "yStep": "", - "zMin": "", - "zMax": "", - "zStep": "", - "direction": 0.0, - "linkClass": "OmnifloTEF", - "label": "", - "isDimension": true - }, - { - "id": "cp2", - "x": 500.0, - "y": 1000.0, - "z": 0.0, - "xMin": "", - "xMax": "", - "xStep": "", - "yMin": "", - "yMax": "", - "yStep": "", - "zMin": "", - "zMax": "", - "zStep": "", - "direction": 180.0, - "linkClass": "OmnifloTEF", - "label": "", - "isDimension": true - } - ], - "eventClass": "OnInserted,OnDoubleclick,OnPasted,OnLinked,OnRemoved" + "depth": 264.5669, + "behaviour": "(ORIGIN=CENTER)", + "color3D": "#FF0000" } \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/settings.txt b/Editor2DLibrary/SSG/shapes/settings.txt index 12b5e57..b6a6f2e 100644 --- a/Editor2DLibrary/SSG/shapes/settings.txt +++ b/Editor2DLibrary/SSG/shapes/settings.txt @@ -1 +1 @@ -{"categories":{"c_ILS":{"expanded":true},"c_Kreiselmodule":{"expanded":true},"c_Zusatzmodul":{"expanded":false},"c_Foerderer":{"expanded":true},"c_Kurven":{"expanded":true},"c10":{"expanded":true},"c_Background":{"expanded":true},"c_Parts":{"expanded":true},"c_Session":{"expanded":false},"c_Omniflo":{"expanded":true},"c_Boegen":{"expanded":true},"c_Gerade":{"expanded":true},"c_Weichen_90":{"expanded":true},"c_Weichen_45":{"expanded":true},"c_Weichen_Parallel":{"expanded":true},"c_Weichenkoerper":{"expanded":true},"c_Weichenkombinationen":{"expanded":true},"c_TEFElemente":{"expanded":true},"c_OmnifloBogen":{"expanded":true},"c_Boegen_90":{"expanded":false},"c_OmnifloWeiche":{"expanded":true}},"shapes":{}} \ No newline at end of file +{"categories":{"c_ILS":{"expanded":true},"c_Kreiselmodule":{"expanded":true},"c_Zusatzmodul":{"expanded":false},"c_Foerderer":{"expanded":true},"c_Kurven":{"expanded":true},"c10":{"expanded":true},"c_Background":{"expanded":true},"c_Parts":{"expanded":true},"c_Session":{"expanded":false},"c_Omniflo":{"expanded":true},"c_Boegen":{"expanded":true},"c_Gerade":{"expanded":true},"c_Weichen_90":{"expanded":true},"c_Weichen_45":{"expanded":true},"c_Weichen_Parallel":{"expanded":true},"c_Weichenkoerper":{"expanded":true},"c_Weichenkombinationen":{"expanded":true},"c_TEFElemente":{"expanded":true},"c_OmnifloBogen":{"expanded":true},"c_Boegen_90":{"expanded":false},"c_OmnifloWeiche":{"expanded":false}},"shapes":{}} \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/svg/Umlenk_rechts_TEF_links.xml b/Editor2DLibrary/SSG/shapes/svg/Umlenk_rechts_TEF_links.xml index c39bbd9..c46baff 100644 --- a/Editor2DLibrary/SSG/shapes/svg/Umlenk_rechts_TEF_links.xml +++ b/Editor2DLibrary/SSG/shapes/svg/Umlenk_rechts_TEF_links.xml @@ -2,102 +2,107 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/svg/s_Kette.xml b/Editor2DLibrary/SSG/shapes/svg/s_Kette.xml new file mode 100644 index 0000000..cc7f729 --- /dev/null +++ b/Editor2DLibrary/SSG/shapes/svg/s_Kette.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Editor2DLibrary/SSG/shapes/svg/s_KettenFoerderer.xml b/Editor2DLibrary/SSG/shapes/svg/s_KettenFoerderer.xml new file mode 100644 index 0000000..cc7f729 --- /dev/null +++ b/Editor2DLibrary/SSG/shapes/svg/s_KettenFoerderer.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/MAIN_SSG.rdx b/MAIN_SSG.rdx index 53bb721..12664e2 100644 --- a/MAIN_SSG.rdx +++ b/MAIN_SSG.rdx @@ -1032,7 +1032,7 @@ - + @@ -4100,72 +4100,18 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - - + + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -4202,20 +4148,6 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - - - - - - - - - - - - - - @@ -4244,7 +4176,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - + @@ -4269,10 +4201,6 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - - - - @@ -4299,22 +4227,23 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + - + - + - + @@ -4325,145 +4254,29 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z1,Abs(Z0-Z1),0), "mm", 96)]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z0,Abs(Z0-Z1),0), "mm", 96)]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + - + + + @@ -4734,10 +4608,10 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - + - + @@ -4762,6 +4636,172 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5270,6 +5310,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -5438,6 +5479,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -5859,6 +5901,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -6028,6 +6071,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7039,6 +7083,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7137,6 +7182,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7380,6 +7426,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7551,6 +7598,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7763,6 +7811,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + @@ -7848,7 +7897,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - + @@ -7872,7 +7921,7 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) - + @@ -7933,6 +7982,93 @@ KreiselData.AbstandMS+(KreiselData.Durchmesser/2) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -8358,7 +8494,7 @@ SSGConnectionPoint.x_S+(KreiselData.Durchmesser/2) - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11036,14 +11211,18 @@ SSGConnectionPoint.x_M - - - - + + + + + + + + @@ -15633,6 +15812,7 @@ SSGConnectionPoint.x_M + @@ -45717,6 +45897,51 @@ me.x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -46283,16 +46508,14 @@ me.x - - - - - - + + + + - + @@ -47176,6 +47399,8 @@ me.x + + @@ -47191,18 +47416,24 @@ me.x - + + + + + + + + + + + + + - + - - - - - - - - + + @@ -47465,6 +47696,65 @@ me.x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -47492,6 +47782,7 @@ me.x + @@ -47533,25 +47824,26 @@ me.x - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + ""]]> @@ -63448,10 +63740,10 @@ me.x - + - + @@ -63461,7 +63753,7 @@ me.x - + @@ -66444,7 +66736,7 @@ me.x - + @@ -66755,6 +67047,58 @@ me.x + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sessions/removeStls.exe b/Sessions/removeStls.exe new file mode 100644 index 0000000..c5b9cad Binary files /dev/null and b/Sessions/removeStls.exe differ