diff --git a/rhino/elemente.py b/rhino/elemente.py index 6afda7f..6bc115d 100644 --- a/rhino/elemente.py +++ b/rhino/elemente.py @@ -12388,6 +12388,20 @@ def _sync_raum_stamps_to_source(doc): except Exception: new_bold = False try: new_ital = bool(cur_font.Italic) if cur_font else False except Exception: new_ital = False + # Alignment aus der TextEntity — Mapping Rhino-Enum → + # raum_align-String. Wenn Oberleiste die Ausrichtung via + # TextHorizontalAlignment setzt, hier auf "links/mid/rechts" + # mappen damit der naechste Regen die User-Wahl uebernimmt. + try: + h_align = te.TextHorizontalAlignment + if h_align == Rhino.DocObjects.TextHorizontalAlignment.Left: + new_align = "links" + elif h_align == Rhino.DocObjects.TextHorizontalAlignment.Right: + new_align = "rechts" + else: + new_align = "mid" + except Exception: + new_align = meta.get("raum_align", "mid") # Nur schreiben wenn was geaendert hat — vermeidet Modify- # Storms bei jedem Idle-Tick. old_dx = float(meta.get("raum_stamp_dx", 0.0)) @@ -12396,6 +12410,7 @@ def _sync_raum_stamps_to_source(doc): old_face = meta.get("raum_txt_font", "") or "" old_bold = bool(meta.get("raum_txt_bold", False)) old_ital = bool(meta.get("raum_txt_italic", False)) + old_align = meta.get("raum_align", "mid") # Im masstab-Modus ist die TextHeight am Stempel abgeleitet # (paper_mm * scale / 1000) — NICHT zurueck-spiegeln, sonst # waere der naechste Regen sofort verschoben. Wenn der User @@ -12409,7 +12424,8 @@ def _sync_raum_stamps_to_source(doc): (sync_height and abs(new_h - old_h) > 1e-6) or new_face != old_face or new_bold != old_bold or - new_ital != old_ital + new_ital != old_ital or + new_align != old_align ) if not changed: continue attrs = src_obj.Attributes.Duplicate() @@ -12417,6 +12433,7 @@ def _sync_raum_stamps_to_source(doc): "{:.6f}".format(new_dx)) attrs.SetUserString(_KEY_RAUM_STAMP_DY, "{:.6f}".format(new_dy)) + attrs.SetUserString(_KEY_RAUM_ALIGN, new_align) if sync_height: attrs.SetUserString(_KEY_RAUM_TXT_H, "{:.4f}".format(new_h)) diff --git a/src/ElementeApp.jsx b/src/ElementeApp.jsx index 5590938..db2840a 100644 --- a/src/ElementeApp.jsx +++ b/src/ElementeApp.jsx @@ -920,20 +920,14 @@ function RaumProperties({ raum, geschosse, onUpdate, onDelete, hatchPatterns, fo const [name, setName] = useState(raum.name || 'Raum') const [nummer, setNummer] = useState(raum.nummer || '') const [funktion, setFunktion] = useState(raum.funktion || '') - // Texthoehe lokal puffern — Modus bestimmt Einheit (m bei fix, mm bei masstab) + // Texthoehe (raum.txtH) + Ausrichtung (raum.align) werden via Oberleiste + // gesetzt — kein Local-State noetig, Stil-Speichern liest direkt aus raum. const txtModus = raum.txtModus || 'fix' - const txtHDisplay = (() => { - const v = parseFloat(raum.txtH) - if (Number.isNaN(v)) return '' - return String(v) - })() - const [txtH, setTxtH] = useState(txtHDisplay) useEffect(() => { setName(raum.name || 'Raum') setNummer(raum.nummer || '') setFunktion(raum.funktion || '') - setTxtH(txtHDisplay) - }, [raum.id, raum.name, raum.nummer, raum.funktion, raum.txtH, raum.txtModus]) + }, [raum.id, raum.name, raum.nummer, raum.funktion]) // Aktueller Wert von raum_fuellung: "" | "Solid" | "Hatch1" | … | "ByLayer" const fuell = raum.fuellung || '' @@ -1075,48 +1069,21 @@ function RaumProperties({ raum, geschosse, onUpdate, onDelete, hatchPatterns, fo + {/* Skala-Modus: fix = Modellhoehe in m (Oberleiste setzt direkt); + masstab = Paper-mm @ Plan-Massstab (Oberleiste-Hoehe wird zur + Render-Zeit berechnet, nicht gespiegelt). Hoehe + Ausrichtung + werden via Oberleiste-Text-Block gesetzt wenn der Stempel + selektiert ist — _sync_raum_stamps_to_source spiegelt die + Werte automatisch auf die Source-UserStrings. */}