실습 3. PCB DXF 에서 보드 만들기
| 항목 | 내용 |
|---|---|
| 입력 파일 | 03-MYB-6ULX_2D.dxf, 03-MYS-6ULX_2D.dxf |
| 걸리는 시간 | 3분 (보드 2장 생성 8초) |
| 결과물 | 문서 2개(pcb_MYB, pcb_MYS), 각각 보드 Body 1개(두께 1.6, 장착 구멍 Ø3.3 파라미터) |
| 배우는 것 | DXF 에서 필요한 레이어만 골라 읽히는 법, 폴리라인의 둥근 모서리(bulge)가 호로 옮겨지는 것, 구멍을 종류별로 나누는 법 |
PCB 를 케이스에 넣으려면 보드 외곽과 장착 구멍만 있는 3D 보드가 필요합니다. DXF 에는 실크·치수·비아까지 수백 개가 들어 있어 필요한 것만 골라 읽게 하는 것이 이 실습의 핵심입니다.
원본과 완성
섹션 제목: “원본과 완성”

| 구분 | 파일 | 설명 | 크기 |
|---|---|---|---|
| 원본 | 03-MYB-6ULX_2D.dxf | DXF | 479 KB |
| 원본 | 03-MYS-6ULX_2D.dxf | DXF | 461 KB |
| 완성 | 03-pcb_MYB-done.FCStd | MYB 보드 | 91 KB |
| 완성 | 03-pcb_MYS-done.FCStd | MYS 보드 | 79 KB |
| 완성 | 03-MYB_6ULX-done.step | STEP | 200 KB |
| 완성 | 03-MYS_6ULX-done.step | STEP | 173 KB |
- FreeCAD 1.1.3 을 켭니다. 리포트 뷰에
[CAD X-ray] 서버 시작이 보이면 됩니다. - DXF 두 파일을
C:\cad\에 둡니다. - PowerShell 에서
C:\cad로 이동해claude를 엽니다. - FreeCAD 에서 DXF 를 직접 열지 않습니다(파일 → 열기 금지). 이유는 아래 1단계에 있습니다.
1. DXF 를 읽혀 표부터 받는다
섹션 제목: “1. DXF 를 읽혀 표부터 받는다”C:\cad-MYB-6ULX_2D.dxf 읽어서(FreeCAD 로 열지 말고 파일을 직접) 레이어별 요소 수, 외곽 폴리라인, 원 지름별 개수를 표로 보여줘.AI 가 하는 일 — DXF 를 직접 읽어(ezdxf 또는 텍스트 파싱) ENTITIES 구간의 POLYLINE(레이어, 닫힘 여부, 꼭짓점과 bulge)과 CIRCLE(레이어, 중심, 반지름)을 뽑습니다. FreeCAD 의 DXF 가져오기를 쓰면 실크·치수 폴리라인 수백 개가 전부 Draft 객체가 되어 2분 넘게 걸립니다(MYB-6ULX 실측). 그래서 “FreeCAD 로 열지 말고” 를 넣습니다. 시키지 않아도 표에 나와야 하는 것: OUTLINE 이 닫혀 있는지, bulge 가 90° 호인지, 어느 원이 장착 구멍으로 보이는지.
확인하기 — OUTLINE 이 “닫힘”이고 bulge 값이 0.4142 근처면 모서리가 90° 호로 둥근 보드입니다. Ø3.3 이 6개로 나오는 것이 맞습니다. 4개는 보드 모서리 근처의 장착 구멍이고 2개는 왼쪽 커넥터 자리입니다.
2. 규칙을 주고 두 보드를 만들게 한다
섹션 제목: “2. 규칙을 주고 두 보드를 만들게 한다”외곽은 OUTLINE 그대로(bulge 는 호로), 구멍은 반지름 0.5 이상만, 같은 중심 중복은 하나로, Ø3.3 은 모서리 쪽 4개만 장착 구멍으로 Params.mount_d, 두께 1.6 은 Params.thickness. 이 규칙으로 두 보드 만들어줘. pcb_MYB 에 Body MYB_6ULX(Label MYB-6ULX), 03-MYS-6ULX_2D.dxf 는 pcb_MYS 에 MYS_6ULX(Label MYS-6ULX). 피처는 PadBoard → PocketMount → PocketPins.AI 가 하는 일 — bulge b 를 각도 θ = 4·atan(b) 로 풀어 두 꼭짓점 사이를 호로 바꾸고(호 중심은 진행 방향의 왼쪽), 외곽 선분 4 + 호 4 를 스케치에 옮겨 자유도 0 으로 만든 뒤 Pad 1개·Pocket 2개를 순서대로 쌓습니다. 원은 반지름과 중심으로 걸러 장착 구멍과 부품 핀 구멍으로 나눕니다. 규칙을 한 번 정해 두면 같은 계열 보드는 이름만 바꿔 그대로 됩니다.
확인하기 — 트리에서 PadBoard, PocketMount, PocketPins 가 검은 글씨(오류 없음)인지, 위에서 봤을 때(숫자 키 2) 모서리 4곳이 둥근지 봅니다. Params 시트에 thickness, mount_d 가 있습니다(width·height·corner_r 는 표기용이고 외곽 자체는 DXF 요소를 그대로 씁니다). 두 문서를 나란히 두고(창 → 바둑판식) 핀 구멍 배치가 다른지 봅니다.
3. 눈으로 보고 저장한다
섹션 제목: “3. 눈으로 보고 저장한다”iso 뷰 보여주고, 맞으면 C:\cad\pcb_MYB.FCStd, C:\cad\pcb_MYS.FCStd 로 저장해줘.확인하기 — 스크린샷에서 보드 두께가 보이고 구멍이 관통돼 있으면 됩니다.
결과 확인
섹션 제목: “결과 확인”| 기준 | 값 |
|---|---|
| 외곽 스케치 | 요소 8개(선분 4 + 90° 호 4), 자유도 0 |
| 장착 구멍 | Ø3.3 × 4, Params.mount_d |
| 두께 | 1.6, Params.thickness |
| 형상 유효성 | valid |
| 피처 | PadBoard → PocketMount → PocketPins |
잘 안 될 때
섹션 제목: “잘 안 될 때”- 2분 넘게 아무 반응이 없다 — AI 가 FreeCAD 의 DXF 가져오기를 써 버린 것입니다. 끝날 때까지 기다린 뒤(중단 불가) “DXF 는 FreeCAD 로 열지 말고 파일을 직접 읽어” 라고 다시 시킵니다.
- 외곽이 닫히지 않아 Pad 가 실패한다 — OUTLINE 폴리라인이 여러 조각이거나 다른 레이어 이름(예:
Edge.Cuts,BOARD)일 수 있습니다. 1단계 표에서 닫힌 폴리라인이 있는 레이어 이름을 골라 알려 줍니다. - 구멍이 너무 많다 — 반지름 문턱 0.5 를 올립니다. “반지름 1.0 이상만” 처럼 다시 정해 줍니다.
- 장착 구멍이 Ø3.3 이 아니다 — 보드마다 Ø3.2·Ø3.5 등이 있습니다. 1단계 표의 반지름 종류를 보고 “반지름 1.6 을 장착 구멍으로” 라고 지정합니다.
- 호 방향이 뒤집혀 모서리가 안으로 파인다 — bulge 부호 해석 문제입니다. “OUTLINE 호가 바깥으로 볼록한지 확인하고 뒤집힌 것은 고쳐 줘” 라고 합니다.
더 해보기
섹션 제목: “더 해보기”- 보드 위에 부품 높이 여유 15 mm 를 더한 “부품 포함 외형” Body 를 만들어 케이스 설계용 간섭 검사에 씁니다(실습 4의 간섭 검사 참고).
Params.mount_d를 3.5 로 바꿔 여유 있는 장착 구멍으로 만들어 봅니다.- 두 보드를 STEP 으로 내보내 케이스 설계자에게 보냅니다. “MYB_6ULX 를 C:\cad\MYB.step 으로 내보내 줘” 라고 하면 됩니다.
| 뒤에서 도는 기능 | |
|---|---|
| DXF 읽기 | AI 툴 자체(stdlib 로 POLYLINE·CIRCLE 파싱, bulge → 호 변환) |
| 모델 생성 | build_features(elements 프로파일 + circles, Params 별칭) |
| 확인 | inspect_object, get_screenshot, save_document |
원본 기록: https://github.com/WaveSimm/cadxray/blob/master/examples/pcb_from_dxf.py