Files
Pier_v1/Code/review_pipeline/ra_mark_dxf.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

71 lines
3.5 KiB
Python

import sys, json, re
sys.path.insert(0, 'pylib')
import ezdxf
B = r"D:\★Pier 자료\심수석님 검토 파일\Ramp-A교P1"
S = json.load(open('ra_shapes.json', encoding='utf-8'))
T3 = json.load(open('ra_texts3.json', encoding='utf-8'))
T4 = json.load(open('ra_texts4.json', encoding='utf-8'))
cell = {}
for e in S:
cell.setdefault(e['mark'], (e['x'], e['y']))
CODES = {}
def add(code, marks):
for m in marks:
CODES.setdefault(m, []).append(code)
add('M-1', ['C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14'])
add('M-2', ['C7', 'C8', 'C9', 'C10', 'C11', 'C12'])
add('M-3', ['C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14'])
add('M-4', ['C1', 'C2', 'C3', 'C4', 'C5'])
add('M-5', ['P1', 'P1-1'])
add('M-6', ['C3', 'C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16'])
add('M-7', ['P2', 'P2-1', 'P3', 'P3-1'])
def kind(codes):
if any(c in ('M-1', 'M-2', 'M-3', 'M-4', 'M-5') for c in codes): return 'dm'
if 'M-6' in codes: return 'kj'
return 'mh'
LAY = {'dm': ('검토_도면모델_주황', 30), 'kj': ('검토_기준모델_진한노랑', 41), 'mh': ('검토_미확인_회색', 9)}
def prep(src):
doc = ezdxf.readfile(src)
for k, (n, c) in LAY.items(): doc.layers.add(n, color=c)
if 'KR_REVIEW' not in doc.styles: doc.styles.add('KR_REVIEW', font='malgun.ttf')
return doc
def mk(doc):
msp = doc.modelspace()
def rect(x0, y0, x1, y1, k, w=15):
msp.add_lwpolyline([(x0, y0), (x1, y0), (x1, y1), (x0, y1)], close=True, dxfattribs={'layer': LAY[k][0], 'const_width': w})
def label(x, y, s, k, h=170):
msp.add_text(s, height=h, dxfattribs={'layer': LAY[k][0], 'style': 'KR_REVIEW', 'insert': (x, y)})
return rect, label
def legend(label, lx, ly):
label(lx, ly, '【검토 표시 범례】 도면 ↔ 모델 상이점 (2026-10-19, 미확정)', 'dm', 300)
label(lx, ly - 420, '주황: 도면↔모델 M-1 끝 겹침 c·j / M-2 a +48 / M-3 b 단일값·총길이 / M-4 C1~C5 다리 / M-5 커플러 115', 'dm', 210)
label(lx, ly - 700, '진한 노랑: 기준(KDS)↔모델 M-6 굽힘 내면지름 (H25·H19)', 'kj', 210)
label(lx, ly - 980, '회색: 미확인 M-7 P2·P3 갈고리·겹침', 'mh', 210)
# ---- DXF 3
doc = prep(B + r"\Ramp-A교 P1 교각(3).dxf"); rect, label = mk(doc)
for x, y, l, t, h in T3:
if l.startswith('CS-TABL') and abs(x - 64862) < 5 and re.match(r'^[A-Z]\d+$', t.strip()) and -708000 < y < -699500 and t.strip() in CODES:
c = CODES[t.strip()]; k = kind(c)
rect(64350, y - 140, 73750, y + 160, k)
label(73900, y - 100, '·'.join(c), k, 190)
for m, (x, y) in cell.items():
if m in CODES:
c = CODES[m]; k = kind(c)
rect(x - 3800, y - 420, x + 3600, y + 330, k)
label(x + 1500, y + 360, '·'.join(c), k, 200)
rect(60300, -707300, 64000, -705800, 'dm', 20)
label(60400, -705600, 'M-5 커플러 수량 (모델에 없음)', 'dm', 200)
legend(label, 35500, -682300)
doc.saveas(B + r"\Ramp-A교 P1 교각(3)_도면검토_색구분.dxf")
# ---- DXF 4
doc = prep(B + r"\Ramp-A교 P1 교각(4).dxf"); rect, label = mk(doc)
for x, y, l, t, h in T4:
if l.startswith('CS-TABL') and -707200 < y < -705500 and re.match(r'^(P\d(-\d)?)$', t.strip()) and round(x) in (89586, 99898) and t.strip() in CODES:
c = CODES[t.strip()]; k = kind(c)
x0, x1 = (89050, 98150) if round(x) == 89586 else (99350, 108450)
rect(x0, y - 140, x1, y + 160, k)
label(x1 + 100, y - 100, '·'.join(c), k, 190)
legend(label, 80000, -683000)
doc.saveas(B + r"\Ramp-A교 P1 교각(4)_도면검토_색구분.dxf")
print('ok')