Files
Pier_v1/Code/옥성P1판독/g4_shapes_dump.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합
- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:18 +09:00

46 lines
2.3 KiB
Python

"""Okseong P1 G4 helper: match the shape sheet (구조도(4) 철근 상세) to the material table by (L, N) -> 판독/g4_shapes.json."""
import json
import re
from pathlib import Path
HERE = Path(__file__).resolve().parent
T = json.loads((HERE / "dxf" / "texts.json").read_text(encoding="utf-8"))
tab = {}
for x in T:
if 714800 <= x["x"] <= 725000 and 324500 <= x["y"] <= 339900 and x["layer"].startswith("CS-TABL"):
tab.setdefault(round(x["y"]), []).append((x["x"], x["text"].strip()))
table = {}
for y, cells in tab.items():
cells = [s for _, s in sorted(cells)]
if re.fullmatch(r"[CSP]\d+|UM|B\d+", cells[0]):
table[cells[0]] = cells
# the table repeats the diameter as '"': resolve it
dia = None
for m in sorted(table, key=lambda m: -[y for y, c in tab.items() if c and sorted(c)[0][1].strip() == m][0]):
c = table[m]
if c[1].startswith("H"):
dia = c[1]
else:
c[1] = dia
sh = [x for x in T if 689900 <= x["x"] <= 712000 and 324000 <= x["y"] <= 343000 and x["layer"] == "CS-TEXT"]
blocks = [(689900, 694500), (695000, 700000), (700500, 706500), (707000, 712000)]
rows = []
for x in sh:
m = re.fullmatch(r"L=([\d.]+)", x["text"].strip())
if m:
L = float(m.group(1))
b = [i for i, (a, c) in enumerate(blocks) if a <= x["x"] < c][0]
n = [y for y in sh if re.fullmatch(r"N=\d+", y["text"].strip()) and abs(y["y"] - x["y"]) < 5 and blocks[b][0] <= y["x"] < blocks[b][1]]
N = int(n[0]["text"].strip()[2:]) if n else None
params = sorted(((y["x"], y["y"], y["text"].strip()) for y in sh if blocks[b][0] <= y["x"] < blocks[b][1]
and x["y"] - 500 <= y["y"] < x["y"] - 100 and not re.match(r"[LN]=", y["text"].strip())),
key=lambda p: (-round(p[1] / 50), p[0]))
rows.append({"L": L, "N": N, "block": b, "y": x["y"], "params": [p[2] for p in params]})
out = {}
for r in rows:
cand = [m for m, c in table.items() if abs(float(c[2]) - r["L"]) < 1e-6 and int(c[3]) == r["N"]]
out.setdefault("/".join(cand) or f"?{r['L']}/{r['N']}", []).append(r)
(HERE / "판독" / "g4_shapes.json").write_text(json.dumps({"table": table, "shapes": out}, ensure_ascii=False, indent=1), encoding="utf-8")
for k, v in out.items():
print(k, table.get(k.split("/")[0], ["", ""])[1], v[0]["L"], v[0]["N"], v[0]["params"])