Commit Graph
582 Commits
Author SHA1 Message Date
Yuelin WangandClaude Sonnet 5 797afe48b4 fix: VF-Linienzug Modus 1 Option 6 und Modus 2 - mehrere Solver- und Dialog-Bugs behoben
- Modus 2 Hauptbug: Motorstation+GF2 nutzen jetzt den bereits im Winkel-Solve
  geplanten Wert (br-gf2-exp) statt einer zweiten, unabhaengigen Loesung aus
  gemessener Resthoehe - behebt Laengs-/Querversatz am Kettenende.
- Modus 2 Bug C: Separator/ES-Hoehenreservierung (vfl3-dback/z-junction) auch
  bei "Motorstation ohne ES" korrigiert (vorher nur bei komplett offenem Ende).
- Modus 2 Bug D: fehlender Separator/ES-Laengsanteil im Solve-Budget bei
  Einzel-Kletterer ohne flache Zone (hor-pairs=0) ergaenzt, ausschliesslich
  ueber das Laengenbudget (nicht ueber feste-hz, sonst Hoehen-Doppelzaehlung).
- Modus 1 Option 6 ("Neue Linie BIS Kettenende"): Vorzeichenfehler bei der
  Separator/ES-Hoehenreservierung fuer Richtung "Auf" behoben (musste addiert
  statt subtrahiert werden).
- Vario_Kette_Merge: VF_WINKEL-Attribut liest den Winkel jetzt direkt aus dem
  Blockname statt aus einer ungenauen Chord-Messung ueber den ganzen
  S-Bogen-Tripel (verwaesserte den Winkel Richtung 3-Grad-Basis).
- ES-/AS-Element-Winkel-Dialog: neuer schlanker Dialog ohne die dort nie
  gueltige "60 Grad"-Option (statt nur ausgegraut).
- Modus 2 Lauf-Abschluss-Dialog: roher i18n-Key statt uebersetztem Text
  behoben; Option 3 ("Motorstation + ES-Element") ausgeblendet, wenn die
  Upfront-ES-Frage bereits mit "Nein" beantwortet wurde.

Alle Fixes einzeln in BricsCAD nachgestellt und bestaetigt (dX/dZ exakt).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 17:46:30 +02:00
Yuelin Wang d9eb41f4d1 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-16 09:09:09 +02:00
Yuelin Wang 143a4e7999 fix: Ab/Auf VF Kettenende nutzt ersten Winkel-Solve statt fehleranfaelliger zweiter Loesung,fix: fehlende Separator-Reservierung vor ES-Element im Kettenende-Solve ergaenzt ,Stufe 3 (Winkel+Horizontal-Fuellstueck) fuer VF-Linienzug Modus 1 ergaenzt 2026-09-16 09:08:59 +02:00
Samer Ayadi 6d569072ec Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-15 15:15:07 +02:00
Samer AyadiandClaude Sonnet 5 4a057862a8 fix: VF-Linienzug Journal-Reset, Spec-Grammatik (auf-ab/Linie-GF) und hz-Bug in HundM05
- vfl-journal-reset-lauf ans Funktionsanfang verschoben (Modus 1/2/3,
  Lisp/vf_linienzug.lsp): stand bisher nach der Startpunkt/Hoehe/AS-
  Praeambel und loeschte diese beim Reset selbst wieder - Journal begann
  mit dem ersten STEP-Marker statt PT, betraf jede Kette.
- Spec-Grammatik erweitert (Lisp/vf_spec.lsp, lib/vf_linienzug_grammatik.py,
  lib/vf_spec_export.py): "auf-ab" bei bereits flach ankommender Kette
  (Richtungswahl statt Zielhoehe) und neue Linie-GF-Fragereihenfolge
  (Kettenende direkt nach laenge_modus, inkl. vorgezogenem ES). Tests in
  tests/test_vf_spec.lsp/.py angepasst.
- lib/vf_linienzug_grammatik.py: _linie("kettenende_ziel") erwartete
  faelschlich ein hz-REAL nach der Distanz - der reale Bauablauf
  (vfl-body-abschluss) leitet die Richtung dort aus dem Frame ab und
  fragt sie nie. Fuehrte zu einem Token-Desync beim Dekodieren echter
  Kettenende-Journale.
- tests/testdata/hundm05.json (VF_hundm05_LZ_01): 5 ueberfluessige
  hz-Felder entfernt. vsp-linie injiziert bei JEDEM vorhandenen hz-Feld
  einen Richtungs-Token, unabhaengig vom tatsaechlichen Bauablauf - die
  Felder desyncten den Replay und liessen die Kette stumm mit der
  falschen (verkuerzten) Geometrie fertig bauen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 15:13:07 +02:00
Yuelin WangandClaude Sonnet 5 551f2808d7 refactor: Lesehilfe-CSV nutzt verschachtelte {bezeichnung, wert}-Struktur
details_mit_bezeichnung() liefert fuer die "*_mit_bezeichnung.csv" jetzt
{"<Nummer>": {"bezeichnung": "...", "wert": "..."}} statt eines
zusammengesetzten Schluessels "<Nummer> | <Bezeichnung>" - Merkmalnummer
bleibt dadurch ein sauberer JSON-Key, Bezeichnung/Wert sind eigene,
eindeutig benannte Felder. Die eigentliche Sivas-Import-Datei
(*_sivas.csv) ist davon nicht betroffen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 12:21:32 +02:00
Yuelin WangandClaude Sonnet 5 6f12cab86f refactor: Sivas-CSV-Export auf Merkmalnummern umgestellt, lesbare Zweitdatei
- ILS 2.0 Kreisel/Strecke(VF_N)/Gefaellestrecke/Automation: details-JSON
  nutzt jetzt Sivas-Merkmalnummern (z.B. "2952") statt beschreibender
  Klartext-Keys, abgeglichen mit dem Merkmalstamm in
  cfg/Merkmalsstamm_in_Sivas.xlsx.
- ILS 2.0 Zusatzmodul: BT-Beladung und Abwurfstationen laufen jetzt in
  einer gemeinsamen Zeile (Merkmale 3501-3504) statt zwei separaten
  Zeilen ohne details.
- Gefaellestrecke-Gruppe: Anzahl-Spalte bleibt fest 1, die reale
  Stueckzahl der Gruppe steht im Merkmal 4311 (anders als bei Kreisel,
  wo die Anzahl-Spalte die Stueckzahl traegt und 3511 fix "1" ist).
- Automation-Summenzeile: 4407 zaehlt jetzt echte Streckengruppen
  (VF_N-Bloecke) statt eines 0/1-Flags, 4408 (Motoren Vario-Foerderer)
  wird erstmals tatsaechlich berechnet (vorher nie inkrementiert), 4426
  steht fest auf "0" (Konzept "einzelner Variofoerderer" entfaellt).
- Neues Modul lib/merkmalstamm.py: liest Merkmalnummer->Bezeichnung aus
  der xlsx rein per Standard-Library (zipfile/xml.etree, keine neue
  pip-Abhaengigkeit fuer den ueber export.lsp aufgeloesten Interpreter).
- export_sivas.py schreibt bei jedem Lauf zusaetzlich eine zweite Datei
  "<name>_mit_bezeichnung.csv" (gleicher Inhalt, aber jeder
  Merkmalnummer-Key um "<Nummer> | <Bezeichnung>" erweitert) - reine
  Lesehilfe zur Pruefung, wird von Sivas nicht eingelesen.
- cfg/sivas_merkmal_zuordnung.md: Nachschlagetabelle Block-Attribut <->
  Merkmalnummer je Teileart, inkl. offener Punkte (Separator-/
  Scanner-Aufteilung Gefaelle-/Vario-Anteil noch Platzhalter).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-15 10:33:20 +02:00
Samer Ayadi 18771d53ff Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-14 16:45:47 +02:00
Samer Ayadi ebb9082305 HundM05: Endhöhe des ES stimmt noch nicht zu AS des Beginns. 2026-09-14 16:45:39 +02:00
Michael Stangl 865225f6f6 fix: LAYER-Attribut nicht mehr in Geruest-Sivas-Export schreiben
LAYER ist reine BricsCAD-Zeichnungsinformation ohne Sivas-Bedeutung.
export_csv.py (bricscad.csv) behaelt es weiterhin fuer die Zuordnung in der
Zeichnung.
2026-09-14 14:59:02 +02:00
Michael Stangl c5ae0bd769 fix: Geruest-Sivas-Export erzeugt eine Zeile je Artikelnummer statt Sammelzeile
Sivas kennt nur eine Sivasnr je Zeile - ARTINR (kommagetrennte Liste) wird
daher aufgesplittet. Gleiche Artikelnummern innerhalb derselben Baugruppe
werden zu einer Zeile mit Anzahl>1 zusammengefasst (wie bei Boegen/Weichen).
Jede resultierende Zeile traegt die volle LAENGE der Baugruppe.
2026-09-14 14:55:30 +02:00
Michael Stangl 1590f8f7ed feat: GR_-Geruest-Baugruppen in EXPORTCSV/EXPORTSIVAS aufnehmen
GR_-Bloecke werden jetzt wie BTMT eigenstaendig gesammelt (LISP: neues
pattern_geruest in cfg/export.cfg, csv:collect-export-blocks,
ssg-id-collect-blocks + ID-ATTDEF in *geruest-attrib-defs*) und in beiden
Python-Exporten als eigene TeileArt-Zeile ausgegeben: ARTINR/BEZEICHNUNG/
TEILEART/LAENGE in festen Spalten, restliche Attribute (FARBE/LAYER) im
Merkmale-/details-JSON.

Dabei zwei Bugs behoben, die beim ersten echten GR_-Export sichtbar wurden:
- csv:json-escape nutzte vl-string-subst (ersetzt nur das erste Vorkommen)
  statt des global ersetzenden ssg-str-replace-all - bei Attributwerten mit
  mehreren Anfuehrungszeichen blieb ein Zeichen unescaped und brach die
  JSON-Struktur beim Python-Parsen.
- Gradzeichen (°) in data/json/geruest.json durch "Grad" ersetzt, um das
  Encoding-Risiko (cp1252 vs. UTF-8 beim LISP-Export) zu vermeiden.
2026-09-14 14:22:45 +02:00
Simon Hensch 9e3ac1f70a Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-14 13:30:53 +02:00
Michael StanglandClaude Sonnet 5 c171bc44d6 docs: CSV-Export-Doku in doc/csv-export.md ausgelagert und mit Beispiel ergaenzt
Der lange Docstring in lib/export_csv.py wandert nach doc/csv-export.md
(inkl. durchgerechnetem Beispiel Kreisel+VarioFoerderer), der Docstring
verweist nur noch darauf.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 12:59:44 +02:00
Samer AyadiandClaude Sonnet 5 23d79ec354 feat: eingang_hoehe="auto" auf Python-Seite nachgezogen, hundm05.json bereinigt
Lisp (vf_linienzug.lsp/vf_spec.lsp):
- vsp-eingang-hoehe unterstuetzt jetzt "auto" (NIL-Token statt REAL) -
  bewusst keine Zahl vorgeben, der Bauablauf berechnet seinen eigenen
  Vorschlag, wie bei leerer Konsoleneingabe
- vfl-journal-reset-lauf: internes Reset innerhalb von vf-linienzug-modus/
  -modus2 loescht *vfl-replay-queue*/*vflw-pending* nicht mehr mit (Bug:
  REPLAY-getriebener Bau (vsp-bau-aus-spec) brach mitten in der Kette ab,
  weil eine noch unverbrauchte Queue verworfen wurde)

Python-Gegenstueck nachgezogen (lib/vf_linienzug_grammatik.py,
lib/vf_spec_export.py, lib/vf_journal_export.py):
- NIL-Token-Unterstuetzung fuer eingang_hoehe="auto" im gemeinsamen
  Parser-Kern, im Schreiber (SpecSchreiber) und in der Protokoll-Annotation
- gf_verteilung ist im Schreiber jetzt an der Feldpraesenz in der Spec
  festgemacht statt an einem Grammatik-Flag (selbstbeschreibend, deckt
  Specs mit und ohne diese Frage ab, ohne dass der Aufrufer die Grammatik
  kennen muss)
- Rundlauf-Pruefung (main(), test_verlustfrei) toleriert jetzt die bekannte,
  schon dokumentierte Erweiterung um drei neue Linie-GF-Pflichtfragen
  (ist_teilfolge statt exakter Gleichheit)
- test_gleiche_journale_wie_protokoll: alle 5 Ketten in hundm05.json weichen
  inzwischen vom Rohprotokoll ab (Kette 1 bewusst wegen eingang_hoehe,
  Ketten 2-5 schon laenger wegen Handkorrektur gegen echte DXF-Positionen)
  - expliziter Skip mit Begruendung statt leerem Loop

tests/testdata/hundm05.json:
- mm-Werte (dl, Start-/Stuetzpunkte, Koordinaten der Nachtrag-Objekte) auf
  eine Nachkommastelle gerundet
- nicht abgefragte Kopf-Metadaten entfernt (beschreibung, sivas_id,
  sivas_bezeichnung, planquadrat, block, dxf_handle) - nur quelle bleibt

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 12:54:30 +02:00
Simon Hensch d19bac7a1f [ADD] Erste Einbindung eines Menüs zum Konfigurieren und Einfügen von Gerüstkomponenten; TODOs: Anzahl der Gerüstkompnenten Variabel machen und für den Benutzer die Anzahl der Baugruppe sichtbar machen; Vorkonfigurierte Baugruppen anbieten; Einfachere Auswahl mit Checkbox oder Input (Anzahl) 2026-09-14 12:43:17 +02:00
Samer AyadiandClaude Sonnet 5 6d15c6be13 refactor: VF-Linienzug-Journal-Grammatik in lib/vf_linienzug_grammatik.py gebuendelt
lib/vf_journal_export.py (Journal.dekodiere) und lib/vf_spec_export.py
(SpecLeser) implementierten denselben Tokenwalk (Praeambel, Sektions-
schleife, Glied-Dispatch, VF-Einheit-Unterschleife) sowie dieselben
Code-Tabellen (SEITE/VARIANTE/VERTEILUNG/IM_VF/ENDPUNKT/ENDE2/ENDE3/
GEFAELLE/GF_LAENGE_MODUS, MENU_START/MENU_START_AKTUELL/MENU_WEITER,
Grammatik) unabhaengig voneinander - Aenderungen an der Grammatik (wie
im vorigen Commit) mussten von Hand synchron gehalten werden und sind
bereits einmal auseinandergelaufen.

Neuer gemeinsamer Parser-Kern (Kern/lies_journal) plus Sink-Schnittstelle
(SpecSink in vf_spec_export.py, ProtokollSink in vf_journal_export.py)
ersetzt die doppelte Implementierung; Code-Tabellen/Grammatik-Objekte
leben jetzt nur noch in lib/vf_linienzug_grammatik.py. Journal behaelt
nur noch die reine XDATA/DXF-Zerlegung, SpecSchreiber (Spec -> Journal,
Gegenstueck zu Lisp/vf_spec.lsp) bleibt unveraendert in vf_spec_export.py.

Zusaetzlich: pruefe_flachen_freitext schlaegt jetzt hart fehl, wenn
generierter Freitext (quelle/beschreibung) ein rohes Anfuehrungszeichen
enthaelt - der Lisp-seitige Flach-JSON-Leser (ssg-cfg-parse-value) kennt
keine Escapes und wuerde daran die Zeichenkette (und damit die gesamte
restliche Datei) falsch zerlegen.

Byte-identischer Output gegen die Baseline geprueft (beide CLIs, echte
Eingaben); pytest tests/test_vf_spec.py + test_vf_journal_grammatik.py
unveraendert: 2 bekannte, vorbestehende Fehlschlaege, 38 bestanden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 11:59:22 +02:00
Samer AyadiandClaude Sonnet 5 1bdecf0678 fix: Horizontal-VF-Kettenanfang (eingang_hoehe) in vsp-journal nachgezogen, hundm05.json erneuert
vf-linienzug-modus fragt bei einem mit "Horizontal-VF" eroeffneten
Kettenanfang eine Ziel-Hoehe fuer den GF1-Einlauf ab (vfl-prompt-hoehe-
eingang-gf1) und laesst dort die GF-Verteilungsfrage weg (fest "alles am
Einlauf") - vsp-journal/vsp-vf-einheit kannten das noch nicht. Ausserdem
werden ES-Winkel/-Seite beim kettenende-sub jetzt an der richtigen
Journal-Position (inkl. eigenem STEP-Marker) emittiert.

tests/testdata/hundm05.json: VF_hundm05_LZ_02..05 (die vier baugleichen
Schleifen, Block VF_1) aus tests/testdata/linienzug_tests.json neu
abgeleitet, mit den realen Startkoordinaten aus results/test_hundM05.dxf
statt der alten "sub":"auf-ab"-Behelfsloesung. VF_hundm05_LZ_01 und alle
Kreisel-/Separator-/Scanner-/BTMT-Objekte unveraendert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 11:59:07 +02:00
Yuelin WangandClaude Sonnet 5 41419763c0 feat: Option 4 - dynamische S-Winkelwahl (3/6/9...Grad) wie Option 5
vfl-gf-auf-ab-solve bekommt einen 3. Parameter s-winkel (S's Neigung -
F_total bleibt immer bei *vfk-gefaelle-winkel*=3 Grad). Neue reine
Massen-Helfer vfl-projiziere-neigung + vfl-gf-bogen-summe (Formel-basiertes
Pendant zu vfl-gf-bogen-erweitern aus Option 5, da Option 4's Solver ohne
Live-Probe rechnet). vfl-qc-linie-mit-gf probiert s-winkel=3,6,9,... in
einer Schleife (max. 10 Versuche), bis F_total/S beide baubar sind - der
flachste passende Winkel wird automatisch gewaehlt, damit auch kuerzere
Mittelteil-Gesamtlaengen baubar sind statt nur bei einem festen Winkel.

Bei s-winkel=3 (extra-grad=0) reduziert sich die neue Formel nachweislich
exakt auf die alte, bereits bestaetigte Formel (Term-fuer-Term verifiziert)
- kein Regressionsrisiko fuer den bisherigen Grundfall. Vom Nutzer in
BricsCAD erfolgreich getestet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 09:07:04 +02:00
Yuelin WangandClaude Sonnet 5 ca5c21686f chore: Vario_Bogen_ab_3_TEF_rechts_2D.dwg aktualisiert
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:46:28 +02:00
Yuelin WangandClaude Sonnet 5 4418840d5e fix: berechne-alle-winkel Signatur-Nachzug (schon-flach) + HundM05-Menu-Fix nachgezogen
Lisp/vf_standard.lsp: berechne-alle-winkel um Parameter schon-flach
erweitert (Fussabdruck-Korrektur, wenn ein Frame flach statt bei 3 Grad
ankommt) - vf_linienzug.lsp rief die Funktion bereits mit diesem 5.
Argument auf, dieser Commit fehlte im letzten Commit und liess den
Zwischenstand mit Argumentzahl-Mismatch zurueck. tests/test_foerderer.lsp
und tests/test_mubea.lsp ziehen dieselbe Signatur nach (inkl.
berechne-horizontale-mitte, das schon-flach bereits erwartete).
tests/testdata/linienzug_tests*.json aktualisiert passend zum echten
Bau-Ablauf. menu/SSG_LIB.mnu/.cui: TEST_LINIENZUG_STUFE2 im Testmenue
ergaenzt.

Lisp/vf_spec.lsp + lib/vf_spec_export.py: *vsp-menu-start* auf die aktuelle
6-Optionen-Kettenanfang-Zuordnung umgestellt (vorher noch 4 Optionen) -
vsp-journal replayt gegen den LEBENDEN vf-linienzug-modus. Python-Tabelle
bewusst NICHT umgestellt (dekodiert eine eingefrorene Alt-Aufzeichnung).
TEST_HUNDM05 schlaegt trotzdem weiterhin fehl (separates, ungeloestes
Problem - siehe naechster Absatz).

Bekannter offener Fehler: TEST_HUNDM05 baut nach wie vor nicht korrekt -
der Menu-Code-Fix allein reicht nicht. Root Cause nicht abschliessend
geklaert, Uebergabe an Kollegen fuer Logik-Review vorgesehen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:43:54 +02:00
Yuelin WangandClaude Sonnet 5 1b49bd3c3b feat: Option 5 "QC Linie mit GF und U-Form" implementiert (Fa/S dynamisch, Kolinearitaet exakt)
Linienzug-Modus 5: AS(90 Grad) -> Richtung+E1 in einem Klick -> 90-Grad-
GF-U-Turn (Gegenseite von AS) -> Fa(fallend, unbekannt)+Sep -> Bogen-auf-6
-> S(steigend, dynamisch 3/6/9/...Grad, flachster passender Winkel wird
automatisch gewaehlt) -> Bogen-ab-6 -> ES, mit exakter Kolinearitaets-
Rueckkehr zur AS-Eintrittsachse (2x2-Gleichungssystem Hoehe+Lage, analog
zu Option 4's E2-Loesung). E1 nutzt AS's real gemessene KS_AUS-Neigung
(neue vf-element-plan-neigung) statt der angenommenen 3 Grad - das macht
Fa/S ueberhaupt erst ueber E1 steuerbar. Bei "nicht baubar" wird eine
exakte Mindest-E1-Laenge vorgeschlagen (wie Option 4's Mindest-
Gesamtlaenge). Zusaetzlich: Bogen-Seite = Gegenseite der AS-Seite (Option 4
und 5), Fehler in vf-element-plan-neigung-Vorzeichen behoben, fehlender
Separator-Fussabdruck in der Hoehen-/Lage-Bilanz ergaenzt.

Neue GF-eigene Vertikalbogen-Bloecke (Vario_Bogen_auf/ab_3/6_rechts, 2D+3D)
fuer die Uebergaenge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-14 08:36:17 +02:00
Yuelin WangandClaude Sonnet 5 0d9ec93623 fix: VF-Familie bei "Neue Linie BIS Kettenende" nutzt vfl-body-abschluss
Ersetzt den direkten vfl-vf-entscheidung-Aufruf (1300mm Budget, setzt
immer eine frische Umlenkstation voraus) durch Wiederverwendung von
vfl-body-abschluss + vfl-vf-ausgang-bauen - denselben Bausteinen, die
bereits "Option 3: Kettenende exakt am Zielpunkt" innerhalb einer
laufenden VF-Einheit nutzt (800mm Budget, keine Umlenkstation, volle
Stufe-1/2-Diagnose inkl. exakter Zielhoehe bleibt erhalten, da kein
GF1-Stumpf noetig ist).

Zusaetzlich: vfl-letzter-typ-familie korrigiert - letzter-typ="VF"
(gerade fertig gebaute VF-Einheit) zaehlt NICHT zur "VF"-Familie fuer
diesen Zweck, nur "Vario-Kurve" hat keine eigene Umlenkstation. Eine
neue VF-Einheit nach einer bereits fertigen braucht weiterhin eine
frische Umlenkstation (faellt jetzt korrekt auf die bisherige
Automatik zurueck).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 01:33:01 +02:00
Yuelin WangandClaude Sonnet 5 38ee74ed3e feat: Konsolen-Echo fuer Endpunkt (X/Y) + Zielhoehe nach Eingabe
Nach jedem Endpunkt-Pick + Zielhoehe-Eingabe (Neue Linie: GF Zweig A,
Linie-VF, Neue Linie BIS Kettenende) wird jetzt der absolute Endpunkt
(X/Y, aus deltaL/hz-neu zurueckgerechnet) sowie die eingegebene
Zielhoehe und das daraus resultierende (noch UNREDUZIERTE) deltaH auf
der Konsole ausgegeben - vorher war z.B. bei "Neue Linie BIS
Kettenende" nur das bereits um den Separator+ES-Footprint reduzierte
deltaH sichtbar, was wie ein Rechenfehler wirken konnte.

Neuer Helfer: vfl-echo-endpunkt-hoehe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 00:59:30 +02:00
Yuelin WangandClaude Sonnet 5 0f1c7d2edf feat: "Neue Linie BIS Kettenende" erkennt VF/GF-Startpunkt
Bei "Neue Linie BIS Kettenende" (Option 6) wird jetzt erkannt, ob der
Startpunkt zu einer bestehenden VF- oder GF-Kette gehoert (KS_AUS-Scan
am Kettenanfang bzw. letzter-typ bei laufender Fortsetzung) und die
Bau-Logik entsprechend verzweigt, statt immer die generische
Machbarkeits-Automatik zu fragen:

- VF erkannt: baut zwingend ueber die Stufe-1/Stufe-2-Diagnose
  (vfl-vf-entscheidung), auch wenn der natuerliche Winkel zufaellig
  nahe 3 Grad liegt (vfl-segment-entscheidung haette dort faelschlich
  eine reine GF gewaehlt)
- GF erkannt: neue Unterfrage mit denselben 2 Optionen wie "Neue Linie:
  GF" (Zielhoehe fest -> Laenge berechnen, ODER Laenge fest -> Winkel
  berechnen), eigener Radiobutton-Dialog (Wiederverwendung von
  vflw-gruppe-gf-steigend-untermodus-impl)
- nicht eindeutig zuordenbar (z.B. frischer AS-Element-Start): bisherige
  automatische Entscheidung unveraendert

Neue Helfer: vfl-letzter-typ-familie (Pendant zu vfl-kette-typ-familie
fuer den session-lokalen letzter-typ-String).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 00:38:15 +02:00
Yuelin WangandClaude Sonnet 5 942012e44d fix: Wizard-Dropdowns auf Radiobuttons, Abbrechen-Bug, ES-Element-Ausgleichsbogen
- vfl-in-abstand/-in-selection pruefen jetzt *vfl-wizard-abbruch-grund*
  (bisher liefen beide an vfl-in-value/-value-p vorbei, ein Klick auf
  "Abbrechen" im Wizard-Dialog fiel dadurch auf einen rohen getpoint
  zurueck statt die Kette zu beenden)
- Kombiniertes ES-Element-Dialogfeld (Ja/Nein + Winkel 90/30 + Seite
  links/rechts in einem Bildschirm, analog AS-Element)
- Separator VOR/NACH (horizontales Stueck) und Ist-Kettenende-Frage von
  Dropdown auf Radiobuttons umgestellt, "Nein" als Vorgabe
- Neigungswinkel-Eingabe bei Gefaellestrecke: 3 Grad als Vorgabe statt
  "Gegebene Hoehe"
- Zweig-C-Unterfrage (Endpunkt/Zielhoehe) bei "Steigende GF" bekommt
  eigenen Radiobutton-Dialog statt generischem Dropdown-Fallback
- ES-Element-Anhaengung nach einer steigenden GF (Zweig C) baut jetzt
  vorher per vfl-bogen-uebergang zurueck auf die Standard-Fallend-Basis
  (ES-Element-Hardware gibt es nur fuer diese Anfahrt)
- Stufe-2-Diagnosetext klargestellt (Mindestlaenge vs. Fixwert ohne
  GF-Bogen)
- Horizontal-VF: 1000mm-Mindestlaenge entfernt, GF1-Ziel-Hoehe-Feature
  wiederhergestellt

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-12 00:26:36 +02:00
Yuelin WangandClaude Sonnet 5 18ee46b361 fix: verbleibende e76e24e-Luecken aus vollstaendigem Gap-Vergleich geschlossen
Bei der abschliessenden Datei-fuer-Datei-Gap-Analyse gegen e76e24e (Funktions-
inventar + Lang-Key-Diff) zusaetzlich gefunden und behoben:

- vfl-modus-abbruch-sichern: "Zurueck"-Behandlung fehlte komplett - verwarf
  bisher wie "Abbrechen" den kompletten Stand statt nur das letzte
  angefangene Kettenglied zu verwerfen und automatisch neu zu fragen
  (vfl-journal-truncate/-replay-start)
- vfl-vf-einheit (Punkt 7, Auf/Ab-Foerderer-Fortsetzung): Fall "Kette kommt
  bereits flach an" (z.B. nach Horizontal-VF/Vario-Kurve) fehlte - fragte
  bisher immer nach einer Zielhoehe, obwohl dort keine sinnvolle Zielhoehe
  existiert; nutzt jetzt vfl-waehle-winkel-hoehen-tabelle
- Horizontal-VF: GF1-Stumpf wird bei vollem Eingang jetzt aus einer
  abgefragten Zielhoehe berechnet statt pauschal auf *vfl-gf-min-laenge*
  gesetzt
- Linie-VF/Linie (automatisch): erweiterte Stufe-2-Diagnose bei "nicht
  baubar" (Mindestwert-Vorschlaege aus vfl-stufe2-diagnose) ergaenzt
- vfl-hor-koerper-bauen: klemmt weiterhin still auf Mindestlaenge (Kollegen-
  Entscheidung, Bauteil muss fuer vf_spec.lsp deterministisch/kopflos
  bleiben), meldet das Klemmen jetzt aber ueber vfl-meldung - die
  urspruengliche interaktive "trotzdem bauen?"-Rueckfrage mit Checkpoint-
  Rueckbau war nicht ohne Bruch der Kopflos-Tauglichkeit restaurierbar

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 22:02:39 +02:00
Yuelin WangandClaude Sonnet 5 0a1d21d8c5 fix: VF-Linienzug 100%-Wiederherstellung aus e76e24e abgeschlossen
Restauriert alles aus e76e24e, das nach dem Reset auf master fehlte oder nur
teilweise wiederhergestellt war, und mit dem Kollegen-Umbau abgeglichen:

- vf_core.lsp: Radio-Button-Dialoge fuer Anlagen-Typ/Linienzug-Modus
  (vfc-dialog-typ-waehlen/-linienzug-modus-waehlen) + Zurueck-Schleife im
  c:VarioFoerderer-Dispatcher
- Vario-Kurve/GF-Bogen-Erkennung am Kettenanfang: vfl-eingang-modus-bestimmen
  threaded durch vfl-vf-eingang-bauen/vfl-vf-einheit/vfl-vf-einheit-abschluss,
  inkl. Punkt-7-Winkel/Hoehen-Tabelle fuer reduzierten Eingang
- Modus 2: Lauf-Anfang/Lauf-Abschluss (offener Anfang/Ende, GF-Verteilung
  "alles Auslauf", Kletter-zu-kurz-Fallback) + Separator VOR/NACH bei
  GF-Geraden
- Systemischer Bug behoben: mehrere Wizard-Dialogfunktionen nutzten noch
  start_list/add_list (Dropdown) gegen laengst auf boxed_radio_column
  umgestellte DCL-Dialoge (vflw-gruppe-as/-gefaelle/-variokurve/
  -winkel-seite-impl, vflw-seg-linie-m2/-m3/-bogen-impl,
  vfl-glied-gf-bogen/-vario/-as-es-dialog)
- Zentraler Abbruch-Trigger in vfl-in-value/-value-p wiederhergestellt (ohne
  ihn wirkte der Zurueck/Abbrechen-Button in keinem Wizard-Dialog)
- vfl-frage-ist-endpunkt/-ist-kettenende als eigene Funktionen mit
  Wizard-Dialog extrahiert (vorher Konsolen-Duplikate ohne Dialog-Hookup)
- 3 vfs-vf-entry-Aufrufe mit falscher Argumentzahl gefixt (akute
  Absturz-Bugs in Modus 2/3)
- Tote Funktion vflw-gruppe-horizontal-impl entfernt (Tiles nicht mehr im
  DCL vorhanden)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 18:26:48 +02:00
Yuelin WangandClaude Sonnet 5 4a444b4858 feat: vf_spec_export.py (Python-Vorwaerts-Emitter) fuer Linie-GF nachgezogen
Spiegelt die drei neuen Felder (laenge_modus/sep_vor/sep_nach/steigend_modus)
aus Lisp/vf_spec.lsp im Python-Pendant (SpecSchreiber.sektion) - haelt die
"zwei unabhaengige Implementierungen pruefen sich" Architektur des Kollegen
fuer den Schreib-Pfad synchron. tests/test_vf_spec.py: LISP_FAELLE um die
2 neuen Testfaelle ergaenzt, Faelle-Zaehler 7 -> 9.

Bewusst NICHT angefasst: der Rueckwaerts-Decoder (SpecLeser, spec_aus_journal)
- die 5 echten HundM-Ketten (hm_recformat.json) wurden vor dieser Erweiterung
aufgezeichnet und haben daher keine Separator-Antworten fuer ihre Linie-GF-
Sektionen. Der Rundlauf-Test TestRundlauf.test_verlustfrei wird fuer Ketten
mit Linie-GF dadurch rot - eine inhaerente, bewusst in Kauf genommene Folge
der neuen Pflichtfragen im interaktiven Ablauf, kein Fehler im Schreiber
(ausfuehrlich kommentiert direkt an der Aenderung in vf_spec_export.py).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 14:25:50 +02:00
Yuelin WangandClaude Sonnet 5 23d653c4b3 feat: VF-Linienzug Linie-GF - Separator VOR/NACH, Endpunkt/Zielhoehe-Vorwahl, steigende GF (Sonderfall bis 3 Grad)
Auf der neuen Kollegen-Architektur (Stufe 0-2: Spec/Journal/Replay-System
in vf_spec.lsp, Frage-Schale/Bauteil-Trennung) neu aufgebaut, nachdem der
urspruengliche Stand (Commit e76e24e) auf einer aelteren Basis beruhte und
per Rebase-Analyse als eigenstaendige, unabhaengige Erweiterung erkannt
wurde (der Kollege hat nichts entfernt - diese Features existierten vorher
nur lokal uncommitted).

Drei Erweiterungen fuer "Neue Linie: GF" in vf-linienzug-modus:
- Separator VOR/NACH direkt vor bzw. nach der Gefaellestrecke einfuegbar.
- Aeussere Vorwahl "Wie soll die Laenge bestimmt werden?": Endpunkt waehlen
  (bisheriges Verhalten) oder Zielhoehe zuerst festlegen (Winkel wird
  daraus berechnet).
- Dritte Option "Steigende GF" (Sonderfall, 0 bis 3 Grad): erlaubt eine GF,
  die statt zu fallen steigt. Neuer Helfer vfl-bogen-uebergang erkennt
  anhand der tatsaechlichen Frame-Neigung, ob 0/1/2 Uebergangsboegen
  (Vario_Bogen_auf_3/ab_3) noetig sind, und baut sie automatisch - im
  Normalfall (fallend->fallend) ein No-Op.

Lisp/vf_spec.lsp (Kollegen-Spec/Headless-Bau-System) um die drei neuen
Felder (laenge_modus/sep_vor/sep_nach/steigend_modus) erweitert, mit
Defaults, die alte Specs unveraendert lassen - haelt die "Spec-Pfad ==
interaktiver Pfad"-Invariante seines Systems (TEST_HUNDM05/VF_SPEC_BAU)
intakt. tests/test_vf_spec.lsp entsprechend mit neuen Testfaellen ergaenzt.

Neuer Regressionstest TEST_LINIENZUG_STUFE2 (linienzug_tests_stufe2.json)
sowie Anleitung doc/vf_linienzug_modus1_anleitung.md aus dem urspruenglichen
Commit uebernommen; die Gefaelle-Hoehe/Winkel-Optionsreihenfolge im
Testdatensatz an die jetzt geltende (Kollegen-)Konvention angepasst.

Offen (bewusst zurueckgestellt): lib/vf_spec_export.py (Python-Vorwaerts-
Emitter, Pendant zu vf_spec.lsp) noch nicht nachgezogen - siehe Folge-Commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-11 14:18:31 +02:00
Samer Ayadi f4edb7339d new seplist added 2026-09-11 11:57:39 +02:00
Michael Stangl bb9d77fde9 neue Referenz für mubea eingepflegt. Spalte tracking Ids dazugekommen. 2026-09-10 15:48:32 +02:00
Michael StanglandClaude Sonnet 5 90bfbd89b6 BTMT Beladung/Entladung als Ein-/Ausgang des Materialfluss-Graphen erkannt
export_graph.py behandelte BTMT-Stationen bisher wie ein generisches
Durchlaufelement mit zwei Achs-Enden - dadurch entstanden mehrere,
teils widerspruechliche Kanten und die Rolle blieb "Element" statt
"Eingang"/"Ausgang". BTMT hat aber physisch nur EINEN Anschluss zum
Foerdersystem (sitzt als dritter Zweig einer Weiche auf der Kreisel-
Durchgangsbahn, der Kreisel bleibt dabei ein einzelner Verteiler-Knoten):
Beladung speist fest Material ein (kein Vorgaenger im Fluss), Entladung
nimmt es fest raus (kein Nachfolger).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 15:29:08 +02:00
Michael StanglandClaude Sonnet 5 47724fcfe2 TrackIds von VF/GF-Strecken um AS-/ES-Kettenenden ergaenzt
write_separatorliste_merkmale liess bisher nur "SEP"-Eintraege der
sepliste in die "TrackIds"-Spalte einfliessen; die AS-/ES-Ausschleus-
/Einschleuselemente an Anfang und Ende der Kette fehlten dadurch,
obwohl sie beim Kreisel (compute_kreisel_umlauf) bereits Teil von
dessen TrackIds sind. Jetzt werden alle sepliste-Eintraege (AS, SEP,
ES) in Baureihenfolge aufgeloest.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 15:18:55 +02:00
Michael StanglandClaude Sonnet 5 b577b7ad69 doc: CSV-Header und Testliste in csv-export.md ergaenzt
Explizites CSV-Spalten-Layout (inkl. der neuen "TrackIds"-Spalte) und
die neuen/erweiterten Testdateien (Bezeichnung-Attribut, BTMT im
Kreisel-Umlauf, 0-Grad-Start) nachgetragen - inhaltlich war die Doku
bereits aktuell, es fehlte nur die konkrete Kopfzeile und der
Test-Ueberblick.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 15:13:06 +02:00
Michael StanglandClaude Sonnet 5 28dc3b4301 list_trackids aus Merkmalen in eigene CSV-Spalte "TrackIds" verschoben
Statt eines JSON-Merkmals bekommen VF_n/GF_n/Kreisel jetzt eine eigene
CSV-Spalte "TrackIds" (nach "Nachbarn", vor "Fehler") mit der Reihenfolge
der Separator-/BTMT-/AS-ES-/Weichen-TeileIds entlang der Strecke bzw. um
den Kreisel - analog zur bestehenden "Nachbarn"-Spalte statt versteckt im
Merkmale-JSON. Referenz-CSV fuer den Omniflo-Test an den neuen Header
angepasst.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 15:07:31 +02:00
Michael StanglandClaude Sonnet 5 3c0900a02b CSV-Bezeichnung von VF/GF/Kreisel/Eckrad nutzt Anwender-Attribut statt nur Nummerierung
Die Spalte "Bezeichnung" verwendet jetzt das in BricsCAD frei editierbare
Attribut "Bezeichnung" des Blocks, falls gesetzt - sonst wie bisher die
generierte Standardbezeichnung ("VarioFoerderer :3" usw.). Damit laesst
sich ein in der Zeichnung umbenanntes Element im CSV-Export wiedererkennen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 14:52:03 +02:00
Michael StanglandClaude Sonnet 5 bfd95ea725 Kreisel-Separatorliste (list_trackids) im CSV-Export ergaenzt
Kreisel bekommen wie VF_n/GF_n ein Merkmal mit der Reihenfolge aller
Separator-/BTMT-Beladung-/BTMT-Entladung-TeileIds entlang der Bahn,
sortiert nach Winkel um die Kreiselachse (Start bei 0 Grad in
Drehrichtung DREHRICHTUNG) - nutzt dieselbe Umlauf-Logik, die bisher
nur die "Nachbarn"-Spalte gespeist hat. Merkmal-Schluessel einheitlich
auf "list_trackids" umbenannt (vorher "Separatorlist" bei VF/GF).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 14:41:25 +02:00
Samer Ayadi 061a878346 Separatorliste wird in jedes json Attribut der ILS Strecke geschrieben, um die Liste der Ids in der richtigen Reihenfolge aus Bricscad direkt zu erhalten 2026-09-10 11:30:40 +02:00
Samer Ayadi e147b8976c BTMT Beladung und Entladung in HundM eingefügt 2026-09-10 10:31:10 +02:00
Samer AyadiandClaude Sonnet 5 776ab05f92 HundM05: fehlende BTMT Be-/Entladung nachgetragen
TEST_HUNDM05 baute bisher keine BTMT-Beladung/SC_Entladung-Stationen,
weil hundm05.json anders als mubea.json nie Eintraege dafuer hatte -
dadurch fehlten sie im CSV-Export der Testanlage. Koordinaten/Rotation
aus dem Insertpoint/K1-KOS-String der realen Referenz-CSV
(hundmM05_1.csv) dekodiert und als "block"-Eintraege ergaenzt; der
bestehende generische _.INSERT-Pfad in hundm05:bau-sensor baut sie ohne
weitere Code-Aenderung. Kommentare/Doku (test_hundm05.lsp,
object_data.md Abschnitt 5) an die jetzt nicht mehr auf Separator/
Scanner beschraenkte Nutzung angepasst.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 10:28:31 +02:00
Michael StanglandClaude Sonnet 5 332bd24ab0 doc: CSV-Export-Ablauf dokumentiert (LISP-Sammlung + Python-Nachbarschaftslogik)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 09:43:40 +02:00
Michael StanglandClaude Sonnet 5 27ae3df056 CSV-Export: Nachbarschaft/bbox fuer Kreisel-Kreisel-Weichen, sepliste-Ketten und Separatoren repariert
Kreisel-Kreisel-Weichen fehlten bisher im Kreisel-Umlauf (compute_kreisel_umlauf),
wodurch angrenzende Separatoren auf falsche/fehlende Nachbarn zeigten. Die
kreisel_bounds-Matching-Box ignorierte ausserdem die tatsaechliche Kreiseldrehung
(faelschlich als achsparallel angenommen), was bei gedrehten langen Kreiseln
(Mubea Kreisel 0002) zu falschen Nachbarschaften fuehrte.

Die sepliste-XDATA (AS/SEP/ES-Reihenfolge je VF_n/GF_n) wurde nie ans Python-Item
durchgereicht - die gesamte Ketten-Nachbarschaftserkennung lief dadurch ins Leere.
Nach dem Beheben entstand eine Doppelzaehlung: die in einer Kette verpackten
Separatoren existieren bereits als echte Proxy-INSERTs (csv:sep-proxies-erzeugen);
build_separator_kette_items erzeugte zusaetzlich eigene Zeilen aus der sepliste.
Umgebaut zu map_separator_kette_items: ordnet die sepliste-Reihenfolge den
vorhandenen Proxy-Items zu (Match ueber Wrapper-ID + INSERT-Punkt) statt neue
Zeilen zu erzeugen - keine Doppelzaehlung mehr, Nachbarn korrekt gesetzt.

Ausserdem: vla-getboundingbox scheiterte in einem realen Export bei ALLEN
Bloecken (fehlende bbox ueberall), der Fehler wurde bisher still verschluckt.
REGENALL vor der Export-Schleife behebt das; eine neue Diagnose (exp-bbox-fail)
meldet kuenftige Ausfaelle statt sie zu verschlucken. Freie/eingebettete
Separatoren ohne bbox bekommen zusaetzlich einen Fallback aus einer konfigurierbaren
Symbol-Groesse (cfg/export.cfg [Boundingbox] separator_box_*).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-10 09:41:02 +02:00
Michael Stangl e08b8b2b08 neue Referenzdateien eingepflegt, da die Planquadrate jetzt nicht mehr nur die insertpoints enthalten, sondern aus den Boundingboxen aufgebaut sind 2026-09-09 21:09:52 +02:00
Michael StanglandClaude Sonnet 5 3698c8982c Sepliste-XDATA fuer Separator/AS/ES-Reihenfolge + Unit-Tests, makunbound-Fix
Sammelt beim Bau von VF_n/GF_n-Ketten die Baureihenfolge der Separator-/
AS-/ES-Sub-Bloecke vor dem Block-Sweep und schreibt sie als XDATA auf den
fertigen Wrapper (ssg_ks_insert.lsp); export.lsp liest sie fuer das neue
"sepliste"-Feld im CSV-Export, export_neighbors.py nutzt es als Fallback
zur BBox-Kollisionspruefung. Dazu Unit-Tests fuer die reinen Serialisierungs-
funktionen (Chunking, Roundtrip) in test_unit.lsp.

Ausserdem: makunbound (existiert nicht in BricsCAD-AutoLISP) aus
test_run_all.lsp entfernt - verursachte Laufzeitfehler bei
SSG_RUN_ALL_TESTS_EXPORT/_OFFEN.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-09 20:36:42 +02:00
Simon Hensch f3500f7d2a Mubea Maße für Kreiselunterkante-Oberkante Laufprofil korrigiert 2026-09-09 12:23:34 +02:00
Michael Stangl 8457147bd7 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-09-08 12:38:05 +02:00
Michael Stangl 0e0f011ea4 Aufbau der Planquadrate nur durch Boundingboxen. Ansonsten werden die Bereiche der Lage nicht korrekt erzeugt 2026-09-08 12:37:58 +02:00
Samer AyadiandClaude Sonnet 5 754815c61f [ADD] HundM05: fehlende Separator/Scanner nachgetragen + Bau-Support
9 reale Separator/Scanner-Koordinaten aus der Anlage in hundm05.json
ergaenzt. hundm05:bau-zusatzobjekte (test_hundm05.lsp) baute bisher nur
Kreisel-Zusatzobjekte - neue hundm05:bau-sensor-Funktion (analog zu
mubea:build-separator-one in test_mubea.lsp) faengt jetzt auch
"block"-Eintraege (Separator/Scanner) ab und fuegt sie per _.INSERT ein.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 12:01:48 +02:00
Samer Ayadi 8ed12b64e9 fix misplaced items and update positions 2026-09-08 11:08:02 +02:00