Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros
This commit is contained in:
+26
-18
@@ -6238,6 +6238,16 @@
|
||||
;; zurueckgesetzt (spaeter im Ablauf) sowie unmittelbar vor jedem "Zurueck"-
|
||||
;; Neuaufruf in vfl-modus-abbruch-sichern.
|
||||
(setq *vfl-wizard-abbruch-grund* nil)
|
||||
;; *vfl-journal* VOR dem allerersten vfl-in-*-Aufruf zuruecksetzen (nicht
|
||||
;; *vfl-replay-queue* - ein REPLAY-getriebener Aufrufer wie vsp-bau-aus-spec
|
||||
;; hat sie ueber vfl-journal-replay-start bereits VOR diesem Aufruf befuellt,
|
||||
;; siehe Kommentar bei vfl-journal-reset-lauf). Frueher stand dieser Reset
|
||||
;; ERST kurz vor der Hauptschleife (nach Startpunkt/Hoehe/AS-Praeambel) -
|
||||
;; realer Bug: die bereits aufgezeichnete Praeambel wurde dadurch selbst
|
||||
;; wieder geloescht, das gespeicherte Journal begann mit dem ERSTEN
|
||||
;; STEP-Marker statt mit PT (sichtbar als vsp-bau-aus-spec-DESYNC "Token 1:
|
||||
;; erwartet PT..., gebaut STEP...", betraf ausnahmslos JEDE Kette).
|
||||
(vfl-journal-reset-lauf)
|
||||
(princ "\n\n=========================================")
|
||||
(princ (ssg-text "vfl-modus1-header"))
|
||||
(princ "\n=========================================")
|
||||
@@ -6386,18 +6396,10 @@
|
||||
(setq letzter-typ nil fertig nil frame nil)
|
||||
(setq anzahl-gf 0 anzahl-vf 0)
|
||||
(vfl-acc-reset)
|
||||
;; *vfl-journal* wurde bisher NIRGENDS zurueckgesetzt (vfl-journal-reset war
|
||||
;; definiert, aber toter Code) - bei MEHREREN Ketten in derselben BricsCAD-
|
||||
;; Sitzung blieben die Eintraege der vorigen Kette(n) im globalen Journal
|
||||
;; stehen und wurden der naechsten Kette per (cons ...) VORANgestellt. Real
|
||||
;; beobachteter Bug: eine fremde Kette (anderer Test/Bau) landete mit in der
|
||||
;; XDATA der aktuellen Kette, mit Fehlfunktionen in der Attribut-/XDATA-
|
||||
;; Erzeugung (u.a. "bad argument type ... at [itoa]"). vfl-journal-reset-
|
||||
;; lauf statt vfl-journal-reset: NICHT *vfl-replay-queue* mitloeschen -
|
||||
;; ein REPLAY-getriebener Aufrufer (vsp-bau-aus-spec) hat sie ueber
|
||||
;; vfl-journal-replay-start bereits VOR diesem Aufruf befuellt (siehe
|
||||
;; Kommentar bei vfl-journal-reset-lauf).
|
||||
(vfl-journal-reset-lauf)
|
||||
;; *vfl-journal*-Reset steht jetzt GANZ AM ANFANG der Funktion (vor der
|
||||
;; Startpunkt/Hoehe/AS-Praeambel) - siehe Kommentar dort. Hier NICHT mehr
|
||||
;; noetig (und schaedlich: wuerde die bereits aufgezeichnete Praeambel
|
||||
;; dieses Laufs wieder loeschen).
|
||||
|
||||
(while (not fertig)
|
||||
;; --- Naechstes Element bestimmen ---
|
||||
@@ -9165,6 +9167,14 @@
|
||||
(princ (ssg-text "vfl-m3-titel"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
;; *vfl-journal* VOR dem allerersten vfl-in-*-Aufruf zuruecksetzen (nicht
|
||||
;; *vfl-replay-queue*, siehe Kommentar bei vfl-journal-reset-lauf und die
|
||||
;; analoge Korrektur in vf-linienzug-modus). Frueher stand dieser Reset erst
|
||||
;; kurz vor Phase B (nach der Pfadauswahl UND der Startpunkt/Hoehe/AS-
|
||||
;; Praeambel) und loeschte damit die bereits aufgezeichnete Praeambel dieses
|
||||
;; Laufs selbst wieder.
|
||||
(vfl-journal-reset-lauf)
|
||||
|
||||
;; --- Debug-Session (Schalter "vfl-modus2", DEFAULT AN) ------------------
|
||||
;; (dbg-schalter-off "vfl-modus2") deaktiviert bei Bedarf. Alle Eingaben
|
||||
;; laufen bereits durchgehend ueber die vfl-in-*-Wrapper (siehe unten) und
|
||||
@@ -9529,12 +9539,10 @@
|
||||
(setq vfl-nummer (vf-next-number))
|
||||
(setq lastEnt (vf-lastent-ohne-attribute))
|
||||
(vfl-acc-reset)
|
||||
;; Siehe Kommentar bei vf-linienzug-modus: *vfl-journal* wurde bisher nie
|
||||
;; zurueckgesetzt und konnte Eintraege einer vorigen Kette (Modus 1 ODER 2)
|
||||
;; in dieselbe Sitzung hineintragen. vfl-journal-reset-lauf statt
|
||||
;; vfl-journal-reset: NICHT *vfl-replay-queue* mitloeschen (siehe dortiger
|
||||
;; Kommentar) - derselbe Grund wie in vf-linienzug-modus.
|
||||
(vfl-journal-reset-lauf)
|
||||
;; *vfl-journal*-Reset steht jetzt GANZ AM ANFANG der Funktion (vor der
|
||||
;; Pfadauswahl/Praeambel) - siehe Kommentar dort. Hier NICHT mehr noetig
|
||||
;; (und schaedlich: wuerde die bereits aufgezeichnete Praeambel dieses
|
||||
;; Laufs wieder loeschen).
|
||||
(setq anzahl-gf 0 anzahl-vf 0 frame nil)
|
||||
;; --- Abbruch-Sicherung ab hier scharf (analog Modus 1, siehe dortiger
|
||||
;; Kommentar) - Phase A (oben) baut noch keine Geometrie, ein Abbruch
|
||||
|
||||
+46
-14
@@ -60,6 +60,9 @@
|
||||
("auf-ab" . "3")))
|
||||
(setq *vsp-tab-endpunkt* '(("motorstation" . "1") ("weiter" . "2")
|
||||
("kettenende" . "3")))
|
||||
;; Richtungswahl fuer "auf-ab", wenn die Kette bereits FLACH ankommt
|
||||
;; (vfl-frage-auf-ab-richtung: "1"=Auf, "2"=Ab) - siehe vsp-vf-einheit.
|
||||
(setq *vsp-tab-richtung* '(("auf" . "1") ("ab" . "2")))
|
||||
(setq *vsp-tab-ende3* '(("ja-mit-es" . "1") ("ja-ohne-es" . "2")
|
||||
("nein" . "3")))
|
||||
(setq *vsp-tab-ende2* '(("ja-mit-es" . "1") ("nein" . "2")))
|
||||
@@ -200,22 +203,22 @@
|
||||
(setq v (ssg-val kopf "spec_id"))
|
||||
(if v v "(ohne spec_id)"))
|
||||
|
||||
;; Segmentlaenge, und NUR beim allerersten Segment der Kette die gesnappte
|
||||
;; Fahrtrichtung: vfl-in-abstand journalisiert die Richtung nur bei freier
|
||||
;; Richtungswahl (hz-vorgabe nil), jedes weitere Segment erbt sie vom
|
||||
;; Vorgaenger. Ein hz an spaeterer Stelle wuerde die ganze Replay-Queue um
|
||||
;; einen Eintrag verschieben - darum hier ein harter Fehler.
|
||||
;; Segmentlaenge und optional die gesnappte Fahrtrichtung. Feldpraesenz
|
||||
;; entscheidet, NICHT *vsp-erster-dl*: die eingefrorene Aufzeichnung
|
||||
;; (hm_recformat.json) journalisiert die Richtung nur beim allerersten
|
||||
;; Segment der ganzen Kette, der heutige Ablauf (linienzug_tests.json/
|
||||
;; -stufe2.json, 2026-09-12) dagegen bei JEDEM Segment neu, auch nach einer
|
||||
;; Vario-Kurve oder einem neuen Glied. Beim ALLERERSTEN Segment MUSS die
|
||||
;; Richtung dabeistehen (die Kette hat noch keine geerbte).
|
||||
(defun vsp-linie (quelle / hz)
|
||||
(vsp-zahl "DL" (ssg-val quelle "dl") "dl")
|
||||
(setq hz (ssg-val quelle "hz"))
|
||||
(cond
|
||||
(*vsp-erster-dl*
|
||||
(vsp-zahl "REAL" hz "hz (Pflicht beim ersten Segment der Kette)")
|
||||
(setq *vsp-erster-dl* nil))
|
||||
((and *vsp-erster-dl* (null hz))
|
||||
(vsp-fehler "Feld \"hz\" fehlt (Pflicht beim ersten Segment der Kette)"))
|
||||
(hz
|
||||
(vsp-fehler (strcat "Feld \"hz\" ist nur beim ERSTEN Segment der Kette"
|
||||
" erlaubt - jedes weitere erbt die Fahrtrichtung"
|
||||
" vom Vorgaenger und hat keinen Journal-Eintrag")))))
|
||||
(vsp-zahl "REAL" hz "hz")))
|
||||
(setq *vsp-erster-dl* nil))
|
||||
|
||||
;; Reine Richtungswahl OHNE Laenge (vfl-in-richtung: journalisiert NUR REAL,
|
||||
;; kein DL-Token) - fuer den Kettenanfang-Fall der Zielhoehe-zuerst-Zweige
|
||||
@@ -234,6 +237,16 @@
|
||||
(setq v (ssg-val quelle "winkel_idx"))
|
||||
(if v (vsp-ganz v "winkel_idx")))
|
||||
|
||||
;; Stufe-2-Fallback (vfl-frage-gf2-minimum in vf_linienzug.lsp): steht nur im
|
||||
;; Journal, wenn die am Kettenende automatisch berechnete GF2-Laenge UNTER
|
||||
;; der ueblichen Mindestlaenge liegt (Stufe 1 - Winkeltabelle - hat dann
|
||||
;; keinen gueltigen Kandidaten geliefert). "ja" = mit der exakt berechneten
|
||||
;; (kuerzeren) Laenge bauen, "nein" = auf die Mindestlaenge auffuellen. Faellt
|
||||
;; die Frage nicht an, kein Journal-Eintrag - wie vsp-winkel-idx.
|
||||
(defun vsp-gf2-bestaetigung (quelle / v)
|
||||
(setq v (ssg-val quelle "gf2_exakt_bauen"))
|
||||
(if v (vsp-raus "STR" (vsp-ja-code v))))
|
||||
|
||||
;; Ziel-Hoehe fuer den GF1-Einlauf einer mit "Horizontal-VF" eroeffneten
|
||||
;; VF-Einheit (vfl-prompt-hoehe-eingang-gf1). Optional, weil die Frage NUR
|
||||
;; kommt, wenn der Eingang komplett neu gebaut wird - das ist der Fall, den
|
||||
@@ -470,7 +483,8 @@
|
||||
(vsp-code-raus *vsp-tab-seite* (ssg-val sub "es_seite") "es_seite")))
|
||||
(vsp-linie sub)
|
||||
(vsp-zahl "REAL" (ssg-val sub "hoehe") "hoehe")
|
||||
(vsp-winkel-idx sub))
|
||||
(vsp-winkel-idx sub)
|
||||
(vsp-gf2-bestaetigung sub))
|
||||
|
||||
(T
|
||||
(if letzter
|
||||
@@ -491,8 +505,26 @@
|
||||
"variante"))
|
||||
((= wahl "auf-ab")
|
||||
(vsp-linie sub)
|
||||
(vsp-zahl "REAL" (ssg-val sub "hoehe") "hoehe")
|
||||
(vsp-winkel-idx sub))))))
|
||||
;; Zwei Auspraegungen, unterschieden per Feldpraesenz (kein
|
||||
;; separates Modus-Flag noetig - "richtung" IST die Aussage):
|
||||
;; kommt die Kette schon FLACH an (vfl-frame-flach-p), fragt
|
||||
;; vf-linienzug-modus NICHT nach einer Zielhoehe, sondern nach der
|
||||
;; Richtung (Auf/Ab) und waehlt den Winkel aus einer Kandidaten-
|
||||
;; tabelle (vfl-waehle-winkel-hoehen-tabelle) - winkel_idx dabei
|
||||
;; wie bei GF-Bogen/Vario-Kurve nur, wenn mehrere Kandidaten
|
||||
;; gueltig waren. Kommt sie NICHT flach an (die urspruengliche,
|
||||
;; einzige Auspraegung), wird weiterhin direkt eine Zielhoehe
|
||||
;; erfragt. Welcher Fall ansteht, haengt am Zustand der Zeichnung
|
||||
;; und wird hier nicht geraten - die Spec sagt es ueber die
|
||||
;; Anwesenheit von "richtung".
|
||||
(if (ssg-val sub "richtung")
|
||||
(progn
|
||||
(vsp-code-raus *vsp-tab-richtung* (ssg-val sub "richtung")
|
||||
"richtung")
|
||||
(vsp-winkel-idx sub))
|
||||
(progn
|
||||
(vsp-zahl "REAL" (ssg-val sub "hoehe") "hoehe")
|
||||
(vsp-winkel-idx sub))))))))
|
||||
;; --- Abschluss (vfl-vf-einheit-abschluss) ---
|
||||
;; "zielpunkt-ohne-es": Kette endet direkt am Zielpunkt, keine Frage.
|
||||
;; "automatisch": Glied "Linie" bzw. erreichter Zielpunkt - das
|
||||
|
||||
Reference in New Issue
Block a user