Files
Pier_v1/Code/교각모델링/calc_bearing_seat.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

62 lines
2.7 KiB
Python

"""Bearing seat check: EL.'X' - (h1 + h2) per bearing vs coping top step elevation.
Inputs (read only):
판독/2_survey.json D2 '교량받침 ELEVATION TABLE' texts (rows NO.1..10)
params.json coping top steps (from D1, independent of D2 table)
Bearing NO.1..5 (3500 kN) and NO.6..10 (2800 kN) are mapped to girder lines 1..5
left->right (front view), i.e. coping top steps 1..5.
Writes 검증/bearing_seat_check.json.
"""
import json
from collections import defaultdict
from pathlib import Path
HERE = Path(__file__).resolve().parent
COLS = {"NO": 21594, "type": 22729, "EL_X": 24938, "h1": 26142, "h2": 27093,
"h3": 27942, "h4": 28893, "E": 36942}
def table_rows():
texts = json.loads((HERE / "판독" / "2_survey.json").read_text(encoding="utf-8"))["texts"]
rows = defaultdict(dict)
for t in texts:
if not (21000 < t["x"] < 37500 and 3500 < t["y"] < 8500):
continue
col = min(COLS, key=lambda c: abs(COLS[c] - t["x"]))
if abs(COLS[col] - t["x"]) < 300:
rows[round(t["y"])][col] = t["text"]
out = []
for y in sorted(rows, reverse=True):
r = rows[y]
if r.get("NO", "").isdigit():
out.append(dict(no=int(r["NO"]), type=r["type"], el_x=float(r["EL_X"]),
h1=int(r["h1"]), h2=int(r["h2"]), h3=int(r["h3"]), h4=int(r["h4"]),
E=int(r["E"]), src_y=y))
return out
def main():
steps = json.loads((HERE / "params.json").read_text(encoding="utf-8"))["coping"]["top_steps"]
rows = table_rows()
assert [r["no"] for r in rows] == list(range(1, 11)), "table rows incomplete"
result = []
for r in rows:
step = steps[(r["no"] - 1) % 5]["z"]
seat_old = round(r["el_x"] * 1000 - r["E"]) # previous basis: E = h1+h2+h3+h4
seat_new = round(r["el_x"] * 1000 - (r["h1"] + r["h2"])) # user basis: h1+h2
result.append(dict(r, girder_line=(r["no"] - 1) % 5 + 1, coping_top=step,
E_check=r["h1"] + r["h2"] + r["h3"] + r["h4"] == r["E"],
seat_by_E=seat_old, diff_by_E=seat_old - step,
seat_by_h1h2=seat_new, diff_by_h1h2=seat_new - step,
pedestal_top=step + r["h1"]))
out = HERE / "검증" / "bearing_seat_check.json"
out.write_text(json.dumps(result, ensure_ascii=False, indent=1), encoding="utf-8")
print("NO | type | EL.X | h1+h2 | EL.X-(h1+h2) | coping top | diff | (old EL.X-E diff)")
for r in result:
print(r["no"], r["type"], r["el_x"], r["h1"] + r["h2"], r["seat_by_h1h2"] / 1000,
r["coping_top"] / 1000, r["diff_by_h1h2"], r["diff_by_E"], "E=h1..h4" if r["E_check"] else "E!=sum")
if __name__ == "__main__":
main()