sepliste: Bauteil-IDs eintragen, AS/ES ueber dauerhaften Marker sichtbar machen

Stufe 1 (LISP-Export-Pfad): export_raw.json enthaelt jetzt fuer jeden
sepliste-Eintrag (AS/SEP/ES) einer VF_n/GF_n-Kette die ID des realen
Bauteils, das ihn vertritt.

- csv:sep-proxies-erzeugen (Separatoren) und die neuen AS/ES-Marker teilen
  sich csv:nested-welt-records/csv:block-einfuegen-welt zur Platzierung.
- csv:sepliste-paare ordnet sepliste-Eintraege ihrem Bauteil exklusiv nach
  Abstand zu (kuerzester zuerst, dann verbraucht) statt "jeder Eintrag
  nimmt sich das naechste" - ein einzelner fehlerhafter Koordinatenwert
  (bekannter Bug: gespiegeltes x bei lfdnr=2) verschiebt dadurch keine
  andere Zuordnung mehr.
- Neu: ZZ_ASES_MARKER - ein kleines Rechteck an jedem AS/ES-Kettenende,
  das nach dem Export STEHEN BLEIBT (anders als die temporaeren
  Separator-Kopien). Macht das sonst unsichtbare, in der Wrapper-
  Blockdefinition verpackte Kettenende in BricsCAD sichtbar/anklickbar
  und traegt seine ID unsichtbar am Attribut ID - dadurch behaelt ein
  AS/ES seine TeileId ueber Exportlaeufe hinweg. Wird bei jedem Export
  neu aufgebaut (Lage folgt der Kette), Wiederfund ueber ZUORDNUNG+TYP+
  LFDNR, verwaiste Marker werden entfernt.

In BricsCAD verifiziert (5 HundM05-Ketten, zwei Exportlaeufe: gleiche
Marker-IDs, korrekte sepliste-"id"-Felder). Dabei einen realen Bug
gefunden und behoben: die Blockdefinition des Markers uebernahm ueber
einen ungefilterten entnext-Walk versehentlich auch die Attribute des
zuletzt eingefuegten Blocks (VF_5 verlor dadurch alle Attribute inkl.
ID) - jetzt auf LWPOLYLINE/ATTDEF gefiltert.

9 neue zeichnungsfreie Unit-Tests (csv:sepliste-paare/*, csv:asmark-
finden/*, csv:proxy-typ/*), 4 neue de/en-Textschluessel (Paritaet
geprueft). bin\run_tests.bat --lisp: 257/257 bestanden.

Noch nicht enthalten (Stufe 2, Python): map_separator_kette_items nutzt
das neue "id"-Feld noch nicht, build_strecke_schleus_items synthetisiert
AS/ES-Zeilen weiterhin selbst statt die exportierten zu lesen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-22 13:05:56 +02:00
parent 9671fe4e04
commit 618ff3d86c
15 changed files with 1205 additions and 216 deletions
+13
View File
@@ -288,6 +288,19 @@
(list (+ (car pt) (+ (* dx chz cv) (* dz chz sv)))
(+ (cadr pt) (+ (* dx shz cv) (* dz shz sv)))
(+ (caddr pt) (+ (* (- sv) dx) (* cv dz)))))
;; Diagnose (Schalter "vf-sepliste", siehe ssg_ks_insert.lsp): DIESE Funktion
;; setzt die Separatoren des Linienzugs, und da sie den Block ohne
;; KS_EIN-Korrektur direkt nach pt schiebt, ist pt exakt der Gruppencode 10,
;; den ssg-sepliste-sammeln spaeter einsammelt. Ein gespiegelter
;; Sepliste-Eintrag muss also schon hier mit gespiegeltem pt ankommen.
(if (car (atoms-family 1 '("SSG-SEPLISTE-DBG")))
(ssg-sepliste-dbg
(strcat "gf-insert-hz-with-ks " blockname
" hz=" (rtos (float hz-grad) 2 2)
" vert=" (rtos (float vert-grad) 2 2)
" dx=" (rtos (float dx) 2 2) " dz=" (rtos (float dz) 2 2)
" pt(=Gruppencode 10)=" (ssg-sepliste-dbg-pt pt)
" endpunkt=" (ssg-sepliste-dbg-pt endpunkt))))
(princ (ssg-textf "gf-status-hzks"
(list blockname (rtos hz-grad 2 0) grad-zeichen
(rtos vert-grad 2 1) grad-zeichen (rtos (caddr endpunkt) 2 1))))