7242d95411
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
181 lines
7.9 KiB
Markdown
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
|