debug lib für Kollisionsprüfung impl
This commit is contained in:
+29
-3
@@ -55,6 +55,7 @@ from export_planquadrat import load_planquadrat_config, resolve_origins, compute
|
||||
from export_neighbors import (
|
||||
load_neighbor_tolerance_mm,
|
||||
load_omniflo_cell_size_mm,
|
||||
load_collision_debug_target,
|
||||
compute_neighbor_ids,
|
||||
compute_neighbor_errors,
|
||||
)
|
||||
@@ -63,6 +64,7 @@ BLOCKPATTERNS = load_patterns()
|
||||
PLANQUADRAT_CFG = load_planquadrat_config()
|
||||
NEIGHBOR_TOLERANCE_MM = load_neighbor_tolerance_mm()
|
||||
NEIGHBOR_OMNIFLO_CELL_SIZE_MM = load_omniflo_cell_size_mm()
|
||||
NEIGHBOR_DEBUG_TARGET = load_collision_debug_target()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -311,7 +313,7 @@ SKIP_BLOCKS = set(BLOCKPATTERNS.get("pattern_ks_subblocks", ["K1", "K2", "K3", "
|
||||
# Bloecke verarbeiten (einfache Liste, keine Summierung)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
def process_blocks(blocks, lookup):
|
||||
def process_blocks(blocks, lookup, dbg=None):
|
||||
# x_origin_mm/y_origin_mm einmalig fuer diesen Exportlauf aufloesen (siehe
|
||||
# export_planquadrat.resolve_origins): automatisch aus den Bloecken, falls
|
||||
# nicht explizit in [Planquadrate] konfiguriert.
|
||||
@@ -498,7 +500,7 @@ def process_blocks(blocks, lookup):
|
||||
})
|
||||
|
||||
neighbor_ids = compute_neighbor_ids(
|
||||
items, NEIGHBOR_TOLERANCE_MM, NEIGHBOR_OMNIFLO_CELL_SIZE_MM)
|
||||
items, NEIGHBOR_TOLERANCE_MM, NEIGHBOR_OMNIFLO_CELL_SIZE_MM, dbg=dbg)
|
||||
neighbor_errors = compute_neighbor_errors(items, neighbor_ids)
|
||||
for item, nachbarn, fehler in zip(items, neighbor_ids, neighbor_errors):
|
||||
item["nachbarn"] = nachbarn
|
||||
@@ -558,7 +560,31 @@ def main():
|
||||
print(f"[export_csv] {len(blocks)} Bloecke geladen, "
|
||||
f"{len(boegen)} Boegen, {len(weichen)} Weichen im Katalog.")
|
||||
|
||||
items = process_blocks(blocks, lookup)
|
||||
# Optionales Kollisions-/Nachbarschafts-Debuglog (siehe [Nachbarschaft] ->
|
||||
# debug_log in cfg/export.cfg). dbg ist ein Callable(str), das eine Zeile
|
||||
# in die .dbg-Datei schreibt - oder None, wenn das Log deaktiviert ist.
|
||||
dbg_file = None
|
||||
dbg = None
|
||||
if NEIGHBOR_DEBUG_TARGET:
|
||||
try:
|
||||
os.makedirs(os.path.dirname(NEIGHBOR_DEBUG_TARGET), exist_ok=True)
|
||||
dbg_file = open(NEIGHBOR_DEBUG_TARGET, "w", encoding="utf-8")
|
||||
dbg = lambda msg: dbg_file.write(msg + "\n")
|
||||
dbg(f"# Kollisions-/Nachbarschafts-Debuglog (export_csv.py)")
|
||||
dbg(f"# Quelle: {raw_json_path}")
|
||||
dbg(f"# Bloecke im Roh-JSON: {len(blocks)}")
|
||||
dbg("")
|
||||
except OSError as exc:
|
||||
print(f"[export_csv] WARNUNG: Debuglog nicht schreibbar "
|
||||
f"({NEIGHBOR_DEBUG_TARGET}): {exc}")
|
||||
dbg_file = None
|
||||
dbg = None
|
||||
|
||||
items = process_blocks(blocks, lookup, dbg=dbg)
|
||||
|
||||
if dbg_file:
|
||||
dbg_file.close()
|
||||
print(f"[export_csv] Kollisions-Debuglog geschrieben: {NEIGHBOR_DEBUG_TARGET}")
|
||||
|
||||
header = ("Elementnummer;TeileArt;TeileId;Bezeichnung;Planquadrat;Anzahl;Position;Boundingbox;"
|
||||
"Insertpoint;K1;K2;K3;K4;Nachbarn;Fehler;Merkmale")
|
||||
|
||||
Reference in New Issue
Block a user