Fix des Redefines im Lisp. Erzeugte lange schleifen. Jeder Block nur einmal laden

This commit is contained in:
2026-07-28 16:11:31 +02:00
parent efec00d4c6
commit 98f1c64c3d
4 changed files with 141 additions and 51 deletions
+24 -4
View File
@@ -113,7 +113,7 @@
;; L_GF2 (Nachlauf) ist der Rest (L_GF_gesamt - L_GF1).
(defun mubea:build-vario-one (tid richtung deltaL deltaH winkel-soll gf1-ziel seite hz
startpunkt / ergebnis winkel-treffer best-winkel L_GF L_VF
gf1 gf2 hoehe-bis lastEnt ent)
gf1 gf2 hoehe-bis lastEnt ent vf-nummer)
(if (or (null seite) (= seite "")) (setq seite "links"))
(if (null hz) (setq hz 0.0) (setq hz (float hz)))
(princ (strcat "\n [VARIO] " tid " -> deltaL=" (rtos deltaL 2 0)
@@ -147,7 +147,14 @@
(setq hoehe-bis (if (= richtung "Auf") deltaH (- deltaH)))
(setq lastEnt (vf-lastent-ohne-attribute))
(variofoerderer-einfuegen deltaL deltaH richtung best-winkel gf1 gf2 L_VF startpunkt seite hz)
(setq ent (vf-block-erstellen "standard" seite 1 0 0 hoehe-bis
;; Blocknummer wie in der Produktion ueber vf-next-number holen (NICHT fest
;; auf 1): vf-next-number ueberspringt bereits belegte VF_n-Nummern. Mit
;; einer festen 1 traf das _.-BLOCK des ZWEITEN Foerderers auf den schon
;; vorhandenen Namen "VF_1" -> BricsCAD fragt "Neu definieren?", verschluckt
;; damit Basispunkt/Auswahlsatz der festen Antwortfolge, meldet "Eintrag
;; kann nicht erkannt werden" und der Befehl bleibt offen (Haenger).
(setq vf-nummer (vf-next-number))
(setq ent (vf-block-erstellen "standard" seite vf-nummer 0 0 hoehe-bis
deltaH deltaL L_VF gf1 gf2 richtung best-winkel
startpunkt lastEnt hz "0" "Schoenenberger Geruest"))
(if (or (null ent) (/= (type ent) 'ENAME))
@@ -327,7 +334,7 @@
;; > 0) - dieselbe Absicherung wie in ssg-ils-block-laden-dim (Zeilen 418f.) und
;; omni:insert-dxf (Zeile 980): nach dem INSERT verbleibende Prompts mit Leer-
;; Antworten (Enter) abfangen, bis der Befehl sauber beendet ist.
(defun mubea:build-separator-one (tid blockname pt rot / eff)
(defun mubea:build-separator-one (tid blockname pt rot / eff n)
(princ (strcat "\n [SEP] " tid " '" (if blockname blockname "?")
"' -> (" (rtos (car pt) 2 0) "," (rtos (cadr pt) 2 0) "," (rtos (caddr pt) 2 0)
") R=" (rtos rot 2 0)))
@@ -342,7 +349,20 @@
(if eff
(progn
(command "_.INSERT" eff pt "" "" rot)
(while (> (getvar "CMDACTIVE") 0) (command ""))
;; Verbleibende Prompts mit Enter abfangen - aber GEZAEHLT. Ein Prompt, der
;; eine Leer-Antwort ablehnt ("Eintrag kann nicht erkannt werden. Bitte
;; versuchen Sie es erneut."), haelt CMDACTIVE dauerhaft > 0: eine
;; ungebremste (while (> CMDACTIVE 0) (command "")) Schleife laeuft dort
;; endlos und BricsCAD haengt. Danach hart abbrechen und melden.
(setq n 0)
(while (and (> (getvar "CMDACTIVE") 0) (< n 5))
(command "")
(setq n (1+ n)))
(if (> (getvar "CMDACTIVE") 0)
(progn
(command)
(princ (strcat "\n WARNUNG: INSERT von '" eff
"' nicht sauber beendet - abgebrochen."))))
(mubea:ent-json tid "separator" (entlast)))
(progn
;; Kein Block gefunden -> sichtbaren Platzhalter zeichnen