Merge
This commit is contained in:
@@ -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()
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
# Für EXE-Erstellung
|
||||
pyinstaller>=6.0
|
||||
@@ -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.
Binary file not shown.
Binary file not shown.
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>
|
||||
@@ -19,4 +19,6 @@
|
||||
<div class="paletteItem"><div><img id="s_Gefaellestrecke2D" class="shape" title="" family="Gefaellestrecke" shapeMode="0" src="SSG/shapes/img/Gefaellestrecke.png" /></div><div>Gefällestrecke2D</div></div>
|
||||
<div class="paletteItem"><div><img id="s_ap110_2d" class="shape" title="" family="OFGerade" shapeMode="0" /></div><div>AP110_2D</div></div>
|
||||
<div class="paletteItem"><div><img id="s_ap110" class="shape" title="" shapeMode="0" /></div><div>AP110</div></div>
|
||||
<div class="paletteItem"><div><img id="s_TEFGerade" class="shape" title="" shapeMode="0" /></div><div>TEFGERADE</div></div>
|
||||
<div class="paletteItem"><div><img id="s_TEFGerade_2d" class="shape" title="" family="TEFGerade" shapeMode="0" /></div><div>TEFGerade_2D</div></div>
|
||||
</palette>
|
||||
@@ -2,4 +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>
|
||||
</palette>
|
||||
@@ -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
|
||||
}
|
||||
],
|
||||
|
||||
@@ -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
|
||||
}
|
||||
],
|
||||
|
||||
@@ -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
|
||||
}
|
||||
],
|
||||
|
||||
@@ -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
|
||||
}
|
||||
],
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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":{}}
|
||||
{"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":{}}
|
||||
@@ -2,102 +2,107 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="rotate(0)">
|
||||
<svg viewBox="0 0 1e3 774.4" preserveAspectRatio="none" position="absolute" overflow="visible">
|
||||
<defs>
|
||||
<clipPath>
|
||||
<path d="m0 768h1024v-768h-1024z" stroke-width="1px" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g transform="matrix(.9982 0 0 .9982 1.6633 1.5715)" fill="none" stroke-linecap="square" stroke-linejoin="miter"><g fill-rule="nonzero" stroke-width=".17228"><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<path d="m485.43 412.07a4.1452 4.1452 0 0 0 0.168 8.287" stroke-width="1px" />
|
||||
<path d="m484.86 412.27a4.0144 4.0144 0 0 0 0.733 7.961" stroke-width="1px" />
|
||||
<polyline points="491.19 420.36 485.46 420.36" stroke-width="1px" />
|
||||
<polyline points="497.33 420.23 494.4 420.23" stroke-width="1px" />
|
||||
<polyline points="503.75 420.16 501.32 420.16" stroke-width="1px" />
|
||||
<polyline points="497.64 416.13 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="497.33 420.36 497.33 420.16" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="497.33 415.49 497.33 412.07" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="498.11 420.16 496.96 420.16" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="497.65 419.24 497.65 416.21" stroke-width="1px" />
|
||||
<polyline points="496.68 420.2 494.4 420.2" stroke-width="1px" />
|
||||
<path d="m496.68 420.2a0.96345 0.96345 0 0 0 0.964-0.963" stroke-width="1px" />
|
||||
<path d="m497.65 416.21a0.96345 0.96345 0 0 0-0.666-0.916" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="503.75 420.16 503.75 418.42" stroke-width="1px" />
|
||||
<polyline points="503.75 417.86 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="502.72 420.16 502.21 420.16" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="486.82 412.04 485.77 412.04" stroke-width="1px" />
|
||||
<path d="m487.12 412.09a0.96345 0.96345 0 0 0-0.297-0.047" stroke-width="1px" />
|
||||
<polyline points="483.84 418.27 483.84 413.97" stroke-width="1px" />
|
||||
<path d="m485.77 412.04a1.9269 1.9269 0 0 0-1.927 1.927" stroke-width="1px" />
|
||||
<path d="m483.84 418.27a1.9269 1.9269 0 0 0 1.927 1.927" stroke-width="1px" />
|
||||
<polyline points="491.19 420.2 485.77 420.2" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="487.46 412.2 497.33 412.2" stroke-width="1px" />
|
||||
<polyline points="487.06 412.07 497.33 412.07" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="487.12 412.09 496.98 415.3" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#0ff">
|
||||
<path d="m486.73 410.18a6.1505 6.1505 0 0 0 0 12.301" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<circle cx="486.73" cy="416.33" r="2.7684" stroke-width="1px" />
|
||||
<polyline points="497.64 416.13 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="503.75 416.13 503.75 420.16" stroke-width="1px" />
|
||||
<polyline points="503.75 420.16 501.32 420.16" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="497.33 420.16 497.33 420.36" stroke-width="1px" />
|
||||
<polyline points="497.33 420.36 494.4 420.36" stroke-width="1px" />
|
||||
<polyline points="498.11 417.04 501.32 417.04" stroke-width="1px" />
|
||||
<polyline points="498.76 427.24 500.68 427.24" stroke-width="1px" />
|
||||
<polyline points="501.32 427.05 501.32 417.04" stroke-width="1px" />
|
||||
<polyline points="498.11 427.05 498.11 417.04" stroke-width="1px" />
|
||||
<polyline points="498.31 427.24 499.72 427.24" stroke-width="1px" />
|
||||
<polyline points="501.13 426.86 501.32 426.86" stroke-width="1px" />
|
||||
<polyline points="501.13 427.05 501.32 427.05" stroke-width="1px" />
|
||||
<polyline points="499.72 427.24 501.13 427.24" stroke-width="1px" />
|
||||
<polyline points="501.13 426.86 501.13 427.24" stroke-width="1px" />
|
||||
<polyline points="498.31 426.86 498.31 427.24" stroke-width="1px" />
|
||||
<polyline points="498.11 426.86 498.31 426.86" stroke-width="1px" />
|
||||
<polyline points="498.31 427.05 498.11 427.05" stroke-width="1px" />
|
||||
<polyline points="491.19 417.04 494.4 417.04" stroke-width="1px" />
|
||||
<polyline points="491.84 427.24 493.76 427.24" stroke-width="1px" />
|
||||
<polyline points="494.4 427.05 494.4 417.04" stroke-width="1px" />
|
||||
<polyline points="491.19 427.05 491.19 417.04" stroke-width="1px" />
|
||||
<polyline points="491.39 427.24 492.8 427.24" stroke-width="1px" />
|
||||
<polyline points="494.21 426.86 494.4 426.86" stroke-width="1px" />
|
||||
<polyline points="494.21 427.05 494.4 427.05" stroke-width="1px" />
|
||||
<polyline points="492.8 427.24 494.21 427.24" stroke-width="1px" />
|
||||
<polyline points="494.21 426.86 494.21 427.24" stroke-width="1px" />
|
||||
<polyline points="491.39 426.86 491.39 427.24" stroke-width="1px" />
|
||||
<polyline points="491.19 426.86 491.39 426.86" stroke-width="1px" />
|
||||
<polyline points="491.39 427.05 491.19 427.05" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="498.11 420.16 496.96 420.16" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="491.19 420.23 485.6 420.23" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="503.75 418.14 501.32 418.14" stroke-width="1px" />
|
||||
<polyline points="498.11 418.14 497.65 418.14" stroke-width="1px" />
|
||||
</g><g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#0ff">
|
||||
<polyline points="502.4 424.57 490 424.57" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g></g><path d="m996.31 360.66h-104.12" stroke="#ec2525" stroke-width="1px" /></g></svg>
|
||||
<defs>
|
||||
<clipPath>
|
||||
<path d="m0 768h1024v-768h-1024z" stroke-width="1px" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g transform="matrix(.9982 0 0 .9982 1.6633 1.5715)" fill="none" stroke-linecap="square" stroke-linejoin="miter">
|
||||
<g fill-rule="nonzero" stroke-width=".17228">
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<path d="m485.43 412.07a4.1452 4.1452 0 0 0 0.168 8.287" stroke-width="1px" />
|
||||
<path d="m484.86 412.27a4.0144 4.0144 0 0 0 0.733 7.961" stroke-width="1px" />
|
||||
<polyline points="491.19 420.36 485.46 420.36" stroke-width="1px" />
|
||||
<polyline points="497.33 420.23 494.4 420.23" stroke-width="1px" />
|
||||
<polyline points="503.75 420.16 501.32 420.16" stroke-width="1px" />
|
||||
<polyline points="497.64 416.13 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="497.33 420.36 497.33 420.16" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="497.33 415.49 497.33 412.07" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="498.11 420.16 496.96 420.16" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="497.65 419.24 497.65 416.21" stroke-width="1px" />
|
||||
<polyline points="496.68 420.2 494.4 420.2" stroke-width="1px" />
|
||||
<path d="m496.68 420.2a0.96345 0.96345 0 0 0 0.964-0.963" stroke-width="1px" />
|
||||
<path d="m497.65 416.21a0.96345 0.96345 0 0 0-0.666-0.916" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="503.75 420.16 503.75 418.42" stroke-width="1px" />
|
||||
<polyline points="503.75 417.86 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="502.72 420.16 502.21 420.16" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="486.82 412.04 485.77 412.04" stroke-width="1px" />
|
||||
<path d="m487.12 412.09a0.96345 0.96345 0 0 0-0.297-0.047" stroke-width="1px" />
|
||||
<polyline points="483.84 418.27 483.84 413.97" stroke-width="1px" />
|
||||
<path d="m485.77 412.04a1.9269 1.9269 0 0 0-1.927 1.927" stroke-width="1px" />
|
||||
<path d="m483.84 418.27a1.9269 1.9269 0 0 0 1.927 1.927" stroke-width="1px" />
|
||||
<polyline points="491.19 420.2 485.77 420.2" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="487.46 412.2 497.33 412.2" stroke-width="1px" />
|
||||
<polyline points="487.06 412.07 497.33 412.07" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="487.12 412.09 496.98 415.3" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#0ff">
|
||||
<path d="m486.73 410.18a6.1505 6.1505 0 0 0 0 12.301" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<circle cx="486.73" cy="416.33" r="2.7684" stroke-width="1px" />
|
||||
<polyline points="497.64 416.13 503.75 416.13" stroke-width="1px" />
|
||||
<polyline points="503.75 416.13 503.75 420.16" stroke-width="1px" />
|
||||
<polyline points="503.75 420.16 501.32 420.16" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="497.33 420.16 497.33 420.36" stroke-width="1px" />
|
||||
<polyline points="497.33 420.36 494.4 420.36" stroke-width="1px" />
|
||||
<polyline points="498.11 417.04 501.32 417.04" stroke-width="1px" />
|
||||
<polyline points="498.76 427.24 500.68 427.24" stroke-width="1px" />
|
||||
<polyline points="501.32 427.05 501.32 417.04" stroke-width="1px" />
|
||||
<polyline points="498.11 427.05 498.11 417.04" stroke-width="1px" />
|
||||
<polyline points="498.31 427.24 499.72 427.24" stroke-width="1px" />
|
||||
<polyline points="501.13 426.86 501.32 426.86" stroke-width="1px" />
|
||||
<polyline points="501.13 427.05 501.32 427.05" stroke-width="1px" />
|
||||
<polyline points="499.72 427.24 501.13 427.24" stroke-width="1px" />
|
||||
<polyline points="501.13 426.86 501.13 427.24" stroke-width="1px" />
|
||||
<polyline points="498.31 426.86 498.31 427.24" stroke-width="1px" />
|
||||
<polyline points="498.11 426.86 498.31 426.86" stroke-width="1px" />
|
||||
<polyline points="498.31 427.05 498.11 427.05" stroke-width="1px" />
|
||||
<polyline points="491.19 417.04 494.4 417.04" stroke-width="1px" />
|
||||
<polyline points="491.84 427.24 493.76 427.24" stroke-width="1px" />
|
||||
<polyline points="494.4 427.05 494.4 417.04" stroke-width="1px" />
|
||||
<polyline points="491.19 427.05 491.19 417.04" stroke-width="1px" />
|
||||
<polyline points="491.39 427.24 492.8 427.24" stroke-width="1px" />
|
||||
<polyline points="494.21 426.86 494.4 426.86" stroke-width="1px" />
|
||||
<polyline points="494.21 427.05 494.4 427.05" stroke-width="1px" />
|
||||
<polyline points="492.8 427.24 494.21 427.24" stroke-width="1px" />
|
||||
<polyline points="494.21 426.86 494.21 427.24" stroke-width="1px" />
|
||||
<polyline points="491.39 426.86 491.39 427.24" stroke-width="1px" />
|
||||
<polyline points="491.19 426.86 491.39 426.86" stroke-width="1px" />
|
||||
<polyline points="491.39 427.05 491.19 427.05" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="498.11 420.16 496.96 420.16" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#000">
|
||||
<polyline points="491.19 420.23 485.6 420.23" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#f00">
|
||||
<polyline points="503.75 418.14 501.32 418.14" stroke-width="1px" />
|
||||
<polyline points="498.11 418.14 497.65 418.14" stroke-width="1px" />
|
||||
</g>
|
||||
<g transform="matrix(42.917,0,0,45.02,-20623,-18464)" clip-path="url(#clipId0)" stroke="#0ff">
|
||||
<polyline points="502.4 424.57 490 424.57" fill-rule="nonzero" stroke-linecap="square" stroke-linejoin="miter" stroke-width="1px" />
|
||||
</g>
|
||||
</g>
|
||||
<path d="m996.31 360.66h-104.12" stroke="#ec2525" stroke-width="1px" />
|
||||
</g>
|
||||
</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>
|
||||
+599
-255
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Reference in New Issue
Block a user