From 7242d9541130900b83d8699034062d06fa384f3b Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Mon, 26 Oct 2026 09:37:27 +0100 Subject: [PATCH] docs: Anleitung zur CAD-Datenaufbereitung, Einstiegsverweise im README Co-Authored-By: Claude Opus 5.5 --- README.md | 5 + doc/cad-datenaufbereitung.md | 180 +++++++++++++++++++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 doc/cad-datenaufbereitung.md diff --git a/README.md b/README.md index 3681385..89a9e1c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von Foerderanlagen-Layouts (ILS Kreisel, Omniflo, VarioFoerderer, Gefaellestrecke, Geruest). +**Einstieg:** + +- [doc/faq.md](doc/faq.md) - haeufige Fragen und erste Schritte mit dem Programm +- [doc/cad-datenaufbereitung.md](doc/cad-datenaufbereitung.md) - neue CAD-Bausteine anlegen: Koordinatensysteme, Platzierung, Datenablage + ## Menustruktur (SSG_LIB) ``` diff --git a/doc/cad-datenaufbereitung.md b/doc/cad-datenaufbereitung.md new file mode 100644 index 0000000..d25aa14 --- /dev/null +++ b/doc/cad-datenaufbereitung.md @@ -0,0 +1,180 @@ +# 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