# 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** | `_2D.dwg` und `_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