- 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>
36 lines
3.2 KiB
Python
36 lines
3.2 KiB
Python
"""산외교 도면↔모델 마크별 대조 이미지(코핑·기초·기둥)를 '형상 일람(모델)' 시트 하단에 추가, '수정 내역' R-26(점검, 수정 없음) 기록. 하루 1백업 → Pier_T → 원본 복사 → SHA 확인."""
|
|
import copy, hashlib, shutil, sys
|
|
from pathlib import Path
|
|
import openpyxl
|
|
from openpyxl.drawing.image import Image as XLImage
|
|
from openpyxl.styles import Font, PatternFill
|
|
from xlsx_backup_once import backup_once, NAME
|
|
ROOT = Path(r"D:\★Pier 자료\프로그램\Pier_T"); REV = ROOT / "검토파일"; ORIG = Path(r"D:\★Pier 자료\심수석님 검토 파일"); CAP = REV / "수정후_캡처"
|
|
print("backup:", backup_once())
|
|
wb = openpyxl.load_workbook(REV / NAME); ws, sh = wb["수정 내역"], wb["형상 일람(모델)"]
|
|
if any(r[0].value == "R-26" for r in ws.iter_rows(min_row=4)):
|
|
sys.exit("이미 있음")
|
|
def append_like(sheet, values, like_row):
|
|
r = sheet.max_row + 1
|
|
for j, v in enumerate(values, 1):
|
|
c = sheet.cell(row=r, column=j, value=v); s = sheet.cell(row=like_row, column=j)
|
|
c.font = copy.copy(s.font); c.fill = copy.copy(s.fill); c.border = copy.copy(s.border); c.alignment = copy.copy(s.alignment); c.number_format = s.number_format
|
|
sheet.auto_filter.ref = "A3:%s%d" % (openpyxl.utils.get_column_letter(sheet.max_column), r)
|
|
return r
|
|
r = append_like(ws, ["R-26", "산외교", "재료표 형식 ↔ 같은 강종 도면 형식 그림 ↔ 모델 형상 마크별 대조 (코핑·기초·기둥 전 마크)",
|
|
"산외교 P1 코핑 C1~C15·S1~S4, 기초 B1~B10, 기둥 P1~P5 (이미지 3장)", "형식 번호만으로 점검했고 도면 형식 그림과 모델을 한 장에서 비교한 자료가 없었음",
|
|
"SD400/SD500 상세 그림을 형식별로 잘라 모델 형상 옆에 배치(시트 '형상 일람(모델)' 하단). 수정은 하지 않음",
|
|
0, "사용자 요청 2026-10-27 '도면 형상 대조 이미지 4개교' 이어서 (2026-10-28)", "산외교P1 G5_수정5_20261027.3dm",
|
|
"형식 불일치 없음: SD500 형식 I(B1·B3·B4·B6)=직선, B7·C14·C15·S1~S4·P5(SD400 형식 I)=ㄷ, B9·B10(III)=ㄷ, C1~C4(IX)·C5~C6(IV)·C7~C9(II)·P1~P4 모두 형식 그림과 일치",
|
|
"이미지의 B2·B5·B8·C10·C12 등 J 겹침 마크는 대표 조각 1개만 그려져 한쪽 다리만 보임, 긴 철근은 가로세로 비율 왜곡. 운곡·Ramp-A 는 형식별 상세 그림이 DXF 안에 있어 추출 후 작성 예정"], 4)
|
|
ws.cell(row=r, column=1).fill = PatternFill("solid", fgColor="FFFFF2CC")
|
|
row = max(i.anchor._from.row + int(i.height / 20) for i in sh._images) + 6
|
|
for part in ("코핑", "기초", "기둥"):
|
|
p = CAP / ("도면대조_산외_%s.png" % part)
|
|
sh.cell(row=row, column=1, value="산외 %s — 형식 그림 ↔ 모델 대조" % part).font = Font(bold=True, size=12)
|
|
im = XLImage(str(p)); w0, h0 = im.width, im.height
|
|
im.width, im.height = 1250, int(1250 * h0 / w0); sh.add_image(im, "A%d" % (row + 1)); row += int(im.height / 20) + 4
|
|
wb.save(REV / NAME); shutil.copy2(REV / NAME, ORIG / NAME)
|
|
sha = lambda p: hashlib.sha256(Path(p).read_bytes()).hexdigest()
|
|
print("sha equal:", sha(REV / NAME) == sha(ORIG / NAME), sha(REV / NAME)[:16], len(sh._images))
|