Wand-Stil im Elemente-Panel editierbar
Backend - wand-State enthaelt jetzt styleId (aus _KEY_WAND_STYLE_ID) - STATE-Payload sendet wandStyles (analog oeffStyles) - _update_wall_body handhabt styleId-Patch: bei Stil-Wechsel uebernimmt die dicke aus dem Stil (wenn nicht explizit im selben Patch ueberschrieben); wand_style_id wird per _attach_meta auf die Achse persistiert Frontend - WallProperties bekommt wandStyles-Prop + zeigt Stil-Picker zwischen Geschoss und Aufbau (nur wenn Stile vorhanden) - Dropdown: "kein Stil" + alle definierten Stile mit (dicke, prio) - PropertiesView + ElementeApp + ElementePropertiesApp propagieren wandStyles
This commit is contained in:
+19
-1
@@ -9315,6 +9315,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
|||||||
"ok": ok,
|
"ok": ok,
|
||||||
"layered": bool(meta.get("wand_layered", False)),
|
"layered": bool(meta.get("wand_layered", False)),
|
||||||
"layers": meta.get("wand_layers", []),
|
"layers": meta.get("wand_layers", []),
|
||||||
|
"styleId": meta.get("wand_style_id", "") or "",
|
||||||
})
|
})
|
||||||
elif meta["type"] == "decke_outline":
|
elif meta["type"] == "decke_outline":
|
||||||
uk, ok = _resolve_decke_z(doc, meta["geschoss"], meta["dicke"],
|
uk, ok = _resolve_decke_z(doc, meta["geschoss"], meta["dicke"],
|
||||||
@@ -9641,6 +9642,7 @@ class ElementeBridge(panel_base.BaseBridge):
|
|||||||
{"name": n, "color": m["color"]}
|
{"name": n, "color": m["color"]}
|
||||||
for n, m in _get_all_materials(doc).items()],
|
for n, m in _get_all_materials(doc).items()],
|
||||||
"oeffStyles": list_oeff_styles(doc),
|
"oeffStyles": list_oeff_styles(doc),
|
||||||
|
"wandStyles": _get_all_wand_styles(doc),
|
||||||
"raumStempelStile": load_raum_stempel_stile(doc),
|
"raumStempelStile": load_raum_stempel_stile(doc),
|
||||||
"stempelStile": load_stempel_stile(doc),
|
"stempelStile": load_stempel_stile(doc),
|
||||||
"treppe2DShow": _treppe_2d_enabled(doc),
|
"treppe2DShow": _treppe_2d_enabled(doc),
|
||||||
@@ -14296,6 +14298,21 @@ class ElementeBridge(panel_base.BaseBridge):
|
|||||||
attrs.LayerIndex = _ensure_layer(doc, _layer_path_decke(doc, geschoss_name))
|
attrs.LayerIndex = _ensure_layer(doc, _layer_path_decke(doc, geschoss_name))
|
||||||
elif old_meta["type"] == "dach_outline":
|
elif old_meta["type"] == "dach_outline":
|
||||||
attrs.LayerIndex = _ensure_layer(doc, _layer_path_dach(doc, geschoss_name))
|
attrs.LayerIndex = _ensure_layer(doc, _layer_path_dach(doc, geschoss_name))
|
||||||
|
# Wand-Stil: bei Stil-Wechsel uebernehmen wir dicke aus dem Style
|
||||||
|
# (defaults), die Referenz bleibt erhalten. User kann dicke danach
|
||||||
|
# individuell wieder ueberschreiben.
|
||||||
|
if old_meta["type"] == "wand_axis" and "styleId" in p:
|
||||||
|
new_style_id = p.get("styleId") or ""
|
||||||
|
if new_style_id != old_meta.get("wand_style_id", ""):
|
||||||
|
stl = _find_wand_style(doc, new_style_id)
|
||||||
|
if stl is not None:
|
||||||
|
# dicke nur uebernehmen wenn User nicht explizit dicke
|
||||||
|
# ueberschrieben hat im selben Patch
|
||||||
|
if "dicke" not in p:
|
||||||
|
try: dicke = float(stl.get("dicke", dicke))
|
||||||
|
except Exception: pass
|
||||||
|
else:
|
||||||
|
new_style_id = old_meta.get("wand_style_id", "")
|
||||||
# Wenn layered + Layers gegeben: dicke aus Summe nachfuehren
|
# Wenn layered + Layers gegeben: dicke aus Summe nachfuehren
|
||||||
if wand_layered and wand_layers:
|
if wand_layered and wand_layers:
|
||||||
try:
|
try:
|
||||||
@@ -14315,7 +14332,8 @@ class ElementeBridge(panel_base.BaseBridge):
|
|||||||
neigung_unten=neigung_unten, knick_h=knick_h,
|
neigung_unten=neigung_unten, knick_h=knick_h,
|
||||||
dach_variante=dach_variante,
|
dach_variante=dach_variante,
|
||||||
wand_layered=wand_layered,
|
wand_layered=wand_layered,
|
||||||
wand_layers=wand_layers if wand_layered else [])
|
wand_layers=wand_layers if wand_layered else [],
|
||||||
|
wand_style_id=new_style_id if old_meta["type"] == "wand_axis" else None)
|
||||||
axis_obj.Attributes = attrs
|
axis_obj.Attributes = attrs
|
||||||
axis_obj.CommitChanges()
|
axis_obj.CommitChanges()
|
||||||
# Volumen regenerieren (Layer ggf. anpassen)
|
# Volumen regenerieren (Layer ggf. anpassen)
|
||||||
|
|||||||
+22
-2
@@ -527,12 +527,13 @@ function NeuesElementSection({ noGeschoss, activeName, elementsCount, treppe2DSh
|
|||||||
|
|
||||||
// PropertiesView: gemeinsame Komponente, rendert die passende Property-
|
// PropertiesView: gemeinsame Komponente, rendert die passende Property-
|
||||||
// Form je nach Element-Typ. Wiederverwendbar in Inline + Satellite-Window.
|
// Form je nach Element-Typ. Wiederverwendbar in Inline + Satellite-Window.
|
||||||
export function PropertiesView({ selected, geschosse, materials, hatchPatterns, oeffStyles, fonts, raumStempelStile, stempelStile }) {
|
export function PropertiesView({ selected, geschosse, materials, hatchPatterns, oeffStyles, wandStyles, fonts, raumStempelStile, stempelStile }) {
|
||||||
if (!selected) return null
|
if (!selected) return null
|
||||||
const upd = (p) => updateElement(selected.id, p)
|
const upd = (p) => updateElement(selected.id, p)
|
||||||
const del = (label) => () => { if (window.confirm(`${label} löschen?`)) deleteElement(selected.id) }
|
const del = (label) => () => { if (window.confirm(`${label} löschen?`)) deleteElement(selected.id) }
|
||||||
if (selected.kind === 'wand')
|
if (selected.kind === 'wand')
|
||||||
return <WallProperties wall={selected} geschosse={geschosse} materials={materials || []}
|
return <WallProperties wall={selected} geschosse={geschosse} materials={materials || []}
|
||||||
|
wandStyles={wandStyles || []}
|
||||||
onUpdate={upd} onDelete={del('Wand')} />
|
onUpdate={upd} onDelete={del('Wand')} />
|
||||||
if (selected.kind === 'decke')
|
if (selected.kind === 'decke')
|
||||||
return <DeckenProperties decke={selected} geschosse={geschosse}
|
return <DeckenProperties decke={selected} geschosse={geschosse}
|
||||||
@@ -610,6 +611,7 @@ export default function ElementeApp() {
|
|||||||
hatchPatterns={state.hatchPatterns}
|
hatchPatterns={state.hatchPatterns}
|
||||||
fonts={state.fonts || []}
|
fonts={state.fonts || []}
|
||||||
oeffStyles={state.oeffStyles || []}
|
oeffStyles={state.oeffStyles || []}
|
||||||
|
wandStyles={state.wandStyles || []}
|
||||||
raumStempelStile={state.raumStempelStile || []}
|
raumStempelStile={state.raumStempelStile || []}
|
||||||
stempelStile={state.stempelStile || []} />
|
stempelStile={state.stempelStile || []} />
|
||||||
</div>
|
</div>
|
||||||
@@ -1469,7 +1471,7 @@ function AussparungProperties({ aussp, onDelete }) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function WallProperties({ wall, geschosse, materials, onUpdate, onDelete }) {
|
function WallProperties({ wall, geschosse, materials, wandStyles, onUpdate, onDelete }) {
|
||||||
const [dicke, setDicke] = useState(String(wall.dicke))
|
const [dicke, setDicke] = useState(String(wall.dicke))
|
||||||
const [ukOver, setUkOver] = useState(wall.ukOverride)
|
const [ukOver, setUkOver] = useState(wall.ukOverride)
|
||||||
const [okOver, setOkOver] = useState(wall.okOverride)
|
const [okOver, setOkOver] = useState(wall.okOverride)
|
||||||
@@ -1481,6 +1483,7 @@ function WallProperties({ wall, geschosse, materials, onUpdate, onDelete }) {
|
|||||||
|
|
||||||
const ukAuto = ukOver === '' || ukOver == null
|
const ukAuto = ukOver === '' || ukOver == null
|
||||||
const okAuto = okOver === '' || okOver == null
|
const okAuto = okOver === '' || okOver == null
|
||||||
|
const styles = wandStyles || []
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div style={{
|
<div style={{
|
||||||
@@ -1508,6 +1511,23 @@ function WallProperties({ wall, geschosse, materials, onUpdate, onDelete }) {
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{styles.length > 0 && (
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
||||||
|
<span style={{ fontSize: 10, color: 'var(--text-secondary)', width: 50 }}>Stil</span>
|
||||||
|
<select value={wall.styleId || ''}
|
||||||
|
onChange={(e) => onUpdate({ styleId: e.target.value })}
|
||||||
|
style={{ flex: 1, fontSize: 11 }}
|
||||||
|
title="Wand-Stil aus den Projekt-Einstellungen. Stil-Wechsel uebernimmt dicke aus dem Stil.">
|
||||||
|
<option value="">— kein Stil —</option>
|
||||||
|
{styles.map(s => (
|
||||||
|
<option key={s.id} value={s.id}>
|
||||||
|
{s.name || s.id} ({(s.dicke || 0).toFixed(2)} m, prio {s.prio || 0})
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
<div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
||||||
<span style={{ fontSize: 10, color: 'var(--text-secondary)', width: 50 }}>Aufbau</span>
|
<span style={{ fontSize: 10, color: 'var(--text-secondary)', width: 50 }}>Aufbau</span>
|
||||||
<div style={{ flex: 1, display: 'flex', gap: 3 }}>
|
<div style={{ flex: 1, display: 'flex', gap: 3 }}>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ export default function ElementePropertiesApp() {
|
|||||||
hatchPatterns={state.hatchPatterns}
|
hatchPatterns={state.hatchPatterns}
|
||||||
fonts={state.fonts || []}
|
fonts={state.fonts || []}
|
||||||
oeffStyles={state.oeffStyles || []}
|
oeffStyles={state.oeffStyles || []}
|
||||||
|
wandStyles={state.wandStyles || []}
|
||||||
raumStempelStile={state.raumStempelStile || []}
|
raumStempelStile={state.raumStempelStile || []}
|
||||||
stempelStile={state.stempelStile || []}
|
stempelStile={state.stempelStile || []}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user