Meldung der unkorrekten Zuordnungen von Separatoren
This commit is contained in:
+57
-24
@@ -18,9 +18,17 @@
|
||||
;;; ein Separator_SP/S-LP-Symbol.
|
||||
;;;
|
||||
;;; Zuordnung eines Sensors zu einem Carrier (Z wird ignoriert):
|
||||
;;; 0. Traegt der Sensor bereits ein ZUORDNUNG-Attribut, wird das
|
||||
;;; respektiert (nicht ueberschrieben) - er zaehlt mit, wenn die
|
||||
;;; dort stehende ID zu einem bekannten Carrier passt.
|
||||
;;; 0. Die Zuordnung wird bei jedem Lauf rein GEOMETRISCH neu
|
||||
;;; bestimmt (Schritte 1-4). Ein bereits gesetztes ZUORDNUNG-
|
||||
;;; Attribut wird NICHT mehr blind vertraut: stimmt es mit dem
|
||||
;;; geometrischen Ergebnis ueberein, bleibt es unveraendert;
|
||||
;;; weicht es ab (eingefrorene Fehl-Zuordnung, nachtraeglich
|
||||
;;; verschobener Sensor oder ID eines nicht mehr existierenden
|
||||
;;; Carriers), wird es ueberschrieben und die Korrektur in
|
||||
;;; *cs-korrekturen* vermerkt (Konsolen-Report, siehe
|
||||
;;; sens-korrektur-*). Frueher blieb eine einmal geschriebene
|
||||
;;; falsche ZUORDNUNG dauerhaft "kleben" und wurde weiter
|
||||
;;; mitgezaehlt - das ist behoben.
|
||||
;;; 1. Scanner: der Einfuegepunkt (X/Y) muss in der Bounding-Box
|
||||
;;; des Carriers liegen. Die 3D-Geometrie des Scanners kann
|
||||
;;; weit vom Einfuegepunkt entfernt sein, daher zaehlt hier der
|
||||
@@ -329,27 +337,21 @@
|
||||
)
|
||||
)
|
||||
|
||||
;;; --- Carrier-Record mit gegebener ID aus carriers heraussuchen ---
|
||||
(defun cs-find-carrier-by-id (carriers id / found rec)
|
||||
(setq found nil)
|
||||
(foreach rec carriers
|
||||
(if (and (not found) (= (nth 9 rec) id)) (setq found rec))
|
||||
)
|
||||
found
|
||||
)
|
||||
|
||||
;;; ------------------------------------------------------------
|
||||
;;; Ordnet einen Sensor-Punkt (Scanner oder Separator) einem Carrier
|
||||
;;; zu (Reihenfolge siehe Datei-Kopfkommentar Schritte 0/1-3/4).
|
||||
;;; Ordnet einen Sensor-Punkt (Scanner oder Separator) rein
|
||||
;;; GEOMETRISCH einem Carrier zu (Reihenfolge siehe Datei-Kopf-
|
||||
;;; kommentar Schritte 1-3 = BBox, Schritt 4 = naechster Carrier).
|
||||
;;; Ein bereits am Sensor stehendes ZUORDNUNG-Attribut geht hier
|
||||
;;; bewusst NICHT mehr ein - der Vergleich Alt/Neu und das
|
||||
;;; Ueberschreiben abweichender Werte passiert in cs-zuordnung-lauf
|
||||
;;; (Schritt 0 im Kopfkommentar). Dadurch heilt eine einmal falsch
|
||||
;;; gesetzte oder verwaiste ZUORDNUNG bei jedem Lauf selbst aus.
|
||||
;;; Rueckgabe: (modus rec best-d second-rec second-d)
|
||||
;;; modus = 'manual | 'bbox | 'distance | 'none (keine Carrier vorhanden)
|
||||
;;; modus = 'bbox | 'distance | 'none (keine Carrier vorhanden)
|
||||
;;; best-d/second-rec/second-d sind nur bei modus='distance gesetzt.
|
||||
;;; ------------------------------------------------------------
|
||||
(defun cs-resolve-sensor (sent spt carriers grid / existing rec nearest)
|
||||
(setq existing (cs-get-att-str sent *zuordnung-tag*))
|
||||
(defun cs-resolve-sensor (spt carriers grid / rec nearest)
|
||||
(cond
|
||||
((and existing (/= existing ""))
|
||||
(list 'manual (cs-find-carrier-by-id carriers existing) nil nil nil))
|
||||
((setq rec (cs-assign spt grid))
|
||||
(list 'bbox rec nil nil nil))
|
||||
((null carriers)
|
||||
@@ -587,12 +589,16 @@
|
||||
;;; *cs-scanner-warnung-by-handle* - Assoc-Liste (handle . warnungstext)
|
||||
;;; fuer strittige Scanner-Zuordnungen,
|
||||
;;; von csv:block-to-json ausgelesen.
|
||||
;;; *cs-korrekturen* - Liste (typ-wort sensor-id alt-id
|
||||
;;; neu-id) je Sensor, dessen gespeicherte
|
||||
;;; ZUORDNUNG nicht zur Geometrie passte
|
||||
;;; und ueberschrieben wurde (Report).
|
||||
;;; ============================================================
|
||||
(defun cs-zuordnung-lauf (label verbose /
|
||||
mss ss i ent ed nm bb cx cy lbl carrier-id
|
||||
carriers grid scanlist seplist sk pt
|
||||
scanCounts sepCounts n-scan-unassigned n-sep-unassigned
|
||||
n-strittig n-zuordnung-fehlt
|
||||
n-strittig n-zuordnung-fehlt alt
|
||||
s sent spt res mode rec best-d second-rec second-d
|
||||
scanner-id contested handle
|
||||
en nm2 ns nsep newS newP okS okP eintrag)
|
||||
@@ -600,6 +606,7 @@
|
||||
n-zuordnung-fehlt 0 n-scan-unassigned 0 n-sep-unassigned 0 n-strittig 0)
|
||||
(setq *cs-scanner-ergaenzt* nil)
|
||||
(setq *cs-scanner-warnung-by-handle* nil)
|
||||
(setq *cs-korrekturen* nil)
|
||||
(setq *senstol* (cs-senstol))
|
||||
|
||||
;; Alte Markierungskreise entfernen (Idempotenz - Sensoren, die in
|
||||
@@ -656,16 +663,24 @@
|
||||
;; --- Scanner zuordnen (inkl. Distanz-Fallback + Strittig-Erkennung) ---
|
||||
(foreach s scanlist
|
||||
(setq sent (car s) spt (cadr s))
|
||||
(setq res (cs-resolve-sensor sent spt carriers grid))
|
||||
(setq res (cs-resolve-sensor spt carriers grid))
|
||||
(setq mode (nth 0 res) rec (nth 1 res)
|
||||
best-d (nth 2 res) second-rec (nth 3 res) second-d (nth 4 res))
|
||||
(cond
|
||||
((eq mode 'none)
|
||||
(setq n-scan-unassigned (1+ n-scan-unassigned))
|
||||
(cs-mark-unassigned sent))
|
||||
((null rec) nil) ;; manuell zugeordnet, ID unbekannt -> unangetastet
|
||||
((null rec) nil) ;; Sicherheitsnetz - tritt bei bbox/distance nicht auf
|
||||
(t
|
||||
(setq scanCounts (cs-bump scanCounts (car rec)))
|
||||
;; Abweichende gespeicherte ZUORDNUNG als Korrektur vermerken,
|
||||
;; bevor sie unten ueberschrieben wird (Selbstheilung eingefrorener
|
||||
;; oder verwaister Zuordnungen).
|
||||
(setq alt (cs-get-att-str sent *zuordnung-tag*))
|
||||
(if (and alt (/= alt "") (/= alt (nth 9 rec)))
|
||||
(setq *cs-korrekturen*
|
||||
(cons (list "Scanner" (cs-get-att-str sent "ID") alt (nth 9 rec))
|
||||
*cs-korrekturen*)))
|
||||
(if (member mode '(bbox distance))
|
||||
(if (not (cs-set-att sent *zuordnung-tag* (nth 9 rec)))
|
||||
(setq n-zuordnung-fehlt (1+ n-zuordnung-fehlt))))
|
||||
@@ -704,15 +719,20 @@
|
||||
;; ANZAHL_SEPARATOR-Summe auch bei Sonderfaellen stimmt). ---
|
||||
(foreach s seplist
|
||||
(setq sent (car s) spt (cadr s))
|
||||
(setq res (cs-resolve-sensor sent spt carriers grid))
|
||||
(setq res (cs-resolve-sensor spt carriers grid))
|
||||
(setq mode (nth 0 res) rec (nth 1 res))
|
||||
(cond
|
||||
((eq mode 'none)
|
||||
(setq n-sep-unassigned (1+ n-sep-unassigned))
|
||||
(cs-mark-unassigned sent))
|
||||
((null rec) nil)
|
||||
((null rec) nil) ;; Sicherheitsnetz - tritt bei bbox/distance nicht auf
|
||||
(t
|
||||
(setq sepCounts (cs-bump sepCounts (car rec)))
|
||||
(setq alt (cs-get-att-str sent *zuordnung-tag*))
|
||||
(if (and alt (/= alt "") (/= alt (nth 9 rec)))
|
||||
(setq *cs-korrekturen*
|
||||
(cons (list "Separator" (cs-get-att-str sent "ID") alt (nth 9 rec))
|
||||
*cs-korrekturen*)))
|
||||
(if (member mode '(bbox distance))
|
||||
(if (not (cs-set-att sent *zuordnung-tag* (nth 9 rec)))
|
||||
(setq n-zuordnung-fehlt (1+ n-zuordnung-fehlt))))
|
||||
@@ -765,6 +785,19 @@
|
||||
(if (> n-strittig 0)
|
||||
(princ (ssg-textf "sens-strittig-summary" (list label (itoa n-strittig)))))
|
||||
|
||||
;; --- Korrigierte (nicht zur Geometrie passende) ZUORDNUNG melden ---
|
||||
(if *cs-korrekturen*
|
||||
(progn
|
||||
(setq *cs-korrekturen* (reverse *cs-korrekturen*))
|
||||
(princ (ssg-textf "sens-korrektur-header"
|
||||
(list label (itoa (length *cs-korrekturen*)))))
|
||||
(foreach eintrag *cs-korrekturen*
|
||||
(princ (ssg-textf "sens-korrektur-zeile"
|
||||
(list (nth 0 eintrag) (nth 1 eintrag)
|
||||
(nth 2 eintrag) (nth 3 eintrag)))))
|
||||
)
|
||||
)
|
||||
|
||||
(if (> (+ n-scan-unassigned n-sep-unassigned) 0)
|
||||
(princ (ssg-textf "sens-unassigned-marked"
|
||||
(list label (itoa (+ n-scan-unassigned n-sep-unassigned)) *mark-layer*))))
|
||||
|
||||
Reference in New Issue
Block a user