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>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
733946c368
commit
bd33e277c5
+10
-17
@@ -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)
|
||||
|
||||
+84
-81
@@ -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"))
|
||||
|
||||
+45
-19
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user