"""DX 포함 관계를 3가지 다른 시각화로 비교. A: 벤 다이어그램 (원 안에 이름만, 설명은 하단 별도) B: 동심원 (DX 큰 원 > 기술융합 중간 원 > GIS/BIM/DT 작은 원) C: 계층 박스 (DX 박스 안에 3개 기술 + 겹치는 영역 표시) """ from __future__ import annotations import asyncio, sys, time, datetime, base64, re from pathlib import Path ROOT = Path(__file__).parent.parent sys.path.insert(0, str(ROOT)) COMMON_INFO = """ ## 관계 (반드시 반영) - DX는 상위개념. GIS, BIM, 디지털 트윈을 포함. - 3개 기술은 서로 융합되어 DX를 실현. - "BIM ≠ DX" ## 텍스트 - DX: 상위개념 (디지털 전환) - GIS: 공간 정보 - BIM: 3차원 모델 - 디지털 트윈: 디지털 구현 - 핵심 메시지: "BIM ≠ DX — BIM은 DX를 실현하기 위한 핵심 기술 중 하나일 뿐이다" ## 공통 규칙 - 크기: 707px × 280px - 원 안에는 이름만 (설명 텍스트를 원 안에 넣지 마라) - 각 기술의 설명은 원 아래에 작은 텍스트로 별도 배치하거나 생략 - "BIM ≠ DX" 강조 박스는 하단에 배치 - 색상: GIS=#3b82f6, BIM=#10b981, 디지털트윈=#f59e0b, DX=#2563eb - 폰트: Pretendard Variable HTML + inline
{html}
""" (out_dir / f"{name}.html").write_text(wrapped, encoding="utf-8") s = await asyncio.to_thread(capture_slide_screenshot, wrapped) if s: (out_dir / f"{name}.png").write_bytes(base64.b64decode(s)) print(f" [{time.time()-t0:.0f}s] 완료") except Exception as e: print(f" 오류: {e}") print(f"\n총 소요: {time.time()-t0:.0f}초") print(f"결과: {out_dir}") if __name__ == "__main__": import logging logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S") logging.getLogger("selenium").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) logging.getLogger("httpx").setLevel(logging.WARNING) asyncio.run(main())