docs: README, CLAUDE.md und Befehlsdoku auf aktuellen Stand gebracht

- README.md: Menuebaum neu aus SSG_LIB.mnu (Weichenpunkte, Eckrad-Edit,
  QC-Linie, Fahrstrecke, KettenFoerderer, Schwenkschienen, Stueckliste,
  Din Formate, alle Bloecke 2D/3D ...), Projektstruktur (logs/, lang/,
  tools/, data/ ist eingecheckt), Ladeweg, pytest-Aufruf
- CLAUDE.md: entfernte Dummy-Befehle ILS_ETF_*/ILS-Kurven raus, Module
  Connection_Edit/Jam_Edit/TEFInsert und fehlende DCLs ergaenzt,
  SSG_BLOCKEDIT-Zweige vervollstaendigt, veraltete Verweise
  (geruest-dcl-listenhoehe, object_data.md) korrigiert, Entwicklungsstand
- Lisp/README.md: Kurven-Dummys entfernt, tests.lsp -> external_call.lsp,
  Geruest-Dialog als DCL-Vorlage, GR_* -> EATTEDIT, neue Abschnitte fuer
  JAM_EDIT, KettenFoerderer, Stueckliste/DIN, Export-Hilfen, Pflege-Module
- doc/kommandos.md: ~25 fehlende Befehle ergaenzt, OMNI_KettenFoerderer
  entfernt, create_tests.bat als veraltet markiert (ILS_test.scr fehlt)
- doc/plan/Entwicklungsplan.md: Meilenstein-Status nachgezogen
- doc/todo/*: Pruefvermerk 2026-10-26 - beide Fahrplaene weiterhin offen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 09:15:20 +01:00
parent f8b8a4175b
commit 640a988fa3
7 changed files with 222 additions and 96 deletions
+15 -6
View File
File diff suppressed because one or more lines are too long
+82 -28
View File
@@ -39,7 +39,6 @@ am Label-Anfang, bei Submenue-Schliessern hinter dem `<-` (`[<-~Label]`).
| Menuebereich | Eintraege | Definiert in |
| --- | --- | --- |
| Omniflo ▸ Boegen fuer Weichen | alle `OMNI_APBW_*` (14) | `OmniModulInsert.lsp` |
| ILS ▸ Zusatzmodule/Kurven | `ILS_ETF_Etagenfoerderer`, `ILS_K{90,60,30}{L,R}{A,I}` (12), `ILS_Gefaellestrecke` | `SSG_LIB_Commands.lsp` |
| Geruest | `GERUEST` (Gattertraeger-Platzhalter, derselbe Befehl wie Saeulen/Rohrabhaenger/Wandbefestigung) | `GeruestInsert.lsp` |
`OMNI_TEF_*` (UmlenkR/L, AntriebL/R, TEF Gerade) sind entgegen frueherem Stand
@@ -50,8 +49,11 @@ Aktiv (implementiert) sind u.a.: Kreisel, Eckrad, VarioFoerderer (Standard/Etage
Linienzug), Gefaellestrecke, Geruest (Saeulen/Rohrabhaenger/Wandbefestigung/
Rohr-Geruest-Traeger), TRO-Marker, Connections, BTMT Be-/Entladung, Scanner/
Separator, Omniflo Boegen (APB)/TEF-Elemente/Aluprofil-Geraden (AP)/alle Weichen
(W90/W45/WP/WK/WKomb)/Ladeschleifen, Export (Sivas/CSV), Werkzeuge (Block-/
Text-Tools, Planquadrate) und die Tests.
(W90/W45/WP/WK/WKomb)/Ladeschleifen/Schwenkschienen/Fahrstrecke, Kettenfoerderer,
Export (Sivas/CSV), Werkzeuge (Block-/Text-Tools, Faehnchen + Stueckliste,
DIN-Formate, Planquadrate) und die Tests. Die frueheren Dummy-Befehle fuer ILS-Kurven
(`ILS_K*`), Etagenfoerderer (`ILS_ETF_*`) und `ILS_Gefaellestrecke` wurden samt
Menueeintraegen entfernt.
---
@@ -581,9 +583,9 @@ umbiegen. Falls das bereits passiert ist, hilft nur ein manuelles
---
### `tests.lsp` – Testbefehle
### `external_call.lsp` – Python-Aufruf testen
Testbefehle für die Python-Integration. Export-Funktionen wurden in `export.lsp` ausgelagert.
Testbefehl für die Python-Integration (frueher `tests.lsp`). Export-Funktionen liegen in `export.lsp`.
| Befehl | Beschreibung |
| --- | --- |
@@ -608,7 +610,7 @@ Verzeichnisstruktur: [`../tests/README.md`](../tests/README.md)):
Welche JSON-Angaben pro Element-Typ nötig sind (abgeleitet aus den
Produktions-Routinen, nicht aus den Test-Wrappern), dokumentiert
[`../tests/testdata/object_data.md`](../tests/testdata/object_data.md) –
[`../doc/json-input-lisp.md`](../doc/json-input-lisp.md) (Nachfolger des geloeschten `tests/testdata/object_data.md`) –
inkl. der Unterscheidung scriptbar vs. nur-interaktiv.
### LISP-Unit-Tests (`test_unit.lsp`)
@@ -715,13 +717,12 @@ nicht zu verwechseln mit den einzelnen `OMNI_TEF_*`-Befehlen oben.
---
### `SSG_LIB_Commands.lsp` – BTMT, Sensoren, Dummy-Befehle, Konfiguration und SSG_BLOCKEDIT
### `SSG_LIB_Commands.lsp` – BTMT, Sensoren, Konfiguration und SSG_BLOCKEDIT
Sammeldatei fuer Menue-Befehle: teils Platzhalter fuer noch nicht implementierte
Eintraege, teils bereits **echte** Funktionalitaet (BTMT Be-/Entladung, Sensoren,
Konfiguration, Doppelklick-Dispatcher). Alle noch offenen Dummy-Menueintraege sind in
`menu/SSG_LIB.mnu` mit `~` ausgegraut (siehe Abschnitt
["Status: noch offene Menueintraege"](#status-noch-offene-menueintraege-im-menue-ausgegraut)).
Sammeldatei fuer Menue-Befehle: BTMT Be-/Entladung, Sensoren, Eingang/Ausgang,
Konfiguration und der Doppelklick-Dispatcher. Die frueheren Dummy-Befehle (ILS-Kurven,
Etagenfoerderer) sind entfernt; noch offene Menueintraege anderer Module siehe Abschnitt
["Status: noch offene Menueintraege"](#status-noch-offene-menueintraege-im-menue-ausgegraut).
**Sensoren einfuegen** (real, ueber `ils-insert-sensor` → wiederholtes `_.INSERT`
mit interaktivem Einfuegepunkt/Rotation, Blockdatei via `ssg-ils-block-datei`):
@@ -763,15 +764,6 @@ Sivas-Export zusaetzlich in den Summenzaehlern "Anzahl aller BTBeladung"/
dieselbe `ils-insert-station`-Routine wie BTMT Be-/Entladung (frei platzierbar,
Blöcke `Eingang_<DIM>.dwg`/`Ausgang_<DIM>.dwg` in `data/ils`).
Registrierte Dummy-Befehle:
| Gruppe | Befehle |
| --- | --- |
| ILS Zusatzmodule | `ILS_ETF_Etagenfoerderer`|
| ILS Kurven angetrieben Aussen | `ILS_K90LA`, `ILS_K90RA`, `ILS_K60LA`, `ILS_K60RA`, `ILS_K30LA`, `ILS_K30RA` |
| ILS Kurven angetrieben Innen | `ILS_K90LI`, `ILS_K90RI`, `ILS_K60LI`, `ILS_K60RI`, `ILS_K30LI`, `ILS_K30RI` |
| ILS Gefaellestrecken-Kurven | `ILS_Gefaellestrecke` |
> `FOERDERANLAGE` ist nicht hier definiert – dieser Befehl ist in `VarioFoerderer.lsp` implementiert.
**Konfigurationsbefehle** (Menue → Konfiguration):
@@ -779,11 +771,12 @@ Registrierte Dummy-Befehle:
| Befehl | Beschreibung |
| --- | --- |
| `SSG_DIM_SWITCH` | Schaltet zwischen 2D/3D-Bloecken um (setzt `DXFM_DIM`, `DXFM_BLOCKS`, `DXFM_OMNIFLO`) |
| `SSG_DIM_ALL_2D` / `SSG_DIM_ALL_3D` | Alle VF_n-/GF_n-Bloecke der Zeichnung nach 2D bzw. 3D umbauen |
| `SSG_SPRACHE` | Oeffnet Dialog `sprache.dcl`, setzt `*ssg-lang*` und persistiert via `DXFM_LANG` (siehe [`ssg_lang.lsp`](#ssg_langlsp--sprachumschaltung-deutschenglisch)) |
**SSG_BLOCKEDIT** – Doppelklick/Kontextmenue-Dispatcher:
Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearbeitungsbefehl auf (Reihenfolge wichtig: `GR_*` **vor** dem Omniflo-Zweig, da Geruest-Bloecke ebenfalls ein TEILEART-Attribut tragen):
Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearbeitungsbefehl auf (Reihenfolge wichtig: `GR_*` und `KF_*` **vor** dem Omniflo-Zweig, da diese Bloecke ebenfalls ein TEILEART-Attribut tragen koennen):
| Blockmuster | Aktion |
| --- | --- |
@@ -791,8 +784,11 @@ Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearb
| `ECKRAD_*` | `EckradEdit` |
| `GF_*` | `GEFAELLESTRECKE_EDIT` |
| `VF_*` | `VARIOFOERDERER_EDIT` |
| `GR_*` | Geruest – `BEDIT` (kein eigener Edit-Pfad; siehe `GeruestInsert.lsp`) |
| `CONNECTION_*` | `CONNECTION_EDIT` |
| `JAM_*` | `JAM_EDIT` |
| `TRO_*` | `TRO_EDIT` |
| `GR_*` | Geruest – nativer Attribut-Editor `_.EATTEDIT` (kein eigener Edit-Pfad; siehe `GeruestInsert.lsp`) |
| `KF_*` | `KF_EDIT` |
| Omniflo (TEILEART-Attribut, AP110*, numerisch) | `OMNI_EDIT` |
| Sonstige | `BEDIT` (Block-Editor) |
@@ -803,18 +799,20 @@ Erkennt den Blocktyp des selektierten INSERT-Blocks und ruft den passenden Bearb
Rohr-Geruest-Baugruppen (Saeulen, Rohrabhaenger, Wandbefestigung, Rohr-Geruest-Traeger)
aus [`data/json/geruest.json`](../data/json/geruest.json) bzw.
[`data/json/geruest_traeger.json`](../data/json/geruest_traeger.json) konfigurieren
und einfuegen. Die Dialogdefinition wird **zur Laufzeit erzeugt**
(`geruest-dcl-schreiben`, temporaere DCL-Datei) – es gibt keine feste
`dcl/geruest.dcl`, weil je Anbauteil ein eigenes Mengenfeld gebraucht wird.
und einfuegen. Das Dialog-Layout steht als **Vorlage** in `dcl/geruest.dcl` bzw.
`dcl/geruest_traeger.dcl`; nur die datenabhaengigen Bloecke (Varianten-Radiobuttons,
Mengenfeld je Anbauteil) werden zur Laufzeit an Markerzeilen `//@NAME@` eingesetzt
(`ssg-dcl-vorlage-fuellen`, temporaere DCL-Datei).
Ausfuehrliche Beschreibung (Konfigurationen, Attribut-Schema, Querstreben/Muffe,
Traeger-Beschriftung): siehe `../CLAUDE.md` Abschnitt "AutoLISP-Module".
| Befehl | Beschreibung |
| --- | --- |
| `c:GERUEST` | Dialog ohne Vorgabe-Bereich (Dropdown Rohrabhaenger/Saeulen/Wandbefestigung) |
| `c:GERUEST_SAEULEN` / `c:GERUEST_ROHRABHAENGER` / `c:GERUEST_WANDBEFESTIGUNG` | Dialog mit vorgewaehltem Bereich (derselbe Dialog wie `GERUEST`) |
| `c:GERUEST_SAEULEN` / `c:GERUEST_ROHRABHAENGER` / `c:GERUEST_WANDBEFESTIGUNG` | Je eigener Dialog fuer den Bereich (keine Umschaltung im Dialog) |
| `c:GERUEST` | Ohne Bereich nur ein Hinweis (im Menue Platzhalter fuer den Gattertraeger) |
| `c:GERUEST_TRAEGER` | Eigener fester Dialog (`dcl/geruest_traeger.dcl`): Rohr-Geruest-Traeger mit Linien-Logik (Start-/Endpunkt oder Laenge, Laengenabzuege, Querstreben/Muffe-Verteilung) |
| `c:GERUEST_TRAEGER_BESCHRIFTEN` | Alle Traeger der Zeichnung neu beschriften (eigenes TEXT-Objekt, verknuepft per XDATA `SSG_GR_BESCHR`) |
| `c:OMNI_FAHRSTRECKE` / `c:OMNI_FAHRSTRECKE_BESCHRIFTEN` | Omniflo-Fahrstrecke mit derselben Linien-Logik (Daten `omniflo_fahrstrecke.json`, Vorlage `dcl/fahrstrecke.dcl`) bzw. Neubeschriftung |
Block-Praefix `GR_<id>_<timestamp>` – **nicht kosmetisch**: `SSG_BLOCKEDIT` muss
`GR_*` vor dem Omniflo-Zweig abfangen, da Geruest-Bloecke ebenfalls ein
@@ -866,3 +864,59 @@ Einfuegepunkt oder den Zeichnungs-Extents. Lazy geladen ueber
Das fertige Raster (Linien + Zaehl-Texte) wird zu einem einzigen Block
`ZZ_PLANQUADRATE` bei (0,0,0) zusammengefasst; Layer aus `cfg/layer.cfg`.
---
### `Jam_Edit.lsp` – Staubereiche (SPS)
Staubereiche zeichnet sps_skel (`tro_annotate.py --anlage`) als Block `JAM_AREA`
(Name `Jam<NNNN>_<k>`).
| Befehl | Beschreibung |
| --- | --- |
| `c:JAM_EDIT` | Foerderer und laufende Nummer per Dialog (`dcl/jam_edit.dcl`) aendern; Knopf zurueck auf den abgeleiteten Wert, Warnung bei doppeltem Namen. Auch per Doppelklick (`SSG_BLOCKEDIT`, `JAM_*`) |
---
### `KettenFoerderer.lsp` – Kettenfoerderer/Schraegfoerderer Stahl
| Befehl | Beschreibung |
| --- | --- |
| `c:KETTENFOERDERER` | Baut aus `KF_UM_<winkel>` -> `KF_LAENGE` -> `KF_AN_<winkel>` plus Draufsicht `KF_2D` einen Block `KF_<n>` (Dialog `dcl/kettenfoerderer.dcl`, Daten `data/json/kettenfoerderer.json`) |
| `c:KF_EDIT` | `KF_n` bearbeiten und an derselben Stelle neu aufbauen (auch per Doppelklick) |
| `c:KF_KS_PRUEFEN` | Diagnose (nicht im Menue) |
Details (aufgerichtete Geometrie, Attribut-Schema, Sivas-Export): `../CLAUDE.md`.
---
### Werkzeuge: `ssg_stueckliste.lsp`, `DinFormate.lsp`
| Befehl | Beschreibung |
| --- | --- |
| `c:SSG_FAEHNCHEN_STUECKLISTE` | Positions-Faehnchen je Element und grob gruppierte Stuecklistentabelle, komplett aus der Zeichnung (kein Datei-Import) |
| `c:DIN_FORMATE` | DIN-Rahmen A0-A4 und optional Schriftkopf (KOPF11, DE/EN/FR/IT) aus `cfg/rahmen/` einfuegen (Dialog `dcl/dinformate.dcl`) |
---
### Export-Hilfen: `count_sep_scan.lsp`, `check_hoehen.lsp`
| Befehl | Beschreibung |
| --- | --- |
| `c:ZAEHLE_SEP_SCAN` | Scanner/Separatoren je Kreisel/VF/GF zaehlen und in `ANZAHL_SCANNER`/`ANZAHL_SEPARATOR` schreiben (laeuft auch vor jedem Export) |
| `c:HOEHEN_CHECK` | Hoehen von Kreiseln/VF/GF messen, auf 0/negativ pruefen und in die Hoehen-Attribute schreiben |
---
### Entwickler-/Pflege-Module
| Datei | Befehle | Zweck |
| --- | --- | --- |
| `addattribute.lsp` | `ILS_ATTR_SYNC`, `ILS_ATTR_REPLACE` | ATTDEFs der Block-DWGs mit `data/ils/allocations.json` abgleichen |
| `collect_attributes.lsp` | `ILS_ATTR_COLLECT` | ATTDEF-Werte aller DWGs nach `allocations_collected.json` schreiben |
| `list_blocks.lsp` | `ILS_BLOCK_LIST` | Sub-Block-Definitionen aller DWGs auflisten (Kollisionen 2D/3D) |
| `purge_blocks.lsp` | `ILS_BLOCK_PURGE` | Unbenutzte Bloecke/Layer in allen DWGs entfernen |
| `ks_pruefung.lsp` | `KS_PRUEFEN` | KS_EIN/KS_AUS der 2D- gegen die 3D-Variante vergleichen (CSV) |
| `menu-inventory.lsp` | `MenuInventory` | BricsCAD-Menuegruppen, Plugins, Startdateien auflisten |
| `EtageVarioFoerderer.lsp` | - | Kompatibilitaets-Wrapper, laedt `vf_core.lsp` |
| `tro_types.lsp` | - | Von `tro_annotate.py --emit-lisp` erzeugte TRO-Typliste |
+58 -39
View File
@@ -8,56 +8,66 @@ AutoLISP-Makros (SSG_LIB) fuer BricsCAD Pro zur automatisierten Erstellung von F
SSG_LIB
├── ILS
│ ├── Kreisel-Module
│ │ ├── Einfuegen → KreiselInsert
│ │ ├── Verbinden → KreiselConnect
│ │ ├── Bearbeiten → KreiselEdit
│ │ └── Eckrad → ILS_Eckrad
│ │ ├── Einfuegen / Verbinden / Bearbeiten → KreiselInsert / KreiselConnect / KreiselEdit
│ │ ├── Eckrad / Eckrad bearbeiten → ILS_Eckrad / EckradEdit
│ │ └── Weichenpunkte ermitteln → KREISEL_WEICHEN
│ ├── Zusatzmodul
│ │ ├── BTMT-Beladung → ILS_BTMT_Beladung
│ │ ├── BTMT-Entladung → ILS_BTMT_Entladung
│ │ ├── Scanner einfuegen → ILS_SCANNER_INSERT
│ │ └── Separator einfuegen → ILS_SEPARATOR_INSERT
│ │ ├── BTMT-Beladung / -Entladung → ILS_BTMT_Beladung / ILS_BTMT_Entladung
│ │ └── Scanner / Separator einfuegen → ILS_SCANNER_INSERT / ILS_SEPARATOR_INSERT
│ ├── Foerderer
│ │ ├── Standard → StandardVarioFoerderer / StandardVarioFoerderer3D
│ │ ├── Etage → EtageVarioFoerderer / EtageVarioFoerderer3D
│ │ ├── Streckengruppe (Linienzug) → LinienzugVarioFoerdererManuell / -Zielhoehe / -Stueckweise
│ │ └── Vario_Kette_Merge / VARIOFOERDERER_NACHRUESTEN
│ │ ├── Standard (Werte manuell / aus 3D-Linie) → StandardVarioFoerderer / StandardVarioFoerderer3D
│ │ ├── Etage (Werte manuell / aus 3D-Linie) → EtageVarioFoerderer / EtageVarioFoerderer3D
│ │ ├── Streckengruppe (Linienzug) → LinienzugVarioFoerdererManuell / -Zielhoehe / -Stueckweise
│ │ └── Vario_Kette_Merge / VarioFoerderer nachruesten → Vario_Kette_Merge / VARIOFOERDERER_NACHRUESTEN
│ └── Gefaellestrecke
│ ├── einfach → GEFAELLESTRECKE_EINFACH
│ ├── aus 3D-Linie → GEFAELLESTRECKE_3DLINIE
│ └── aus Linienzug → GEFAELLESTRECKE_LINIENZUG
│ ├── einfach / aus 3D-Linie / aus Linienzug → GEFAELLESTRECKE_EINFACH / _3DLINIE / _LINIENZUG
│ └── QC Linie mit GF (auch U-Form) → QcLinieMitGf / QcLinieMitGfUForm
├── Omniflo
│ ├── Boegen APB110/APB60
│ ├── Aluprofil Gerade (AP60/AP110/APG110)
│ ├── Weichen (90/45/Parallel/Weichenkoerper/Weichenkombinationen)
│ ├── TEF Elemente, Anbaugruppen, Verbinder, Boegen fuer Weichen
│ ├── Element bearbeiten → OMNI_EDIT
│ └── Ladeschleifen (AP110) → OMNI_LADESCHLEIFE_AP110
│ ├── Fahrstrecke / Fahrstrecken beschriften → OMNI_FAHRSTRECKE / OMNI_FAHRSTRECKE_BESCHRIFTEN
│ ├── Boegen APB110 / APB60, Aluprofil Gerade (AP60/AP110/APG110)
│ ├── Weichen (90/45/Parallel/22.5, Delta, Star)
│ ├── TEF Elemente (inkl. TEF Gerade auf Linie → TEF_FOERDERER_LINIE)
│ ├── Anbaugruppen (Stopper, Scanner, Buerstenbremse)
│ ├── Spez. Streckenelemente ▸ Tuerloesungen ▸ Schwenkschienen → OMNI_SCHW_400_*
│ ├── KettenFoerderer → KETTENFOERDERER
│ ├── Ladeschleifen → OMNI_LADESCHLEIFE_AP110
│ ├── Verbinder → OMNI_TV_*
│ ├── Boegen fuer Weichen (ausgegraut, Dummy) → OMNI_APBW_*
│ └── Element bearbeiten → OMNI_EDIT
├── Geruest
│ ├── Rohr-Geruest-Traeger → GERUEST_TRAEGER
│ ├── Saeulen / Rohrabhaenger / Wandbefestigung → GERUEST
│ └── Funktionen ▸ Traeger beschriften → GERUEST_TRAEGER_BESCHRIFTEN
│ ├── Rohr-Geruest-Traeger → GERUEST_TRAEGER
│ ├── Saeulen / Rohrabhaenger / Wandbefestigung → GERUEST_SAEULEN / GERUEST_ROHRABHAENGER / GERUEST_WANDBEFESTIGUNG
│ ├── Gattertraeger (Platzhalter) → GERUEST
│ └── Funktionen ▸ Traeger beschriften → GERUEST_TRAEGER_BESCHRIFTEN
├── SPS
│ ├── TRO (Marker einfuegen/bearbeiten) → TRO_INSERT / TRO_EDIT
│ └── Connections (einfuegen/bearbeiten, Eingang/Ausgang) → CONNECTION_INSERT / CONNECTION_EDIT / ILS_EINGANG_INSERT / ILS_AUSGANG_INSERT
│ ├── TRO (Marker einfuegen/bearbeiten) → TRO_INSERT / TRO_EDIT
│ ├── Connections (einfuegen/bearbeiten) → CONNECTION_INSERT / CONNECTION_EDIT
│ └── Eingang / Ausgang → ILS_EINGANG_INSERT / ILS_AUSGANG_INSERT
├── Export
│ ├── Export Sivas → EXPORTSIVAS
│ └── Export CSV → EXPORTCSV
│ ├── Export Sivas → EXPORTSIVAS
│ └── Export CSV → EXPORTCSV
├── Konfiguration
│ ├── Umschalten 2D und 3D → SSG_DIM_SWITCH
│ ├── Sprache → SSG_SPRACHE
│ └── Planquadrate an/aus → PLANQUADRATE_TOGGLE
│ ├── Umschalten 2D und 3D → SSG_DIM_SWITCH
│ ├── Alle Bloecke auf 2D / 3D → SSG_DIM_ALL_2D / SSG_DIM_ALL_3D
│ ├── Sprache → SSG_SPRACHE
│ ├── Planquadrate an/aus → PLANQUADRATE_TOGGLE
│ └── CSV-Export → CSV_EXPORT_KONFIG
├── Werkzeuge
│ ├── Bloecke zaehlen/loeschen, Attribute ersetzen → ssg_blocktools
│ └── Text ersetzen/parallel/Hoehe/Stil → ssg_texttools
└── Tests (Testsuiten ausfuehren und exportieren)
│ ├── Bloecke zaehlen / loeschen, Attribute ersetzen → SSG_BLOCK_COUNT / SSG_BLOCK_DELETE / SSG_ATTR_ERSETZEN
│ ├── Text ersetzen / parallel / Hoehe / Stil → SSG_TEXT_ERSETZEN / _PARALLEL / _HOEHE / _STIL
│ ├── Faehnchen + Stueckliste aus Zeichnung → SSG_FAEHNCHEN_STUECKLISTE
│ └── Din Formate → DIN_FORMATE
└── Tests (alle Testsuiten, einzelne Szenarien, Export CSV/Sivas ALL, KS 2D/3D pruefen)
```
Doppelklick auf einen Block ruft `SSG_BLOCKEDIT` auf und verzweigt nach Blockname
(Kreisel, Eckrad, VF_/GF_, KF_, Omniflo, GR_, TRO_, CONNECTION_, JAM_ → passender Edit-Befehl).
Vollstaendige, laufend aktualisierte Befehls-/Modulzuordnung: siehe `CLAUDE.md` (Abschnitt "Modulzuordnung im Menue") und `menu/SSG_LIB.mnu`.
## Lademechanismus
Module werden per Lazy-Loading ueber das Menuesystem geladen (`ssg-ensure` in `SSG_LIB.mnl`). Einmalige Einrichtung pro BricsCAD-Installation:
Die Module werden beim Laden des Menues ueber `SSG_LIB.mnl` initialisiert (`ssg-ensure`, ueberspringt bereits geladene Module; einzelne Module wie `DrawPlanquadrate`, `DinFormate`, `Tro_Edit`, `Jam_Edit` werden erst beim ersten Aufruf nachgeladen). Einmalige Einrichtung pro BricsCAD-Installation:
1. `bin/setenv.bat` ausfuehren (setzt `DXFM_LISP` u.a.)
2. BricsCAD starten
@@ -70,16 +80,18 @@ Details und die Core-Ladereihenfolge: siehe `CLAUDE.md` Abschnitt "Lademechanism
```text
dxfmakros/
├── Lisp/ # AutoLISP-Makros und Kernbibliotheken (Details: Lisp/README.md)
├── bin/ # Hilfs-Skripte (setenv.bat, start_briscad.bat)
├── bin/ # Hilfs-Skripte (setenv, start_briscad, run_tests, Python-Wrapper)
├── cfg/ # Konfigurationsdateien
├── data/ # JSON-Daten, DXF-Quellen, Block-Libraries - nicht im Git
├── data/ # JSON-Komponentendaten, DWG-/DXF-Bloecke, Block-Libraries
├── dcl/ # DCL-Dialogdefinitionen
├── doc/ # Dokumentation (doc/plan Architektur/Analysen, doc/todo offene Fahrplaene)
├── lang/ # Benutzertexte de_DE.json / en_GB.json (ssg-text)
├── lib/ # Python-Skripte (DXF-Bearbeitung, Export)
├── log/ # Logdateien - nicht im Git
├── logs/ # Logdateien und .dbg-Ausgaben (DXFM_LOG) - nicht im Git
├── menu/ # BricsCAD-Menudefinition (SSG_LIB.mnu, SSG_LIB.mnl)
├── results/ # Ergebnisse / Exporte - nicht im Git
├── tests/ # Testskripte und Referenzdaten
├── tools/ # Einmal-Werkzeuge (z.B. Migration der Sprachtexte)
├── LICENSE
├── README.md
└── requirements.txt
@@ -110,11 +122,18 @@ Headless-Unit-Tests (file- und zeichnungsfrei):
bin\run_tests.bat --lisp
```
Python-Tests (in der `.venv`):
```bat
pytest tests/
bin\run_tests.bat --check
```
Zeichnungs-/Szenario-Tests laufen interaktiv in BricsCAD ueber das Menue `Tests` bzw. `SSG_RUN_ALL_TESTS`. Details: `doc/LispTests.md`, `tests/README.md`.
## Dokumentation
Ausfuehrliche Modul- und Befehlsdokumentation: `CLAUDE.md` (Projektanweisungen) und `Lisp/README.md`. Weitere Anwender-/Entwickler-Themen direkt in `doc/` (u.a. `variofoerderer.md`, `csv-export.md`, `faq.md`, `kommandos.md`). Architektur-Analysen und Planungsdokumente in `doc/plan/` (u.a. `translate.md`, `Entwicklungsplan.md`), offene Fahrplaene/TODOs in `doc/todo/`.
Ausfuehrliche Modul- und Befehlsdokumentation: `CLAUDE.md` (Projektanweisungen) und `Lisp/README.md`. Weitere Anwender-/Entwickler-Themen direkt in `doc/` (u.a. `kommandos.md` - Uebersicht aller Befehle und Skripte, `variofoerderer.md`, `vf_linienzug_modus1_anleitung.md`, `csv-export.md`, `json-input-lisp.md`, `faq.md`). Architektur-Analysen und Planungsdokumente in `doc/plan/` (u.a. `translate.md`, `Entwicklungsplan.md`), offene Fahrplaene/TODOs in `doc/todo/`.
## Lizenz
+34 -6
View File
@@ -37,7 +37,9 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
| `KreiselLabelSetup` | Beschriftung einstellen (Hoehe, Farbe, Abstand, Schriftart) |
| `KreiselLabelPos` | Versatz der Beschriftung (dx/dy) einstellen |
| `KreiselLabelHoehe` | Texthoehe der Beschriftung einstellen |
| `ILS_Eckrad` | Eckrad an einem Tangentenpunkt mit Richtung einfuegen |
| `ILS_Eckrad` | Eckrad einfuegen (Dialog `eckrad_edit.dcl`, ohne GUI Konsolen-Rueckfall) |
| `EckradEdit` | Bestehendes Eckrad per Dialog bearbeiten (auch per Doppelklick) |
| `KREISEL_WEICHEN` | Beruehrpunkte/Weichen und Kollisionen aller Kreisel/Eckraeder gleicher Hoehe ermitteln, Marker setzen |
### VarioFoerderer (`VarioFoerderer.lsp` -> `vf_core`/`vf_standard`/`vf_etage`/`vf_linienzug`/`vf_spec`)
@@ -97,18 +99,28 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
| `OMNI_WKomb_Delta_1400`, `OMNI_WKomb_Delta_1600`, `OMNI_WKomb_Star` | Weichenkombinationen (Delta, Stern) |
| `OMNI_APBW_R400_45_140`, `OMNI_APBW_R400_675_260`, `OMNI_APBW_R550_45_77`, `OMNI_APBW_R550_45_194`, `OMNI_APBW_R550_225_360`, `OMNI_APBW_R550_225_410A`/`B`/`C`, `OMNI_APBW_R550_675_58`/`_125`/`_208`/`_360`, `OMNI_APBW_R650_90_300`, `OMNI_APBW_R750_90_200` | Boegen fuer Weichen (fest, ohne Dialog) |
| `OMNI_TEF_UmlenkL`/`R`, `OMNI_TEF_AntriebL`/`R`, `OMNI_TEF_Gerade` | TEF-Elemente (fest, ohne Drehung) |
| `OMNI_SCHW_400_L`/`_R`, `OMNI_SCHW_400_L_SENSORIK`/`_R_SENSORIK` | Schwenkschienen fuer Schiebetueren (Menue Spez. Streckenelemente -> Tuerloesungen) |
| `OMNI_STOPPER`, `OMNI_SCANNER`, `OMNI_BUERSTENBREMSE` | Anbaugruppen |
| `OMNI_TV_W_W`, `OMNI_TV_W_AP60`, `OMNI_TV_W_AP60_KPL`, `OMNI_TV_W_AP110`, `OMNI_TV_W_AP110_W`, `OMNI_TV_50`, `OMNI_TV_80`, `OMNI_TV_ENDPLATTE`, `OMNI_TV_ANSCHLAG`, `OMNI_TV_MUFFE`, `OMNI_TV_A_AP110_AP60`, `OMNI_TV_A_AP60_ST`, `OMNI_TV_A_AP110_ST`, `OMNI_TV_SW_II_SW_SW`, `OMNI_TV_SW_I_AP110`, `OMNI_TV_SW_III_AP110_SW`, `OMNI_TV_SW_IV_AP60`, `OMNI_TV_SW_IV_ST` | Verbinder |
| `OMNI_LADESCHLEIFE_AP110` | Ladeschleife (Dialog `omniflo_ladeschleifen.dcl`) |
| `OMNI_KettenFoerderer` | Platzhalter (noch ohne Funktion) |
| `OMNI_EDIT` | Omniflo-Element per Dialog bearbeiten; auch per Doppelklick |
| `OMNI_FAHRSTRECKE` (`GeruestInsert.lsp`) | Omniflo-Fahrstrecke mit Linien-Logik wie `GERUEST_TRAEGER` (Dialog `fahrstrecke.dcl`) |
| `OMNI_FAHRSTRECKE_BESCHRIFTEN` | Alle Fahrstrecken der Zeichnung neu beschriften |
### Kettenfoerderer (`KettenFoerderer.lsp`)
| Befehl | Beschreibung |
|---|---|
| `KETTENFOERDERER` | Kettenfoerderer/Schraegfoerderer Stahl per Dialog (`kettenfoerderer.dcl`) als Block `KF_<n>` bauen; Menue Omniflo -> KettenFoerderer |
| `KF_EDIT` | `KF_n`-Block bearbeiten und neu aufbauen; auch per Doppelklick |
| `KF_KS_PRUEFEN` | Diagnose (nicht im Menue): KS-Lage der Kettenfoerderer-Bausteine pruefen |
### Geruest (`GeruestInsert.lsp`)
| Befehl | Beschreibung |
|---|---|
| `GERUEST` | Geruest-Dialog (Bereich frei waehlbar) |
| `GERUEST_SAEULEN` / `GERUEST_ROHRABHAENGER` / `GERUEST_WANDBEFESTIGUNG` | Derselbe Dialog, im jeweiligen Bereich geoeffnet |
| `GERUEST_SAEULEN` / `GERUEST_ROHRABHAENGER` / `GERUEST_WANDBEFESTIGUNG` | Je eigener Dialog aus der Vorlage `geruest.dcl` (keine Umschaltung zwischen den Bereichen) |
| `GERUEST` | Ohne Bereich nur ein Hinweis; im Menue Platzhalter fuer den Gattertraeger |
| `GERUEST_TRAEGER` | Rohr-Geruest-Traeger: Dialog (`geruest_traeger.dcl`), danach Start-/Endpunkt oder Laenge bis ESC/Enter |
| `GERUEST_TRAEGER_BESCHRIFTEN` | Alle Traeger der Zeichnung neu beschriften, verwaiste Beschriftungen entfernen |
@@ -120,6 +132,7 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
| `TRO_EDIT` | ID/TYPE eines TRO-Markers per Dialog aendern |
| `CONNECTION_INSERT` | Verbindungspfeil (Fluss) zwischen zwei Elementen zeichnen |
| `CONNECTION_EDIT` | Quelle/Ziel einer Verbindung aendern |
| `JAM_EDIT` (`Jam_Edit.lsp`) | Staubereich (`JAM_AREA` aus sps_skel) bearbeiten: Foerderer und laufende Nummer; auch per Doppelklick |
### Export und IDs (`export.lsp`, `ssg_id.lsp`, `count_sep_scan.lsp`, `check_hoehen.lsp`)
@@ -145,9 +158,22 @@ Gross-/Kleinschreibung spielt an der Kommandozeile keine Rolle.
| `DRAW_PLANQUADRATE` | Planquadrat-Raster (Block `ZZ_PLANQUADRATE`) zeichnen bzw. neu aufbauen |
| `DELETE_PLANQUADRATE` | Planquadrat-Raster entfernen |
| `PLANQUADRATE_TOGGLE` | Raster an/aus (zeichnen, falls keins existiert, sonst entfernen) |
| `SSG_BLOCKEDIT` | Doppelklick-/Kontextmenue-Dispatcher: Kreisel, Omniflo, GF_*, VF_*, GR_*, TRO_* auf den passenden Edit-Befehl |
| `SSG_BLOCKEDIT` | Doppelklick-/Kontextmenue-Dispatcher: Kreisel, Eckrad, Omniflo, GF_*, VF_*, KF_*, GR_*, TRO_*, JAM_* auf den passenden Edit-Befehl |
| `EATTEDIT` | Ueberschreibt den nativen Befehl, leitet an `SSG_BLOCKEDIT` weiter (Fallback `_.EATTEDIT`) |
### Werkzeuge (`ssg_blocktools.lsp`, `ssg_texttools.lsp`, `ssg_stueckliste.lsp`, `DinFormate.lsp`)
| Befehl | Beschreibung |
|---|---|
| `SSG_BLOCK_COUNT` | Blockeinfuegungen im aktuellen Layout zaehlen (Pick, Muster oder Statistik) |
| `SSG_BLOCK_DELETE` | Alle Einfuegungen eines Blocks loeschen (mit Rueckfrage) |
| `SSG_ATTR_ERSETZEN` | Attributwerte zeichnungsweit oder in einer Auswahl suchen und ersetzen |
| `SSG_TEXT_ERSETZEN` | Suchen/Ersetzen in TEXT, MTEXT und Attributen |
| `SSG_TEXT_PARALLEL` | Text parallel zu Linie/Polylinie/Bogen setzen |
| `SSG_TEXT_HOEHE` / `SSG_TEXT_STIL` | Texthoehe bzw. Textstil aendern |
| `SSG_FAEHNCHEN_STUECKLISTE` | Positions-Faehnchen und Stuecklistentabelle aus den gewaehlten Elementen der Zeichnung |
| `DIN_FORMATE` | DIN-Rahmen (A0-A4) und optional Schriftkopf einfuegen |
### Layer-Werkzeuge (`ssg_layer.lsp`)
| Befehl | Beschreibung |
@@ -202,6 +228,8 @@ Aus dem Menue "Tests" bzw. der Kommandozeile; Details in `doc/LispTests.md`.
| `TEST_MUBEA` | Mubea-Nachbau aus `tests/testdata/mubea.json` |
| `TEST_DEMATIC_ARVATO` | Dematic/Arvato-Nachbau (Flowpuffer/Kreisel) |
| `TEST_SHOWROOM_ILS` | ILS-3.0-Showroom-Nachbau (Kreisel, Gefaellestrecken; Hoehen noch Platzhalter) |
| `TEST_LASTENT` | `ssg-lastent-ohne-attribute` (kopierter Attribut-Block verliert keine Attribute) |
| `TEST_STUECKLISTE` | Faehnchen + Stueckliste aus der Zeichnung |
| `TEST_TEST_SYSTEM` | Testanlage `test_system` nachbauen (9 Kreisel, Separatoren, BTMT) - Vorlage fuer sps_skel |
---
@@ -218,7 +246,7 @@ Alle Skripte rufen zuerst `setenv.bat` (bzw. `setenv.sh`) auf.
| `install_py.bat` / `install_py.sh` | `.venv` anlegen und `requirements.txt` installieren (nur wenn noch nicht vorhanden) |
| `activate_venv.bat` / `activate_venv.sh` | `.venv` aktivieren, Python-Version und Pakete anzeigen |
| `run_tests.bat` | Testausfuehrung, siehe unten |
| `create_tests.bat` | Kompletter ILS-Testlauf: Basis-DXF erzeugen, BricsCAD mit `ILS_test.scr`, Ergebnisse validieren |
| `create_tests.bat` | Alter ILS-Testlauf (Basis-DXF, BricsCAD mit `tests/ILS_test.scr`, Validierung) - **veraltet**: `ILS_test.scr` existiert nicht mehr, Ersatz ist `run_tests.bat` bzw. `SSG_RUN_ALL_TESTS` |
| `set_einfuegepunkt.bat [schalter]` | Wrapper fuer `lib/set_einfuegepkt.py` (siehe `doc/tools.md`) |
| `set_coords.bat [schalter]` | Wrapper fuer `lib/set_koords.py` (siehe `doc/tools.md`) |
| `dbg2lsp.bat [argumente]` | Wrapper fuer `lib/dbg2lsp.py` (siehe `doc/dbg2lsp.md`) |
+22 -17
View File
@@ -1,33 +1,38 @@
# Kapitel 1: Meilensteinplanung
Status-Stand: 2026-10-26 (DONE = im Menue nutzbar und im Sivas-/CSV-Export erfasst).
## Meilenstein 1: ILS für die Projektierung
- ILS Kreisel DONE
- ILS Eckrad DONE
- ILS Varioförder DONE
- ILS Gefällestrecke
- ILS Weichen
- ILS Horizontalvariobögen (30,60,90 r und l, innen und aussen angetrieben)
- ILS Gefällebögen (30,60,90 r und l)
- ILS Varioförder DONE (Standard, Etage, Streckengruppe/Linienzug Modus 1-3, QC-Linie mit GF)
- ILS Gefällestrecke DONE (einfach, aus 3D-Linie, aus Linienzug; Doppelklick-Edit)
- ILS Weichen TEILWEISE (Weichenpunkte zwischen Kreiseln ermitteln: KREISEL_WEICHEN, Export Merkmal 4403 + Weichenzeile; keine eigene Weichen-Geometrie)
- ILS Horizontalvariobögen (30,60,90 r und l, innen und aussen angetrieben) TEILWEISE (als Vario-Kurve innerhalb der Streckengruppe; die frueheren Einzelbefehle ILS_K* wurden entfernt)
- ILS Gefällebögen (30,60,90 r und l) TEILWEISE (als GF-Bogen innerhalb von Streckengruppe/Gefaellestrecke-Linienzug)
- BTMT Beladung und Entladung DONE (Einfuegen + Sivas-/CSV-Export)
- CSV Export aller ILS Elemente
- CSV Export aller ILS Elemente DONE (EXPORTCSV / EXPORTSIVAS)
## Meilenstein 2: Ersatz von Bihler Gerüst
- Gerüst
+ Abhänger (3 Quetschung, 6 Abhängung oben, 4 Abhängung unten, 4 Befestiung oben, 3 Farben, Variable Länge)
+ T-Abhänger mit Flansch-Rohr (3 Spannpratze, 3 Farben, Variable Länge)
+ Säulen (2 Arten, 3 Farben, 2 Einbauwinkel Platte, 5 Haltearm, 4 Einbauwinkel Arm, 8 Klemmring, Länge Bodensäule)
+ Wandbefestigung (4 Varianten, 3 Befestigungen)
+ Träger (RT/DRT) - (4 Varianten, 3 Farben, Muffe, Längenabzug Anfang/Ende)
- CSV Export aller Gerüst Komponenten
+ Abhänger (3 Quetschung, 6 Abhängung oben, 4 Abhängung unten, 4 Befestiung oben, 3 Farben, Variable Länge) DONE (GERUEST_ROHRABHAENGER)
+ T-Abhänger mit Flansch-Rohr (3 Spannpratze, 3 Farben, Variable Länge) DONE (Variante der Rohrabhaenger)
+ Säulen (2 Arten, 3 Farben, 2 Einbauwinkel Platte, 5 Haltearm, 4 Einbauwinkel Arm, 8 Klemmring, Länge Bodensäule) DONE (GERUEST_SAEULEN)
+ Wandbefestigung (4 Varianten, 3 Befestigungen) DONE (GERUEST_WANDBEFESTIGUNG)
+ Träger (RT/DRT) - (4 Varianten, 3 Farben, Muffe, Längenabzug Anfang/Ende) DONE (GERUEST_TRAEGER inkl. Beschriftung)
+ Gatterträger OFFEN (Menue-Platzhalter)
- CSV Export aller Gerüst Komponenten DONE (`pattern_geruest = GR_*`)
- TOS von Gerüst-Import ins Sivas
## Meilenstein 3: Ersatz von Bihler Omniflo
- Omniflo Bögen (27) DONE
- Omniflo Weichen (80) DONE
- Omniflo Verbinder (18 Varianten)
- Kettenförderer (3 Teile: Ein/Auslauf und Verbindung)
- TEF Geraden aus Omniflo Geraden (Umwandlungsmakro)
- CSV Export aller Omniflo Elemente
- Omniflo Verbinder (18 Varianten) DONE (OMNI_TV_*)
- Kettenförderer (3 Teile: Ein/Auslauf und Verbindung) DONE (KETTENFOERDERER / KF_EDIT)
- TEF Geraden aus Omniflo Geraden (Umwandlungsmakro) TEILWEISE (TEF_FOERDERER_LINIE belegt eine Linie mit TEF-Geraden; Umwandlung bestehender Omniflo-Geraden fehlt)
- Omniflo Fahrstrecke, Ladeschleifen, Schwenkschienen DONE
- Bögen für Weichen (OMNI_APBW_*) OFFEN (Dummy, im Menue ausgegraut)
- CSV Export aller Omniflo Elemente DONE
## Meilenstein 4: Flex
- Erstellung der .dwg Dateien von Bögen, Geraden, Förderer
@@ -46,7 +51,7 @@
- Erzeugung eines Puffers aus einer Flächenangabe/Recheck
- Positionierung von Separatoren und Scannern aus dem Streckenverlauf/Fördereranbindung
- Makro zur Erzeugung eines Arbeitsplatzes (Varioförderer ab, 180 Grad Bogen, Varoförderer auf)
- Varioförder als Etagenförderer (anderer ES und AS Elemente)
- Varioförder als Etagenförderer (anderer ES und AS Elemente) DONE (VF-Typ Etage)
---
+6
View File
@@ -3,6 +3,12 @@
Status: **Vorschlag / noch nicht umgesetzt** (2026-09-18). Mit dem Entwickler zu
besprechen, bevor der Solver angefasst wird. Reiner Plan - kein Code geaendert.
**Pruefung 2026-10-26:** weiterhin OFFEN - der Solver bilanziert noch skalar
(`climber-span`, `hor-pairs` 0/1), auch die Zwischenloesung (gefaltete Laeufe
abweisen) ist nicht eingebaut. Die Zeilennummern unten sind veraltet: Phase B
von `vf-linienzug-modus2` liegt inzwischen bei ca. `vf_linienzug.lsp:11880-12100`
(per Suche nach `climber-span` finden).
## Kurzfassung
Der Modus-2-Solver (`vf-linienzug-modus2`, Phase B, `Lisp/vf_linienzug.lsp`
+5
View File
@@ -5,6 +5,11 @@
verifiziert, `TEST_HUNDM05` aktiv in `tests/alltests.json`; Stufe 2
Schritte 0-4 + 7-Assertion fertig, 5/6/8/9/10 offen, 11 zurueckgestellt.
**Herkunft:** Planungslauf (Plan-Modus) vom 2026-09-02, hier eingecheckt zur Nachverfolgung.
**Pruefung 2026-10-26:** Stand unveraendert - Stufe 2 Schritte 5c/6/8/9/10
(u.a. `vfl-spec-ausfuehren`) und die Spec-Uebersetzer fuer Modus 2/3 sind
weiterhin nicht gebaut. Hinweis: Modus 2/3 journalisieren inzwischen
Segment-Essenz (`SEGS`) statt Objekt-Handles (`OBJS`), Abschnitt 4.4 ist
darauf noch nicht angepasst.
## Fortschritt