VF-Linienzug: Modus 2 loggen, Debug-Default auf AN, GF-Hoehenvorschlag-Bug behoben
Debug-Logging (Schalter vfl-modus1/2/3) ist jetzt standardmaessig AN statt AUS, damit nicht vor jeder Session manuell eingeschaltet werden muss. Modus 2 (vf-linienzug-modus2) war bisher nicht instrumentiert - Session-Open/Close und *error*-Handling analog Modus 1/3 ergaenzt; da Modus 2 durchgehend die vfl-in-*-Wrapper nutzt, wird das Eingabe-Logging automatisch ueber den vorhandenen vfl-journal-record-Hook mitgezogen. Bugfix: Der Hoehen-Vorschlag im GF-Zielhoehe-Dialog (Wizard + Konsole) war schlicht die unveraenderte Ist-Hoehe der Kette. Direkt uebernommen ergab das deltaH=0, was als "Auf" statt "Ab" gewertet und immer mit "kann nicht steigen" abgelehnt wurde - der Default war also nie baubar. Neue Hilfs- funktion vfl-gf-hoehe-vorschlag rundet auf volle mm ab und zieht bei bereits ganzzahligen Werten zusaetzlich 1mm ab, damit der Vorschlag garantiert unterhalb der Ist-Hoehe liegt. Ausserdem: unnoetige Anfuehrungszeichen aus den zugehoerigen Fehlermeldungen (de/en) entfernt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+22
-19
@@ -192,12 +192,14 @@ Beispiel:
|
||||
(dbgclose)
|
||||
```
|
||||
|
||||
#### Zentrale Debug-Schalter (default AUS)
|
||||
#### Zentrale Debug-Schalter (default je nach Schalter)
|
||||
|
||||
Damit `dbg*`-Aufrufe dauerhaft im Code stehen bleiben können, ohne im
|
||||
Normalbetrieb `.dbg`-Dateien zu erzeugen, gibt es eine zentrale Schalter-Sammlung
|
||||
(`*dbg-schalter*`, Symbol → 0/1, alle standardmäßig 0/aus). Eine Routine öffnet
|
||||
ihre Debug-Datei nur, wenn ihr Schalter eingeschaltet ist.
|
||||
Normalbetrieb ungeplant `.dbg`-Dateien zu erzeugen, gibt es eine zentrale
|
||||
Schalter-Sammlung (`*dbg-schalter*`, Symbol → 0/1). Eine Routine öffnet ihre
|
||||
Debug-Datei nur, wenn ihr Schalter eingeschaltet ist. Unbekannte/neue Schalter
|
||||
gelten implizit als 0/aus; die VF-Linienzug-Schalter unten sind bewusst mit
|
||||
Default 1/an vorregistriert (siehe Tabelle).
|
||||
|
||||
| Funktion | Beschreibung |
|
||||
| --- | --- |
|
||||
@@ -209,25 +211,26 @@ ihre Debug-Datei nur, wenn ihr Schalter eingeschaltet ist.
|
||||
|
||||
Bekannte Schalter:
|
||||
|
||||
| Schalter | Modul | Loggt nach |
|
||||
| --- | --- | --- |
|
||||
| `"vfl-modus1"` | Linienzug Modus 1 (manuelle Eingabe, `vf-linienzug-modus`) | `DXFM_LOG/vfl_modus1.dbg` |
|
||||
| `"vfl-modus3"` | Linienzug Modus 3 (Vorwärts-Nachbau, `vf-linienzug-modus3`) | `DXFM_LOG/vfl_modus3.dbg` |
|
||||
| Schalter | Default | Modul | Loggt nach |
|
||||
| --- | --- | --- | --- |
|
||||
| `"vfl-modus1"` | **AN (1)** | Linienzug Modus 1 (manuelle Eingabe, `vf-linienzug-modus`) | `DXFM_LOG/vfl_modus1.dbg` |
|
||||
| `"vfl-modus2"` | **AN (1)** | Linienzug Modus 2 (3D-Objekte + Ziel-Höhe, `vf-linienzug-modus2`) | `DXFM_LOG/vfl_modus2.dbg` |
|
||||
| `"vfl-modus3"` | **AN (1)** | Linienzug Modus 3 (Vorwärts-Nachbau, `vf-linienzug-modus3`) | `DXFM_LOG/vfl_modus3.dbg` |
|
||||
|
||||
Modus 1 (und baugleich Modus 2) loggen automatisch **jede** interaktive Eingabe,
|
||||
weil beide ausschließlich über die gemeinsamen Wrapper `vfl-in-point`/`-string`/
|
||||
`-real`/`-int`/`-value`/`-selection` gehen, die zentral in `vfl-journal-record`
|
||||
Alle drei Modi loggen automatisch **jede** interaktive Eingabe, weil sie
|
||||
durchgehend über die gemeinsamen Wrapper `vfl-in-point`/`-string`/`-real`/
|
||||
`-int`/`-value`/`-selection` gehen, die zentral in `vfl-journal-record`
|
||||
protokolliert werden – keine einzelne Aufrufstelle im Bau-Ablauf musste dafür
|
||||
angefasst werden. Modus 3 ist bewusst reine Konsole (`getstring`/`getreal`/
|
||||
`getint`, kein Journal) und wird stattdessen direkt in `vf-linienzug-modus3`
|
||||
mit eigenen `dbgmsg`-Aufrufen an jeder Frage/Antwort geloggt.
|
||||
angefasst werden. Da der Default AN ist, wird bei jedem Aufruf von
|
||||
`FOERDERANLAGE` → `linienzug` ohne weiteres Zutun mitgeloggt; bei Bedarf
|
||||
einzeln abschaltbar mit `(dbg-schalter-off "vfl-modus1")` usw.
|
||||
|
||||
```lisp
|
||||
;; In der BricsCAD-Konsole VOR dem Befehl FOERDERANLAGE:
|
||||
(dbg-schalter-on "vfl-modus1")
|
||||
;; ... FOERDERANLAGE -> linienzug -> Modus 1 durchspielen ...
|
||||
;; -> Datei DXFM_LOG/vfl_modus1.dbg enthält Session + alle Eingaben
|
||||
(dbg-schalter-off "vfl-modus1") ; wieder abschalten
|
||||
;; Standardmaessig bereits an - nur zur Kontrolle:
|
||||
(dbg-schalter-liste)
|
||||
;; ... FOERDERANLAGE -> linienzug -> Modus 1/2/3 durchspielen ...
|
||||
;; -> Datei DXFM_LOG/vfl_modus<N>.dbg enthält Session + alle Eingaben
|
||||
(dbg-schalter-off "vfl-modus1") ; bei Bedarf einzeln abschalten
|
||||
```
|
||||
|
||||
Muster in einer Routine:
|
||||
|
||||
+11
-8
@@ -38,10 +38,11 @@
|
||||
;; ZENTRALE DEBUG-SCHALTER-SAMMLUNG
|
||||
;;
|
||||
;; Jedes Feature/jede Routine hat ihren eigenen Schalter (Symbol -> 0/1).
|
||||
;; DEFAULT: alle AUS (0). Dadurch bleiben (dbg-schalter-openp "name" ...)-
|
||||
;; Aufrufe im Code stehen, ohne dass beim normalen Arbeiten .dbg-Dateien
|
||||
;; entstehen. Erst wenn der passende Schalter auf 1 gesetzt wird, wird die
|
||||
;; Datei angelegt und beschrieben.
|
||||
;; Neue/unbekannte Schalter (die NICHT unten vorregistriert sind) gelten
|
||||
;; implizit als AUS (0) - so bleiben (dbg-schalter-open "name" ...)-Aufrufe
|
||||
;; im Code stehen, ohne dass beim normalen Arbeiten ungeplant .dbg-Dateien
|
||||
;; entstehen. Die VF-Linienzug-Schalter unten sind bewusst mit Default 1
|
||||
;; (EIN) vorregistriert, siehe Kommentar dort.
|
||||
;;
|
||||
;; (dbg-schalter-on "vfl-modus3") ; Schalter einschalten (1)
|
||||
;; (dbg-schalter-off "vfl-modus3") ; Schalter ausschalten (0)
|
||||
@@ -53,11 +54,13 @@
|
||||
;; ------------------------------------------------------------
|
||||
(if (not (boundp '*dbg-schalter*)) (setq *dbg-schalter* nil))
|
||||
|
||||
;; Bekannte Schalter mit Default 0 vorregistrieren (rein informativ fuer
|
||||
;; dbg-schalter-liste; unbekannte Namen gelten ebenfalls als 0/aus).
|
||||
(foreach nm '("vfl-modus1" "vfl-modus3")
|
||||
;; VF-Linienzug (Modus 1/2/3) Debug-Schalter, Default 1 (EIN): der Nutzer
|
||||
;; will die Session + alle Eingaben durchgehend geloggt haben, ohne den
|
||||
;; Schalter vor jedem Aufruf manuell einzuschalten. Bei Bedarf einzeln
|
||||
;; abschaltbar: (dbg-schalter-off "vfl-modus1") usw.
|
||||
(foreach nm '("vfl-modus1" "vfl-modus2" "vfl-modus3")
|
||||
(if (not (assoc nm *dbg-schalter*))
|
||||
(setq *dbg-schalter* (cons (cons nm 0) *dbg-schalter*))))
|
||||
(setq *dbg-schalter* (cons (cons nm 1) *dbg-schalter*))))
|
||||
|
||||
(defun dbg-schalter-set (name wert)
|
||||
(setq *dbg-schalter*
|
||||
|
||||
+72
-11
@@ -1106,6 +1106,18 @@
|
||||
pt
|
||||
)
|
||||
|
||||
;; Vorschlagswert fuer die GF-Zielhoehe: die aktuelle Kettenhoehe (ist-hoehe)
|
||||
;; UNVERAENDERT als Default anzubieten fuehrt in eine Falle - ein GF-Segment
|
||||
;; MUSS fallen (0 Grad Gefaelle gibt es nicht), ein direkt uebernommener
|
||||
;; Vorschlag mit deltaH=0 wird also immer als "kann nicht steigen" abgelehnt.
|
||||
;; Deshalb hier auf volle mm ABGERUNDET (truncate, nicht rtos-Rundung - die
|
||||
;; koennte sonst aufrunden und ueber die Ist-Hoehe hinausgehen) und bei
|
||||
;; bereits ganzzahligen Werten zusaetzlich 1mm abgezogen, damit der Vorschlag
|
||||
;; immer echt unterhalb der Ist-Hoehe liegt und direkt uebernehmbar ist.
|
||||
(defun vfl-gf-hoehe-vorschlag (ist-hoehe / gekappt)
|
||||
(setq gekappt (float (fix ist-hoehe)))
|
||||
(if (>= gekappt ist-hoehe) (- gekappt 1.0) gekappt))
|
||||
|
||||
;; Rueckgabe: (deltaL hz p2) oder nil bei Abbruch. p2 = der rohe gepickte
|
||||
;; Punkt (fuer Diagnose/Nachrechnung nach dem AS-Element-Insert, siehe
|
||||
;; vfl-projiziere-distanz). Foerderer-Maximallaenge 25 m: bei Ueberschreitung
|
||||
@@ -2105,8 +2117,8 @@
|
||||
(princ "\n=========================================")
|
||||
(princ (ssg-text "vfl-modus1-beschreibung"))
|
||||
|
||||
;; --- Debug-Session (Schalter "vfl-modus1", DEFAULT AUS) -----------------
|
||||
;; (dbg-schalter-on "vfl-modus1") vor FOERDERANLAGE aktiviert das Loggen.
|
||||
;; --- Debug-Session (Schalter "vfl-modus1", DEFAULT AN) ------------------
|
||||
;; (dbg-schalter-off "vfl-modus1") deaktiviert bei Bedarf das Loggen.
|
||||
;; Geloggt wird ueber vfl-journal-record/-mark/-steplabel (siehe dort) -
|
||||
;; das erfasst automatisch JEDE interaktive Eingabe dieses Modus (Punkte,
|
||||
;; Hoehen, Winkel, Menue-Auswahlen) samt Glied-Uebergaengen, ohne dass jede
|
||||
@@ -2346,7 +2358,8 @@
|
||||
)
|
||||
(setq gf-ok t)
|
||||
(if *vfl-wizard-mode*
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl (list (caddr p-aktuell))))
|
||||
(vl-catch-all-apply 'vflw-gruppe-gefaelle-impl
|
||||
(list (vfl-gf-hoehe-vorschlag (caddr p-aktuell)))))
|
||||
(princ (ssg-text "vfl-gefaelle-festlegen-header"))
|
||||
(princ (ssg-text "vfl-gefaelle-opt-hoehe"))
|
||||
(princ (ssg-text "vfl-gefaelle-opt-winkel"))
|
||||
@@ -2376,10 +2389,14 @@
|
||||
;; Gegebene Hoehe - wie bisher, aber Winkel wird daraus abgeleitet
|
||||
;; und gegen den GF-Maximalwinkel geprueft (GF kann nicht steigen).
|
||||
;; p-aktuell ist ab hier immer der reale Referenzpunkt (bei
|
||||
;; Kettenanfang das echte KS_AUS des AS-Elements).
|
||||
;; Kettenanfang das echte KS_AUS des AS-Elements). Vorschlag/
|
||||
;; Enter-Default = vfl-gf-hoehe-vorschlag (siehe dort), NICHT
|
||||
;; die unveraenderte Ist-Hoehe - sonst waere deltaH=0 und die
|
||||
;; GF-Pruefung wiese den Wert als "kann nicht steigen" ab.
|
||||
(setq hoehe-neu
|
||||
(vfl-in-real (ssg-textf "vfl-prompt-hoehe-linienendpunkt" (list (rtos (caddr p-aktuell) 2 1)))))
|
||||
(if (null hoehe-neu) (setq hoehe-neu (caddr p-aktuell)))
|
||||
(vfl-in-real (ssg-textf "vfl-prompt-hoehe-linienendpunkt"
|
||||
(list (rtos (vfl-gf-hoehe-vorschlag (caddr p-aktuell)) 2 1)))))
|
||||
(if (null hoehe-neu) (setq hoehe-neu (vfl-gf-hoehe-vorschlag (caddr p-aktuell))))
|
||||
(setq deltaH (- hoehe-neu (caddr p-aktuell)))
|
||||
(setq richtung (if (>= deltaH 0.0) "Auf" "Ab"))
|
||||
(setq deltaH (abs deltaH))
|
||||
@@ -2926,9 +2943,8 @@
|
||||
(princ (ssg-text "vfl-vwnb-titel"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
;; --- Debug-Session (Schalter "vfl-modus3", DEFAULT AUS) -----------------
|
||||
;; Die .dbg-Datei entsteht nur, wenn der Schalter eingeschaltet wurde:
|
||||
;; (dbg-schalter-on "vfl-modus3") -> in der Konsole vor FOERDERANLAGE
|
||||
;; --- Debug-Session (Schalter "vfl-modus3", DEFAULT AN) -------------------
|
||||
;; Bei Bedarf abschaltbar: (dbg-schalter-off "vfl-modus3") in der Konsole.
|
||||
;; Alle interaktiven Eingaben (Punkte, Hoehen, Seiten, Winkel, Menue-
|
||||
;; Auswahlen) laufen ueber die vfl-in-*-Wrapper und werden dadurch
|
||||
;; automatisch ueber vfl-journal-record mitgeloggt (siehe dort) - hier nur
|
||||
@@ -3374,11 +3390,37 @@
|
||||
hor-koerper-len hor-pairs flat-p fill-len wahl3
|
||||
rad3v feste-vf dH-adj dir-x dir-y fill-D end-hz
|
||||
gf-total br-gf-mode br-gf2-exp filler-A-len filler-a-done
|
||||
as-vorhanden es-vorhanden)
|
||||
as-vorhanden es-vorhanden dbg-an dbg-old-error)
|
||||
(princ "\n\n=========================================")
|
||||
(princ (ssg-text "vfl-m3-titel"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
;; --- 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
|
||||
;; werden dadurch automatisch ueber vfl-journal-record mitgeloggt (analog
|
||||
;; Modus 1). Ein FRUEHER, duenner *error*-Hook schliesst die Datei bereits
|
||||
;; sauber, falls waehrend Phase A (Klassifizierungsfragen, noch keine
|
||||
;; Geometrie) abgebrochen wird - die eigentliche Abbruch-Sicherung (Wickeln
|
||||
;; der Teil-Geometrie) wird erst spaeter zu Beginn von Phase B installiert
|
||||
;; (siehe dortiger Kommentar) und uebernimmt das Schliessen dann von hier.
|
||||
(setq dbg-an (dbg-schalter-open "vfl-modus2" "vfl_modus2.dbg" "DXFM_LOG"))
|
||||
(if dbg-an
|
||||
(progn
|
||||
(dbgf "vf-linienzug-modus2")
|
||||
(dbgmsg "=== SESSION Modus 2 (3D-Objekte + Ziel-Hoehe) START ===")
|
||||
(dbgflush)))
|
||||
(setq dbg-old-error *error*)
|
||||
(setq *error*
|
||||
(function (lambda (msg)
|
||||
(setq *error* dbg-old-error)
|
||||
(if dbg-an
|
||||
(progn
|
||||
(dbgmsg (strcat "=== ABBRUCH: " (if msg msg "(exit)") " ==="))
|
||||
(dbgreturn nil)
|
||||
(dbgclose)))
|
||||
(if dbg-old-error (dbg-old-error msg) (princ)))))
|
||||
|
||||
;; Abhaengigkeit Gefaellestrecke-Modul
|
||||
(if (null (car (atoms-family 1 '("GF-INSERT-HZ-INCL-SCALED"))))
|
||||
(progn (alert (ssg-text "vfl-m3-alert-gf-modul")) (exit)))
|
||||
@@ -3622,12 +3664,21 @@
|
||||
;; Kommentar) - Phase A (oben) baut noch keine Geometrie, ein Abbruch
|
||||
;; waehrend der Klassifizierungsfragen haette also ohnehin nichts zu
|
||||
;; wickeln. Ab Phase B kann jederzeit Geometrie entstehen.
|
||||
(setq old-error *error*)
|
||||
;; *error* ist hier bereits der fruehe dbg-Hook vom Funktionsanfang - wir
|
||||
;; loesen ihn komplett ab (Ruecksprungziel ist dbg-old-error, NICHT der
|
||||
;; dbg-Hook selbst) und uebernehmen das dbgclose gleich mit, sonst wuerde
|
||||
;; bei einem Abbruch ab hier doppelt geschlossen.
|
||||
(setq old-error dbg-old-error)
|
||||
(setq *error*
|
||||
(function (lambda (msg)
|
||||
(setq *error* old-error)
|
||||
(vfl-modus-abbruch-sichern lastEnt vfl-nummer anzahl-gf anzahl-vf
|
||||
startpunkt frame as-seite es-seite "linienzug2")
|
||||
(if dbg-an
|
||||
(progn
|
||||
(dbgmsg (strcat "=== ABBRUCH: " (if msg msg "(exit)") " ==="))
|
||||
(dbgreturn nil)
|
||||
(dbgclose)))
|
||||
(if (and (boundp '*ssg-start-stack*) *ssg-start-stack*) (ssg-end))
|
||||
(princ))))
|
||||
;; erste/letzte Gerade fuer AS/ES-Trimmung bestimmen
|
||||
@@ -3916,6 +3967,16 @@
|
||||
(* (- (cadr ist-ende) (cadr soll-ende)) dir-x)) 2 1))))
|
||||
(princ (ssg-text "vfl-m3-achse-hinweis"))
|
||||
(princ "\n=========================================")
|
||||
|
||||
(if dbg-an
|
||||
(progn
|
||||
(dbgmsg (strcat "ERGEBNIS: VF_" (itoa vfl-nummer)
|
||||
" (GF=" (itoa anzahl-gf) " VF=" (itoa anzahl-vf) ")"))
|
||||
(dbg 'soll-ende)
|
||||
(dbg 'ist-ende)
|
||||
(dbgmsg "=== SESSION Modus 2 ENDE ===")
|
||||
(dbgreturn (list "VF" vfl-nummer))
|
||||
(dbgclose)))
|
||||
(princ)
|
||||
)
|
||||
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@
|
||||
"vfl-prompt-neigungswinkel": "\nNeigungswinkel (Grad, 0 < Winkel <= %1) [%1]: ",
|
||||
"vfl-alert-winkel-ungueltig": "Neigungswinkel ungueltig: %1 Grad. Erlaubt: 0 < Winkel <= %2 Grad.",
|
||||
"vfl-prompt-hoehe-linienendpunkt": "\nHoehe (Z) des Linienendpunkts [%1]: ",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gefaellestrecke (GF) kann nicht steigen - bitte tiefere Zielhoehe waehlen oder \"Ab/Auf VF\" benutzen.",
|
||||
"vfl-alert-gefaelle-zu-steil": "Gefaelle zu steil fuer GF: %1 Grad (erlaubt max %2 Grad).\nBitte kleinere Hoehendifferenz waehlen oder \"Ab/Auf VF\" benutzen.",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gefaellestrecke (GF) kann nicht steigen - bitte tiefere Zielhoehe waehlen oder Ab/Auf VF benutzen.",
|
||||
"vfl-alert-gefaelle-zu-steil": "Gefaelle zu steil fuer GF: %1 Grad (erlaubt max %2 Grad).\nBitte kleinere Hoehendifferenz waehlen oder Ab/Auf VF benutzen.",
|
||||
"vfl-ist-kettenende-header": "\nIst das das Kettenende?",
|
||||
"vfl-kettenende-opt-ja-es": "\n 1 - Ja (ES-Element setzen)",
|
||||
"vfl-kettenende-opt-ja-ohne-es": "\n 2 - Ja (ohne ES-Element setzen)",
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@
|
||||
"vfl-prompt-neigungswinkel": "\nIncline angle (degrees, 0 < angle <= %1) [%1]: ",
|
||||
"vfl-alert-winkel-ungueltig": "Incline angle invalid: %1 degrees. Allowed: 0 < angle <= %2 degrees.",
|
||||
"vfl-prompt-hoehe-linienendpunkt": "\nHeight (Z) of the line end point [%1]: ",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gravity section (GF) cannot rise - please pick a lower target height or use \"down/up VF\".",
|
||||
"vfl-alert-gefaelle-zu-steil": "Slope too steep for GF: %1 degrees (max allowed %2 degrees).\nPlease pick a smaller height difference or use \"down/up VF\".",
|
||||
"vfl-alert-gf-kann-nicht-steigen": "Gravity section (GF) cannot rise - please pick a lower target height or use down/up VF.",
|
||||
"vfl-alert-gefaelle-zu-steil": "Slope too steep for GF: %1 degrees (max allowed %2 degrees).\nPlease pick a smaller height difference or use down/up VF.",
|
||||
"vfl-ist-kettenende-header": "\nIs this the chain end?",
|
||||
"vfl-kettenende-opt-ja-es": "\n 1 - Yes (place ES element)",
|
||||
"vfl-kettenende-opt-ja-ohne-es": "\n 2 - Yes (without placing ES element)",
|
||||
|
||||
Reference in New Issue
Block a user