git.schokokeks.org
Repositories
Help
Report an Issue
schraegbilder.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
3135ff6
Branches
Tags
master
schraegbilder.git
main.py
Achsenbeschriftung und .htaccess
Bernd Wurst
commited
3135ff6
at 2026-06-21 11:27:01
main.py
Blame
History
Raw
import re import json import base64 from pyscript import document, window from schraegbild.svg_builder import SchraegbildBuilder # Globale Variable für den Download aktuelles_svg = "" # Flag, um Endlosschleifen beim Laden des Hashs zu verhindern block_hash_update = False def get_int_value(selector, default=0): val_string = document.querySelector(selector).value.strip() if not val_string: return default try: return int(val_string) except ValueError: return default def zeichne_koordinatensystem(event=None): global aktuelles_svg, block_hash_update # 1. Werte auslesen len_x1 = get_int_value("#len-x1", 5) len_x2 = get_int_value("#len-x2", 6) len_x3 = get_int_value("#len-x3", 6) neg_x1 = get_int_value("#neg-x1", 0) neg_x2 = get_int_value("#neg-x2", 0) neg_x3 = get_int_value("#neg-x3", 0) mod_x1 = get_int_value("#mod-x1", 2) mod_x2 = get_int_value("#mod-x2", 2) mod_x3 = get_int_value("#mod-x3", 2) show_labels = document.querySelector("#show-labels").checked show_coords = document.querySelector("#show-coords").checked punkte_text = document.querySelector("#punkte-input").value # --- NEU: Zustand in der URL speichern --- if not block_hash_update: zustand = { "x1": len_x1, "x2": len_x2, "x3": len_x3, "nx1": neg_x1, "nx2": neg_x2, "nx3": neg_x3, "mx1": mod_x1, "mx2": mod_x2, "mx3": mod_x3, "lbl": show_labels, "crd": show_coords, "txt": punkte_text } # Als JSON packen, in Bytes umwandeln, Base64 codieren und als UTF-8 String in die URL schieben json_bytes = json.dumps(zustand).encode('utf-8') b64_string = base64.b64encode(json_bytes).decode('utf-8') window.location.hash = b64_string # 2. Punkte & Kanten parsen punkte_liste = [] kanten_liste = [] p_pattern = re.compile(r"([A-Za-z0-9_]+)\s*\(\s*([-\d.]+)\s*\|\s*([-\d.]+)\s*\|\s*([-\d.]+)\s*\)") k_pattern = re.compile(r"([A-Za-z0-9_]+)\s*([-_])\s*([A-Za-z0-9_]+)") for zeile in punkte_text.splitlines(): zeile = zeile.strip() if not zeile: continue p_match = p_pattern.search(zeile) if p_match: punkte_liste.append({"name": p_match.group(1), "coords": (float(p_match.group(2)), float(p_match.group(3)), float(p_match.group(4)))}) continue k_match = k_pattern.search(zeile) if k_match: kanten_liste.append({"von": k_match.group(1), "nach": k_match.group(3), "style": "sichtbar" if k_match.group(2) == "-" else "verdeckt"}) # 3. Rendern builder = SchraegbildBuilder( len_x1, len_x2, len_x3, neg_x1, neg_x2, neg_x3, mod_x1, max(1, mod_x2), max(1, mod_x3), punkte=punkte_liste, kanten=kanten_liste, show_labels=show_labels, show_coords=show_coords ) aktuelles_svg = builder.generiere_koordinatensystem() document.querySelector("#canvas-container").innerHTML = aktuelles_svg def lade_zustand_aus_url(): """Prüft beim Start, ob ein Permalink geladen wurde""" global block_hash_update hash_val = window.location.hash if not hash_val or len(hash_val) <= 1: return # Kein Permalink vorhanden, Standardwerte nutzen try: # Das '#' vorne abschneiden und Base64 decodieren b64_data = hash_val[1:] json_bytes = base64.b64decode(b64_data) zustand = json.loads(json_bytes.decode('utf-8')) # UI-Updates blockieren den Hash-Writer temporär, um Echos zu verhindern block_hash_update = True # Werte in die HTML-Felder zurückschreiben document.querySelector("#len-x1").value = zustand.get("x1", 5) document.querySelector("#len-x2").value = zustand.get("x2", 6) document.querySelector("#len-x3").value = zustand.get("x3", 6) document.querySelector("#neg-x1").value = zustand.get("nx1", 0) document.querySelector("#neg-x2").value = zustand.get("nx2", 0) document.querySelector("#neg-x3").value = zustand.get("nx3", 0) document.querySelector("#mod-x1").value = zustand.get("mx1", 2) document.querySelector("#mod-x2").value = zustand.get("mx2", 2) document.querySelector("#mod-x3").value = zustand.get("mx3", 2) document.querySelector("#show-labels").checked = zustand.get("lbl", True) document.querySelector("#show-coords").checked = zustand.get("crd", True) document.querySelector("#punkte-input").value = zustand.get("txt", "") block_hash_update = False except Exception as e: print(f"Fehler beim Laden des Permalinks: {e}") block_hash_update = False def download_svg(event=None): global aktuelles_svg if not aktuelles_svg: return js_code = f""" var blob = new Blob([{repr(aktuelles_svg)}], {{type: "image/svg+xml;charset=utf-8"}}); var url = URL.createObjectURL(blob); var a = document.createElement("a"); a.href = url; a.download = "schraegbild.svg"; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); """ window.eval(js_code) def kopiere_permalink(event=None): # Die komplette aktuelle URL inklusive des gehashten Zustands auslesen aktuelle_url = window.location.href # Per JavaScript in die Zwischenablage schreiben und Button-Text animieren js_code = f""" navigator.clipboard.writeText("{aktuelle_url}").then(function() {{ var btn = document.querySelector("#btn-copy-link"); var alterText = btn.innerHTML; btn.innerHTML = "✓ Kopiert!"; btn.style.backgroundColor = "#28a745"; // Kurz grün färben btn.style.color = "white"; setTimeout(function() {{ btn.innerHTML = alterText; btn.style.backgroundColor = ""; // Zurück zum CSS-Standard btn.style.color = ""; }}, 2000); }}).catch(function(err) {{ alert("Fehler beim Kopieren: " + err); }}); """ window.eval(js_code) # --- START-SEQUENZ --- # 1. Prüfen, ob Voreinstellungen aus einem Link geladen werden müssen lade_zustand_aus_url() # 2. Erstmalig zeichnen zeichne_koordinatensystem()