File size: 3,924 Bytes
9de795a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/** Geteilte Möbel-Proportionen für 2D-Grundriss UND 3D-Viewer.
 *
 * Warum eine eigene Datei: Grundriss (`symbole2d.ts`) und 3D-Bausätze
 * (`moebel3d.tsx`) haben dieselben Möbel zweimal beschrieben – mit leicht
 * unterschiedlichen Anteilen (Armlehne 14 % vs. 11 %, Rückenlehne 22 % vs.
 * 24 %). Ergebnis: Das Sofa im Plan sah anders aus als im 3D, was beim
 * Vergleich sofort auffällt. Die Anteile stehen darum **einmal** hier und
 * werden von beiden Seiten gelesen.
 *
 * Alle Werte sind **Anteile der Bounding-Box** (0..1), nie absolute Meter –
 * so bleiben sie für jede Möbelgrösse gültig und die bbox-Invariante
 * (nichts ragt über w×d×h hinaus) bleibt trivial einhaltbar.
 *
 * Koordinaten wie überall: Front = +z, Rückseite = −z, Ursprung = bbox-Mitte.
 */

/** Sofa/Sessel/Récamière – Polstermöbel mit Rückenlehne und zwei Armlehnen. */
export const SOFA = {
  /** Breite EINER Armlehne, Anteil der Gesamtbreite. */
  armBreite: 0.11,
  /** Tiefe der Rückenlehne, gemessen ab der Rückkante (−d/2). */
  lehneTiefe: 0.24,
  /** Tiefe der Armlehnen (etwas kürzer als der Korpus). */
  armTiefe: 0.9,
  /** Mitten-Versatz der Armlehnen nach vorne. */
  armVersatz: 0.02,
  /** Sitzkissen: Breite und Mitten-Abstand, Anteil der Innenbreite. */
  kissenBreite: 0.47,
  kissenVersatz: 0.24,
  /** Tiefe der Sitzkissen, Anteil der Gesamttiefe. */
  kissenTiefe: 0.66,
  /** Mitten-Versatz der Sitzkissen nach vorne. */
  kissenVersatzTiefe: 0.06,
} as const;

/** Ecksofa/L-Sofa (`modell3d: "sofa-l"`): Hauptbank hinten + Longchair rechts.
 *
 * Anteile der bbox, abgeleitet aus dem bestehenden 3D-Bausatz `sofaL` – das
 * 2D-Symbol fehlte bisher ganz, weshalb im Grundriss ein normales Sofa
 * gezeichnet wurde, während der 3D-Viewer ein L zeigte. Der Longchair liegt
 * rechts (lokal +x) und ragt nach vorne (+z); gespiegelte Aufstellungen
 * ergeben sich über den Yaw des Solvers.
 */
export const ECKSOFA = {
  /** Tiefe der Hauptzeile, gemessen ab der Rückkante. */
  hauptTiefe: 0.62,
  /** Breite des vorspringenden Schenkels. */
  schenkelBreite: 0.46,
  /** Breite EINER Armlehne (nur aussen, innen ist die Sitzlandschaft offen). */
  armBreite: 0.1,
  /** Höhe der Rückenlehne, Anteil der Gesamthöhe. */
  lehneHoehe: 0.5,
} as const;

/** TV-Lowboard – der Fernseher darauf. */
export const TV = {
  /** Oberkante des Korpus (inkl. Platte), Anteil der Gesamthöhe ab Unterkante. */
  korpusOben: 0.44,
  /** Höhe des Standfusses zwischen Korpus und Bildschirm-Unterkante. */
  fussHoehe: 0.08,
  /**
   * Seitenverhältnis des Bildschirms (Breite/Höhe). Fernseher sind seit Jahren
   * praktisch ausnahmslos 16:9 – vorher wurde der Bildschirm aus der
   * Lowboard-Breite abgeleitet und dadurch extrem breitgezogen (bei 1.4 m
   * Möbelbreite ein 1.2 × 0.25 m «Briefschlitz»). Jetzt bestimmt die im
   * bbox verbleibende HÖHE die Grösse, die Breite folgt aus 16:9.
   */
  seitenverhaeltnis: 16 / 9,
  /** Der Bildschirm darf höchstens so breit werden (Anteil der Möbelbreite). */
  maxBreite: 0.95,
} as const;

/**
 * Ablagehöhe für Deko «auf_oberflaeche», als Anteil der Möbelhöhe.
 *
 * Default ist 1.0 = bbox-Oberkante (Tisch, Sideboard, Kommode – dort liegt die
 * Ablagefläche tatsächlich oben). Bei Polstermöbeln ist die Oberkante aber die
 * **Rückenlehne**: ein Plaid oder Kissen landete dadurch frei schwebend über
 * dem Sofa. Für sie zählt die Sitz- bzw. Liegefläche.
 */
export const ABLAGE_ANTEIL: Record<string, number> = {
  sofa: 0.56,
  sessel: 0.58,
  recamiere: 0.58,
  pouf: 0.95,
  bett: 0.95,
  einzelbett: 0.95,
  doppelbett: 0.95,
  kinderbett: 0.95,
  stuhl: 0.55,
  barhocker: 0.95,
  badhocker: 0.95,
};

/** Ablagehöhe eines Möbels in Metern (Deko liegt darauf auf). */
export function ablageHoehe(funktionsTyp: string, hoehe: number): number {
  return hoehe * (ABLAGE_ANTEIL[funktionsTyp] ?? 1.0);
}