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:
+58
-2
@@ -69,8 +69,8 @@
|
||||
;; ZZ_ASES_MARKER: die Marker der AS-/ES-Kettenenden (siehe
|
||||
;; csv:asmark-aktualisieren, export.lsp). Sie brauchen eine ID -
|
||||
;; sie vertreten das Kettenende im Export ("sepliste"-Feld "id"
|
||||
;; und eigene JSON-Zeile) und behalten sie ueber Laeufe hinweg,
|
||||
;; weil der Marker in der Zeichnung stehen bleibt.
|
||||
;; und eigene JSON-Zeile). Der Marker selbst ist temporaer, seine
|
||||
;; ID bleibt als reservierte ID am Wrapper (ssg-id-res-*).
|
||||
(wcmatch bname "ZZ_ASES_MARKER*")
|
||||
;; ZZ_UNIT_MARKER: die Foerdereinheit-/Gefaelleeinheit-Marker
|
||||
;; (siehe csv:ketten-verarbeiten, export.lsp) - temporaere
|
||||
@@ -93,9 +93,64 @@
|
||||
)
|
||||
|
||||
|
||||
;; ============================================================
|
||||
;; Reservierte IDs (XDATA "SSG_ID_RES")
|
||||
;; ============================================================
|
||||
;; IDs von Objekten, die NICHT dauerhaft in der Zeichnung stehen, aber ueber
|
||||
;; Laeufe hinweg dieselbe ID behalten sollen - z.B. die AS-/ES-Kettenenden
|
||||
;; eines VF_n/GF_n-Wrappers: ihr Export-Stellvertreter (ZZ_ASES_MARKER) wird
|
||||
;; nach jedem Export geloescht, die ID bleibt als XDATA am Wrapper stehen
|
||||
;; (csv:asmark-*, export.lsp). Format: (("AS|1" . "0032") ("ES|4" . "0033")),
|
||||
;; Schluessel frei waehlbar, aber ohne "=".
|
||||
;;
|
||||
;; ssg-id-max-in-ss rechnet reservierte IDs mit ein: sonst saehe die
|
||||
;; Neuvergabe die ID eines gerade nicht existierenden Stellvertreters als frei
|
||||
;; an und vergaebe sie an einen anderen Block.
|
||||
|
||||
(defun ssg-id-res-app () "SSG_ID_RES")
|
||||
|
||||
;; Rein (file-/zeichnungsfrei): Paare <-> 1000er-Strings "AS|1=0032".
|
||||
(defun ssg-id-res->strings (paare)
|
||||
(mapcar (function (lambda (p) (strcat (car p) "=" (cdr p)))) paare)
|
||||
)
|
||||
(defun ssg-id-res-parse (strings / s pos out)
|
||||
(foreach s strings
|
||||
(if (setq pos (vl-string-search "=" s))
|
||||
(setq out (cons (cons (substr s 1 pos) (substr s (+ pos 2))) out))))
|
||||
(reverse out)
|
||||
)
|
||||
;; Hoechste numerische ID der Paare (0, wenn keine).
|
||||
(defun ssg-id-res-max (paare / m n)
|
||||
(setq m 0)
|
||||
(foreach p paare
|
||||
(if (> (setq n (atoi (cdr p))) m) (setq m n)))
|
||||
m
|
||||
)
|
||||
|
||||
;; Liest die reservierten IDs eines Entities. Rueckgabe: Paare oder nil.
|
||||
(defun ssg-id-res-lesen (ent / app-data)
|
||||
(setq app-data (cdr (assoc -3 (entget ent (list (ssg-id-res-app))))))
|
||||
(if app-data
|
||||
(ssg-id-res-parse (mapcar 'cdr (cdr (car app-data))))
|
||||
)
|
||||
)
|
||||
|
||||
;; Schreibt die reservierten IDs eines Entities (ersetzt den bisherigen Stand
|
||||
;; komplett). paare = nil entfernt die XDATA.
|
||||
(defun ssg-id-res-schreiben (ent paare)
|
||||
(regapp (ssg-id-res-app))
|
||||
(entmod (append (entget ent)
|
||||
(list (list -3 (cons (ssg-id-res-app)
|
||||
(mapcar (function (lambda (s) (cons 1000 s)))
|
||||
(ssg-id-res->strings paare)))))))
|
||||
ent
|
||||
)
|
||||
|
||||
|
||||
;; --- Hoechste bereits vergebene ID in einem Auswahlsatz ermitteln ---
|
||||
;; ss = Auswahlsatz (i.d.R. aus ssg-id-collect-blocks) oder nil.
|
||||
;; Rueckgabe: Integer (hoechste ID) oder 0 wenn keine gefunden.
|
||||
;; Beruecksichtigt auch die reservierten IDs (ssg-id-res-lesen) der Bloecke.
|
||||
;;
|
||||
;; Bewusst als eigene Funktion: ssg-id-check-all MUSS diesen Wert ueber den
|
||||
;; GESAMTEN Auswahlsatz kennen, BEVOR es die erste neue ID vergibt (siehe
|
||||
@@ -118,6 +173,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(setq max-id (max max-id (ssg-id-res-max (ssg-id-res-lesen ename))))
|
||||
(setq i (1+ i))
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user