[FIX] Blockname-Kollision in omni:make-gerade + fehlende Linienzug-Testantwort

omni:make-gerade: itoa(fix(CDATE*1e6)) als Kollisions-Suffix sprengte den
32-Bit-INT-Bereich und liess den Lisp-Fehler mitten im BLOCK/INSERT-Kommando
laufen (BricsCAD blieb dann auf eine Eingabe wartend haengen) - trat bei der
Omniflo-Streckenzug-Testschleife auf, da ssg-timestamp nur Sekundenaufloesung
hat und mehrere Geraden pro Sekunde entstehen. Ersetzt durch einen laufenden
Zaehler.

linienzug_tests.json: die in 3e23003 neu eingefuehrte "ES-Element setzen?"-
Frage fehlte im Testskript und hat die restliche Eingabe-Queue um einen
Eintrag verschoben.
This commit is contained in:
2026-07-30 15:46:00 +02:00
parent 7f5a8036c0
commit df96071f79
2 changed files with 19 additions and 3 deletions
+14 -3
View File
@@ -578,11 +578,22 @@
(setq e (entnext lastEnt)) (setq e (entnext lastEnt))
(while e (ssadd e ss) (setq e (entnext e))) (while e (ssadd e ss) (setq e (entnext e)))
;; Block mit eindeutigem Zeitstempel-Namen erzeugen ;; Block mit eindeutigem Zeitstempel-Namen erzeugen. ssg-timestamp hat nur
;; Sekundenaufloesung - bei mehreren Aufrufen innerhalb derselben Sekunde
;; (z.B. Streckenzug-Schleife) kollidiert der Name; dann einen laufenden
;; Zaehler anhaengen, bis der Name frei ist. (Fruehere Variante haengte
;; (itoa (fix (* CDATE 1000000))) an - das sprengt den 32-Bit-INT-Bereich
;; von itoa und brach mit einem Lisp-Fehler ab.)
(setq bname (strcat blockname "_" (ssg-timestamp))) (setq bname (strcat blockname "_" (ssg-timestamp)))
;; Falls Name schon existiert, Suffix anhaengen
(if (tblsearch "BLOCK" bname) (if (tblsearch "BLOCK" bname)
(setq bname (strcat bname "_" (itoa (fix (* (getvar "CDATE") 1000000))))) (progn
(if (null *omni-gerade-block-counter*) (setq *omni-gerade-block-counter* 0))
(while (tblsearch "BLOCK" bname)
(setq *omni-gerade-block-counter* (1+ *omni-gerade-block-counter*))
(setq bname (strcat blockname "_" (ssg-timestamp) "_"
(itoa *omni-gerade-block-counter*)))
)
)
) )
;; Objektfang aus: sonst kann _.INSERT den Einfuegepunkt pt auf ein Objekt ;; Objektfang aus: sonst kann _.INSERT den Einfuegepunkt pt auf ein Objekt
;; umfangen (z.B. den Text bei pt) und die Hoehe verfaelschen. ;; umfangen (z.B. den Text bei pt) und die Hoehe verfaelschen.
+5
View File
@@ -159,6 +159,11 @@
"wert": "3", "wert": "3",
"kommentar": "getstring Ist Endpunkt? (Option 3 - Kettenende)" "kommentar": "getstring Ist Endpunkt? (Option 3 - Kettenende)"
}, },
{
"typ": "string",
"wert": "1",
"kommentar": "getstring ES-Element setzen? (Ja) - neue Frage aus 3e23003, fehlte bisher in den Testdaten"
},
{ {
"typ": "point_rel", "typ": "point_rel",
"dL": 6215, "dL": 6215,