diff --git a/scripts/explore_std_section.py b/scripts/explore_std_section.py new file mode 100644 index 0000000..8d9e378 --- /dev/null +++ b/scripts/explore_std_section.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +"""Task 4 exploration: layers, arcs (radius + centre) and dimension-like texts +of the standard section drawing (C0060303-001). Read-only.""" +import collections +import re +import sys + +import ezdxf +from ezdxf import bbox + +msp = ezdxf.readfile(sys.argv[1]).modelspace() +print("layers:", collections.Counter(e.dxf.layer for e in msp).most_common(12)) +ext = bbox.extents(msp) +print("extents:", [round(v, 1) for v in ext.extmin], [round(v, 1) for v in ext.extmax]) +print("== ARCs (layer, centre, radius, start/end deg) sorted by radius") +arcs = sorted(msp.query("ARC"), key=lambda e: -e.dxf.radius) +for e in arcs[:14]: + c = e.dxf.center + print(f" {e.dxf.layer:14s} c=({c.x:9.2f},{c.y:9.2f}) R={e.dxf.radius:9.2f} {e.dxf.start_angle:7.1f}->{e.dxf.end_angle:7.1f}") +print("== R-labels and numeric dims") +pat = re.compile(r"^(R\d'?|\d{2,5}(\.\d+)?|\d+\.\d+%?|-?\d+\.\d+)$") +for e in msp.query("TEXT"): + s = e.dxf.text.strip() + if pat.match(s) or s.startswith("R"): + print(f" {e.dxf.layer:14s} ({e.dxf.insert.x:9.2f},{e.dxf.insert.y:9.2f}) {s}")