VF-Linienzug Modus 3 editierbar: Segment-Essenz statt Objekt-Handles
Modus 3 (Vorwaerts-Nachbau) hat jetzt dieselbe XDATA-Editierbarkeit + Doppelklick-Neubau wie Modus 1/2. Statt der Pfad-Objekt-Handles wird die abgeleitete Segment-ESSENZ journalisiert (neuer Journal-Typ SEGS): der VF_n- Block ist damit selbst-enthalten, der Neubau unabhaengig davon, ob die urspruenglichen LINE/ARC noch existieren - robuster als der OBJS-Weg von Modus 2. Journal-Kern (vf_linienzug.lsp): - Neuer Typ SEGS: Segmentliste (typ hz laenge bwinkel bseite spx spy epx epy) serialisiert als ";"-getrennte Segmente, Felder per "|". Eingebunden in vfl-entry->string / vfl-string->entry / vfl-entry->json. - vfl-in-segmente: Live (ssget -> gf-sortiere-objekte -> gf-analysiere-kette -> Eck-Vorpruefung -> 9-Feld-Essenz) ODER Replay (Essenz direkt aus SEGS-Journal). Ersetzt vfl-in-selection im Modus-3-Ablauf. - vfl-kette->segmente9 fuehrt Bau-Segmente + Start/Endpunkte zusammen; Soll-Ende kommt jetzt aus der Essenz statt aus den Original-Entities. Modus-3-Umbau: - Abbruch-Wickler + vfl-journal-xdata-schreiben mit Marker "linienzug3" (analog Modus 2). Kopf-Kommentar/Fehler-Handler-Variablen an Modus 2 angeglichen. - Kein Live-Segment-Highlight mehr (Essenz-Bau reicht keine Entity mehr durch) - bewusst, im Code dokumentiert. Doppelklick/Batch: - vfl-edit-ent2 zu vfl-edit-ent-voll parametrisiert; vfl-edit-ent3 ruft vf-linienzug-modus3. vfl-edit-ent / vfl-konvertiere-ent / vfl-journal-xdata- lesen dispatchen "linienzug3". Tests: - 8 file-freie SEGS-Roundtrip-Unit-Tests (tests/test_unit.lsp, tu-tests-vfl-segs); 234/234 LISP-Unit-Tests gruen in BricsCAD. - vfl-in-segmente im statischen Headless-Waechter registriert. - Verifiziert an einer echten linienzug3-Kette (results/test.dwg): SEGS-Journal korrekt geschrieben, Doppelklick-Neubau geometrisch deckungsgleich zum Original. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+51
-1
@@ -855,6 +855,56 @@
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: vf_linienzug.lsp - SEGS-Journal-Serialisierung (Modus 3)
|
||||
;; ------------------------------------------------------------
|
||||
;; Roundtrip der Segment-Essenz: die Zahlenliste, die Modus 3 aus den Pfad-
|
||||
;; Objekten ableitet, muss verlustfrei durch String<->Liste und durch die
|
||||
;; Journal-Eintrags-Serialisierung laufen - das ist die Grundlage dafuer, dass
|
||||
;; ein Modus-3-Block per Doppelklick 1:1 aus dem XDATA-Journal nachgebaut wird.
|
||||
(defun tu-tests-vfl-segs ( / _seg _segs _s _e)
|
||||
(princ "\n[vf_linienzug/SEGS]")
|
||||
(if (null (atoms-family 1 '("VFL-SEGS->STRING")))
|
||||
(tu-record nil "vfl-segs/modul" "vf_linienzug.lsp nicht geladen (VFL-SEGS->STRING fehlt)")
|
||||
(progn
|
||||
;; Einzelsegment (Bogen, alle Felder gesetzt) Roundtrip
|
||||
(setq _seg '("Bogen" 102.5 707.106781 90 "rechts" 1000.0 2000.0 1500.5 2500.25))
|
||||
(tu-eqf "vfl-seg/roundtrip-bogen"
|
||||
_seg (vfl-string->seg (vfl-seg->string _seg)))
|
||||
|
||||
;; Linie (bwinkel 0, bseite default) Roundtrip
|
||||
(setq _seg '("Linie" 30.0 4200.0 0 "links" 0.0 0.0 3637.31 2100.0))
|
||||
(tu-eqf "vfl-seg/roundtrip-linie"
|
||||
_seg (vfl-string->seg (vfl-seg->string _seg)))
|
||||
|
||||
;; Ganze Segmentliste (Linie + Bogen + Linie) Roundtrip
|
||||
(setq _segs (list '("Linie" 0.0 3000.0 0 "links" 0.0 0.0 3000.0 0.0)
|
||||
'("Bogen" 0.0 707.106781 90 "rechts" 3000.0 0.0 3500.0 -500.0)
|
||||
'("Linie" 270.0 2500.0 0 "links" 3500.0 -500.0 3500.0 -3000.0)))
|
||||
(tu-eqf "vfl-segs/roundtrip-liste"
|
||||
_segs (vfl-string->segs (vfl-segs->string _segs)))
|
||||
|
||||
;; Leere Liste -> "" -> leere Liste
|
||||
(tu-eq "vfl-segs/leer-string" "" (vfl-segs->string '()))
|
||||
(tu-nil "vfl-segs/leer-parse" (vfl-string->segs ""))
|
||||
|
||||
;; Einbettung als Journal-Eintrag: (SEGS . liste) durch
|
||||
;; vfl-entry->string / vfl-string->entry
|
||||
(setq _e (cons "SEGS" _segs))
|
||||
(setq _s (vfl-entry->string _e))
|
||||
(tu-true "vfl-segs/entry-praefix" (= "SEGS:" (substr _s 1 5)))
|
||||
(tu-eqf "vfl-segs/entry-roundtrip"
|
||||
_e (vfl-string->entry _s))
|
||||
|
||||
;; Delimiter-Sicherheit: die serialisierte Form enthaelt genau die
|
||||
;; erwarteten Trenner und KEIN Newline (sonst zerrisse der Record-Trenner)
|
||||
(tu-nil "vfl-segs/kein-newline"
|
||||
(vl-string-search "\n" (vfl-segs->string _segs)))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
;; ------------------------------------------------------------
|
||||
;; BEFEHL: TEST_UNIT
|
||||
;; ------------------------------------------------------------
|
||||
@@ -877,7 +927,7 @@
|
||||
(foreach fn '("tu-tests-core" "tu-tests-lang" "tu-tests-id" "tu-tests-vfcore"
|
||||
"tu-tests-export" "tu-tests-gf" "tu-tests-omni" "tu-tests-kreisel"
|
||||
"tu-tests-sepliste" "tu-tests-json" "tu-tests-geruest"
|
||||
"tu-tests-sepscan")
|
||||
"tu-tests-sepscan" "tu-tests-vfl-segs")
|
||||
(tu-run-block fn))
|
||||
|
||||
(princ "\n\n----------------------------------------------------------------")
|
||||
|
||||
@@ -173,6 +173,7 @@ EINGABE_ERLAUBT = {
|
||||
"vfl-in-int": {"getint": 1},
|
||||
"vfl-in-real": {"getreal": 1},
|
||||
"vfl-in-selection": {"ssget": 1},
|
||||
"vfl-in-segmente": {"ssget": 1}, # Modus-3-Wrapper: Live-Auswahl -> Segment-Essenz (SEGS), Replay aus Journal
|
||||
"vfl-winkel-live": {"getint": 1}, # livefn fuer vfl-in-value
|
||||
# --- Wizard-Schicht (DCL); bei ssg-gui-aus greift sie nicht ---
|
||||
"vflw-zahl": {"getreal": 1}, # Fallback ohne Dialog
|
||||
|
||||
Reference in New Issue
Block a user