"""운곡교 DXF(3.dxf) 이형철근 상세 ↔ 모델 마크별 대조 이미지 3장 + 운곡 도면↔도면 오류(형식 그림 j 있으나 재료표 J 비어 있음) 기록. 하루 1백업.""" 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, hb = wb["수정 내역"], wb["형상 일람(모델)"], wb["교량별 항목 합본"] if any(r[0].value == "R-27" 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 YEL = PatternFill("solid", fgColor="FFFFF2CC") r = append_like(ws, ["R-27", "운곡교", "재료표 형식 ↔ 도면(DXF 3.dxf) 이형철근 상세 형식 그림 ↔ 모델 형상 마크별 대조 (코핑·기초·기둥 전 마크)", "운곡교 P1 코핑 C1~C16·S1·S2, 기초 B1~B12, 기둥 P1~P6 (이미지 3장)", "형식 그림은 PNG/표만 보고 점검했고 DXF 의 이형철근 상세(I~XVII)와 마크별로 비교한 자료가 없었음", "DXF 3.dxf 의 이형철근 상세 영역을 렌더(ezdxf)해 형식별로 잘라 모델 형상 옆에 배치(시트 '형상 일람(모델)' 하단). 수정은 하지 않음", 0, "사용자 지시 2026-10-28: DXF 도면이 제1 자료, 도면에서 이미지를 잘라 넣고 도면↔도면·도면↔모델 오류를 엑셀에 작성", "운곡교p1_수정7_20261026.3dm", "형식 불일치 없음: VIII(C1~C6) 다리각 98°/96°, VII(C7·C8) 호 2개, IV(C9~C11) 사각 링, II(C16)=ㄴ자(이전 '산외 II ㅁ 과 다름' 의심은 도면이 ㄴ자라 해소), III(C14·C15·S1·S2·B1·B3·B12·P6), XI(B9) 갈고리, I(B4) 직선", "도면↔도면 오류 D-10 기록(아래 '교량별 항목 합본'): 형식 XII·XIII·X·XVI·VI 그림에는 j 치수가 있으나 재료표 J 열은 비어 있음 → 겹침 반영 불가, 도면 확인 필요"], 4) ws.cell(row=r, column=1).fill = YEL r2 = append_like(hb, ["운곡교", "D-10", "B2·B5·B6·B7·B11(XII), B10(XIII), C12·C13(X), B8·P2(XVI), P3(VI)", "이형철근 상세 형식 그림에 겹침 길이 j 가 그려져 있으나 재료표 J 열이 비어 있음 (표 L 에도 j 가 포함되지 않은 값)", "도면 형식 그림(DXF 3.dxf) ↔ 도면 재료표(같은 도면)", "J 값 없음 (예: B2 표 L 11,500 ↔ 모델 11,397 로 j 미포함)", "도면 내부 불일치: 형식 XII·XIII·X·XVI 는 j 포함 형상인데 표에 J 값이 없음", "설계자 확인 필요: j 길이와 위치를 알려 주기 전에는 모델에 겹침을 반영하지 않음(현재 모델은 겹침 없는 단일 철근)", "도면↔도면 (도면 내부 오류)", "개별 (운곡교)"], hb.max_row) hb.cell(row=r2, column=9).fill = YEL 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 — DXF 형식 그림 ↔ 모델 대조" % 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))