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

76 lines
3.6 KiB
Python

import sys, json, re
sys.path.insert(0, 'pylib')
import ezdxf
SRC = r"D:\★Pier 자료\심수석님 검토 파일\검토_산외교P1\교각배근도(울산P1)_2016.10.28.dxf"
OUT = r"D:\★Pier 자료\심수석님 검토 파일\검토_산외교P1\교각배근도(울산P1)_도면검토_색구분.dxf"
T = json.load(open('sw_texts.json', encoding='utf-8'))
rowy = {}
for x, y, l, t, h in T:
if l.startswith('CS-TABL') and abs(x - 97922) < 5 and re.match(r'^[A-Z]{1,2}\d+$', t.strip()):
rowy[t.strip()] = y
CODES = {}
def add(code, marks):
for m in marks:
CODES.setdefault(m, []).append(code)
add('M-1', ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C14', 'C15'])
add('M-2', ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'C12', 'C13', 'P2', 'B2', 'B5', 'B8'])
add('M-3', ['C7', 'C8', 'C9', 'C10', 'C11', 'C12', 'C13'])
add('M-4', ['C10'])
add('M-5', ['B8'])
add('M-6', ['P1'])
add('M-7', ['B2', 'B5', 'C7', 'C8', 'C9', 'C10', 'C15', 'P5'])
add('M-8', ['P3', 'P4'])
def kind(codes):
if any(c in ('M-1', 'M-2', 'M-3', 'M-4', 'M-5', 'M-6') for c in codes):
return 'dm'
if 'M-7' in codes:
return 'kj'
return 'mh'
doc = ezdxf.readfile(SRC)
msp = doc.modelspace()
LAY = {'dm': ('검토_도면모델_주황', 30), 'kj': ('검토_기준모델_진한노랑', 41), 'mh': ('검토_미확인_회색', 9)}
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')
def rect(x0, y0, x1, y1, k, w=20):
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)})
for mk, codes in CODES.items():
y = rowy[mk]
k = kind(codes)
rect(97450, y - 120, 117550, y + 130, k)
label(117700, y - 90, '·'.join(codes), k, 160)
# 형상 도해 셀 (범례) : 형식 → (열,행)
cols = [(5, 331), (331, 657), (658, 984)]
rows = [(117, 361), (361, 606), (606, 851), (851, 1096)]
names = [['I', 'II', 'III'], ['IV', 'V', 'VI'], ['VII', 'VIII', 'IX'], ['X', 'XI', 'XII']]
pos = {}
for ri in range(4):
for ci in range(3):
x0 = 118500 + cols[ci][0] * 12.248
x1 = 118500 + cols[ci][1] * 12.248
y1 = -264000 - rows[ri][0] * 12.25
y0 = -264000 - rows[ri][1] * 12.25
pos[names[ri][ci]] = (x0, y0, x1, y1)
SH = {'IX': ('dm', 'M-1'), 'IV': ('dm', 'M-1·M-2'), 'III': ('dm', 'M-2·M-4'), 'II': ('dm', 'M-3'), 'V': ('mh', 'M-5·M-8'), 'X': ('mh', 'M-8')}
for nm, (k, s) in SH.items():
x0, y0, x1, y1 = pos[nm]
rect(x0 + 30, y0 + 30, x1 - 30, y1 - 30, k, 30)
label(x0 + 200, y1 - 330, s + ' (형식 %s)' % nm, k, 230)
# NOTE (a 산식) 글자
rect(124400, -268420, 131200, -268150, 'dm', 20)
label(124500, -268650, 'M-3 a 가산 산식 NOTE', 'dm', 170)
# 커플러 개수 표 (주철근 476)
rect(109550, -284600, 114300, -284380, 'dm', 20)
label(114450, -284560, 'M-6 주철근 커플러 476개 (모델에 없음)', 'dm', 170)
# 범례
lx, ly = 99000, -260900
label(lx, ly, '【검토 표시 범례】 도면 ↔ 모델 상이점 (2026-10-19, 미확정)', 'dm', 260)
label(lx, ly - 380, '주황: 도면↔모델 M-1 일부 철근 짧음 / M-2 J 미작도 / M-3 C7~C13 가산 산식 / M-4 C10 A 최대 / M-5 B8 / M-6 주철근 커플러 476', 'dm', 190)
label(lx, ly - 650, '진한 노랑: 기준(KDS)↔모델 M-7 굽힘 내면지름 (H22·H19)', 'kj', 190)
label(lx, ly - 920, '회색: 미확인 M-8 P3·P4 이음 각도', 'mh', 190)
doc.saveas(OUT)
print('saved', len(CODES))