# Nomenklatur der Root-Handle-Punkte — schutzzaun_basic

Quelle: `katalog_fix3.zip`, Familie `schutzzaun_basic`, 889 Entities.
Betrachtet werden **ausschließlich die Punkte auf dem Root-Handle** (Transform `key == "root"`). Punkte in Unterteilen sind hier nicht enthalten.

## Umfang

Auf Root-Handles kommen **24 Punkt-Namen** vor — keine Richtungswörter (LINKS/RECHTS/VORNE/HINTEN) und keine Zahlen-Tripel (`_x_y_z`); die liegen alle in Unterteilen.

## Aufbau der Namen

```
CS_<PRÄFIX>[_<SEITE>][_<EBENE>][_<WINKEL>][_B]
```

| Bestandteil | Werte | Bedeutung |
|---|---|---|
| Präfix | `BASE`, `EIN`, `OUT`, `SELECT` | Punkttyp |
| Seite | `L`, `R` | linkes / rechtes Feldende (Achse z) |
| Ebene | `START` | unten (y = 0) statt Referenzhöhe (y = 1100) |
| Winkel | `0`, `90`, `270` | Abgangsrichtung; `_270` nur bei OUT/SELECT, nicht bei EIN |
| `_B` | — | zweite/hintere Variante desselben OUT-Punkts |

## Die vier Typen

- **`CS_BASE` / `CS_BASE_PRE`** — Anker. In **allen 889** Teilen. Über diesen Punkt wird das Teil hingestellt.
- **`CS_EIN_*`** — Einbau-/Kupplungspunkte für die Feldverkettung. Nur in **153** Teilen (17 %, die verkettbaren Felder).
- **`CS_OUT_*`** — Umrisspunkte. Nur in denselben 153 Teilen.
- **`CS_SELECT_*`** — Auswahlpunkte (Selektionsbox). Nur in denselben 153 Teilen.

## Semantik der Kupplungspunkte (belegt)

- **`L` / `R`** = die beiden Enden entlang z. Links bei z ≈ 0, rechts bei z ≈ −Feldbreite. Der R-Punkt trägt zusätzlich 180°-Drehung (blickt entgegengesetzt).
- **`START`** = keine Seite, sondern die Höhe: `START_x` sitzt unten (y = 0), `CS_EIN_x` auf Referenzhöhe (y = 1100). Beide Seiten haben je einen START- und einen Höhenpunkt.
- **`_90`** = kein 90°-Drehung des Punkts, sondern seitlicher Versatz um die **Steherbreite (45 mm)** in −x — Andockstelle für ein rechtwinklig ankommendes Teil.
- Ein `_270` (Abgang nach hinten) existiert bei `CS_EIN` **nicht**, nur bei den Hilfspunkten `CS_OUT`/`CS_SELECT`.

Die Benennung ist regelmäßig und L/R-symmetrisch: jeder der 153 Kupplungsteile trägt exakt denselben Satz.

## Gültigkeit — Abstand zur echten Geometrie

Gemessen transformationskorrekt gegen die echte Bounding-Box (die 5–21-m-Ausreißer der Kappen-Unterteile ausgenommen). Median über die jeweiligen Teile.

| Punkt | Anzahl | Median | Max | > 100 mm weg |
|---|---:|---:|---:|---:|
| `CS_BASE` / `CS_BASE_PRE` | 889 | 0 | 271 | 2 % |
| `CS_EIN_START_L` | 153 | 0 | 0 | 0 % |
| `CS_EIN_L` | 153 | 0 | 0 | 0 % |
| `CS_EIN_L_90` | 8 | 21 | 21 | 0 % |
| `CS_OUT_L_*` | 153 | 0–30 | 71 | 0 % |
| `CS_SELECT_L_270` | 153 | 0 | 220 | 1 % |
| **`CS_EIN_START_R`** | 153 | **883** | 1928 | 93 % |
| **`CS_EIN_R`** | 153 | **863** | 1908 | 93 % |
| **`CS_EIN_R_90`** | 8 | **1019** | 1019 | 100 % |
| **`CS_OUT_R_*`** | 153 | **863–913** | 1958 | 93–96 % |
| **`CS_SELECT_R_*`** | 153 | **883–1183** | 2228 | 94–100 % |

(`CS_SELECT_L_0` / `_L_90` liegen mit ~150–300 mm bewusst etwas außerhalb — Selektionsbox.)

## Befund

- **Anker (`CS_BASE`) korrekt** in allen Teilen → Hinstellen funktioniert überall.
- **Linke Seite komplett korrekt**: `START_L`, `L`, `L_90`, alle `OUT_L`/`SELECT_L`.
- **Rechte Seite durchgängig versetzt**: **jeder** R-Punkt (`EIN`, `OUT`, `SELECT`) liegt um rund eine **Feldbreite (~860–1900 mm)** daneben. Das ist ein einzelner systematischer Fehler — die rechte Seite steht im falschen Ursprung, um das Feldmaß verschoben.

## Konsequenz

- Hinstellen (`CS_BASE`): geht.
- Geregelter Einbau nach links (eingehende Seite, `START_L`/`L`): geht.
- Geregelter Einbau nach rechts / Weiterreihen (`START_R`/`R`/`R_90`): **kaputt**, solange die rechte Seite nicht um das Feldmaß zurückkorrigiert wird.
- Die Nomenklatur selbst ist konsistent; der Fehler steckt nicht in den Namen, sondern in den Koordinaten der R-Punkte.
