- 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>
87 lines
6.6 KiB
Python
87 lines
6.6 KiB
Python
"""Add the coping + bearing-seat rebar (G4: C1~C20, S1~S8, centreline polylines) to the app pier '옥성교P1'.
|
|
|
|
params = 판독/g4_bars.json (extract_g4.py; decisions H1-H6, 2026-10-14); builder rebar_polylines.py (GATE G4)
|
|
expected = schedule L / N, drawn levels / positions / dimension chains, typed in by hand from the reading (판독서 v0.1.06 §11).
|
|
Backs up params.json / expected.json to data/옥성교P1/backup/2026-10-14_g4/ first. Refuses if G4 is in scope.
|
|
"""
|
|
import json
|
|
import shutil
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
HERE = Path(__file__).resolve().parent
|
|
D = HERE.parents[1] / "Code" / "교각모델링앱" / "data" / "옥성교P1"
|
|
B = json.loads((HERE / "판독" / "g4_bars.json").read_text(encoding="utf-8"))
|
|
SH = json.loads((HERE / "판독" / "g4_shapes.json").read_text(encoding="utf-8"))["table"]
|
|
P = json.loads((D / "params.json").read_text(encoding="utf-8"))
|
|
X = json.loads((D / "expected.json").read_text(encoding="utf-8"))
|
|
if "G4" in P["scope"]:
|
|
sys.exit("G4 already in scope")
|
|
bk = D / "backup" / "2026-10-14_g4"
|
|
bk.mkdir(parents=True, exist_ok=True)
|
|
for f in ("params.json", "expected.json"):
|
|
shutil.copy2(D / f, bk / f)
|
|
|
|
SCHED = {m: (round(float(v[2]) * 1000), int(v[3]), v[1]) for m, v in SH.items() if m[0] in "CS"}
|
|
SHAPE = {"C1": "top-legs", "C2": "top-legs", "C3": "top-legs", "C4": "top-legs", "C5": "top-legs", "C6": "top-legs",
|
|
"C7": "soffit", "C8": "stirrup", "C9": "stirrup-pent", "C10": "stirrup", "C11": "stirrup-pent", "C12": "stirrup",
|
|
"C13": "stirrup-pent", "C14": "loop", "C15": "tie", "C16": "loop", "C17": "tie", "C18": "U", "C19": "U", "C20": "L",
|
|
"S1": "U", "S2": "U", "S3": "I", "S4": "I", "S5": "U", "S6": "U", "S7": "I", "S8": "I"}
|
|
P["scope"] = ["G1", "G2", "G3", "G4", "G5"]
|
|
P["builders"]["G4"] = "rebar_polylines.py"
|
|
P["rebar_marks"].update({m: {"dia": d, "shape": SHAPE[m]} for m, (_, _, d) in SCHED.items()})
|
|
P["coping_rebar"] = {"form": "polylines", "host": "CP", "group": "코핑", "bars": B["bars"],
|
|
"not_modelled": "135도 갈고리 C15·C17(H4), 겹이음 j(C1~C7·C14·C16·C17), 스터럽 이음 c 630",
|
|
"src": "Code/옥성P1판독/extract_g4.py -> 판독/g4_bars.json; 판독서 v0.1.06 §11, 결정 H1~H6 (2026-10-14)"}
|
|
X["checkers"]["G4"] = "g4_okseong.py"
|
|
X["negative"]["G4"] = [{"mark": "C1", "d": [0, 5, 0]}, {"mark": "C7", "d": [0, 0, 5]}]
|
|
|
|
Y25 = [-1525.0] + [-1375.0 + 125 * k for k in range(23)] + [1525.0]
|
|
X["G4"] = {
|
|
"schedule": {m: [L, n] for m, (L, n, _) in SCHED.items()},
|
|
"dia": {m: int(d[1:]) for m, (_, _, d) in SCHED.items()},
|
|
"skew_deg": 18.0,
|
|
# polyline length = L - lap j (C1~C6) or exact L; the other marks vary with x / level and are only recorded
|
|
"fixed_length": {"C1": 14244, "C4": 14244, "C2": 11950, "C5": 11950, "C3": 11950, "C6": 11950, "C19": 2966,
|
|
"S1": 4029, "S2": 2662, "S3": 2500, "S4": 1250, "S5": 4029, "S6": 2662, "S7": 2500, "S8": 1250},
|
|
"y25": Y25,
|
|
"top": {"C1": {"z": 21007.8, "leg": 1247, "parity": 0}, "C4": {"z": 21007.8, "leg": 1247, "parity": 1},
|
|
"C2": {"z": 20927.8, "leg": 100, "parity": 0}, "C5": {"z": 20927.8, "leg": 100, "parity": 1},
|
|
"C3": {"z": 20827.8, "leg": 100, "parity": 0}, "C6": {"z": 20827.8, "leg": 100, "parity": 1}, "x_end": 5875},
|
|
"c19": {"z": 21122.2, "x": [-1171.4, 1054.8], "leg": 370},
|
|
"c20": [{"z": 21055.0, "x": [-5875.0, -3402.6], "leg_at": "left"}, {"z": 21088.6, "x": [-3647.6, -926.4], "leg_at": "left"},
|
|
{"z": 21068.4, "x": [809.8, 3531.0], "leg_at": "right"}],
|
|
"c20_leg": 370,
|
|
"c7": {"flat_z": [18295.0] * 9 + [18660.2] * 2 + [19691.4] * 2, "top_end_z": 20367.2, "x_end": 5875,
|
|
"capped": {"y": 1525, "x_end": 5432}},
|
|
"stirrups": {
|
|
"x": {"left": [-5725 + 150 * k for k in range(11)] + [-4125 + 100 * k for k in range(28)],
|
|
"centre": [-1325 + 100 * k for k in range(27)],
|
|
"right": [1375 + 100 * k for k in range(29)] + [4275 + 150 * k for k in range(11)]},
|
|
"marks": {"left": ["C8", "C9"], "centre": ["C10", "C11"], "right": ["C12", "C13"]},
|
|
"top": [[-9999, -3675, 21077.5], [-3675, -1175, 21111.1], [-1175, 1025, 21144.7], [1025, 3525, 21090.9], [3525, 9999, 21030.3]],
|
|
"bottom": {"flat_half": 1331.1, "flat_z": 18272.5, "slope": 0.32255},
|
|
"rect_y": 1000, "pent_y": [500, 1525], "pent_dx": 20},
|
|
"loops": {"upper": {"marks": ["C16", "C17"], "z": [20922.1, 20796.4, 20546.4, 20296.4, 20046.4, 19796.4],
|
|
"x": [5875.0] * 6, "y": [1502.5] * 6},
|
|
"lower": {"marks": ["C14", "C15"], "z": [19546.4, 19296.4, 19046.4, 18796.4, 18546.4, 18420.7],
|
|
"x": [5210.4, 4435.4, 3660.4, 2885.4, 2110.4, 1720.8], "y": [1463.9, 1397.2, 1330.5, 1263.9, 1197.2, 1163.7]},
|
|
"tie_y": [-977.5, -522.5, 522.5, 977.5]},
|
|
"c18": {"levels": {"21068.4": 1, "21047.8": 11, "20905.3": 29, "20805.3": 29, "20796.4": 15, "20546.4": 14, "19546.4": 13,
|
|
"18546.4": 5},
|
|
"width_note": "상면 단은 면 폭 3,050, 낮은 두 단은 다리가 위로 면을 따라 올라가므로 다리 끝 폭(19546.4: 다리 위 EL 19.9164 ±1,525, 18546.4: 다리 위 EL 18.9164 ±1,318.4)", "width": {"21068.4": 3050, "21047.8": 3050, "20905.3": 3050, "20805.3": 3050, "20796.4": 3050, "20546.4": 3050,
|
|
"19546.4": 3050, "18546.4": 2636.8}},
|
|
"seats": {"heavy": 3, "marks_heavy": ["S1", "S2", "S3", "S4"], "marks_light": ["S5", "S6", "S7", "S8"],
|
|
"h1": {"front": 173, "rear": 194}, "y": {"front": -530.2, "rear": 610.9},
|
|
"long_t": [-600.0] + [-500.0 + 125 * k for k in range(9)] + [600.0], "long_len": 2629,
|
|
"short_o": [-1250.0] + [-1125.0 + 125 * k for k in range(19)] + [1250.0], "short_len": 1262,
|
|
"top_below": 50, "leg": 700, "lower_below": [373, 473],
|
|
"low_long_t": [-625.0 + 125 * k for k in range(11)], "low_long_len": 2500,
|
|
"low_short_o": [-1250.0 + 125 * k for k in range(21)], "low_short_len": 1250},
|
|
"src": "재료표 L·N, 철근 상세 a·b·c; 구조도(1) 정면·측면 철근 선·점(상면 3단·C19·C20·C7·스터럽 106곳·측면 고리 12단·C18 117점); "
|
|
"구조도(2) 코핑 단면 사슬(25줄 @125, 바닥 10@250)·교좌면 C-D 단면 사슬(50 | 123 | 200 | 100 | 277); 결정 H1~H6 (2026-10-14)",
|
|
}
|
|
(D / "params.json").write_text(json.dumps(P, ensure_ascii=False, indent=1), encoding="utf-8")
|
|
(D / "expected.json").write_text(json.dumps(X, ensure_ascii=False, indent=1), encoding="utf-8")
|
|
print("G4 added:", len(B["bars"]), "bars; backup", bk)
|