Commit Graph
100 Commits
Author SHA1 Message Date
Michael StanglandClaude Opus 5.5 6a875cc8a0 feat: Menue HW Planung - Materialfluss-Skizze <dwg>_HW.dxf aus dem CSV-Export
HW_MATERIALFLUSS ruft EXPORTCSV und lib/hw_materialfluss.py: Kreisel-Rechtecke
in Drehrichtung, Strecken AS -> Separatoren -> ES, Weichen, Be-/Entladungen.
HW_SYMBOLE vorerst Platzhalter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 16:43:06 +01:00
Michael Stangl 43f4c0bd80 Länge des Kreisel an die Länge aus dem Elektroplanungs Layout angepasst 2026-11-02 10:21:54 +01:00
Michael StanglandClaude Sonnet 5.5 d2318bc3c6 feat: Kreisel-Beschriftung von unten/links lesbar (180 Grad Drehung bei SM/MS)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 10:20:45 +01:00
Michael Stangl 3cc771b5d4 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	CLAUDE.md
2026-10-31 08:32:37 +01:00
Michael StanglandClaude Opus 5.5 3d2d4ad47d docs: Verweis auf io-Zuordnung im Kabeltool (kabellaengen)
Pruefskript io_zuordnung_pruefen, Konverter altZuNeu und das gemeinsame
Regelwerk cfg/io_regeln.json liegen in kabellaengen; dort werden die
dxfmakros-Mechanikbloecke erkannt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 08:29:14 +01:00
Michael StanglandClaude Sonnet 5 0d4b7c4cfc test: Referenzdateien nach gepruefter Lauf-Analyse aktualisiert
Nur Dateien, deren Abweichung gegenueber dem letzten Lauf erklaert und
unbedenklich ist (reine Attribut-/Merkmal-Erweiterung, Namenszaehler-Fix,
Kreisel-Hoehen-Neuberechnung, Zuordnungs-Logik aus fea6014) - siehe
Vergleichsprotokoll in der Session. Bewusst NICHT aktualisiert:
foerderer_results.json (unerklaerte ~1mm-Drift), mubea_* (VF_4-Etage-Solver-
Aenderung + Kreisel2-Drehrichtung brauchen fachliche Pruefung),
hundm05_attribute.json (braucht dxf_vf_abbild.py --schreibe-referenz statt
Kopie), kreisel_export.csv/kreisel_sivas.csv/kreisel_tests.dxf (kein
frischer Lauf in dieser Session).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-29 10:20:50 +01:00
Michael StanglandClaude Opus 5.5 321dcfde64 feat(export): Merkmal "Einsortiert in" an nach Lage einsortierten Separatoren
Folgewerkzeuge (sps_skel: sepliste-Gegenprobe) erkennen daran, dass ein
Separator in TrackIds, aber zu Recht nicht im Bauprotokoll der Strecke
steht. CLAUDE.md beschreibt den neuen Export-Schritt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:12:50 +01:00
Michael Stangl 5368f5b447 Drehrichtungen der Kreisel waren falsch rum eingetragen 2026-10-28 18:20:54 +01:00
Michael StanglandClaude Opus 5.5 2bb00bb48f fix(export): freie Separatoren nach Lage in die Kette ihrer Strecke einsortieren
Eigenstaendige Separatoren, deren Zuordnung eine VF/GF nennt, die aber nicht
beim Bau der Strecke entstanden, fehlten in deren sepliste und damit in
TrackIds und Nachbarn (Mubea VF_3: 0037/0038). Sie werden jetzt beim Export
nach Lage zwischen AS und ES aufgenommen - nur im Speicher des Laufs, die
sepliste-XDATA bleibt Bauprotokoll (Lisp paart sie per Anzahl je Typ mit den
Bausteinen und fuehrt reservierte AS/ES-IDs unter der lfdnr).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:22:36 +01:00
Michael StanglandClaude Sonnet 5 c3b4bf9db3 fix(kreisel): Mindestabstand 800mm gegen beruehrende Endkreise
Unterhalb des Kreisel-Durchmessers (*kreisel-durchmesser*, Default 800mm)
wuerden sich AN8/SP8 beruehren bzw. ueberschneiden. draw-module prueft das
als harte Sperre fuer alle Aufrufer; KreiselInsert/-Connect/-Redraw fragen
bei Unterschreitung erneut ab statt abzubrechen, KreiselEdit zeigt den
Dialog erneut (Projektmuster wie GERUEST).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-28 11:02:44 +01:00
Michael StanglandClaude Opus 5.5 9e3e8e16ae fix(tests): Testlauf haengt nicht mehr an Export-Rueckfragen, Laufprotokoll je Test
TEST_LINIENZUG (ebenso hmrec:stubs-aus und vsp-headless-aus) schaltete die
GUI am Ende pauschal wieder ein. Unter SSG_RUN_ALL_TESTS fragte der direkt
folgende EXPORTSIVAS dann nach Hoehen-Check/Bereinigen und der Lauf blieb
stehen. Alle drei stellen jetzt den Vorzustand von *ssg-gui-aus* wieder her.

SSG_RUN_ALL_TESTS schaltet zusaetzlich *csv-hoehencheck-fragen* und
*csv-bereinigen-vor-export* fuer den Lauf ab (unmittelbar vor jedem Export
erneut, export.lsp belegt nil beim Nachladen wieder mit T), erzwingt GUI aus
mit Warnung und stellt am Ende die Vorgaben wieder her.

Neues Laufprotokoll DXFM_LOG/testlauf_<name>.dbg je Test (Debug-Schalter
"testlauf", Standard ein): Zustand vor/nach dem Test, Fehler, Ergebnis-JSON,
Export-Schritte. Eigene Datei mit sofortigem Schreiben statt dbgopen, damit
die Module mit ihren eigenen .dbg-Dateien es nicht umlenken und bei einem
Haenger der letzte Schritt sichtbar ist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:52:10 +01:00
Michael StanglandClaude Opus 5.5 aabac03d7c fix: run_tests.bat --lisp bricht ab, wenn BricsCAD bereits laeuft
BricsCAD reicht einen /b-Start an eine offene Instanz weiter: test_unit.scr
lief dann in der Sitzung des Benutzers und das abschliessende _.QUIT blieb
an der Speichern-Rueckfrage haengen (bzw. haette die Sitzung beendet).
Pruefung per tasklist|findstr - nicht find, das ist unter Git-Bash im PATH
das Unix-find und haette eine laufende Instanz nie erkannt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:12:26 +01:00
Michael StanglandClaude Opus 5.5 399728c7f9 fix(tests): Linienzug-Testdaten, HundM05-Zusatzobjekte, Nummernzaehler je Testzeichnung
- TEST_LINIENZUG: seit 1cc163d/cccd362 fragt Modus 1 nach der AS-Seite die
  optionale Zufuehrungsachse ab. Der Test mockt get* direkt (keine
  Replay-Queue), die neue Punktfrage verschluckte die naechste Antwort und
  der Lauf desynchronisierte (FEHLER, 21 Schritte offen). Neuer Schritt-Typ
  "point_none" (getpoint -> nil) und in beiden Linienzug-Testdaten nach
  der AS-Seite eingetragen.
- test_hundm05.py: Zusatzobjekt-Ergebnisse filterten nur kind "kreisel" -
  Separatoren/Scanner/BTMT (kind "sensor") fehlten, test_je_objekt_ein_
  ergebnis schlug faelschlich fehl.
- SSG_RUN_ALL_TESTS: #VF/#GF/#Kreisel/#Eckrad_LetzteNr vor jedem Test auf 0.
  Der Lauf bleibt im Namensraum des Startdokuments, die Zaehler liefen
  sonst ueber alle Tests weiter (VF_5/Kreisel12 in frischer Zeichnung) und
  machten jeden Referenz-Diff von der Testreihenfolge abhaengig.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:04:52 +01:00
Michael StanglandClaude Opus 5.5 2befdf2c33 fix: Testlauf-Export bei DWG-Tests ohne doppelten Dateinamen
Nach vla-saveas ist die Zeichnung benannt, export:dwg-praefix setzt
"<name>_tests_" selbst davor - SSG_RUN_ALL_TESTS hatte ihn schon im
Namen. Ergebnis war "<name>_tests_<name>_tests_export.csv" fuer
foerderer/linienzug/gefaellestrecke, das Warten lief ins Timeout und
die Python-Pruefungen (test_foerderer/test_gefaellestrecke) wurden
mangels Datei still uebersprungen. testrun:ohne-praefix zieht den
Praefix vor dem Umbiegen der Dateinamen ab (DXF-Tests unveraendert).

doc/todo.md: erledigten Eintrag "Statisches Inventar veraltet" entfernt
(test_vf_headless_statisch.py ist seit 0babf78 gruen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:47:10 +01:00
Michael StanglandClaude Opus 5.5 8db446ce0f feat: Linienzug-Batch-Konvertierung headless, alter Block bleibt bis zum Erfolg
- vfl-konvertiere-ent laeuft unter *vfl-headless* (Wizard/GUI aus): reicht
  ein Journal nicht, Abbruch mit Fundstelle statt Live-Rueckfrage im Batch
- alter VF_n-Block wird erst nach erfolgreichem Neubau geloescht; bei
  Fehlschlag raeumt vfl-konvert-aufraeumen die Teil-Geometrie weg
- SSG_DIM_ALL_2D/_3D listet fehlgeschlagene Bloecke am Ende auf und
  konvertiert jetzt auch Modus-3-Bloecke (linienzug3 wurde uebersprungen)
- statischer Headless-Test: vfl-menu-strwert/vflw-radio-wahl-impl erlaubt
- TODO: Stufe 2 und Spec-Uebersetzer Modus 2/3 in eigene Dateien ausgelagert

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:22:30 +01:00
Michael StanglandClaude Opus 5.5 7242d95411 docs: Anleitung zur CAD-Datenaufbereitung, Einstiegsverweise im README
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:37:27 +01:00
Michael StanglandClaude Opus 5.5 4bceb49665 docs: zentrale TODO-Liste doc/todo.md, woechentliche Doku-Pruefung in CLAUDE.md
- doc/todo.md sammelt alle offenen Punkte (VF/Linienzug, Export, Geruest,
  Omniflo, ILS, Tests, spaetere Meilensteine); detaillierte Fahrplaene in
  doc/todo/*.md und cfg/sivas_merkmal_zuordnung.md nur kurz verlinkt
- CLAUDE.md: Konvention "Woechentliche Doku- und TODO-Pruefung (freitags)"
- CLAUDE.md/README.md verweisen auf doc/todo.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:29:04 +01:00
Michael StanglandClaude Opus 5.5 b4f9c43ae3 chore: verwaiste stueckliste.dcl und create_tests.bat entfernt, object_data-Verweise umgestellt
- dcl/stueckliste.dcl: wurde von keinem Code geladen (ssg-sl-dialog existiert nicht)
- bin/create_tests.bat: rief das nicht mehr vorhandene tests/ILS_test.scr auf;
  Ersatz ist run_tests.bat bzw. SSG_RUN_ALL_TESTS
- Kommentare in lib/ und tests/ verweisen statt auf das geloeschte
  tests/testdata/object_data.md auf doc/json-input-lisp.md, mit den dort
  gueltigen Abschnittsnummern (alt 5 -> 2, 3.1 -> 3, 2.1 -> 4.1, 8 -> 6)
- CLAUDE.md / doc/kommandos.md / doc/json-input-lisp.md nachgezogen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:22:27 +01:00
Michael StanglandClaude Opus 5.5 640a988fa3 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>
2026-10-26 09:15:20 +01:00
Michael Stangl 94238b26f0 testrunner gefixt 2026-10-19 15:46:07 +02:00
Michael Stangl b7b1df25b9 zwei weitere Fragen dazu 2026-10-09 17:33:40 +02:00
Michael StanglandClaude Sonnet 5 8e518a558d [FIX] Stueckliste: fehlende lang-Keys wiederhergestellt + Spaltenlinien ergaenzt
Die sl-*-Keys (Tabellenkoepfe, Prompts, Elementklassen) fehlten komplett in
lang/de_DE.json und lang/en_GB.json: sie standen beim vorangegangenen
Merge-Konflikt-Fix noch unstaged im Working Tree (nicht committed) und wurden
dabei versehentlich durch die reparierte, aber auf dem alten HEAD basierende
Version ueberschrieben. ssg-text lieferte dadurch den rohen Key statt des
uebersetzten Textes zurueck ("sl-stkl-kopf-menge" statt "MENGE" usw.).

Zusaetzlich: ssg-sl-tabelle-zeichnen zeichnete nur den Aussenrahmen und
horizontale Zeilentrenner, keine vertikalen Spaltenlinien - ergaenzt an den
vier Spaltengrenzen (400/1000/1900/3000 relativ zum linken Rahmen), von der
Kopfzeilen-Oberkante bis zur letzten Zeilenlinie.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 16:53:23 +02:00
Michael StanglandClaude Sonnet 5 0915cc2936 [FIX] Stueckliste: Texte ueberschrieben sich bei abweichendem Textstil
ssg-sl-tabelle-zeichnen/ssg-sl-faehnchen riefen TEXT ueber command auf. Bei
einem aktiven Textstil mit fester/variabler Ausrichtung (Mitte/Fit/Aligned
statt Links) fragt TEXT dann einen zweiten Punkt zusaetzlich ab - jeder
nachfolgende command-Aufruf landete am falschen Prompt, wodurch Kopf- und
Datenzeilen der Stuecklistentabelle sich alle an derselben Stelle stapelten
statt an ihrer vorgesehenen Position (Header nicht mehr lesbar).

Neue Hilfsfunktion ssg-sl-text-machen erzeugt TEXT-Entities per entmake statt
ueber den interaktiven command-Pfad - unabhaengig von Textstil/Ausrichtung
und der command-Promptkette. Gleiche Fehlerklasse wie der _.-INSERT-Fix bei
DIN_FORMATE (vorheriger Commit).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 16:48:39 +02:00
Michael Stangl 549798cd0b Test für Elementerkennung hinzugefügt 2026-10-09 16:31:12 +02:00
Michael Stangl 2584a0df1f Menü für Stückliste dazu. 2026-10-09 16:30:07 +02:00
Michael Stangl 009d3488b5 Für Omniflo Elemente eigene Funktion zur AUflösung des Pfades 2D3D oder 3D2D gebaut 2026-10-09 16:29:13 +02:00
Michael Stangl 9bb593ab6f Menü für Stücklistenerzeugung ergänzt 2026-10-09 16:27:44 +02:00
Michael Stangl 7c0c5ccfa6 Fallbackpfad für OMniflo Elemente von 2D/3D, da aktuell nur 2D definiert 2026-10-09 16:26:45 +02:00
Michael Stangl 7e64e8a501 config für AP60 elemente modifiziert 2026-10-09 16:24:31 +02:00
Michael Stangl f340c39779 AP60 elemente noch in die Exporterkennung mit aufgenommen 2026-10-09 16:23:53 +02:00
Michael Stangl bf2601a932 fix beim csv Export des Eckrades. Bild der gf für Doku war noch veraltet. Erste Fassung einer Lisp Funktion zur Erzeugung der Stückliste in der Szene 2026-10-09 16:22:57 +02:00
Michael Stangl 9b920b0825 Merge remote-tracking branch 'origin/master' 2026-10-09 16:18:54 +02:00
Michael StanglandClaude Sonnet 5 3d8831aad8 [ADD] DIN_FORMATE: Zeichnungsrahmen + Schriftkopf einfuegen
Ersatz fuer das alte ACADSST-Makro DINFORM.LSP/.DCL (SSG2 "DIN-FORMATE..."):
neues Werkzeuge-Menue "Din Formate" fuegt einen DIN-Rahmen (A0-A3, A4 quer/
hoch) und optional einen Schriftkopf (Kopf11, DE/EN/FR/IT) per Dialog ein.

Block-DWGs liegen flach in cfg/rahmen/ (kopiert aus
\infor-ln\SSG_Tools\ACADSST\KOEPFE - nur die von DINFORM.LSP tatsaechlich
referenzierten Dateien). Das Laden der Blockdefinitionen laeuft ueber
vla-InsertBlock+vla-Delete (COM-Weg wie ssg-ils-block-laden-dim), da ein
command-basiertes "_.-INSERT ... _X" in der interaktiven Befehlskette haengen
bleibt und nachfolgende getpoint-Aufrufe blockiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 16:17:42 +02:00
Michael StanglandClaude Sonnet 5 c353c34f2c [FIX] Eckrad-Export: Sivas-Merkmalnummern 3992/3993 statt Klartext-Keys
Eckrad fuehrte "Geruest fuer Einzelmodul"/"Geruestoption fuer
Einzelmodul" als beschreibende Klartext-Keys statt echter
Merkmalnummern - details_mit_bezeichnung() loest aber nur numerische
Keys gegen den Merkmalstamm auf, die Texte blieben im JSON unaufgeloest.
Merkmalsstamm_in_Sivas.xlsx enthaelt beide Nummern bereits (dieselben
wie bei Kreisel), jetzt in cfg/sivas.cfg uebernommen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 14:14:35 +02:00
Michael StanglandClaude Sonnet 5 1ace0a9a6d [FIX] GEFAELLESTRECKE_LINIENZUG: ES-Element hatte Rest-Hoehenversatz (~65mm) nach dem vorigen Fix
Der vorige Fix (80e5e62) nutzte insert-block-mixed-to-ks mit z-ref="KS_AUS" (sep-endpunkt als Ziel-Z) - das zwingt aber den BLOCKAUSGANG des ES-Elements auf diese Hoehe, nicht den Blockeingang, an dem die Kette tatsaechlich anschliesst. Der ganze Block wurde dadurch zusaetzlich um seine eigene KS_EIN<->KS_AUS-Innenhoehe nach oben verschoben.

Modus 1/2 (gefaellestrecke-einfuegen) macht das bereits richtig: dort haengt das EIN-Element ueber reines insert-block-ks-to-ks (keine erzwungene Ziel-Z) an den Ketten-Pfad, die Endhoehe ergibt sich danach von selbst aus KS_AUS. GEFAELLESTRECKE_LINIENZUG (Modus 3) auf dasselbe Muster umgestellt - sowohl im normalen Bau (gf-linienzug-modus) als auch im Doppelklick-Rebuild (gf-linienzug-rebuild).

Manuell in BricsCAD verifiziert: Hoehenversatz jetzt korrekt, kein Rest-Sprung mehr.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 13:34:49 +02:00
Michael StanglandClaude Sonnet 5 80e5e62160 [FIX] GEFAELLESTRECKE_LINIENZUG: ES-Element erhielt keinen Hoehenversatz bei flachem Endpunkt-Klick
Das ES-Element wurde ueber insert-block-mixed-to-ks so platziert, dass sein KS_EIN exakt auf (caddr endpunkt-ref) landet - die Z-Koordinate des zweiten Mausklicks (Kettenende waehlen). Geraden und Boegen davor waren korrekt geneigt (grade wird separat berechnet/bestaetigt und fliesst in gf-linienzug-einfuegen ein), aber die anschliessende ES-Platzierung zog die Hoehe wieder auf den Klick-Wert zurueck - bei einem Klick in einer 2D-Draufsicht ohne 3D-Objektfang liegt der meist auf derselben Z wie der Startpunkt, das ES-Element landete dann faelschlich wieder auf Starthoehe trotz korrekt gefallener Kette.

Fix: Ziel-Z fuer das ES-Element ist jetzt (caddr sep-endpunkt) - die tatsaechlich durch die Kette (Geraden/Boegen mit grade) aufgebaute Hoehe am Ende, nicht der Klick-Wert. endpunkt-ref dient weiterhin nur zur groben deltaH-Schaetzung fuer den Winkel-Vorschlag im Dialog (den der Nutzer ohnehin bestaetigt/ueberschreibt). Das Attribut HOEHE_BIS_mm wird aus demselben Grund jetzt ebenfalls aus der real gebauten Endhoehe (es-aus-frame) statt aus endpunkt-ref gelesen, damit es nicht von der sichtbaren Geometrie abweicht. Identischer Fix im neuen Rebuild-Pfad (gf-linienzug-rebuild) angewendet, der denselben Mechanismus nutzt.

Manuell in BricsCAD verifiziert: ES-Element hat jetzt korrekten Hoehenversatz.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 13:29:40 +02:00
Michael StanglandClaude Sonnet 5 01fb2d29f2 [CHANGE] GEFAELLESTRECKE_LINIENZUG-Streckengruppen per Doppelklick editierbar machen
Bisher brach GEFAELLESTRECKE_EDIT bei jeder Streckengruppe (TYP "Streckengruppe", d.h. mit mindestens einem Bogen) mit "Nur einfache Gefaellestrecken..." ab - Grund war nicht fehlende Technik, sondern dass gf-linienzug-modus schlicht keine Edit-XDATA schrieb (anders als Modus 1/2 ueber SSG_GF_EDIT).

Neue XDATA-App SSG_GF_LZ (gf-lz-xdata-schreiben/-lesen in Lisp/Gefaellestrecke.lsp) sichert die Segmentliste (Typ/hz/Laenge/Winkel/Seite je Segment, bereits laengenfertig) + den Baustartpunkt - Serialisierung per gf-segmente->string/gf-string->segmente, Chunking ueber die bestehenden ssg-sepliste-chunk-string/-split-feld/-explode-chars-Helfer aus ssg_ks_insert.lsp (wiederverwendet statt dupliziert).

Neue Funktion gf-linienzug-rebuild: baut die Kette am selben Startpunkt neu, AS-/EIN-Element und Gefaellewinkel bleiben ueber dieselben zwei Dialoge wie beim Bauen editierbar (gf-dialog-linienzug-aus-ein/-winkel, jetzt mit prefill-Parameter fuer den Edit-Fall statt Defaults) - die Segmentlaengen/-form selbst nicht (dafuer bleibt GEFAELLESTRECKE_LINIENZUG als Neubau). c:GEFAELLESTRECKE_EDIT dispatcht vor der bisherigen TYP-Sperre: Streckengruppe MIT SSG_GF_LZ-XDATA -> neuer Rebuild-Pfad, Streckengruppe OHNE (Altbestand/VF-Kombi) -> bleibt wie bisher abgewiesen. Alter Block wird erst NACH erfolgreichem Neuaufbau geloescht.

doc/variofoerderer.md um den Edit-Ablauf ergaenzt.

Manuell in BricsCAD getestet (Doppelklick auf Linienzug-Streckengruppe, beide Dialoge vorbelegt, Neuaufbau, erneuter Doppelklick auf das Ergebnis) - laeuft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 13:16:55 +02:00
Michael StanglandClaude Sonnet 5 a9cdc127d9 [CHANGE] GEFAELLESTRECKE_LINIENZUG: AS/ES-Auswahl und Gefaellewinkel per Dialog statt Konsole (Teil B der GUI-Umstellung)
Zwei neue Dialoge (dcl/gefaellestrecke.dcl, Lisp/Gefaellestrecke.lsp):
- gf-dialog-linienzug-aus-ein: AUS-/EIN-Element Winkel+Seite in EINEM Dialog, ersetzt die vier fruehen Konsolenfragen. Muss vor der Segmentlaengen-/Winkelberechnung laufen (haengt von AS-/ES-Masse ab), darum eigener, fruehzeitiger Dialog.
- gf-dialog-linienzug-winkel: zeigt den automatisch aus der Segmentkette berechneten Gefaellewinkel-Vorschlag ueberschreibbar, mit kurzer Segment-Zusammenfassung und dem bereits gewaehlten AS/ES-Paar nur noch zur Kontrolle (disabled). Ersetzt zugleich die SPAETERE finale Einfuegen-Bestaetigung - nach der rein automatischen AS/ES-Korrekturschleife waere eine zweite Rueckfrage redundant.

Objektauswahl (ssget LINE/ARC) und Start-/Endpunktwahl bleiben bewusst Zeichnung/Konsole. Rueckfall auf die alten Konsolenfragen bleibt erhalten, wenn ein Dialog nicht gezeigt werden kann/darf (GUI aus); ein bewusster Dialog-Abbruch bricht dagegen den ganzen Befehl ab statt auf Konsole zurueckzufallen - neu im Vergleich zum alten Verhalten, aber konsistent mit vfc_eingabemodus/vfs_nachruesten_hz aus Teil A/C.

doc/variofoerderer.md (Abschnitt 4) aktualisiert und um einen bebilderten Beispiel-Walkthrough ergaenzt (gf-linienzug1-3.png: Ausgangslinie, Dialog mit Vorschlagswinkel, fertige Strecke neben der Original-Linie).

Manuell in BricsCAD getestet (vollstaendiger Lauf inkl. Abbruch in beiden Dialogen) - laeuft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 12:22:53 +02:00
Michael StanglandClaude Sonnet 5 57bb1e9057 [CHANGE] VARIOFOERDERER_NACHRUESTEN: Baurichtung per Dialog statt Konsole (Teil C der GUI-Umstellung)
Neuer Dialog vfs_nachruesten_hz (dcl/variofoerderer.dcl) + vfs-dialog-nachruesten-hz (Lisp/vf_standard.lsp) ersetzt den fruehren getreal-Prompt. Zeigt pro unmarkiertem VF_n-Fund Blockname/erkannten Typ und ein hz-Feld, vorbelegt mit dem zuletzt eingegebenen Wert (identisches Default-Fortpflanzungs-Verhalten wie vorher).

"Abbrechen" im Dialog uebernimmt bewusst nur den Vorgabewert fuer DIESEN Fund (Rueckgabe 'ABBRUCH), statt die ganze Nachruesten-Schleife abzubrechen oder auf die Konsole zurueckzufallen - echter Konsolen-Rueckfall bleibt ausschliesslich fuer den Fall, dass der Dialog gar nicht gezeigt werden kann (GUI abgeschaltet). Die Objektauswahl (ssget) selbst bleibt unveraendert Zeichnung/Konsole.

doc/variofoerderer.md um den Befehl ergaenzt (war dort bisher gar nicht erwaehnt).

Manuell in BricsCAD getestet (unmarkierter VF_4-Block, Dialog erscheint, hz=0 markiert) - laeuft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 11:59:18 +02:00
Michael StanglandClaude Sonnet 5 9a7907ab00 [CHANGE] VF Standard/Etage 3D-Linie-Eingabemodus per Dialog statt Konsole (Teil A der GUI-Umstellung)
Neuer Dialog vfc_eingabemodus (dcl/variofoerderer.dcl) + vfc-dialog-eingabemodus-waehlen (Lisp/vf_core.lsp), analog zum bestehenden vfc_typ-Muster: Radio-Buttons "3D-Linie auswaehlen" / "Werte manuell eingeben" ersetzen die fruehere getstring-Konsolenabfrage in vf-dialog-ablauf. Betrifft StandardVarioFoerderer3D und EtageVarioFoerderer3D (beide rufen denselben Ablauf).

Die 3D-Linie-Objektauswahl selbst (vfc-3dlinie-erfassen) bleibt bewusst Zeichnung/Konsole - eine Linie laesst sich nicht durch ein Formularfeld ersetzen. Alle daraus abgeleiteten Werte (deltaL/deltaH/hz/Einfuegehoehe) gehen als Prefill in den bereits bestehenden Basis-Dialog (variofoerderer_basis), der sie ueberschreibbar anzeigt - identisch zum "Werte manuell"-Pfad.

Rueckfall auf die alte Konsolenabfrage bleibt erhalten (GUI abgeschaltet, DXFM_LANG=en_GB), wie bei vfc_typ. doc/variofoerderer.md (Abschnitt 2, 8, Entscheidungsbaum) und CLAUDE.md entsprechend aktualisiert.

Manuell in BricsCAD getestet (StandardVarioFoerderer3D + EtageVarioFoerderer3D, beide Dialogzweige inkl. Abbruch) - laeuft.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 11:38:15 +02:00
Michael StanglandClaude Sonnet 5 2ef8f319ab [FIX] vf_linienzug_modus1_anleitung.md: Fragen-Tabelle und Stufe-2-Zahlen an aktuelle Testdatei angepasst
tests/testdata/linienzug_tests_stufe2.json hat sich seit Erstellung des Dokuments geaendert (62 statt 57 Eingabe-Eintraege, zusaetzliche Separator-Vor/Nach-Fragen, Kettenende-Frage vor statt nach der Gefaelle-Berechnung). Fragen-Tabelle in Abschnitt 3 komplett neu durchnummeriert und mit den tatsaechlichen JSON-Kommentaren abgeglichen.

Stufe-2-Ergebnis war veraltet: GF2=86mm/VF=286mm ersetzt durch die tatsaechlichen GF2=319mm/L_VF=48mm aus der Datei; Hoehenrest-Beispielrechnung in Abschnitt 5.a entsprechend angepasst.

Fehlerhafter Fakt in Abschnitt 5.c korrigiert: linienzug_tests.json hat ebenfalls erwartung_dx_mm=638 (nicht dY=637 wie behauptet) - beide Testfaelle zeigen denselben dX-Versatz.

Code-Fakten verifiziert und unveraendert korrekt: Winkeltabelle 3/6/9/12/15/18/21/27/33/39/45/51 Grad (data/json/component_defaults.json), *vfk-feste-horizontal-kettenende*=800mm, *vfl-gf-min-laenge*=400mm, vfl-winkel-stufe-entscheidung/berechne-alle-winkel/berechne-horizontale-mitte/vfl-loesche-seit/vfl-modus-abbruch-sichern existieren alle weiterhin, TEST_LINIENZUG_STUFE2 liest weiterhin linienzug_tests_stufe2.json.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 11:02:35 +02:00
Michael StanglandClaude Sonnet 5 5aed90dd56 [CHANGE] doc/plan und doc/todo angelegt, interne Analyse-/TODO-Dokumente dorthin verschoben
doc/todo/: TODO-plan-vf-interactive.md -> plan-vf-interactive.md, TODO-modus2-achsenweise-bilanz.md -> modus2-achsenweise-bilanz.md (offene Fahrplaene/TODOs).
doc/plan/: KS-Frame-Architektur.md, vf-parameter-struct-analyse.md, translate.md, Entwicklungsplan.md (Architektur-Analysen und Planungsdokumente, kein Anwender-Material).

Alle internen Verweise (CLAUDE.md, Lisp/README.md, README.md, doc/variofoerderer.md, Lisp/vf_spec.lsp, lib/dxf_vf_abbild.py, lib/vf_spec_export.py, tests/test_hm_recformat.lsp, tests/test_vf_geometrie.py, tests/test_vf_headless_statisch.py) auf die neuen Pfade angepasst. Reine Pfad-Updates in Kommentaren/Docstrings, keine funktionale Aenderung - Python-Syntax nach dem Umbau geprueft.

Anwender-/Entwickler-Referenzdoku (faq.md, kommandos.md, tools.md, dbg2lsp.md, csv-export.md, json-input-lisp.md, lisp_methods.md, LispTests.md, variofoerderer.md, vf_linienzug_modus1_anleitung.md) bleibt direkt in doc/.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:56:54 +02:00
Michael StanglandClaude Sonnet 5 fe4637d7df [FIX] doc/tools.md: veraltete Item-Zahlen korrigiert, Aufruf vereinheitlicht; set_coords.bat Copy-Paste-Kommentar behoben
Datenbasis (data/json/omniflo_*.json) hat sich seit der letzten Doku-Pflege verschoben: Boegen 27->29, Delta 1->7, Sternweiche 1->2, Dreifachweiche 6->0 (Typ aktuell nicht mehr in den Daten vorhanden), Gesamt 107->110. Schalter/Filterkriterien selbst (SWITCH_FILTERS in lib/omniflo_utils.py) sind unveraendert und weiterhin korrekt dokumentiert.

set_koords-Aufruf im Dokument auf bin\set_coords.bat vereinheitlicht (war inkonsistent zu set_einfuegepunkt.bat, das korrekt den bin\-Wrapper nennt).

bin/set_coords.bat trug noch den Kopfkommentar von set_einfuegepunkt.bat (Copy-Paste-Fehler) - korrigiert auf den tatsaechlichen Zweck (K1-K4 setzen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:51:12 +02:00
Michael StanglandClaude Sonnet 5 b0322a4f3c [CHANGE] Batch-Wrapper fuer dxf_anlage_export.py, dxf_scan_components.py, dxf_vf_abbild.py
Drei neue bin/*.bat nach dem bestehenden Pass-Through-Muster (setenv.bat + python ... %*, siehe set_einfuegepunkt.bat/dbg2lsp.bat), damit diese lib/-Skripte wie die uebrigen Python-Kommandozeilen bequem ueber bin/ aufrufbar sind. doc/kommandos.md Abschnitt 3 ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:47:23 +02:00
Michael StanglandClaude Sonnet 5 aaf47ab3c1 [CHANGE] JSON-Testdaten-Feldnamen aus dxf_anlage_export.py in lib/testdata_schema.py zentralisiert
dxf_anlage_export.py und dxf_scan_components.py fuehrten dieselben Feldnamen (abstand, deltaL_mm, as_seite, ...) aus doc/json-input-lisp.md unabhaengig als lose String-Literale - ein Tippfehler oder eine Schema-Aenderung in nur einer Datei waere nicht aufgefallen. Neues Modul lib/testdata_schema.py buendelt die Feldnamen/festen Werte der dokumentierten Schemas (Kreisel, Einzelblock, VF Standard/Etage, Gefaellestrecke Modus 1) als benannte Konstanten; dxf_anlage_export.py nutzt sie jetzt durchgaengig.

dxf_scan_components.py bewusst NICHT mitumgebaut: deutlich grösser/komplexer, mit zusaetzlichen Sonderfaellen (z.B. "startpunkt"/"gerade"-Form), ein vollstaendiger Umbau haette den Rahmen dieser Aenderung gesprengt und mehr Risiko als Nutzen gehabt.

Verhaltensgleich: alle 9 Tests in tests/test_dxf_anlage_export.py laufen weiterhin gruen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:43:09 +02:00
Michael StanglandClaude Sonnet 5 1e7e2c6349 [DOC] kommandos.md, faq.md, json-input-lisp.md: fehlende Eintraege ergaenzt
kommandos.md: lib/dxf_anlage_export.py fehlte in der Python-Kommandozeilen-Liste.
faq.md: FAQ-Eintrag fuer QcLinieMitGf/QcLinieMitGfUForm ergaenzt (bisher nur stichwortartig in der Gefaellestrecke-Liste erwaehnt, nirgends erklaert).
json-input-lisp.md: tests/testdata/showroom_ils.json fehlte in der Testdaten-Uebersicht (Abschnitt 9), obwohl TEST_SHOWROOM_ILS dokumentiert ist.

Alle anderen Befehle/Dateien/Testdaten in den drei Dokumenten gegen den aktuellen Code-Stand geprueft und bestaetigt aktuell.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:34:20 +02:00
Michael StanglandClaude Sonnet 5 d0ec791bf8 [DOC] VF-Doku: erledigte TODOs nachgetragen, toten Link entfernt
TODO-plan-vf-interactive.md: TEST_HUNDM05 laeuft inzwischen aktiv in tests/alltests.json (kein disabled mehr), Status-Kopf und S1-Zeile entsprechend aktualisiert.
vf_linienzug_modus1_anleitung.md: Verweis auf nicht existierende doc/VarioFoerderer_Linienzug_Prinzipien.md entfernt.

Geprueft, unveraendert gelassen (noch zutreffend): doc/variofoerderer.md, doc/vf-parameter-struct-analyse.md, doc/TODO-modus2-achsenweise-bilanz.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:30:02 +02:00
Michael StanglandClaude Sonnet 5 68ad56ec6c [DOC] Lisp/README.md auf aktuellen Code-Stand gebracht
Kern-Ladereihenfolge ergaenzt (ssg_id, ssg_ks_insert, ssg_input), Dummy-Status-Tabelle korrigiert (OMNI_TEF_* ist implementiert, nur OMNI_KettenFoerderer/OMNI_TV_*/OMNI_APBW_* und ein paar ILS-Kurven-Platzhalter sind noch Dummy). Fehlende Module ergaenzt: ssg_id.lsp, ssg_ks_insert.lsp, TEFInsert.lsp, GeruestInsert.lsp, Tro_Edit.lsp, Connection_Edit.lsp, DrawPlanquadrate.lsp. VarioFoerderer-Abschnitt an die Submodul-Aufsplittung (vf_core/vf_standard/vf_etage/vf_linienzug/vf_konstanten/vf_spec) und den Wizard/Journal/Headless-Mechanismus angepasst. SSG_BLOCKEDIT-Dispatchtabelle um GF_*/VF_*/GR_*/TRO_* ergaenzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:26:10 +02:00
Michael StanglandClaude Sonnet 5 8eed3e438f [DOC] README.md auf aktuellen Stand gebracht (Menuestruktur, MENULOAD-Lademechanismus, Projektstruktur, Umgebungsvariablen)
Veraltete Inhalte entfernt (alter on_start.lsp/startup.scr-Loader, fehlende Module wie Geruest/SPS/Connections/TRO, nicht mehr existierende Verzeichnisse/Variablen). Detaillierte Modul-/Befehlsdokumentation wird nicht mehr dupliziert, sondern per Verweis auf CLAUDE.md und Lisp/README.md gefuehrt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-09 10:15:58 +02:00
Michael Stangl bedf07a7b5 Merge remote-tracking branch 'origin/master' 2026-10-08 16:03:39 +02:00
Michael StanglandClaude Sonnet 5 a670db839e [CHANGE] VarioFoerderer Standard/Etage: 3D-Linie-Eingabemodus laeuft jetzt ueber den bestehenden Basis-Dialog statt komplett interaktiv auf der Konsole
Die Linie wird weiterhin gepickt (vfc-3dlinie-erfassen, aus vf-eingabe-abfragen herausgezogen), liefert aber deltaL/deltaH/Richtung/Einfuegehoehe/Fahrtrichtung nur noch als Prefill fuer vfs-dialog-eingabe-basis - Seite/Motorseite/Darstellung/Geruest bleiben wie bisher ueber die GUI einstellbar. c:VarioFoerderer dispatcht Standard/Etage dadurch immer in vfs-standard-dialog-ablauf/vfe-etage-dialog-ablauf; der alte rein konsolenbasierte Fallback-Pfad (Schritte 3-11, vf-eingabe-abfragen) ist als toter Code entfernt. Dead-Code-Aufraeumung: 35 nur noch vom entfernten Pfad genutzte Sprachschluessel aus lang/de_DE.json + lang/en_GB.json entfernt (Paritaet geprueft).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 16:01:56 +02:00
Michael StanglandClaude Sonnet 5 a6f6fcb575 [CHANGE] VF-Standard-Dialog: Geometrie-Reihenfolge angepasst (deltaL+Foerderrichtung, Einfuegehoehe+deltaH), Seite/Motorseite nebeneinander; nur Seite/Motorseite/Geruestoption bleiben Radio-Buttons, Rest wieder Combobox; Winkel/Verteilung-Dialog komplett auf Combobox zurueckgebaut (keine Radio-Variante mehr noetig)
[CHANGE] VF-Linienzug-Wizard: horizontale Kurve (GF-Bogen/Vario-Kurve) direkt nach explizit eingefuegtem AS-Element ausgegraut, da dort zuerst ein gerades Segment folgen muss

[ADD] doc/faq.md: Antworten zu VF/GF-Kombinationsfragen ergaenzt (Puffer-Umschleusung, Zielhoehe, Etagenfoerderer, Streckenueberbrueckung) + Screenshot gf-vf-kombination.png

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 14:42:17 +02:00
Michael Stangl 5b873838c1 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	dcl/variofoerderer.dcl
2026-10-08 12:47:05 +02:00
Michael StanglandClaude Sonnet 5 823dc6728d [CHANGE] Streckengruppe-Menue in Werte-manuell/Zielhoehe/Stueckweise aufgeteilt, QC-Linien unter Gefaellestrecke verschoben, Linienzug-Wizard "Naechstes Element" neu sortiert (GF vor VF) mit eigenem Abschliessen-Knopf statt Kettenende-Radio
Lisp/vf_core.lsp: fuenf eigene Menue-Wrapper (LinienzugVarioFoerdererManuell/-Zielhoehe/-Stueckweise, QcLinieMitGf/-UForm) ersetzen den alten interaktiven Modus-Dialog; vfc-dialog-linienzug-modus-waehlen entfaellt.
dcl/vf_linienzug_wizard.dcl + Lisp/vf_linienzug.lsp: "Neue Linie BIS Kettenende" ist kein Radio mehr, sondern eigener Button "OK und Abschliessen" neben "Ok Weiter"; GF-Optionen stehen vor VF-Optionen.
Menue (SSG_LIB.mnu/.cui), lang/*.json, doc/kommandos.md, doc/lisp_methods.md, doc/faq.md nachgezogen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 12:44:36 +02:00
Michael StanglandClaude Sonnet 5 1e2e28e532 [FIX] kreisel-insert-script Aufrufer in test_kreisel.lsp/test_mubea.lsp an 6. Parameter drehrichtung angepasst (seit 46afb33), sonst Abbruch mit "too few / too many arguments"
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-08 09:28:11 +02:00
Michael StanglandClaude Sonnet 5 46afb33b0b [ADD] Kreisel-Drehrichtung (DREHRICHTUNG) per JSON steuerbar: kreisel-insert-script bekommt optionalen 6. Parameter drehrichtung (GUZ/UZS), hundm05:bau-kreisel liest ihn aus dem Testdaten-JSON aus. Showroom ILS: Kreisel_Showroom_02/03/05 GUZ, Kreisel_Showroom_01/06 UZS eingetragen. Doku (lisp_methods.md, json-input-lisp.md) nachgezogen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 20:55:58 +02:00
Michael Stangl 9b831a55c8 help für show_exportcsv.bat dazu 2026-10-07 19:55:41 +02:00
Michael Stangl 0d8d803c36 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-10-07 11:41:45 +02:00
Michael StanglandClaude Sonnet 5 fcb4444ee1 [ADD] Block- und Text-Werkzeuge aus Walz (ACADSST) uebernommen
Neue Module ssg_blocktools.lsp (SSG_BLOCK_COUNT, SSG_BLOCK_DELETE,
SSG_ATTR_ERSETZEN) und ssg_texttools.lsp (SSG_TEXT_ERSETZEN,
SSG_TEXT_PARALLEL, SSG_TEXT_HOEHE, SSG_TEXT_STIL) sowie der generische
Eingabe-Wrapper ssg_input.lsp, dazu Menue-/Lade-Integration,
zweisprachige Texte und Unit-Tests fuer die reinen Kerne.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-07 11:40:11 +02:00
Michael Stangl 2f9cb7eaed Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-10-06 11:18:35 +02:00
Michael Stangl 7290a13607 Doku erste Fassung erstellt 2026-10-06 11:17:28 +02:00
Michael Stangl 66c4336b9e neue Referenzen kontrolliert und eingepflegt 2026-09-28 17:06:23 +02:00
Michael Stangl a43f620d3e Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-28 16:39:33 +02:00
Michael StanglandClaude Sonnet 5 e8c5cd0a63 Testrun-Export nach tests/output umbiegen, Sivas-Bezeichner-Datei optional, Sivas-Merkmalzuordnung in Config
SSG_RUN_ALL_TESTS_EXPORT setzte *export-test-override* nicht, dadurch
landeten CSV/Sivas-Exporte trotz Automatik-Modus in DXFM_RESULTS statt in
tests/output wie die DXF/DWG-Dateien selbst - jetzt analog zu
TEST_EXPORT_ALL behoben.

EXPORTSIVAS schrieb bisher immer zusaetzlich eine "_mit_bezeichnung.csv"
(Klartext-Kopie). Neuer Schalter "Sivas Export mit Bezeichner" im Dialog
CSV_EXPORT_KONFIG (Standard aus) macht das optional.

Die Attribut->Sivas-Merkmal-Zuordnung der build_*_details-Funktionen in
export_sivas.py (Gefaellestrecke/Kreisel/Eckrad/Geruest/VarioFoerderer,
soweit nicht von der Segmentanzahl abhaengig) liegt jetzt deklarativ in
cfg/sivas.cfg statt hartcodiert im Python - neuer Loader
lib/sivas_mapping.py. Ablauflogik (Gruppierung, Automation-Summenzeile,
Segment-Zaehlung) bleibt Code. Gegen den alten Code mit synthetischen
Testblöcken verifiziert: identische Ausgabe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-28 16:39:18 +02:00
Michael Stangl 33d0688763 referenzen der sivas Tests waren noch mit einem Bug eingepflegt 2026-09-28 15:36:54 +02:00
Michael Stangl e1601b6c9a neue Referenzen dazu 2026-09-28 15:35:39 +02:00
Michael Stangl 3a5e771931 Default für CSV Export ist nur die Spur der Separatoren. 2026-09-28 12:33:43 +02:00
Michael StanglandClaude Opus 5.5 96ca43eff5 export: Hilfskopien nach dem Export loeschen, IDs stabil ueber reservierte IDs
AS/ES-Marker werden wie alle Hilfskopien geloescht (ausser csv_leave_proxies). IDs von AS/ES, Separator-Kopien und Einheiten bleiben ueber reservierte IDs (XDATA SSG_ID_RES) am VF_n/GF_n-Wrapper stabil: AS|n/ES|n, K|i, U|n.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 10:14:02 +02:00
Michael StanglandClaude Opus 5.5 5a13595289 export: ein Schalter fuer Hilfskopien, Test-Menue ueber Funktionsaufruf
- csv_leave_proxies ist der einzige Schalter, der Export-Hilfskopien
  (Separator-/Element-Kopien, Einheiten-Proxies) stehen laesst; Standard
  jetzt 0 = aufraeumen. Die zwei gleichwirkenden Dialog-Haken
  (*csv-export-pruef-zuordnung*/*csv-export-elemente-behalten*) entfallen,
  CSV_EXPORT_KONFIG schaltet mit einem Haken denselben Debug-Schalter.
- Unit-Test fuer csv:hilfskopien-behalten-p/-setzen
- Test-Menue: (load ...) (c:TEST_...) statt Befehlsname direkt nach dem
  load - BricsCAD registriert den per load definierten Befehl erst nach
  Rueckkehr zur Kommandozeile ("Befehl nicht erkannt" bei TEST_EXPORT_ALL)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 22:17:30 +02:00
Michael StanglandClaude Opus 5.5 394d476d56 export: Kettenbausteine ueber KS verketten, Einheiten neu gruppieren
K1/K2 und Boundingbox je Export-Zeile folgen jetzt dem echten
Kettenbaustein statt seinem Stellvertreter:
- Separator (all_elements): KS + bbox des 300-mm-Trennstegs statt des
  Sensor-Symbols; separator_track/group_vf_gf behalten das Symbol
- AS/ES (all_elements, group_vf_gf): KS + bbox des AS-/ES-Elements statt
  des 200x200-Markers ohne K
- gemeinsamer Kern csv:ks-welt-punkte; VF/GF-Wrapper-K1/K2 = K1 des AS
  bzw. K2 des ES

Gruppierter Export neu (sepliste-/XDATA-Algorithmus entfernt):
- Bausteine je Wrapper als Vektorkette K2 -> K1 ordnen (Start am AS)
- Foerdereinheit = Separator vor der Umlenkstation bis Motorstation,
  alles dazwischen Gefaelleeinheit (csv:kette-einheiten, Unit-Tests)
- je Einheit ein temporaerer Proxy mit 3D-Boundingbox, K1/K2, Laenge und
  Anzahl Boegen; wird nach dem Export geloescht (ausser csv_leave_proxies)
- IDs neuer Export-Objekte entlang der Kette AS -> ES aufsteigend

Weiteres:
- ssg-make-layer ohne _LAYER-Befehl fuer bestehende Layer (Konsole)
- einheitliche, zweisprachige Meldungen fuer behaltene Hilfskopien
- bin/show_exportcsv.bat: Export-CSV als Boundingbox-SVG (sps_skel)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 20:25:29 +02:00
Michael Stangl bc481de901 menu: ueberzaehligen Konfiguration-Schliessen-Eintrag entfernen
CSV-Export traegt jetzt selbst den schliessenden <- Marker (wie bei den
anderen Konfiguration-Eintraegen) - die alte Schliessen-Zeile erschien
sonst als eigener sichtbarer Menuepunkt zwischen Konfiguration und Tests.
2026-09-25 08:57:48 +02:00
Michael Stangl 69a192b83a export_csv: Konfigurationsdialog fuer Export-Modus + Proxy-Sichtbarkeit
Neuer Menuepunkt Konfiguration > CSV-Export (CSV_EXPORT_KONFIG) mit DCL-
Dialog: drei sich ausschliessende Export-Modi (group_vf_gf/all_elements/
separator_track, letzterer neu - nur AS/ES/Separator) ueber die zentrale
Variable *csv-export-modus*, sowie zwei unabhaengige Haken fuer sichtbare
Element-Proxy-Kopien (Zuordnung pruefen / Kopien behalten).
2026-09-25 08:45:03 +02:00
Michael StanglandClaude Sonnet 5 e7643bf181 export_csv: VF_n/GF_n-Einzelelemente zu Foerdereinheit/Gefaelleeinheit gruppieren
Die Einzelteil-Proxy-Zeilen (Boegen, Streckenelemente, Umlenk-/Motorstation)
aus der letzten Session sind fuer den Normalfall zu granular. Standardmaessig
(*csv-export-alle-elemente* = nil) fasst csv:unitmark-aktualisieren sie jetzt
zu je einer "Foerdereinheit"/"Gefaelleeinheit"-Zeile pro zusammenhaengendem
VF-/GF-Abschnitt einer Kette zusammen, mit einem persistenten Rechteck-Marker
(ZZ_UNIT_MARKER, analog ZZ_ASES_MARKER) auf der Bounding-Box-Vereinigung
aller enthaltenen Elemente. Der bisherige Rohdaten-Export bleibt ueber
(csv:export-alle-elemente-an) weiterhin verfuegbar.

Einheiten-Grenzen kommen rein export-seitig aus der sepliste (SEP/AS/ES in
echter Bau-Reihenfolge) plus dem bereits vorhandenen SSG_SEP_TYP je
Separator - eine bauzeitige Markierung in vf_linienzug.lsp/vf_standard.lsp/
vf_etage.lsp waere deutlich invasiver gewesen (3 unabhaengige Baupfade ohne
gemeinsamen Einstiegspunkt). csv:sepliste-partition (Lauflaengen-Kodierung
ueber die typisierte sepliste) und csv:element-unit-zuordnung (Zuordnung der
gesammelten Elemente per Kettenrichtungs-Projektion statt der nachweislich
unzuverlaessigen csv:nested-welt-records-Listenreihenfolge) sind reine,
dateifrei getestete Funktionen.

Korrigiert nebenbei eine falsche Annahme: L_VF_m/L_GF_m zaehlen pro Segment,
nicht pro Einheit - die tatsaechliche Einheiten-Anzahl kommt nur aus der
sepliste-Typfolge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 23:46:41 +02:00
Michael StanglandClaude Sonnet 5 f751a90076 export_csv: VF_n/GF_n-Einzelelemente (Boegen, Streckenelemente, Umlenk-/Motorstation) als Proxy-Zeilen exportieren
Bisher tauchten nur der Wrapper selbst, verpackte Separatoren und AS/ES-
Kettenenden als eigene CSV-Zeilen auf - die uebrigen Kettenbausteine
(Boegen, gerade Foerderer-/Gefaellestrecken-Segmente, Umlenk-/Motorstation)
blieben nur in der Wrapper-Blockdefinition verpackt. csv:element-proxies-
erzeugen (analog zu csv:sep-proxies-erzeugen) fuegt fuer jeden Fund eine
temporaere Kopie ein, K1/K2 kommen aus dem EIGENEN KS_EIN/KS_AUS jedes
Elements (nicht dem Gesamt-AS/ES der Kette) und bleiben leer, wo keines
existiert (z.B. das nie tatsaechlich eingefuegte Vario_Kurve_*).

Zusaetzlicher Fix: csv:get-k-kos-strings ignorierte bisher die Skalierung
des Top-Level-Inserts - fuer Staustrecke_SP_1000_mm (das per Laenge nicht-
uniform skaliert wird) waere K2 damit falsch gewesen, unabhaengig von der
tatsaechlich gebauten Segmentlaenge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 13:08:35 +02:00
Michael StanglandClaude Sonnet 5 4f1a0e0b5b export_csv: sepliste-Koordinaten (x/y) entfernen, nur noch typ/lfdnr/id
Validiert (Nutzer-Befund): die sepliste-XDATA-Koordinaten sind der rohe
Gruppencode-10-Punkt des jeweiligen Bau-Primitivs und teils gespiegelt/um
mehrere 100mm verschoben (z.B. Separator 0037: x=-5070.1 statt 5070.1,
ausserhalb der VF_1-Boundingbox). Die eigene Export-Zeile jedes Bauteils
(x/y aus der echten Proxy-Kopie) ist dagegen verlaesslich und liegt korrekt
in der Boundingbox. sepliste dient nur noch der ID-Zuordnung/Reihenfolge,
nicht mehr als Koordinatenquelle.

Der Python-Faellback in map_sepliste_kette_items (nur fuer SEP-Eintraege
ohne aufloesbares "id"-Feld, Altbestand) matchte bisher per naechstem
sepliste-Punkt - jetzt erster unverbrauchter Kandidat je Zuordnung, da keine
Koordinate mehr vorliegt. lib/dump_vf_kette_inhalt.py zeigt Position/Typ
jetzt ueber die ID-Verknuepfung zur eigenen Bauteil-Zeile statt ueber die
entfernten sepliste-Felder.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 10:58:53 +02:00
Michael StanglandClaude Sonnet 5 42309c77d2 export_csv: Separator-TYP-XDATA vom aeusseren Trennsteg statt vom geteilten Symbol lesen
Der letzte Fix markierte bauzeitig korrekt den aeusseren
Staustrecke_Separator_SP_300_mm-Trennsteg, csv:sep-proxies-erzeugen las den
Marker aber vom inneren Separator_SP-Symbol - das ist als Teil EINER
gemeinsamen DWG-Blockdefinition zwischen ALLEN Separatoren der Zeichnung
geteilt und kann keinen individuellen Marker tragen. Export sucht jetzt
zusaetzlich den aeusseren Trennsteg (eigene Instanz je Separator) und
ordnet ihn dem Symbol ueber die naechstliegende Weltposition zu.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-24 09:27:57 +02:00
Michael StanglandClaude Sonnet 5 2f56729308 export_csv: Separator-TYP (VF/GF) bauzeitig je Separator statt vom Wrapper-Blocknamen ableiten
csv:wrapper-strecke-typ (voriger Ansatz) las den Streckentyp aus dem
VF_n/GF_n-Wrapper-Blocknamen - falsch, weil ein einzelner Wrapper intern
mehrfach zwischen Foerderer- und Gefaellestrecke-Abschnitten wechseln kann
(HundM05 VF_1: 4 Separatoren, 2x VF, 2x GF). Jede Separator-Einfuegestelle in
vf_linienzug.lsp/Gefaellestrecke.lsp/vf_standard.lsp/vf_etage.lsp markiert
das frisch eingefuegte Staustrecke_Separator_SP_300_mm-Insert jetzt direkt
per XDATA (ssg-sep-typ-xdata-schreiben/-lesen, ssg_ks_insert.lsp). Der Export
liest den Marker am verpackten Original (nested-ent), nicht mehr am Wrapper.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 17:28:31 +02:00
Michael StanglandClaude Sonnet 5 c95a94c175 Diagnose-Skripte fuer VF/GF-Kettenzusammensetzung ergaenzen
Zeigen die Spec- bzw. Blockdefinitions-Struktur einer VF-/GF-Linienzugkette
in der Konsole, um sichtbar zu machen, dass ein einzelner VF_n-Wrapper
intern zwischen VF- und GF-Abschnitten wechseln kann (Grundlage fuer den
noch ausstehenden Separator-TYP-Fix).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 17:14:03 +02:00
Michael Stangl 9671fe4e04 sprechender Sivas Export war noch eine key value Kombination 2026-09-22 10:55:37 +02:00
Michael Stangl 3653b804b0 neue Referenzen für die TEsts 2026-09-21 14:20:23 +02:00
Michael Stangl 54559c4a18 neue Referenz für die Werte der VF in HundM 05 2026-09-21 14:11:05 +02:00
Michael StanglandClaude Opus 4.8 d0fe890d7c Start-Ausgabe entschlacken: per-Modul-Banner auf je eine Zeile kuerzen
Der SSG_LIB-Start gab ~50 Zeilen aus (mehrzeilige >>> ...geladen <<<-Banner mit
Befehlslisten/Block-Pfaden, ===-Trenner, Core-Modul-Auflistung, VarioFoerderer-
Typenliste). Fuer einen einfachen _QNEW-Start zu viel Rauschen.

Gekuerzt (nur die dicksten Bloecke, je Modul bleibt EINE knappe Zeile;
Fehler/Warnungen ALLE unveraendert erhalten):
- Kern-Module (ssg_core/dbg/dialog/layer/id): reine "X geladen"-Zeilen entfernt.
- Feature-Module: KreiselInsert/Gefaellestrecke/VarioFoerderer je auf eine
  ">>> X geladen"-Zeile; Befehlslisten, Modus-/Typen-Aufzaehlungen, Block-Pfade
  und ===-Trenner raus. VF-Submodule (vf_konstanten/standard/etage/linienzug/
  spec) Lade-Banner ganz entfernt (der Sammel-Header deckt sie ab).
- SSG_LIB_Commands "Dummy-Befehle registriert" entfernt.
- menu/SSG_LIB.mnl: ===-Trenner + Core-Auflistung raus; die doppelte
  "Einfuege-Modus 3D"-Zeile entfernt (S:STARTUP gibt sie ohnehin einmal aus).

Behalten (informativ / diagnostisch): [CFG] Config geladen: N Sektionen,
[LANG] N Texte geladen, alle FEHLER/WARNUNG-Zeilen, die Abschlusszeilen
"Alle Module geladen. Menue aktiv." + "Einfuege-Modus: 3D".

Reine Ausgabe-Reduktion, keine Logik geaendert. 243/243 LISP-Unit-Tests gruen;
alle Module laden fehlerfrei (Klammerbalance gegen HEAD unveraendert).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 22:13:33 +02:00
Michael StanglandClaude Opus 4.8 0babf78789 Tests + Bau-Pfad-Alert: 4 Baseline-Failures behoben
test_export_separatorliste.py (2 Failures, KeyError 'Separatorlist'): der Test
pruefte noch das alte Merkmal "Separatorlist" (nur SEP-Eintraege). write_
separatorliste_merkmale fuellt seit dem Umbau das Top-Level-Feld item["trackids"]
(CSV-Spalte "TrackIds") mit AS + Separatoren + ES in Baureihenfolge. Tests auf
die neue API/Semantik angepasst (empirisch verifiziert: "0054, 0052, 0053, 0055").

vf_linienzug.lsp - echter Fund des statischen Waechters: vfl-body-abschluss
setzte am "Kettenende nicht baubar"-Zweig ein (alert ...) im BAU-Pfad (blockiert
Batch/Headless). Auf vfl-meldung umgestellt (zeigt alert nur bei erlaubter GUI,
sonst princ) - genau die Regel, die der Waechter erzwingt.

test_vf_headless_statisch.py (2 Failures): Soll-Inventar an den aktuellen Code
angeglichen - 18 legitime neue Wizard-/Frage-Dialoge (vflw-gruppe-*-impl,
vflw-m2-*-impl, vfl-frage-ist-*) + vfl-ks-aus-hz-an-punkt (ssget, Zeichnung
durchsuchen) ergaenzt, vflw-gruppe-horizontal-impl entfernt (weg im Code),
vfl-edit-ent auf alert:2 (linienzug2-Abweisung, harter Schnitt).

Suite: 11 -> 7 failed. Verbleibend NICHT hier: test_hundm05.py (auf Wunsch
ausgenommen) + test_vf_geometrie.py (6x, gebautes HundM05-DXF weicht von der
Referenz ab - braucht fachliches Urteil ueber die neue Geometrie, nicht blind
die Referenz ueberschreiben). 243/243 LISP-Unit-Tests gruen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 21:30:14 +02:00
Michael StanglandClaude Opus 4.8 8be256fb5a VF: gemeinsamen Wrapper-Rumpf vf-wrapper-bauen (Standard/Etage + Linienzug)
vf-block-erstellen (vf_core, Standard/Etage) und vfl-block-erstellen
(vf_linienzug) hatten denselben ~25-Zeilen-Rumpf wortgleich: ATTDEFs am
Startpunkt, Entity-Sweep seit lastEnt, Sepliste sichern, ssg-block-wrap-welt,
Layer setzen, Sepliste-XDATA, Attribute setzen, ID + Dim-XDATA. Jetzt in
vf-wrapper-bauen (vf_core) zusammengefasst; beide Aufrufer bauen nur noch ihre
FERTIGE Attributliste (Standard/Etage: feste Werte; Linienzug: *vfl-acc-*-
Komma-Listen) und uebergeben sie - der Rumpf kennt die Attribut-Semantik nicht.

ATTDEF-FORMAT VEREINHEITLICHT auf den kanonischen Stil: 3 von 4 Wrapper-Bauern
(vfl-block-erstellen, Gefaellestrecke, Vario_Kette_Merge) nutzten bereits
identisch (10/11=startpunkt, 40, 70/72/74, alle am selben Punkt). vf-block-
erstellen war der Ausreisser mit Layer-0/Model-Space-Zwang, y-Dekrementierung
je Zeile und fehlenden Ausrichtungscodes - historischer Drift OHNE Effekt bei
unsichtbaren ATTDEFs (Flag 70=1, reine Attribut-Container). Standard/Etage
bauen die ATTDEFs damit jetzt im kanonischen Format.

Toter Code entfernt: *vfk-attdef-zeilenabstand* (einzige Nutzung war die
entfernte y-Dekrementierung). *vfk-attdef-texthoehe* jetzt in vf-wrapper-bauen
zentral genutzt.

Die ATTRIBUTWERTE sind unveraendert (Diff-Review: Bezeichnung wertgleich,
Etage-Bogen-Extra nur von zweitem ssg-attrib-set-on in die Hauptliste gezogen).
Verhaltensneutral fuer den Linienzug (hatte schon das kanonische Format);
fuer Standard/Etage aendert sich nur das (unsichtbare) ATTDEF-Format.

243/243 LISP-Unit-Tests gruen; Python-Suite unveraendert (11 Baseline);
Klammerbalance geprueft. Der Attribut-/Geometrie-Gleichstand von Standard/Etage
ist interaktiv in BricsCAD bzw. per SSG_RUN_ALL_TESTS gegenzupruefen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 21:08:54 +02:00
Michael StanglandClaude Opus 4.8 cdb9183692 CLAUDE.md: Subagenten nur mit Rueckfrage + leichtere Modelle bevorzugen
Konvention ergaenzt: Subagenten sollen nur mit Rueckfrage an den Nutzer
gestartet werden; wenn moeglich die leichteren Modelle waehlen (i.d.R.
Code-Recherche).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 20:55:17 +02:00
Michael StanglandClaude Opus 4.8 bd33e277c5 VF-Linienzug/Edit: Praeambel, Debug-Session und Edit-Attributleser buendeln
Punkt 2 (vf_linienzug.lsp) - die drei Modi teilen jetzt zwei Praeambel-Helfer
statt sie wortgleich auszuschreiben:
- vfl-dbg-session-start (schalter datei funcname sessiontext): oeffnet die
  dbg-Datei + schreibt Kopf/Session-Start. M1 haengt seinen Replay-Queue-
  Diagnose-Zusatz danach an (M1-spezifisch).
- vfl-dbg-hook-installieren: der fruehe duenne dbg-*error*-Hook (M2/M3),
  Lambda mit dynamic-scope-Vertrag wie vfl-abbruch-handler-installieren.
- vfl-frage-punkt-hoehe (punkt-key hoehe-key abbruch-key wizard-prompt):
  Startpunkt/Hoehe-Praeambel (Wizard-Hook + vfl-in-point + vfl-in-real + Z
  uebernehmen, (exit) bei Abbruch). Genutzt fuer Startpunkt in M1/M2/M3 UND
  den Endpunkt in M2 (vier Aufrufstellen, vorher 4x strukturgleich).

Punkt 3 (vf_standard.lsp / vf_etage.lsp) - der wortgleiche Attribut-Lese- +
prefill-basis-Aufbau der beiden Edit-Bodies (c:VARIOFOERDERER_EDIT,
vfe-edit-ent) in vfs-edit-basis-lesen (ent xd default-deltah default-seite)
zusammengefasst; die zwei abweichenden Defaults sind Parameter. Gibt eine
Alist (prefill-basis + Rohwerte attribs/startpunkt/hz/z-start) zurueck.
vf-konvertiere-ent BEWUSST nicht mit zusammengelegt - andere Zielstruktur
(Einzelwerte + L_VF/L_GF fuer den Batch-Konverter), Zusammenfuehrung wuerde
beide verkomplizieren.

243/243 LISP-Unit-Tests gruen; Python-Suite unveraendert zur Baseline
(11 failed); Klammerbalance geprueft. Verhaltensneutrale Extraktionen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 20:55:17 +02:00
Michael StanglandClaude Opus 4.8 350c294717 doc: Umbauplan Modus-2-Solver achsenweise Laengen-Bilanz
Diagnose + Umbauplan fuer die U-Form-Abweichung im Modus-2-Solver als
doc/TODO-modus2-achsenweise-bilanz.md festgehalten (mit dem Entwickler zu
besprechen, noch nicht umgesetzt). Enthaelt: Symptom (test_modus2.dxf),
praezise Ursache (skalare climber-span statt achsenweiser Bilanz, Fundstellen
9990/10070), Beleg als dokumentiertes v1-Limit, 5-Etappen-Umbauplan mit
Regressionsnetz zuerst, Risiko-Einschaetzung und Zwischenloesung (abweisen).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 17:35:45 +02:00
Michael StanglandClaude Opus 4.8 7dbf1248c9 VF-Linienzug Modus 2/3: Geister-Mini-Objekte aus Pfad-Auswahl filtern
Eine Rechteck-Auswahl kann winzige Geister-/Artefakt-Objekte miterfassen (real:
ein 14-mm-Mini-Bogen). gf-sortiere-objekte haengte sie per Nearest-Neighbor
stumm in die Kette -> ein Geister-Bauteil (im test_modus2.dxf: eine 90-Grad-
Kurve vor dem Motor, die der Nutzer nie gezeichnet hat; im SEGS-Journal als
7. Segment mit Sehne 14 mm sichtbar).

vfl-in-segmente wirft jetzt VOR der Sortierung alle Objekte unter
*vfk-pfad-min-segmentlaenge* (100 mm) aus und meldet Anzahl + Grund
(vfl-m3-mini-objekte-verworfen, de/en). Schwelle konservativ deutlich unter
jedem realen Bauteil (kleinstes: Separator 300 mm; kleinster echter Eck-Bogen
R500/30 Grad hat Sehne ~259 mm) und knapp ueber dem Restlaengen-Clamp (100 mm),
damit kein legitimes Segment faelschlich verworfen wird.

Neue Helfer: vfl-obj-2d-laenge (LINE-Laenge / ARC-Sehne), vfl-filter-mini-objekte
(-> (behalten . verworfen-anzahl)). Neue Konstante *vfk-pfad-min-segmentlaenge*.
Der Bug lag NICHT im SEGS-Umbau (gf-sortiere-objekte/-analysiere-kette
unveraendert) - der SEGS-Journal machte ihn nur erstmals sichtbar.

243/243 LISP-Unit-Tests gruen; JSON valide + de/en-Paritaet geprueft. Der
Geometrie-Effekt (Geister-Segment weg) ist interaktiv zu bestaetigen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 17:17:15 +02:00
Michael StanglandClaude Opus 4.8 255707f136 VF-Linienzug: VF-Lauf-Grenze als Alert-Box + toten Etage-Code entfernen
Zwei kleine Aenderungen am VF-Linienzug-Cluster:

1. Modus-2-Abweisung "nur EIN VF-Lauf moeglich" jetzt als sichtbare Meldung.
   Bislang ging die Grenze (vf-count != 1 -> M3b spaeter) nur ueber drei
   princ-Zeilen in die Konsole und war dort leicht zu uebersehen. Neuer
   zweisprachiger Text vfl-m3-vf-lauf-alert, gezeigt ueber vfl-meldung (alert-
   Box bei erlaubter GUI, headless nur princ - blockiert also keinen Batch).
   Die [M3a]-Konsolendiagnose bleibt zusaetzlich fuer den Log.

2. insert-hz-incl-scaled-block (vf_etage.lsp) entfernt - toter Code, kein
   Aufrufer im gesamten Repo (byte-genaue Pruefung + grep). Der zugehoerige,
   nur dort genutzte i18n-Key vfe-hz-incl-status ebenfalls aus de/en entfernt.
   Die anderen drei insert-hz-*-Funktionen BLEIBEN bewusst: sie unterscheiden
   sich in Platzierungssemantik (KS_EIN vs. Block-Ursprung) bzw. der
   Skalierung+KS+Vertikale-Kombination von den ssg_ks_insert-Primitiven, ein
   Ersatz wuerde die Geometrie verschieben (Kommentar an der Fundstelle).

243/243 LISP-Unit-Tests gruen; JSON valide + de/en-Paritaet geprueft.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 17:08:25 +02:00
Michael StanglandClaude Opus 4.8 8ccec9dea7 VF-Linienzug Modus 2 auf SEGS umstellen (behebt Doppelklick-Desync)
Modus 2 journalisiert die Segment-Essenz (SEGS) statt der Objekt-Handles
(OBJS) - identische Umstellung wie Modus 3. Damit ist der Block selbst-
enthalten und der Doppelklick-Neubau unabhaengig von den Original-LINE/ARC.
Behebt den beobachteten Modus-2-Desync (Winkel wurde beim Neuaufbau interaktiv
nachgefragt + Abweichung, weil der OBJS-Replay an den - ggf. verschobenen -
Pfad-Objekten hing).

- vfl-in-selection + obj-liste im Modus-2-Ablauf durch vfl-in-segmente ersetzt
  (Live: ssget -> gf-sortiere-objekte -> gf-analysiere-kette -> Eck-Vorpruefung
  -> SEGS; Replay: fertige Essenz aus dem Journal). Objektauswahl steht jetzt
  NACH der Startpunkt-Praeambel (vfl-in-segmente braucht den startpunkt).
- segmente9 (9-Feld-Essenz) eingefuehrt, 5-Feld-segmente daraus abgeleitet;
  seg-ent -> nil (kein Live-Highlight mehr, wie Modus 3).
- Marker bleibt "linienzug2".

HARTER SCHNITT fuer Altbestand: alte OBJS-"linienzug2"-Bloecke (ohne SEGS)
werden beim Doppelklick klar abgewiesen (neuer Text vfl-edit-m2-obsolet, de/en)
statt mit falschen Daten in den Bau zu laufen; der Batch-Konverter ueberspringt
sie. Erkennung: vfl-journal-hat-segs-p.

Tests: 3 file-freie Unit-Tests fuer vfl-journal-hat-segs-p (SEGS erkannt,
OBJS/leer nicht). 243/243 LISP-Unit-Tests gruen in BricsCAD; test-neutral gegen
HEAD (11=11 Python-Failures); lang-Paritaet geprueft. End-to-end (Neubau +
deckungsgleicher Doppelklick) wie bei Modus 3 interaktiv zu bestaetigen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 16:44:10 +02:00
Michael StanglandClaude Opus 4.8 008f497b5d VF-Linienzug: Abbruch-Wickel-Handler der 3 Modi zentralisieren
Der scharfe *error*-Abbruch-Handler (wickelt Teil-Geometrie bei ESC/(exit) zu
einem VF_n-Block mit vollem Journal) stand in Modus 1/2/3 dreimal WORTGLEICH,
nur der Marker-String unterschied sich. Jetzt eine gemeinsame Funktion
vfl-abbruch-handler-installieren (marker), die *error* als Lambda-Liste mit
eingebautem Marker-Literal setzt (list-Konstruktion, kein globaler Zwischen-
zustand). Der fragile Wickel-Rumpf existiert damit nur noch EINMAL - kuenftige
Fixes an einer Stelle statt drei.

Die je-Modus unterschiedliche old-error-Quelle bleibt an der Aufrufstelle
(M1: *error*, M2/M3: dbg-old-error via fruehem dbg-Hook) - nur der wortgleiche
Handler-Rumpf wird geteilt. Alle vom Handler zur Abbruchzeit dynamisch
aufgeloesten Locals (old-error/lastEnt/vfl-nummer/... /dbg-an) sind unveraendert
im Modus-Frame gebunden (VERTRAG in der Funktion dokumentiert).

Tests (tests/test_unit.lsp, tu-tests-vfl-abbruch): der Konstruktor erzeugt eine
gueltige (lambda (msg) ...)-Struktur und baut GENAU den uebergebenen Marker als
letztes Argument des vfl-modus-abbruch-sichern-Aufrufs ein (linienzug2 vs
linienzug3 geprueft). 240/240 LISP-Unit-Tests gruen in BricsCAD; keine neuen
Python-Failures (11 = HEAD-Baseline). Modus-1-ESC-Abbruch interaktiv bestaetigt
(Teilkette bleibt als editierbarer VF_n-Block stehen).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 16:36:11 +02:00
Michael StanglandClaude Opus 4.8 74b767271b Fix: vfl-vwnb-eingefuegt sagt Modus 3 statt faelschlich Modus 2
Der Ergebnis-Banner des VF-Linienzug-Vorwaerts-Nachbaus (vfl-vwnb-*-Keys =
Modus 3) trug den falschen Text "Modus 2". Korrigiert in de_DE.json und
en_GB.json (Paritaet geprueft).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 15:58:21 +02:00
Michael StanglandClaude Opus 4.8 3cce1ec457 VF-Linienzug Modus 3 editierbar: Segment-Essenz statt Objekt-Handles
Modus 3 (Vorwaerts-Nachbau) hat jetzt dieselbe XDATA-Editierbarkeit +
Doppelklick-Neubau wie Modus 1/2. Statt der Pfad-Objekt-Handles wird die
abgeleitete Segment-ESSENZ journalisiert (neuer Journal-Typ SEGS): der VF_n-
Block ist damit selbst-enthalten, der Neubau unabhaengig davon, ob die
urspruenglichen LINE/ARC noch existieren - robuster als der OBJS-Weg von Modus 2.

Journal-Kern (vf_linienzug.lsp):
- Neuer Typ SEGS: Segmentliste (typ hz laenge bwinkel bseite spx spy epx epy)
  serialisiert als ";"-getrennte Segmente, Felder per "|". Eingebunden in
  vfl-entry->string / vfl-string->entry / vfl-entry->json.
- vfl-in-segmente: Live (ssget -> gf-sortiere-objekte -> gf-analysiere-kette ->
  Eck-Vorpruefung -> 9-Feld-Essenz) ODER Replay (Essenz direkt aus SEGS-Journal).
  Ersetzt vfl-in-selection im Modus-3-Ablauf.
- vfl-kette->segmente9 fuehrt Bau-Segmente + Start/Endpunkte zusammen; Soll-Ende
  kommt jetzt aus der Essenz statt aus den Original-Entities.

Modus-3-Umbau:
- Abbruch-Wickler + vfl-journal-xdata-schreiben mit Marker "linienzug3" (analog
  Modus 2). Kopf-Kommentar/Fehler-Handler-Variablen an Modus 2 angeglichen.
- Kein Live-Segment-Highlight mehr (Essenz-Bau reicht keine Entity mehr durch) -
  bewusst, im Code dokumentiert.

Doppelklick/Batch:
- vfl-edit-ent2 zu vfl-edit-ent-voll parametrisiert; vfl-edit-ent3 ruft
  vf-linienzug-modus3. vfl-edit-ent / vfl-konvertiere-ent / vfl-journal-xdata-
  lesen dispatchen "linienzug3".

Tests:
- 8 file-freie SEGS-Roundtrip-Unit-Tests (tests/test_unit.lsp, tu-tests-vfl-segs);
  234/234 LISP-Unit-Tests gruen in BricsCAD.
- vfl-in-segmente im statischen Headless-Waechter registriert.
- Verifiziert an einer echten linienzug3-Kette (results/test.dwg): SEGS-Journal
  korrekt geschrieben, Doppelklick-Neubau geometrisch deckungsgleich zum Original.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 15:55:47 +02:00
Michael StanglandClaude Opus 4.8 bc4b25d251 CLAUDE.md: LISP-Testsuite-Regeln + Headless-Lauf dokumentieren
Zwei Konventionen ergaenzt (Abschnitt Konventionen):
- Neue LISP-Routinen nach Moeglichkeit in die Testsuite aufnehmen; Vorrang fuer
  file-/zeichnungsfreie Routinen als tu-*-Block in tests/test_unit.lsp (TEST_UNIT).
- Headless-Testlauf ueber bin/run_tests.bat --lisp; BricsCAD steht dafuer ueber
  die Umgebungsvariable BRICSCAD (aus bin/setenv.bat) zur Verfuegung.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 15:55:24 +02:00
Michael Stangl 37fdedd996 VF-Linienzug AS/ES-Praeambel + csv:run-export entduplizieren
vf_linienzug.lsp: die 5-6x wortgleich ausgeschriebene AS-/ES-Winkel+Seite-
Praeambel (Winkel 30/90, Seite links/rechts, Masse setzen) in zwei
parametrische Helfer ausgelagert (vfl-frage-as-winkel-seite,
vfl-frage-es-winkel-seite - Seiten-Headerkey als Parameter, symmetrisch zum
bestehenden vfl-frage-es-seite). Ersetzt in modus1-AS, modus2-AS, modus2-ES.
modus3-AS und die QC-Nachfrage bleiben (kein echtes Duplikat, abweichende
Prompt-/Wizard-Semantik).

export.lsp: csv:run-export (181 Z.) in Phasen zerlegt - csv:export-vorbereiten
(Proxies/IDs/Zuordnung/Attribut-Update/Sep-Scan/REGENALL/bbox-Reset) und
csv:python-aufrufen (Python-Skript-Aufruf + Exitcode-Auswertung). Runner liest
sich jetzt als klare Sequenz.

Verhaltensneutrale Extraktionen; Klammerbalance unveraendert, Python-Testsuite
ohne neue Fehler (16 failed baseline vor/nach identisch).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
2026-09-18 14:52:02 +02:00
Michael StanglandClaude Opus 4.8 ab7be54764 Test an neue csv:local-to-world-Signatur anpassen
Der Extrusions-Fix (d4260ac) hat csv:local-to-world von parent-rot-rad
(Winkel) auf parent-R (3x3-Rotationsmatrix) umgestellt. tu-tests-export
uebergab noch den Winkel und lief in "bad argument type <0.0>
expected <CONS>". Jetzt per (mat3-rz winkel) die Matrix bilden;
erwartete Ergebnisse unveraendert (Identitaet bzw. 90-Grad-Z-Drehung).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 14:33:03 +02:00
Michael StanglandClaude Opus 4.8 dbc6c585bf cs-zuordnung-lauf zerlegen + LISP-Testarchitektur vereinheitlichen
cs-zuordnung-lauf (~230 Zeilen, ~26 Locals) in sieben benannte
Routinen zerlegt (cs-sammle-bloecke, cs-scanner-zuordnen,
cs-separatoren-zuordnen, cs-korrektur-vermerken, cs-scanner-distanz-
melden, cs-anzahl-schreiben, cs-bericht-ausgeben); die Engine ist
jetzt ein schlanker Orchestrator. Verhalten unveraendert.

Dadurch ist die rein geometrische Zuordnungslogik von den Entity-
Zugriffen getrennt und unittest-faehig: neuer Block tu-tests-sepscan
mit 30 Tests fuer cs-in-box/cs-bump/cs-carrier-by-id/cs-assign/
cs-nearest-two/cs-resolve-sensor (Carrier-Records als plain Listen,
keine Zeichnung noetig).

Testarchitektur (Laden) vereinheitlicht: lazy Feature-Module
(GeruestInsert, count_sep_scan) werden AUSSCHLIESSLICH in test_unit.scr
auf .scr-Top-Level geladen. Grund: in BricsCAD werden per load
definierte Funktionen erst nach Rueckkehr zum Top-Level sichtbar - ein
load in c:TEST_UNIT oder einem gecatchten Testblock bindet sie im
selben Durchlauf nicht. Die Testbloecke laden nichts mehr, sie pruefen
nur per atoms-family. Runner gehaertet (tu-run-block faengt harte
Fehler je Block ab -> FAIL statt Suite-Abbruch, Report immer da).

Nebenbei aufgeraeumt: tote tests.lsp-Referenz in ssg_load.lsp entfernt
(Datei laengst geloescht, blockierte headless den kompletten Testlauf).

Voller LISP-Unit-Lauf jetzt 226/226 gruen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 14:31:35 +02:00
Michael StanglandClaude Opus 4.8 52d92f0da6 Sepliste-Serialisierung DIMZIN-unabhaengig machen
ssg-sepliste->string formatierte die Separator-Koordinaten mit
(rtos x 2 2). rtos respektiert die Zeichnungs-Systemvariable DIMZIN
(Nullunterdrueckung): bei dem verbreiteten DIMZIN=8 wird 10.00 zu 10
gekuerzt, das Praezisions-Argument hilft nicht. Dieselben Koordinaten
serialisierten damit je nach Zeichnungsprofil unterschiedlich - fatal
fuer die PERSISTENTE XDATA/Journal-Ablage am Block (verlustfrei im
Roundtrip, aber umgebungsabhaengig).

Neue Helferfunktion ssg-sepliste-fmt-koord (fix-basiert, kaufmaennische
Rundung mit Uebertrag und Vorzeichen) ersetzt rtos - reproduzierbar,
unabhaengig von DIMZIN/LUPREC/LUNITS. Plus 7 Kantenfall-Tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-18 14:31:35 +02:00
Michael StanglandClaude Opus 4.8 1d082ccde7 feat: Eingang/Ausgang-Symbole als eigene CSV-Zeile + in TrackIds
Die Materialfluss-Ein-/Ausgangssymbole (Bloecke Eingang_<DIM>/Ausgang_<DIM>,
eingefuegt ueber ils-insert-station) erscheinen jetzt NUR im CSV-Export als
eigene TeileArt-Zeile ("Eingang"/"Ausgang", Merkmale wie BTMT). Wie
Separator/AS/ES nehmen sie als freie Umlauf-Punkte (KREISEL_UMLAUF_TEILEARTEN)
an der TrackIds-Spalte teil und tauchen so auch auf Kreiseln auf, auf deren
Bahn sie liegen. Der Sivas-Export schliesst sie bewusst aus.

- cfg/export.cfg: pattern_eingang/pattern_ausgang
- Lisp/export.lsp: csv:collect-export-blocks sammelt beide Muster
- Lisp/ssg_id.lsp: ssg-id-collect-blocks erfasst sie (ssg-id-check-all fuellt
  das nachgetragene ID-ATTDEF, dokumentiert in data/ils/allocations.json)
- lib/export_csv.py: Klassifikations-Zweige Eingang/Ausgang
- lib/export_neighbors.py: KREISEL_UMLAUF_TEILEARTEN um Eingang/Ausgang erweitert
- lib/export_sivas.py: Eingang/Ausgang uebersprungen (kein Sivas-Eintrag)
- Tests: test_export_eingang_ausgang.py + Kreisel-Umlauf-Test

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-16 11:55:57 +02:00
Michael Stangl 3fdbfa4cb1 ID zu Ein und Ausgang hinzugefügt 2026-09-16 11:20:27 +02:00