@@ -1684,7 +1680,7 @@ function TreppeProperties({ treppe, geschosse, onUpdate, onDelete }) {
)
}
-function OeffnungProperties({ oeff, onUpdate, onDelete }) {
+function OeffnungProperties({ oeff, onUpdate, onDelete, oeffStyles = [] }) {
const isFenster = oeff.kind === 'fenster'
const label = isFenster ? 'Fenster' : 'Tür'
const icon = isFenster ? 'window' : 'sensor_door'
@@ -1709,16 +1705,13 @@ function OeffnungProperties({ oeff, onUpdate, onDelete }) {
}
const fluegel = oeff.fluegel ?? 1
- const rahmenPos = oeff.rahmenPos ?? 'mid'
const simsAus = oeff.simsAus ?? 'ohne'
- const simsIn = oeff.simsIn ?? 'ohne'
return (
@@ -1731,6 +1724,97 @@ function OeffnungProperties({ oeff, onUpdate, onDelete }) {
+ {/* Stil-Picker — Liste passender Styles (gefiltert nach typ) */}
+
+
+ Stil
+
+
+ {
+ if (v === '__save__') {
+ const sugg = (oeffStyles.find(s => s.id === oeff.styleId) || {}).name || ''
+ const n = (window.prompt('Name fuer neuen Stil:', sugg || (isFenster ? 'Mein Fenster' : 'Meine Tuer')) || '').trim()
+ if (!n) return
+ saveOeffStyle(n, {
+ typ: isFenster ? 'fenster' : 'tuer',
+ breite: oeff.breite, hoehe: oeff.hoehe, brueest: oeff.brueest,
+ rahmenB: oeff.rahmenB, rahmenTiefe: oeff.rahmenTiefe,
+ rahmenOffset: oeff.rahmenOffset,
+ fluegel: oeff.fluegel, simsAus: oeff.simsAus,
+ glas: oeff.glas, darstellung: oeff.darstellung,
+ tuerRahmen: oeff.tuerRahmen,
+ })
+ return
+ }
+ if (v === '__delete__') {
+ if (oeff.styleId && window.confirm('Aktiven Stil loeschen?'))
+ deleteOeffStyle(oeff.styleId)
+ return
+ }
+ onUpdate({ styleId: v })
+ }}
+ title="Stil anwenden — alle Properties werden gesetzt">
+
+ {oeffStyles
+ .filter(s => s.typ === (isFenster ? 'fenster' : 'tuer'))
+ .map(s => )}
+
+
+ {oeff.styleId && }
+
+
+
+
+
+
+ Darstell.
+
+
+ onUpdate({ darstellung: v })}
+ title="Detaillierungsgrad — beeinflusst die generierte Geometrie">
+
+
+
+
+
+
+
+
+
+ Orient.
+
+
+ onUpdate({ aussenseite:
+ (oeff.aussenseite || 'rechts') === 'rechts' ? 'links' : 'rechts' })}
+ title="Aussenseite auf die andere Wandseite umkehren" />
+
+
+
+ {!isFenster && (
+
+
+ Rahmen
+
+
+ onUpdate({ tuerRahmen: 'zarge' })} />
+ onUpdate({ tuerRahmen: 'block' })} />
+
+
+ )}
+
Breite
m
- {/* Rahmen-Lage im Wandquerschnitt */}
+ {/* Rahmen-Lage: Abstand der Rahmen-Innenkante von der Wand-Innenseite */}
+ title="Abstand der Rahmen-Innenkante von der Wand-Innenseite (Aussenseite-Flag oben bestimmt welche Seite innen ist)">
Lage
-
- {RAHMEN_POS_OPTIONS.map(o => (
- onUpdate({ rahmenPos: o.code })}
- title={o.hint} />
- ))}
-
+
{
+ const v = parseFloat(e.target.value.replace(',', '.'))
+ if (!Number.isNaN(v) && v >= 0) onUpdate({ rahmenOffset: v })
+ }}
+ onKeyDown={(e) => { if (e.key === 'Enter') e.target.blur() }}
+ style={{ flex: 1, fontSize: 11, fontFamily: 'DM Mono, monospace' }} />
+
m v. innen
{/* Fluegel-Anzahl — nur fuer Fenster (Tueren haben ein einzelnes Tuerblatt) */}
@@ -1846,34 +1930,24 @@ function OeffnungProperties({ oeff, onUpdate, onDelete }) {
)}
- {/* Sims-Stile (aussen / innen) — nur fuer Fenster */}
+ {/* Sims — nur aussen. Innen gibt's bewusst nicht. Dient zugleich
+ als visueller Indikator fuer die Aussenseite-Einstellung. */}
{isFenster && (
- <>
-