From df96071f7930075db54c515bc6b56d39d570da6f Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Thu, 30 Jul 2026 15:46:00 +0200 Subject: [PATCH] [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. --- Lisp/OmniModulInsert.lsp | 17 ++++++++++++++--- tests/testdata/linienzug_tests.json | 5 +++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Lisp/OmniModulInsert.lsp b/Lisp/OmniModulInsert.lsp index 5fa6d62..b1fc57b 100644 --- a/Lisp/OmniModulInsert.lsp +++ b/Lisp/OmniModulInsert.lsp @@ -578,11 +578,22 @@ (setq e (entnext lastEnt)) (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))) - ;; Falls Name schon existiert, Suffix anhaengen (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 ;; umfangen (z.B. den Text bei pt) und die Hoehe verfaelschen. diff --git a/tests/testdata/linienzug_tests.json b/tests/testdata/linienzug_tests.json index 00b16fd..9257c43 100644 --- a/tests/testdata/linienzug_tests.json +++ b/tests/testdata/linienzug_tests.json @@ -159,6 +159,11 @@ "wert": "3", "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", "dL": 6215,