export: Hilfskopien nach dem Export loeschen, IDs stabil ueber reservierte IDs
AS/ES-Marker werden wie alle Hilfskopien geloescht (ausser csv_leave_proxies). IDs von AS/ES, Separator-Kopien und Einheiten bleiben ueber reservierte IDs (XDATA SSG_ID_RES) am VF_n/GF_n-Wrapper stabil: AS|n/ES|n, K|i, U|n. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5a13595289
commit
96ca43eff5
+41
-17
@@ -55,7 +55,7 @@ Bounding-Boxen braucht).
|
||||
`(proxy-ename wrapper-ename typ (x y z))`.
|
||||
1b. **`csv:asmark-aktualisieren`** — die AS-/ES-Enden derselben Kette
|
||||
(`AS_Element*`/`ES_Element*`, Muster `pattern_schleuselement`) bekommen
|
||||
KEINE temporaere Kopie, sondern einen DAUERHAFTEN Marker — siehe eigener
|
||||
KEINE Kopie des Elements, sondern einen eigenen (ebenfalls temporaeren) Marker — siehe eigener
|
||||
Abschnitt "Der AS/ES-Marker" unten. Beide Wege teilen sich die
|
||||
Platzierungsrechnung (`csv:nested-welt-records` liefert die Weltlage jedes
|
||||
verpackten Fundes, `csv:block-einfuegen-welt` setzt ein Objekt dorthin).
|
||||
@@ -140,6 +140,26 @@ AS/ES-Marker, Einheiten-Proxies) werden vor `ssg-id-check-all` entlang der
|
||||
Kette von AS nach ES aufsteigend vergeben (`csv:ketten-verarbeiten`) - die
|
||||
CSV ist nach TeileId sortiert, die Zeilen stehen damit in Kettenfolge.
|
||||
|
||||
**Stabile IDs ueber Exportlaeufe.** Alle diese Objekte sind temporaer und
|
||||
werden nach dem Export geloescht (ausser mit `csv_leave_proxies`). Ihre ID
|
||||
bleibt trotzdem gleich: nach `ssg-id-check-all` schreibt
|
||||
`csv:res-ids-schreiben` sie als **reservierte IDs** an den VF_n/GF_n-Wrapper
|
||||
(XDATA `SSG_ID_RES`, Helfer `ssg-id-res-*` in `Lisp/ssg_id.lsp`), der naechste
|
||||
Export gibt sie dem neuen Objekt an derselben Stelle zurueck. Schluessel:
|
||||
|
||||
| Schluessel | Objekt |
|
||||
|---|---|
|
||||
| `AS\|n` / `ES\|n` | AS-/ES-Marker, n = sepliste-`lfdnr` |
|
||||
| `K\|i` | Separator-/Element-Kopie des i-ten Bausteins der geordneten Kette (0-basiert, `csv:kette-ordnen`) |
|
||||
| `U\|n` | n-te Foerder-/Gefaelleeinheit des Wrappers (`group_vf_gf`) |
|
||||
|
||||
`ssg-id-max-in-ss` zaehlt die reservierten IDs mit, damit sie in der
|
||||
Zwischenzeit an keinen anderen Block vergeben werden. Nur Objekte OHNE
|
||||
reservierte ID (erster Export einer Kette, Modus neu gewaehlt) bekommen eine
|
||||
neue Nummer - oberhalb aller vorhandenen, also nicht mehr zwingend in
|
||||
Kettenfolge neben den uebrigen Zeilen der Kette. Ein Edit baut einen neuen
|
||||
Wrapper ohne diese XDATA; dessen Kettenobjekte werden dann neu nummeriert.
|
||||
|
||||
Umgesetzt ueber `csv:baustein-merken`: beim Erzeugen des Stellvertreters
|
||||
werden K-Punkte (`csv:ks-welt-punkte`) und bbox (kurzlebige Kopie des
|
||||
Bausteins, `csv:baustein-bbox`) unter seinem Handle gemerkt
|
||||
@@ -211,7 +231,7 @@ realen Bauteils, das ihn in der Zeichnung vertritt:
|
||||
```
|
||||
|
||||
Das ist dieselbe ID, die die zugehoerige temporaere Kopie (SEP) bzw. der
|
||||
dauerhafte `ZZ_ASES_MARKER` (AS/ES) in ihrer eigenen JSON-Zeile traegt — die
|
||||
temporaere `ZZ_ASES_MARKER` (AS/ES) in ihrer eigenen JSON-Zeile traegt — die
|
||||
Verbindung "Kettenglied <-> reales Teil" steht damit schon im Export und muss
|
||||
in Python nicht mehr ueber Koordinaten-Naehe geraten werden. `map_sepliste_
|
||||
kette_items` (siehe Abschnitt 5 unten) loest genau darueber jeden sepliste-
|
||||
@@ -226,7 +246,9 @@ Die beiden Kettenenden stecken als `AS_Element_*`/`ES_Element_*` verpackt in
|
||||
der Wrapper-Blockdefinition: in der Zeichnung sind sie weder anklickbar noch
|
||||
einzeln erkennbar, und `(ssget "X" ...)` findet sie nicht. `csv:asmark-*`
|
||||
(`Lisp/export.lsp`) setzt darum an jedes Ende ein kleines Rechteck, das nach
|
||||
dem Export in der Zeichnung STEHEN BLEIBT:
|
||||
nach dem Export wie alle Hilfskopien wieder GELOESCHT wird (nur der
|
||||
Debug-Schalter `csv_leave_proxies` bzw. der Haken im Dialog
|
||||
`CSV_EXPORT_KONFIG` laesst ihn zur Ansicht stehen):
|
||||
|
||||
- **Sichtbarmachung** — Kantenlaenge aus `cfg/export.cfg` `[Marker]`
|
||||
`ases_groesse_mm` (Default 200 mm), mittig auf dem Einfuegepunkt des
|
||||
@@ -238,20 +260,22 @@ dem Export in der Zeichnung STEHEN BLEIBT:
|
||||
- **ID-Traeger** — die Attribute (alle unsichtbar) sind
|
||||
`ID`, `ZUORDNUNG` (Wrapper-ID), `TYP` (`AS`/`ES`), `LFDNR` (sepliste-Eintrag),
|
||||
`ELEMENT` (Blockname des echten Elements, haelt die Variante 30/90,
|
||||
links/rechts, 2D/3D fest) und `ARTINR`. `ssg-id-check-all` fuellt die `ID`,
|
||||
und weil der Marker liegen bleibt, **behaelt ein AS/ES seine TeileId ueber
|
||||
Exportlaeufe hinweg** — im Unterschied zu den Separator-Kopien, die jeder
|
||||
Lauf neu erzeugt und neu nummeriert.
|
||||
links/rechts, 2D/3D fest) und `ARTINR`. `ssg-id-check-all` fuellt die `ID`.
|
||||
Danach legt `csv:res-ids-schreiben` die ID als **reservierte ID** am
|
||||
VF_n/GF_n-Wrapper ab (Eintrag `AS|1=0032`, siehe "Stabile IDs ueber
|
||||
Exportlaeufe" oben). Der naechste Export gibt sie dem neu gesetzten Marker
|
||||
zurueck, **ein AS/ES behaelt seine TeileId also ueber Exportlaeufe
|
||||
hinweg**, obwohl der Marker dazwischen nicht existiert.
|
||||
|
||||
Der Marker ist abgeleitete Geometrie: jeder Export baut ihn neu auf (die Lage
|
||||
folgt damit automatisch einer umgebauten Kette) und uebernimmt vom bisherigen
|
||||
Marker nur dessen `ID`. Wiedergefunden wird er ueber (`ZUORDNUNG`, `TYP`,
|
||||
`LFDNR`) — bewusst nicht ueber die Position, damit eine verschobene Kette ihre
|
||||
TeileIds behaelt. Was am Ende keinem Kettenende mehr entspricht (Kette
|
||||
geloescht, Eintrag entfallen), wird geloescht; Karteileichen entstehen nicht.
|
||||
Ein frisch gebauter Wrapper hat beim Setzen der Marker noch keine ID — seine
|
||||
Marker bekommen die `ZUORDNUNG` nach der ID-Vergabe nachgetragen und sind ab
|
||||
dem naechsten Export wiederfindbar.
|
||||
folgt damit automatisch einer umgebauten Kette) und uebernimmt die ID ueber
|
||||
den Schluessel (`TYP`, `LFDNR`) aus der reservierten ID des Wrappers — bewusst
|
||||
nicht ueber die Position, damit eine verschobene Kette ihre TeileIds behaelt.
|
||||
Steht noch ein Marker in der Zeichnung (aeltere Zeichnung, in der die Marker
|
||||
frueher dauerhaft blieben, oder ein Lauf mit `csv_leave_proxies`), wird seine
|
||||
ID ueber (`ZUORDNUNG`, `TYP`, `LFDNR`) uebernommen, falls der Wrapper noch
|
||||
keine reservierte ID fuehrt; der alte Marker wird dabei geloescht, ebenso
|
||||
jeder, der keinem Kettenende mehr entspricht.
|
||||
|
||||
Im Export ist der Marker eine eigene Zeile (`pattern_ases_marker` in
|
||||
`cfg/export.cfg`) und liefert die `id` des AS-/ES-Eintrags in der `sepliste`.
|
||||
@@ -411,7 +435,7 @@ Zu beachten:
|
||||
in Baureihenfolge, unabhaengig vom Kreisel-Umlauf.
|
||||
- Die AS/ES-Enden (`0021`=AS, `0024`=ES) sind eigene Zeilen (Zeilentyp
|
||||
"ILS Ausschleuselement"/"ILS Einschleuselement"), direkt aus dem
|
||||
dauerhaften `ZZ_ASES_MARKER` klassifiziert — in diesem gekuerzten Beispiel
|
||||
`ZZ_ASES_MARKER` klassifiziert — in diesem gekuerzten Beispiel
|
||||
nicht einzeln aufgefuehrt, aber ihre TeileIds tauchen in `TrackIds` beider
|
||||
Seiten auf.
|
||||
- Die Separatoren 3 und 5 (`0012`/`0022`) unterscheiden sich nur durch ihre
|
||||
@@ -499,7 +523,7 @@ Geometrie bereits klassifizierter Items abgeleitet:
|
||||
AS/ES-Kettenenden werden NICHT mehr synthetisiert (fruehere Version:
|
||||
`compute_strecke_kreisel_schleus`/`build_strecke_schleus_items` suchten den
|
||||
anschliessenden Kreisel per Kollisionstest und erfanden dabei eine eigene,
|
||||
bei jedem Export neue TeileId). Der dauerhafte `ZZ_ASES_MARKER`
|
||||
bei jedem Export neue TeileId). Der `ZZ_ASES_MARKER`
|
||||
(Lisp/export.lsp, siehe oben) ist ein echter Block mit echter Geometrie -
|
||||
`"ILS Ausschleuselement"`/`"ILS Einschleuselement"` sind darum eine ganz
|
||||
normale Zeile aus Schritt 1 (Klassifikation), TeileId/Position/Boundingbox
|
||||
|
||||
Reference in New Issue
Block a user