Mass-Style Preset (Raum-Rundung + Dim-Format) + Rundung als Dropdown
Frontend: - RaumProperties Rundung: 5er-Button-Reihe → Dropdown mit "Aus Mass-Style" als erstem Eintrag (leer = Default aus aktivem Preset uebernehmen) - Dach-Typ + Mansarde-Variante: text-only Button-Reihen → Dropdowns - Mass-Style-Section neu im DimensionenApp ganz oben: - Picker fuer aktives Preset - + (neu mit aktuellen Werten als Vorlage) / Loeschen - Inline-Editor: Name, Raum-Rundung, Mass-Dezimalstellen, Mass-Einheit Backend (rhino/mass_style.py — neu): - doc.Strings["dossier_mass_styles"]: JSON-Liste der Presets - doc.Strings["dossier_mass_style_active"]: aktive Preset-ID - list_presets/save_preset/delete_preset/get_active_id/set_active_id - Convenience: raum_rundung_default(doc), dim_dezimalstellen_default(doc) - Default-Presets bei erster Initialisierung: 1:50 / 1:100 / 1:500 elemente.py: - _read_meta: raum_rundung leer wenn UserString fehlt (vorher gezwungen "0.1") - _resolve_raum_rundung(meta, doc): per-Raum-Override > Mass-Style-Default - _make_raum_stamp_text + state-send nutzen Resolver - State sendet rundung (raw, kann "" sein) + rundungEffective + areaFmt damit React-Panel "Aus Mass-Style" anzeigen kann dimensionen.py: - Bridge-Endpoints MASS_STYLE_SET_ACTIVE / SAVE / DELETE - _broadcast_raum_regen: bei Preset-Wechsel alle Raeume queuen → Stempel- Flaechen kommen mit neuer Default-Rundung - _compute_state liefert massStyles + massStyleActive + signature update NOCH NICHT verdrahtet: Mass-Linien-Formatierung (dimDezimalstellen, dimEinheit) — Datenmodell ist da, Anwendung auf Rhino-Dimension-Renderer folgt in einem naechsten Schritt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+25
-6
@@ -21,6 +21,7 @@ if _HERE not in sys.path:
|
||||
sys.path.insert(0, _HERE)
|
||||
|
||||
import panel_base
|
||||
import mass_style
|
||||
|
||||
PANEL_GUID_STR = "5a6b7c8d-9e0f-4a1b-c2d3-e4f5061728e0"
|
||||
|
||||
@@ -96,6 +97,21 @@ _KEY_RAUM_SIA = "dossier_raum_sia" # "" | "hnf" | "nnf" | "vf" | "ff"
|
||||
_KEY_RAUM_FUELL = "dossier_raum_fuellung" # "" (keine) | "Solid" | Pattern-Name | "ByLayer"
|
||||
|
||||
_RAUM_RUNDUNGEN = ("exakt", "0.01", "0.1", "0.5", "1")
|
||||
|
||||
|
||||
def _resolve_raum_rundung(meta, doc=None):
|
||||
"""Loest die Raum-Rundung auf. Wenn am Raum eine explizite UserString-
|
||||
Rundung gesetzt ist (raum_rundung != ""), gewinnt die. Sonst Default aus
|
||||
dem aktiven Mass-Style. Doc-Default fallback "0.1" wenn nichts gesetzt."""
|
||||
explicit = (meta or {}).get("raum_rundung") or ""
|
||||
if explicit in _RAUM_RUNDUNGEN: return explicit
|
||||
if doc is None: doc = Rhino.RhinoDoc.ActiveDoc
|
||||
try:
|
||||
return mass_style.raum_rundung_default(doc)
|
||||
except Exception:
|
||||
return "0.1"
|
||||
|
||||
|
||||
_RAUM_ALIGN = ("links", "mid", "rechts")
|
||||
_RAUM_SIA_KINDS = ("", "hnf", "nnf", "vf", "ff")
|
||||
_RAUM_FUNKTIONEN = (
|
||||
@@ -1958,8 +1974,9 @@ def _read_meta(obj):
|
||||
r_name = a.GetUserString(_KEY_RAUM_NAME) or ""
|
||||
r_num = a.GetUserString(_KEY_RAUM_NUMMER) or ""
|
||||
r_fkt = a.GetUserString(_KEY_RAUM_FUNKTION) or ""
|
||||
r_rnd = a.GetUserString(_KEY_RAUM_RUNDUNG) or "0.1"
|
||||
if r_rnd not in _RAUM_RUNDUNGEN: r_rnd = "0.1"
|
||||
# Leer = "Default aus Mass-Style" — wird in _resolve_rundung() aufgeloest.
|
||||
r_rnd = a.GetUserString(_KEY_RAUM_RUNDUNG) or ""
|
||||
if r_rnd and r_rnd not in _RAUM_RUNDUNGEN: r_rnd = ""
|
||||
try: r_th = float(a.GetUserString(_KEY_RAUM_TXT_H) or "0.20")
|
||||
except Exception: r_th = 0.20
|
||||
r_align = a.GetUserString(_KEY_RAUM_ALIGN) or "mid"
|
||||
@@ -4536,7 +4553,7 @@ def _regenerate_element_body(doc, element_id, src_obj, meta, geom, geschoss_name
|
||||
meta.get("raum_nummer", ""),
|
||||
meta.get("raum_funktion", ""),
|
||||
area,
|
||||
meta.get("raum_rundung", "0.1"),
|
||||
_resolve_raum_rundung(meta, doc),
|
||||
meta.get("raum_txt_h", 0.20),
|
||||
z=z_uk,
|
||||
align=meta.get("raum_align", "mid"))
|
||||
@@ -4813,19 +4830,21 @@ class ElementeBridge(panel_base.BaseBridge):
|
||||
area, perim, _ctr = _raum_amp(g_obj)
|
||||
except Exception:
|
||||
area, perim = 0.0, 0.0
|
||||
rnd = meta.get("raum_rundung", "0.1")
|
||||
rnd_raw = meta.get("raum_rundung") or "" # "" = aus Mass-Style
|
||||
rnd_eff = _resolve_raum_rundung(meta, doc)
|
||||
base.update({
|
||||
"kind": "raum",
|
||||
"name": meta.get("raum_name", "Raum"),
|
||||
"nummer": meta.get("raum_nummer", ""),
|
||||
"funktion": meta.get("raum_funktion", ""),
|
||||
"rundung": rnd,
|
||||
"rundung": rnd_raw,
|
||||
"rundungEffective": rnd_eff,
|
||||
"txtH": meta.get("raum_txt_h", 0.20),
|
||||
"align": meta.get("raum_align", "mid"),
|
||||
"sia": meta.get("raum_sia", ""),
|
||||
"fuellung": bool(meta.get("raum_fuellung", False)),
|
||||
"area": area,
|
||||
"areaFmt": _format_area(area, rnd),
|
||||
"areaFmt": _format_area(area, rnd_eff),
|
||||
"umfang": perim,
|
||||
})
|
||||
elif meta["type"] in ("stuetze_point", "traeger_axis"):
|
||||
|
||||
Reference in New Issue
Block a user