diff --git a/Lisp/vf_etage.lsp b/Lisp/vf_etage.lsp index c9e744c..ce6311b 100644 --- a/Lisp/vf_etage.lsp +++ b/Lisp/vf_etage.lsp @@ -727,27 +727,20 @@ (defun vfe-edit-ent (ent / ed bname startpunkt attribs xd deltaL deltaH richtung z-start hz seite dim eingabe vf-nummer best-winkel-attr L_GF_m-teile - prefill-basis prefill-winkel + prefill-basis prefill-winkel basis-lesung geruest-einzelmodul geruest-typ motorseite) (setq ed (entget ent)) (setq bname (cdr (assoc 2 ed))) (setq xd (vfs-xdata-lesen ent)) - (setq startpunkt (cdr (assoc 10 ed))) - (setq attribs (ssg-attrib-read ent)) - (setq hz (atof (nth 1 xd))) - (setq deltaL (atof (cond ((cdr (assoc "DELTA_L_mm" attribs))) ("15000")))) - (setq deltaH (atof (cond ((cdr (assoc "DELTA_H_mm" attribs))) ("0")))) - (setq richtung (cond ((cdr (assoc "ANTRIEBFAHRTRICHTUNG" attribs))) ("Auf"))) - (setq seite (cond ((cdr (assoc "SEITE_AS" attribs))) ("links"))) - (setq z-start (caddr startpunkt)) - - (setq prefill-basis - (list (cons "deltaL" deltaL) (cons "deltaH" deltaH) (cons "richtung" richtung) - (cons "einfuegehoehe" z-start) (cons "hz" hz) (cons "seite" seite) - (cons "dim" (cond ((ssg-dim-xdata-lesen ent)) ("3D"))) - (cons "geruest-einzelmodul" (cond ((cdr (assoc "GERUEST_EINZELMODUL" attribs))) ("1"))) - (cons "geruest-typ" (cdr (assoc "GERUEST_TYP" attribs))) - (cons "motorseite" (cond ((cdr (assoc "MOTORSEITE" attribs))) ("rechts"))))) + ;; Bau-Parameter + prefill-basis lesen (gemeinsame Leseroutine in + ;; vf_standard.lsp, siehe vfs-edit-basis-lesen). Etage-Defaults: deltaH "0", + ;; Seite "links". + (setq basis-lesung (vfs-edit-basis-lesen ent xd "0" "links")) + (setq prefill-basis (cdr (assoc "prefill-basis" basis-lesung))) + (setq attribs (cdr (assoc "attribs" basis-lesung))) + (setq startpunkt (cdr (assoc "startpunkt" basis-lesung))) + (setq hz (cdr (assoc "hz" basis-lesung))) + (setq z-start (cdr (assoc "z-start" basis-lesung))) (setq eingabe (vfs-dialog-eingabe-basis prefill-basis)) (if (null eingabe) diff --git a/Lisp/vf_linienzug.lsp b/Lisp/vf_linienzug.lsp index 940a537..1cef46b 100644 --- a/Lisp/vf_linienzug.lsp +++ b/Lisp/vf_linienzug.lsp @@ -2378,6 +2378,42 @@ ;; sich um einen frischen Bau oder einen Editier-Neuaufbau handelte (kein ;; Sonderfall mehr noetig). Aufgerufen aus dem *error*-Handler von ;; vf-linienzug-modus. +;; Debug-Session eines Modus starten - gemeinsam fuer alle drei Linienzug-Modi +;; (frueher 3x fast wortgleich, nur Schalter-/Datei-/Funktions-/Sessiontext +;; unterschieden sich). Oeffnet die dbg-Datei und schreibt Kopf + Session-Start. +;; Rueckgabe: dbg-an (T, wenn geloggt wird). Der Modus-1-Zusatz (Replay-Queue- +;; JSON-Diagnose) bleibt an M1s Aufrufstelle - er ist M1-spezifisch. +(defun vfl-dbg-session-start (schalter datei funcname sessiontext / dbg-an) + (setq dbg-an (dbg-schalter-open schalter datei "DXFM_LOG")) + (if dbg-an + (progn + (dbgf funcname) + (dbgmsg sessiontext) + (dbgflush))) + dbg-an) + +;; Fruehen, DUENNEN dbg-*error*-Hook installieren (Modus 2/3): schliesst bei +;; einem Abbruch waehrend der Pfad-/Praeambel-Phase (noch keine Geometrie) nur +;; die dbg-Datei sauber und faellt auf dbg-old-error zurueck. Wird spaeter vom +;; scharfen Wickel-Handler (vfl-abbruch-handler-installieren) abgeloest, sobald +;; vfl-nummer/lastEnt feststehen. Frueher in M2 und M3 wortgleich ausgeschrieben. +;; VERTRAG (dynamic scoping, wie vfl-abbruch-handler-installieren): der Aufrufer +;; MUSS dbg-old-error und dbg-an als Locals gebunden haben; der Hook-Lambda loest +;; sie zur Abbruchzeit gegen den Modus-Frame auf. dbg-old-error hier setzen +;; (Save von *error*) und zurueckgeben. +(defun vfl-dbg-hook-installieren () + (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))))) + dbg-old-error) + ;; Den scharfen Abbruch-Wickel-Handler als *error* installieren - gemeinsam ;; fuer alle drei Linienzug-Modi (frueher 3x wortgleich ausgeschrieben, nur der ;; Marker-String "linienzug"/"linienzug2"/"linienzug3" unterschied sich). @@ -6056,6 +6092,24 @@ (vf-set-es-masse winkel seite) seite) +;; Punkt (XY) + Hoehe (Z) abfragen und zu einem 3D-Punkt zusammenfuehren - +;; gemeinsame Schale fuer die frueher in vf-linienzug-modus/-modus2/-modus3 +;; strukturgleich ausgeschriebene Startpunkt-Praeambel (Wizard-Hook, vfl-in-point, +;; vfl-in-real fuer die Hoehe, Z in die Koordinate uebernehmen). Die einzigen +;; Unterschiede sind die drei ssg-Textschluessel (Punkt-Prompt, Hoehen-Prompt, +;; Abbruch-Text) + der Wizard-Prompt - daher Parameter. Bricht bei nil-Punkt +;; per (exit) ab (wie zuvor an jeder Aufrufstelle; laeuft im Modus-Frame). +;; Rueckgabe: (x y z) mit z = abgefragte Hoehe (Default = gepickte Z). +(defun vfl-frage-punkt-hoehe (punkt-prompt-key hoehe-prompt-key abbruch-key wizard-hoehe-prompt / pkt hoehe) + (if (vfl-wizard-aktiv) + (vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl + (list punkt-prompt-key wizard-hoehe-prompt))) + (setq pkt (vfl-in-point nil (ssg-text punkt-prompt-key))) + (if (null pkt) (progn (princ (ssg-text abbruch-key)) (exit))) + (setq hoehe (vfl-in-real (ssg-textf hoehe-prompt-key (list (rtos (caddr pkt) 2 1))))) + (if (null hoehe) (setq hoehe (caddr pkt))) + (list (car pkt) (cadr pkt) hoehe)) + ;; AS-Winkel (30/90) + Seite abfragen. Gemeinsame Schale fuer die frueher ;; wortgleich in vf-linienzug-modus/-modus2/-modus3 UND vfl-qc-linie-mit-gf ;; ausgeschriebene AS-Praeambel (Winkel-Frage 30/90, Seiten-Frage links/rechts, @@ -6444,17 +6498,16 @@ ;; das erfasst automatisch JEDE interaktive Eingabe dieses Modus (Punkte, ;; Hoehen, Winkel, Menue-Auswahlen) samt Glied-Uebergaengen, ohne dass jede ;; einzelne Aufrufstelle im Bau-Ablauf separat instrumentiert werden muss. - (setq dbg-an (dbg-schalter-open "vfl-modus1" "vfl_modus1.dbg" "DXFM_LOG")) + (setq dbg-an (vfl-dbg-session-start "vfl-modus1" "vfl_modus1.dbg" + "vf-linienzug-modus" "=== SESSION Modus 1 (Manuelle Eingabe) START ===")) + ;; Modus-1-Zusatz: falls dieser Lauf ein Replay ist (Editieren/Fortsetzen, + ;; *vfl-replay-queue* gesetzt), die EINGEHENDE Replay-Queue als JSON ausgeben - + ;; VOR dem Neuaufbau, daher auch bei einem Absturz mitten im Replay sichtbar + ;; (anders als das XDATA-JOURNAL-JSON in vfl-journal-xdata-schreiben, das erst + ;; nach erfolgreichem Bau laeuft). So laesst sich ein Desync direkt an der + ;; Eingangs-Sequenz ablesen. (M1-spezifisch, daher nicht im Session-Helfer.) (if dbg-an (progn - (dbgf "vf-linienzug-modus") - (dbgmsg "=== SESSION Modus 1 (Manuelle Eingabe) START ===") - ;; Diagnose: falls dieser Lauf ein Replay ist (Editieren/Fortsetzen, - ;; *vfl-replay-queue* gesetzt), die EINGEHENDE Replay-Queue als JSON - ;; ausgeben - VOR dem Neuaufbau, daher auch bei einem Absturz mitten im - ;; Replay sichtbar (anders als das XDATA-JOURNAL-JSON in - ;; vfl-journal-xdata-schreiben, das erst nach erfolgreichem Bau laeuft). - ;; So laesst sich ein Desync direkt an der Eingangs-Sequenz ablesen. (if *vfl-replay-queue* (dbgmsg (strcat "REPLAY-QUEUE-JSON " (vfl-journal->json *vfl-replay-queue*))) (dbgmsg "LIVE-BAU (kein Replay)")) @@ -6490,16 +6543,9 @@ ;; Locals gebunden und werden vom Handler zur Abbruchzeit dynamisch gesehen. (vfl-abbruch-handler-installieren "linienzug") - (if (vfl-wizard-aktiv) - (vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl - (list "vfl-prompt-startpunkt-kette" "Starthoehe (Z, mm):"))) - (setq startpunkt (vfl-in-point nil (ssg-text "vfl-prompt-startpunkt-kette"))) - (if (null startpunkt) (progn (princ (ssg-text "vfl-abgebrochen")) (exit))) - ;; Hoehe (Z) des Startpunkts abfragen und in die Z-Koordinate uebernehmen. - (setq start-hoehe - (vfl-in-real (ssg-textf "vfl-prompt-hoehe-startpunkt-kette" (list (rtos (caddr startpunkt) 2 1))))) - (if (null start-hoehe) (setq start-hoehe (caddr startpunkt))) - (setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe)) + ;; Startpunkt + Hoehe (gemeinsame Praeambel-Schale, siehe vfl-frage-punkt-hoehe). + (setq startpunkt (vfl-frage-punkt-hoehe "vfl-prompt-startpunkt-kette" + "vfl-prompt-hoehe-startpunkt-kette" "vfl-abgebrochen" "Starthoehe (Z, mm):")) ;; Startpunkt-Erkennung VOR der AS-Frage: liegt der Punkt auf dem KS_AUS ;; EINES beliebigen bestehenden Kettenbausteins (GF ODER VF, beliebiges @@ -8995,22 +9041,9 @@ ;; eigentliche Abbruch-WICKLER (Teil-Geometrie zu einem VF_n-Block sichern) ;; wird erst nach dem Setup scharf geschaltet (siehe unten), sobald ;; vfl-nummer/lastEnt feststehen - analog Modus 2. - (setq dbg-an (dbg-schalter-open "vfl-modus3" "vfl_modus3.dbg" "DXFM_LOG")) - (if dbg-an - (progn - (dbgf "vf-linienzug-modus3") - (dbgmsg "=== SESSION Modus 3 (Vorwaerts-Nachbau) 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))))) + (setq dbg-an (vfl-dbg-session-start "vfl-modus3" "vfl_modus3.dbg" + "vf-linienzug-modus3" "=== SESSION Modus 3 (Vorwaerts-Nachbau) START ===")) + (vfl-dbg-hook-installieren) (vfl-gf-abhaengigkeit-sicherstellen "vfl-m3-alert-gf-modul") @@ -9021,18 +9054,9 @@ ;; wird nur noch die abgeleitete Segment-Essenz (SEGS), nicht die Handles. ;; --- 2. Startpunkt (hoehere Seite) + Hoehe + AS-Seite --- - ;; Wizard: Startpunkt+Hoehe als EIN Gruppen-Dialog (analog Modus 2). Die - ;; unveraenderten vfl-in-point/vfl-in-real-Aufrufe konsumieren die Antworten - ;; danach aus *vflw-pending*. - (if (vfl-wizard-aktiv) - (vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl - (list "vfl-m3-prompt-startpunkt" "Starthoehe (Z, mm):"))) - (setq startpunkt (vfl-in-point nil (ssg-text "vfl-m3-prompt-startpunkt"))) - (if (null startpunkt) (progn (princ (ssg-text "vfl-abgebrochen")) (exit))) - (setq start-hoehe (vfl-in-real (ssg-textf "vfl-prompt-hoehe-startpunkt" - (list (rtos (caddr startpunkt) 2 1))))) - (if (null start-hoehe) (setq start-hoehe (caddr startpunkt))) - (setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe)) + ;; Startpunkt + Hoehe (gemeinsame Praeambel-Schale, siehe vfl-frage-punkt-hoehe). + (setq startpunkt (vfl-frage-punkt-hoehe "vfl-m3-prompt-startpunkt" + "vfl-prompt-hoehe-startpunkt" "vfl-abgebrochen" "Starthoehe (Z, mm):")) ;; AS-Element (in Modus 3 immer gesetzt): Winkel(30/90) + Seite als EIN ;; Gruppen-Dialog. vflw-gruppe-winkel-seite-impl legt Winkel ("90"/"30") ;; und Seite ("1"/"2") in *vflw-pending* ab - genau die Reihenfolge, die @@ -9544,22 +9568,9 @@ ;; 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))))) + (setq dbg-an (vfl-dbg-session-start "vfl-modus2" "vfl_modus2.dbg" + "vf-linienzug-modus2" "=== SESSION Modus 2 (3D-Objekte + Ziel-Hoehe) START ===")) + (vfl-dbg-hook-installieren) (vfl-gf-abhaengigkeit-sicherstellen "vfl-m3-alert-gf-modul") @@ -9573,15 +9584,11 @@ ;; Sortierung braucht, steht die Auswahl NACH der Startpunkt-Praeambel. ;; --- 2. Startpunkt + Z + AS-Seite --- - (if (vfl-wizard-aktiv) - (vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl - (list "vfl-m3-prompt-startpunkt" "Starthoehe (Z, mm):"))) - (setq startpunkt (vfl-in-point nil (ssg-text "vfl-m3-prompt-startpunkt"))) - (if (null startpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit))) - (setq start-hoehe (vfl-in-real (ssg-textf "vfl-prompt-hoehe-startpunkt" - (list (rtos (caddr startpunkt) 2 1))))) - (if (null start-hoehe) (setq start-hoehe (caddr startpunkt))) - (setq startpunkt (list (car startpunkt) (cadr startpunkt) start-hoehe)) + ;; Startpunkt + Hoehe (gemeinsame Praeambel-Schale). start-hoehe wird spaeter + ;; vom Solver gebraucht (z-front/dH-gesamt) - aus der Z-Koordinate ziehen. + (setq startpunkt (vfl-frage-punkt-hoehe "vfl-m3-prompt-startpunkt" + "vfl-prompt-hoehe-startpunkt" "gf-status-abgebrochen" "Starthoehe (Z, mm):")) + (setq start-hoehe (caddr startpunkt)) (if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-as-setzen-frage"))) (princ (ssg-text "vfl-as-setzen-frage")) @@ -9598,15 +9605,11 @@ ) ;; --- 3. Endpunkt + Z + ES-Seite (NEU in Modus 3) --- - (if (vfl-wizard-aktiv) - (vl-catch-all-apply 'vflw-gruppe-punkt-hoehe-impl - (list "vfl-m3-prompt-endpunkt" "Zielhoehe (Z, mm):"))) - (setq endpunkt (vfl-in-point nil (ssg-text "vfl-m3-prompt-endpunkt"))) - (if (null endpunkt) (progn (princ (ssg-text "gf-status-abgebrochen")) (exit))) - (setq end-hoehe (vfl-in-real (ssg-textf "vfl-m3-prompt-zielhoehe" - (list (rtos (caddr endpunkt) 2 1))))) - (if (null end-hoehe) (setq end-hoehe (caddr endpunkt))) - (setq endpunkt (list (car endpunkt) (cadr endpunkt) end-hoehe)) + ;; Endpunkt + Zielhoehe (gemeinsame Praeambel-Schale). end-hoehe wird spaeter + ;; vom Solver gebraucht (z-junction/dH-gesamt) - aus der Z-Koordinate ziehen. + (setq endpunkt (vfl-frage-punkt-hoehe "vfl-m3-prompt-endpunkt" + "vfl-m3-prompt-zielhoehe" "gf-status-abgebrochen" "Zielhoehe (Z, mm):")) + (setq end-hoehe (caddr endpunkt)) (if (vfl-wizard-aktiv) (vl-catch-all-apply 'vflw-gruppe-as-impl (list "vfl-es-setzen-frage"))) (princ (ssg-text "vfl-es-setzen-frage")) diff --git a/Lisp/vf_standard.lsp b/Lisp/vf_standard.lsp index 484bfdc..c524148 100644 --- a/Lisp/vf_standard.lsp +++ b/Lisp/vf_standard.lsp @@ -810,6 +810,42 @@ ;; unveraendert interaktiv (siehe Verzweigung in c:VarioFoerderer). ;; ============================================================ +;; Bau-Parameter eines bestehenden VF_n-Blocks aus XDATA + Attributen lesen - +;; gemeinsame Leseroutine fuer den Standard-Edit-Body (c:VARIOFOERDERER_EDIT) +;; und den Etage-Edit-Body (vfe-edit-ent), die frueher denselben Attribut-Lese- +;; + prefill-basis-Aufbau fast wortgleich ausgeschrieben hatten. Einzige +;; Unterschiede waren zwei Defaults (deltaH, seite) - daher Parameter. +;; NICHT zusammengelegt mit vf-konvertiere-ent: das liest dieselben Attribute, +;; liefert aber eine andere Struktur (Einzelwerte + L_VF/L_GF1/L_GF2/hoehe-von/ +;; bis fuer den Batch-Konverter statt einer Dialog-prefill-Alist) - eine +;; erzwungene Zusammenfuehrung wuerde beide verkomplizieren. +;; Rueckgabe: Alist mit "prefill-basis" (fuer vfs-dialog-eingabe-basis) plus den +;; Rohwerten "attribs" "startpunkt" "hz" "z-start", die der Aufrufer danach noch +;; fuer prefill-winkel/Neubau braucht. +(defun vfs-edit-basis-lesen (ent xd default-deltah default-seite / + ed attribs startpunkt hz deltaL deltaH richtung seite z-start) + (setq ed (entget ent)) + (setq attribs (ssg-attrib-read ent)) + (setq startpunkt (cdr (assoc 10 ed))) + (setq hz (atof (nth 1 xd))) + (setq deltaL (atof (cond ((cdr (assoc "DELTA_L_mm" attribs))) ("15000")))) + (setq deltaH (atof (cond ((cdr (assoc "DELTA_H_mm" attribs))) (default-deltah)))) + (setq richtung (cond ((cdr (assoc "ANTRIEBFAHRTRICHTUNG" attribs))) ("Auf"))) + (setq seite (cond ((cdr (assoc "SEITE_AS" attribs))) (default-seite))) + (setq z-start (caddr startpunkt)) + (list + (cons "prefill-basis" + (list (cons "deltaL" deltaL) (cons "deltaH" deltaH) (cons "richtung" richtung) + (cons "einfuegehoehe" z-start) (cons "hz" hz) (cons "seite" seite) + (cons "dim" (cond ((ssg-dim-xdata-lesen ent)) ("3D"))) + (cons "geruest-einzelmodul" (cond ((cdr (assoc "GERUEST_EINZELMODUL" attribs))) ("1"))) + (cons "geruest-typ" (cdr (assoc "GERUEST_TYP" attribs))) + (cons "motorseite" (cond ((cdr (assoc "MOTORSEITE" attribs))) ("rechts"))))) + (cons "attribs" attribs) + (cons "startpunkt" startpunkt) + (cons "hz" hz) + (cons "z-start" z-start))) + ;; Basis-Eingabe (Dialog 1): deltaL, deltaH, Richtung, Einfuegehoehe, ;; Fahrtrichtung, Seite, Geruest fuer Einzelmodul, Geruestoption. ;; prefill: Assoziationsliste zur Vorbelegung (fuer VARIOFOERDERER_EDIT) mit @@ -1171,7 +1207,7 @@ (defun c:VARIOFOERDERER_EDIT ( / ss ent ed bname startpunkt attribs xd deltaL deltaH richtung z-start hz seite dim eingabe vf-nummer best-winkel-attr L_GF_m-teile - prefill-basis prefill-winkel + prefill-basis prefill-winkel basis-lesung geruest-einzelmodul geruest-typ motorseite) ;; Implied Selection VOR ssg-start pruefen (ssg-start hebt Selektion auf) (setq ss (ssget "I")) @@ -1214,24 +1250,14 @@ (if (/= (car xd) "standard") (progn (alert (ssg-textf "vfs-edit-keine-xdata" (list bname))) (ssg-end) (exit))) - (setq startpunkt (cdr (assoc 10 ed))) - (setq attribs (ssg-attrib-read ent)) - (setq hz (atof (nth 1 xd))) - (setq deltaL (atof (cond ((cdr (assoc "DELTA_L_mm" attribs))) ("15000")))) - (setq deltaH (atof (cond ((cdr (assoc "DELTA_H_mm" attribs))) ("3000")))) - (setq richtung (cond ((cdr (assoc "ANTRIEBFAHRTRICHTUNG" attribs))) ("Auf"))) - (setq seite (cond ((cdr (assoc "SEITE_AS" attribs))) ("rechts"))) - (setq z-start (caddr startpunkt)) - - (setq prefill-basis - (list (cons "deltaL" deltaL) (cons "deltaH" deltaH) (cons "richtung" richtung) - (cons "einfuegehoehe" z-start) (cons "hz" hz) (cons "seite" seite) - ;; Dimension aus XDATA erkennen (Default 3D, falls Alt-Block ohne Eintrag) - (cons "dim" (cond ((ssg-dim-xdata-lesen ent)) ("3D"))) - (cons "geruest-einzelmodul" (cond ((cdr (assoc "GERUEST_EINZELMODUL" attribs))) ("1"))) - (cons "geruest-typ" (cdr (assoc "GERUEST_TYP" attribs))) - ;; Motorseite aus Attribut (Default rechts, falls Alt-Block ohne Eintrag) - (cons "motorseite" (cond ((cdr (assoc "MOTORSEITE" attribs))) ("rechts"))))) + ;; Bau-Parameter + prefill-basis lesen (gemeinsame Leseroutine, siehe + ;; vfs-edit-basis-lesen). Standard-Defaults: deltaH "3000", Seite "rechts". + (setq basis-lesung (vfs-edit-basis-lesen ent xd "3000" "rechts")) + (setq prefill-basis (cdr (assoc "prefill-basis" basis-lesung))) + (setq attribs (cdr (assoc "attribs" basis-lesung))) + (setq startpunkt (cdr (assoc "startpunkt" basis-lesung))) + (setq hz (cdr (assoc "hz" basis-lesung))) + (setq z-start (cdr (assoc "z-start" basis-lesung))) (setq eingabe (vfs-dialog-eingabe-basis prefill-basis)) (if (null eingabe)