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:
co-authored by
Claude Sonnet 5
parent
9671fe4e04
commit
618ff3d86c
@@ -301,6 +301,15 @@
|
||||
;; ------------------------------------------------------------
|
||||
;; TESTS: export.lsp - CSV/KOS-Kodierung
|
||||
;; ------------------------------------------------------------
|
||||
;; Hilfsfunktion der csv:sepliste-paare-Tests: nur (lfdnr index) vergleichen,
|
||||
;; nicht den Fliesskomma-Abstand. Bewusst auf Top-Level (nicht im Testblock):
|
||||
;; per defun IN einem Testblock definierte Funktionen sind in BricsCAD im
|
||||
;; laufenden Durchlauf nicht zuverlaessig gebunden (siehe Ladearchitektur oben).
|
||||
(defun tu-paare (e p)
|
||||
(mapcar (function (lambda (x) (list (nth 0 x) (nth 1 x))))
|
||||
(csv:sepliste-paare e p))
|
||||
)
|
||||
|
||||
(defun tu-tests-export ()
|
||||
(princ "\n[export]")
|
||||
|
||||
@@ -324,6 +333,62 @@
|
||||
|
||||
;; json-escape: Anfuehrungszeichen maskieren
|
||||
(tu-eq "csv:json-escape/quote" "a\\\"b" (csv:json-escape "a\"b"))
|
||||
|
||||
;; --- csv:sepliste-paare: sepliste-Eintrag <-> ausgepackte Kopie ---------
|
||||
;; Reine Rechenfunktion (Eintraege + Kopien rein, (lfdnr index abstand)
|
||||
;; raus) - hier ohne Zeichnung testbar. Im Export liefert
|
||||
;; csv:sepliste-ids-setzen die Kopien in Erzeugungsreihenfolge; nur der
|
||||
;; Index zaehlt, darum vergleichen die Tests (lfdnr index) statt der
|
||||
;; Fliesskomma-Abstaende.
|
||||
(tu-eq "csv:sepliste-paare/leer" nil (csv:sepliste-paare nil nil))
|
||||
|
||||
;; Gerade Kette AS -> SEP -> SEP -> ES; Kopien bewusst in anderer
|
||||
;; Reihenfolge als die sepliste (die Erzeugungsreihenfolge der Kopien folgt
|
||||
;; der Blockdefinition, nicht der Bauabfolge).
|
||||
(setq _e '(("AS" 1 0.0 0.0) ("SEP" 2 1000.0 0.0) ("SEP" 3 2000.0 0.0) ("ES" 4 3000.0 0.0)))
|
||||
(setq _p '(("SEP" 2000.0 0.0) ("AS" 0.0 0.0) ("ES" 3000.0 0.0) ("SEP" 1000.0 0.0)))
|
||||
(tu-eq "csv:sepliste-paare/kette" '((1 1) (2 3) (3 0) (4 2)) (tu-paare _e _p))
|
||||
|
||||
;; EIN fehlerhafter Koordinatenwert (bekannter Fehlerfall: gespiegeltes x
|
||||
;; bei lfdnr=2) darf die uebrigen Zuordnungen nicht verschieben - die
|
||||
;; exklusive Vergabe teilt dem fehlerhaften Eintrag den Rest zu.
|
||||
(setq _e '(("SEP" 1 1000.0 0.0) ("SEP" 2 -1000.0 -5000.0) ("SEP" 3 3000.0 0.0)))
|
||||
(setq _p '(("SEP" 1000.0 0.0) ("SEP" 2000.0 0.0) ("SEP" 3000.0 0.0)))
|
||||
(tu-eq "csv:sepliste-paare/gespiegelte-koordinate" '((1 0) (2 1) (3 2)) (tu-paare _e _p))
|
||||
|
||||
;; Gleiche Abstaende duerfen kein Paar verschlucken: vl-sort wirft
|
||||
;; Elemente weg, die unter der Vergleichsfunktion gleich sind - deshalb
|
||||
;; sortiert csv:sepliste-paare nach (Abstand, lfdnr, Index).
|
||||
(setq _e '(("SEP" 1 0.0 0.0) ("SEP" 2 0.0 0.0)))
|
||||
(setq _p '(("SEP" 0.0 0.0) ("SEP" 0.0 0.0)))
|
||||
(tu-eq "csv:sepliste-paare/gleiche-abstaende" '((1 0) (2 1)) (tu-paare _e _p))
|
||||
|
||||
;; Typ trennt: eine AS-Kopie wird nie einem SEP-Eintrag zugeteilt, der
|
||||
;; SEP-Eintrag bleibt ohne Partner (und im Export ohne ID).
|
||||
(setq _e '(("AS" 1 0.0 0.0) ("SEP" 2 10.0 0.0)))
|
||||
(setq _p '(("AS" 5.0 0.0)))
|
||||
(tu-eq "csv:sepliste-paare/typ-trennt" '((1 0)) (tu-paare _e _p))
|
||||
|
||||
;; --- csv:asmark-finden: bisherigen AS/ES-Marker im Bestand wiederfinden ---
|
||||
;; Schluessel ist (Wrapper-ID, Typ, lfdnr) - alle drei muessen passen, sonst
|
||||
;; bekaeme ein Kettenende die ID eines fremden Markers. Bestandsformat:
|
||||
;; (ename zuordnung typ lfdnr id), siehe csv:asmark-sammeln.
|
||||
(setq _mk '((ME1 "0021" "AS" "1" "0031")
|
||||
(ME2 "0021" "ES" "4" "0032")
|
||||
(ME3 "0022" "AS" "1" "0033")))
|
||||
(tu-eq "csv:asmark-finden/treffer"
|
||||
'(ME2 "0021" "ES" "4" "0032") (csv:asmark-finden _mk "0021" "ES" "4"))
|
||||
(tu-eq "csv:asmark-finden/anderer-wrapper"
|
||||
'(ME3 "0022" "AS" "1" "0033") (csv:asmark-finden _mk "0022" "AS" "1"))
|
||||
(tu-nil "csv:asmark-finden/falsche-lfdnr" (csv:asmark-finden _mk "0021" "AS" "2"))
|
||||
(tu-nil "csv:asmark-finden/falscher-typ" (csv:asmark-finden _mk "0021" "SEP" "1"))
|
||||
(tu-nil "csv:asmark-finden/ohne-wrapper-id" (csv:asmark-finden _mk "" "AS" "1"))
|
||||
(tu-nil "csv:asmark-finden/leerer-bestand" (csv:asmark-finden nil "0021" "AS" "1"))
|
||||
|
||||
;; csv:proxy-typ: Typmarker aus dem Blocknamen (Grundlage der Zuordnung).
|
||||
(tu-eq "csv:proxy-typ/as" "AS" (csv:proxy-typ "AS_Element_90_links_3D"))
|
||||
(tu-eq "csv:proxy-typ/es" "ES" (csv:proxy-typ "ES_Element_30_rechts_2D"))
|
||||
(tu-eq "csv:proxy-typ/sep" "SEP" (csv:proxy-typ "Separator_SP_3D"))
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user