This commit is contained in:
2026-01-15 11:59:22 +01:00
54 changed files with 1304 additions and 221 deletions
+150
View File
@@ -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()
+10
View File
@@ -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
+2
View File
@@ -0,0 +1,2 @@
# Für EXE-Erstellung
pyinstaller>=6.0
+32
View File
@@ -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
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
<palette><div class="paletteItem"><div><img id="s_Kette" class="shape" title="" family="KettenFoerderer" shapeMode="0" src="SSG/shapes/img/Kettenfoerderer_32px.png" /></div><div>Kettenförderer</div></div>
</palette>
@@ -2,5 +2,5 @@
<div class="paletteItem"><div><img id="Umlenk_links_TEF_rechts" class="shape" title="" family="TEFUmlenk" shapeMode="0" src="SSG/shapes/img/Umlenkspannst.links_TEF_rechts_32px.png" /></div><div>Umlenkspannst. links für TEF rechts</div></div>
<div class="paletteItem"><div><img id="0_B10010" class="shape" title="" family="TEFUmlenk" shapeMode="0" src="SSG/shapes/img/Antriebst.links_TEF_links_32px.png" /></div><div>Antriebst. links für TEF links</div></div>
<div class="paletteItem"><div><img id="0_B10020" class="shape" title="" family="TEFUmlenk" shapeMode="0" src="SSG/shapes/img/Antriebst.rechts_TEF_rechts_32px.png" /></div><div>Antriebst. rechts für TEF rechts</div></div>
<div class="paletteItem"><div><img id="s_Gerade_TEF" class="shape" title="" family="TEFGerade" shapeMode="0" src="SSG/shapes/img/AP_32px.png" /></div><div>TEF Gerade</div></div>
<div class="paletteItem"><div><img id="s_Gerade_TEF" class="shape" title="" family="TEFGerade" shapeMode="0" src="SSG/shapes/img/AP_32px.png" /></div><div>TEFGERADE</div></div>
</palette>
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -159,7 +159,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -159,7 +159,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -140,7 +140,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -159,7 +159,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 315,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 270,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 45,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -121,7 +121,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
@@ -83,7 +83,7 @@
"zMax": "",
"zStep": "",
"direction": 180,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
},
@@ -102,7 +102,7 @@
"zMax": "",
"zStep": "",
"direction": 90,
"linkClass": "TEFOmniflo",
"linkClass": "OmniflowTEF",
"label": "",
"isDimension": true
}
+69
View File
@@ -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"
}
@@ -0,0 +1,14 @@
{
"shapeMode": 0,
"name": "TEFGERADE",
"family": "TEFGerade",
"icon": "SSG/shapes/img/AP_32px.png",
"srcSVG": "SSG/shapes/svg/s_Gerade_TEF.xml",
"src3D": "SSG/shapes/obj/s_Gerade_TEF.stl",
"width": 236.5984,
"height": 3779.5276,
"depth": 264.5669,
"behaviour": "(NOSTRETCH)(NOSTRETCHONVIEW)(NOROTATE)(NOROTATEONVIEW)(CONTAINER)(HIDEDIMENSIONS)(HIDEROTATION)(HIDEPIN)(ALWAYSFRONT)(ORIGIN=CENTER)",
"eventClass": "OnDoubleclick,OnInserted,OnPasted,OnLinked,OnRemoved",
"color3D": "#FF0000"
}
@@ -25,7 +25,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 330,
"direction": 300.0,
"linkClass": "Gefaellestrecke",
"label": "H0",
"isDimension": true
@@ -44,7 +44,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 180,
"direction": 180.0,
"linkClass": "Gefaellestrecke",
"label": "H1",
"isDimension": true
@@ -25,7 +25,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 300,
"direction": 60.0,
"linkClass": "Gefaellestrecke",
"label": "H0",
"isDimension": true
@@ -44,7 +44,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 180,
"direction": 180.0,
"linkClass": "Gefaellestrecke",
"label": "H1",
"isDimension": true
@@ -25,7 +25,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 270,
"direction": 330.0,
"linkClass": "Gefaellestrecke",
"label": "H0",
"isDimension": true
@@ -44,7 +44,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 180,
"direction": 180.0,
"linkClass": "Gefaellestrecke",
"label": "H1",
"isDimension": true
@@ -25,7 +25,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 60,
"direction": 270.0,
"linkClass": "Gefaellestrecke",
"label": "H0",
"isDimension": true
@@ -44,7 +44,7 @@
"zMin": "",
"zMax": "",
"zStep": "",
"direction": 180,
"direction": 180.0,
"linkClass": "Gefaellestrecke",
"label": "H1",
"isDimension": true
+2 -2
View File
@@ -14,8 +14,8 @@
<path d="M 481.177 384.782 L 512 458.866" stroke-width="1px"/>
<path d="M 350.973 297.845 L 425.067 328.672" stroke-width="1px"/>
<path d="M 325.424 292.249 L 325.424 303.44" stroke-width="1px"/>
<path d="M 694.465 283.578 L 694.465 297.845" stroke-width="1px"/>
<path d="M 329.535 283.578 L 329.535 297.845" stroke-width="1px"/>
<path d="M 694.465 283.578 L 694.465 297.845" style="stroke:none;fill:none;"/>
<path d="M 329.535 283.578 L 329.535 297.845" style="stroke:none;fill:none;"/>
</g>
</svg>
</g>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

+2 -2
View File
@@ -14,8 +14,8 @@
<path d="M 481.177 384.782 L 512 458.866" stroke-width="1px"/>
<path d="M 350.973 297.845 L 425.067 328.672" stroke-width="1px"/>
<path d="M 325.424 292.249 L 325.424 303.44" stroke-width="1px"/>
<path d="M 694.465 283.578 L 694.465 297.845" stroke-width="1px"/>
<path d="M 329.535 283.578 L 329.535 297.845" stroke-width="1px"/>
<path d="M 694.465 283.578 L 694.465 297.845" style="stroke:none;fill:none;"/>
<path d="M 329.535 283.578 L 329.535 297.845" style="stroke:none;fill:none;"/>
</g>
</svg>
</g>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
<g transform="rotate(0)">
<svg viewBox="0 0 264.58 264.58" preserveAspectRatio="none" position="absolute" overflow="visible">
<path d="m132.29-2.5e-6v264.58" fill="none" stroke="#ffe31b" stroke-opacity="1" stroke-width="1px" />
</svg>
</g>
</svg>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
<g transform="rotate(0)">
<svg viewBox="0 0 264.58 264.58" preserveAspectRatio="none" position="absolute" overflow="visible">
<path d="m132.29-2.5e-6v264.58" fill="none" stroke="#ffe31b" stroke-opacity="1" stroke-width="1px" />
</svg>
</g>
</svg>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg">
<g transform="rotate(0)">
<svg viewBox="0 0 264.58 264.58" preserveAspectRatio="none" position="absolute" overflow="visible">
<path d="m132.29-2.5e-6v264.58" fill="none" stroke="#ffe31b" stroke-opacity="1" stroke-width="1px" />
</svg>
</g>
</svg>
+920 -140
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.