Files
dxfmakros/doc/cad-datenaufbereitung.md
T

181 lines
7.9 KiB
Markdown

# Datenaufbereitung der CAD-Bausteine
Kurzanleitung fuer alle, die neue CAD-Modelle (DWG/DXF-Bausteine) fuer die
SSG_LIB-Makros anlegen oder bestehende ersetzen.
Hier finden Sie Antworten auf folgende Fragen:
1. [Wo sind Koordinatensysteme anzusetzen?](#1-wo-sind-koordinatensysteme-anzusetzen)
2. [Wie muessen sie heissen?](#2-wie-muessen-die-koordinatensysteme-heissen)
3. [Wie werden 3D-Modelle anhand der 2.5D-Skelette platziert?](#3-grundidee-platzierung-ueber-das-25d-skelett)
4. [Wo und wie werden die Dateien abgelegt?](#4-datenablage-und-benennung)
Am Ende steht eine [Checkliste](#5-checkliste-fuer-ein-neues-modell).
---
## 1. Wo sind Koordinatensysteme anzusetzen?
Ein Koordinatensystem (KS) markiert einen **Anschlusspunkt**: die Stelle, an
der ein Baustein an seinen Vorgaenger bzw. Nachfolger andockt. Es sitzt
immer **auf der Mittellinie der Foerderstrecke** (dem Skelett, siehe
Abschnitt 3), genau am Uebergang zum Nachbarteil.
**Aufbau eines KS** - ein kleiner Block mit drei LINEs, alle ab demselben
Ursprung:
| Achse | Farbe | Laenge | Richtung |
|---|---|---|---|
| X | rot (1) | 1 | Foerderrichtung (bzw. Anschlussrichtung, siehe unten) |
| Y | gruen (3) | 2 | quer dazu, nach links |
| Z | blau (5) | 3 | nach oben, aus der Zeichenebene |
Die Makros erkennen die Achsen **nur an der Linienlaenge** (1 = X, 2 = Y,
3 = Z; X darf auch 100 lang sein). Farben dienen nur der Lesbarkeit. Der
KS-Block liegt auf Layer `_KOORDINATENSYSTEME` und muss **direkt** (eine
Ebene tief) im Baustein eingefuegt sein, nicht in einem weiteren Unterblock.
### ILS-Kettenbausteine (Vario, Gefaelle, AS/ES, Staustrecke, Separator ...)
- **`KS_EIN`** am Einlauf, **`KS_AUS`** am Auslauf.
- Bei **beiden** zeigt die X-Achse **in Foerderrichtung**. Beim Verketten
kommt das `KS_EIN` des Nachfolgers auf das `KS_AUS` des Vorgaengers; die
Richtung des Folgebausteins wird aus der X-Achse von `KS_AUS` gemessen
(z.B. beim Kettenfoerderer).
- Laengenvariable Teile (Staustrecke, `KF_LAENGE`) liegen entlang **+X** und
werden in X skaliert - `KS_EIN` bei X=0, `KS_AUS` am Ende der
Referenzlaenge (z.B. 1000 mm).
### Omniflo-Boegen und -Weichen
- Anschluss-KS heissen **`K1` bis `K4`**. Die X-Achse zeigt jeweils **in
das Element hinein** (tangential zur Linie).
- Zuordnung:
| KS | Boegen | Weichen |
|---|---|---|
| K1 | Beginn der obersten waagerechten Linie, X nach rechts | Beginn der untersten senkrechten Linie, X nach oben |
| K2 | anderes Kettenende | Ende des linken Bogenzweigs |
| K3 | - | Ende des rechten Bogenzweigs (nur bei 2+ Boegen) |
| K4 | - | oberes Ende der K1-Linie (nicht bei Doppel-/Dreifach-/Deltaweiche) |
- K1-K4 muessen nicht von Hand gezeichnet werden: `lib/set_koords.py --set-all`
setzt sie geometrisch, vorher setzt `bin\set_einfuegepunkt.bat`
(`lib/set_einfuegepkt.py`) den Einfuegepunkt. Details: [tools.md](tools.md).
### Bausteine ohne KS
Einzeln frei platzierte Teile (Kreisel-Raeder `AN8`/`SP8`, BTMT-Stationen,
Scanner, Eingang/Ausgang, Geruestteile) brauchen kein KS. Hier zaehlt nur
der **Einfuegepunkt** (Basispunkt der DWG), siehe Abschnitt 3.
---
## 2. Wie muessen die Koordinatensysteme heissen?
| Name | Verwendung |
|---|---|
| `KS_EIN` | Einlauf eines ILS-Kettenbausteins |
| `KS_AUS` | Auslauf eines ILS-Kettenbausteins |
| `K1` ... `K4` | Anschluesse von Omniflo-Boegen/-Weichen |
- Genau diese Schreibweise, **ohne** `_2D`/`_3D`-Suffix (die KS-Bloecke sind
dimensionsunabhaengig und in 2D- und 3D-Variante identisch).
- Je Baustein jedes KS **nur einmal**.
- `KSYS_EIN`/`KSYS_AUS` werden aus Altbestaenden noch gelesen, fuer neue
Modelle aber nicht mehr verwenden.
---
## 3. Grundidee: Platzierung ueber das 2.5D-Skelett
**Skelett** = die Mittellinie der Foerderstrecke als einfache Linien/Boegen.
"2.5D", weil es eine flache Grundriss-Geometrie ist, deren Punkte zusaetzlich
eine Hoehe (Z) tragen - keine echte 3D-Konstruktion.
Das Prinzip hat zwei Seiten:
**a) Im Baustein selbst** ist das Skelett die Bezugsgeometrie:
- Die 2D-Variante *ist* das Skelett (plus Symbolik).
- Das 3D-Modell enthaelt **dieselben 2D-Skelettlinien** in seiner
Grundebene. Einfuegepunkt und KS liegen auf diesem Skelett - deshalb
sind sie in 2D- und 3D-Variante **deckungsgleich** und die Varianten
beliebig austauschbar. Die Omniflo-Werkzeuge (`set_einfuegepkt.py`,
`set_koords.py`) werten genau diese Skelettlinien aus; ohne sie
funktionieren sie bei 3D-Dateien nicht.
- Gezeichnet wird in der Lage "Foerderrichtung = +X, Z nach oben". Einzige
Ausnahme: aufrecht eingebaute Teile wie der Kettenfoerderer (`KF_*`)
sind in XY gezeichnet (Y = Hoehe) und werden vom Makro aufgerichtet.
**b) In der Anlage** liefert der Anwender bzw. das Makro das Skelett
(geklickte Punkte, gezeichneter Linienzug, Hoehen). Die Makros setzen die
Bausteine darauf nacheinander:
1. `KS_EIN` des Bausteins auf den aktuellen Skelettpunkt legen.
2. Drehen: um Z nach der Grundriss-Richtung des Segments, um Y nach dessen
Neigung (Rz * Ry).
3. Laengenteile in X auf die Segmentlaenge skalieren.
4. Weltlage von `KS_AUS` lesen = Startpunkt des naechsten Bausteins.
Freistehende Teile ohne KS werden nur mit Einfuegepunkt + Drehung gesetzt
(z.B. `AN8` mit dem Basispunkt in der Radmitte).
Weil 3D-Modell und 2D-Symbol am selben Skelett haengen, kann jede Anlage
wahlweise in 2D oder 3D aufgebaut und spaeter umgeschaltet werden.
---
## 4. Datenablage und Benennung
Grundregeln:
- **Eine Datei je Baustein**, Dateiname = Blockname.
- Namen nur **ASCII, ohne Umlaute und Leerzeichen** (`ae`/`oe`/`ue`, `_`
als Trenner).
- Der Basispunkt der DWG ist der Einfuegepunkt (s. Abschnitt 3).
| Bereich | Ablage | Benennung |
|---|---|---|
| ILS (Kreisel, Vario, Gefaelle, AS/ES, Stationen, Sensoren) | `data/ils/` **flach** | `<Name>_2D.dwg` und `<Name>_3D.dwg`, z.B. `AS_Element_30_links_3D.dwg`. Fehlt die 2D-Datei, wird automatisch die 3D-Datei genommen |
| Omniflo-Boegen/-Weichen | `data/omniflo/2D/` bzw. `data/omniflo/3D/` | Sivas-Nummer, `.dxf`, z.B. `821104024.dxf`; Kombinationen mit `+`, z.B. `821104024+0_B10081.dxf` |
| Omniflo-Verbinder | `data/omniflo/Verbinder/` | dimensionsunabhaengig, z.B. `TV_AP60-ST_kpl.dwg` |
| Kettenfoerderer | `data/omniflo/2D/` | ohne Suffix: `KF_UM_26`, `KF_AN_30`, `KF_LAENGE`, `KF_2D` |
| Geruest | `data/geruest/` | Artikelnummer, z.B. `821006031.dwg`; Platzhalter `dummy_*.dwg` |
| DIN-Rahmen/Schriftkoepfe | `cfg/rahmen/` | `A0.DWG` ... `Kopf11.dwg` |
**Zugehoerige Daten** (Masse, Sivas-/Artikelnummern, Auswahllisten) liegen
nicht in der DWG, sondern in `data/json/` - z.B. `omniflo_boegen.json`,
`omniflo_weichen.json`, `geruest.json`, `kettenfoerderer.json`. Ein neues
Omniflo- oder Geruestteil ist erst auswaehlbar, wenn es dort eingetragen ist.
**Attribute und Layer:**
- Bloecke, die nur eingefuegt werden, tragen ihren Ziel-Layer als Attribut
**`LAYER`** (Vorgaben je Block in `data/ils/allocations.json`, z.B.
`AN8_2D` -> `ILS_ANTR`, `AN8_3D` -> `_3D_ILS_ANTR`).
- Ein leeres **`ID`**-Attribut mit anlegen - nur dann kann die automatische
ID-Vergabe fuer den Export es befuellen.
- Omniflo-Teile brauchen fuer den Export `TEILEART` (`Omniflo ...`) und
`ARTINR`.
- Layer/Farbe zusammengebauter Baugruppen (`KREISEL_n`, `VF_n`, `GF_n`)
stehen nicht im Modell, sondern in `cfg/layer.cfg`.
---
## 5. Checkliste fuer ein neues Modell
- [ ] Dateiname nach Tabelle in Abschnitt 4, ASCII, im richtigen Ordner
- [ ] ILS: 2D- **und** 3D-Variante, Basispunkt und KS deckungsgleich
- [ ] 3D-Modell enthaelt die 2D-Skelettlinien
- [ ] Foerderrichtung entlang +X, Z nach oben
- [ ] Kettenbaustein: `KS_EIN`/`KS_AUS` direkt im Block, X in Foerderrichtung,
Achslaengen 1/2/3
- [ ] Omniflo: `set_einfuegepkt.py` und `set_koords.py --set-all` gelaufen,
Kontrolle per `--show-omniflo`
- [ ] Attribute `LAYER` und leeres `ID` vorhanden (Omniflo zusaetzlich
`TEILEART`, `ARTINR`)
- [ ] Eintrag in der passenden JSON unter `data/json/` bzw. `allocations.json`
- [ ] In BricsCAD einmal ueber das Menue einfuegen/verketten und pruefen,
dass der Anschluss sauber sitzt