실습 10. 철봉 프레임 DXF 에서 3D 만들기 (종합)
| 항목 | 내용 |
|---|---|
| 입력 파일 | 10-pole-frame/연대포구 철봉 도면(각관부착).dxf (1/40 도면, 모델 좌표는 실치수 mm) |
| 걸리는 시간 | 10분 (프레임 생성 24초, 나머지는 가정 확인) |
| 결과물 | 부품 Body 7종(기둥·가로 파이프·각관·거싯·베이스 플레이트·캡·기초) + Link 27개 프레임 그룹, 파라미터 표 |
| 배우는 것 | 도면·부품표·주석이 서로 다를 때 무엇을 따를지 정하는 법, AI 의 «가정»을 표로 받아 하나씩 승인하는 대화, 종류당 Body 하나 + Link 인스턴스 구조, 긴 작업을 부품 단위로 나누는 습관 |
지금까지의 실습은 부품 하나였습니다. 이번에는 실제 현장 도면(연대포구 철봉 프레임, 각관 부착)으로 부품 7종·인스턴스 27개짜리 구조물을 만듭니다. 도면에는 규격이 세 곳(부품표 TEXT, 치수, 그림)에 흩어져 있고 서로 어긋나는 곳도 있습니다. 그래서 이 실습의 절반은 모델링이 아니라 AI 가 읽어 낸 것과 가정한 것을 표로 받아 확인하는 일입니다.
원본과 완성
섹션 제목: “원본과 완성”

| 구분 | 파일 | 설명 | 크기 |
|---|---|---|---|
| 원본 | 연대포구 철봉 도면(각관부착).dxf | DXF | 751 KB |
| 완성 | 완성-pole_frame.FCStd | 프레임 전체 | 675 KB |
| 완성 | 완성-pole_frame.step | STEP (Link 27개 컴파운드) | 1.0 MB |
- FreeCAD 1.1.3 을 켜고 리포트 뷰에
[CAD X-ray] 서버 시작을 확인합니다. - AI 툴을 엽니다. DXF 를 읽으려면 AI 툴 쪽 파이썬에
ezdxf가 필요합니다. 없으면 AI 가 설치를 제안하니 허락합니다. - DXF 를 내려받아 경로를 기억해 둡니다(예:
C:\work\pole\연대포구 철봉 도면(각관부착).dxf). - 새 문서를 엽니다.
1. 도면을 읽고 «읽어 낸 것 / 가정한 것» 표 받기
섹션 제목: “1. 도면을 읽고 «읽어 낸 것 / 가정한 것» 표 받기”C:\work\pole\연대포구 철봉 도면(각관부착).dxf 를 읽어 줘. FreeCAD 의 DXF 가져오기는 쓰지 말고 ezdxf 로 폴리라인·원·치수·글자·블록을 뽑아. 부품표(BOM)가 글자로 들어 있으니 파이프 규격은 거기서 읽어.아직 모델은 만들지 말고, 부품별로 «도면에서 읽어 낸 값 / 네가 가정한 값 / 근거»를 표로 보여 줘. 도면과 부품표가 다른 곳도 따로 적어 줘.AI 가 하는 일 — DXF 의 modelspace 에서 LWPOLYLINE·CIRCLE·DIMENSION(측정값)·TEXT·MULTILEADER·블록(BRACKET1)을 뽑고, 영역별로 그림을 그려 눈으로 대조합니다. 부품표 글자에서 파이프 규격(PIPE-250A SCH160 = OD 267.4×28.4t, PIPE-150A = OD 165.2×18.2t)을 읽습니다. 그림에는 기둥이 216(200A) 으로 그려져 있어 부품표와 다른데, 이런 어긋남을 표에 적어 줍니다.
확인하기 — 아래와 비슷한 표가 나와야 합니다. 원본 기록에서 확인된 값입니다.
2. 가정 승인·수정하기
섹션 제목: “2. 가정 승인·수정하기”가정 확인할게.- 기둥은 부품표(267.4) 따르는 것 맞아.- 각관 두께 4.5 OK.- 기초 깊이는 1800 대신 1500 으로.- 거싯 스나이프는 직선 근사 OK.- 넣지 않은 두 치수는 그대로 빼.이 값으로 파라미터 표를 만들어 줘. 모델은 아직 만들지 마.AI 가 하는 일 — 승인된 값으로 파라미터 이름·값 목록(pole_od, pole_t, pole_h, span, bar_od, tube_w, hole_d, hole_pitch, found_h …)을 정리합니다. 이 목록이 나중에 Spreadsheet Params 가 됩니다.
확인하기 — found_h 가 1500 으로 바뀌었는지, 기둥 중심 거리(span + pole_od = 2767.4)를 AI 가 계산해 두었는지 봅니다.
3. 부품 하나씩 만들기 — 기둥부터
섹션 제목: “3. 부품 하나씩 만들기 — 기둥부터”긴 작업은 부품 단위로 나눕니다. 한 번에 다 시키면 FreeCAD 가 오래 멈춰 있고 어디서 틀렸는지 찾기 어렵습니다.
파라미터 표를 Spreadsheet Params 로 넣고, 기둥 Body(Pole) 부터 만들어 줘.- 원점 중심, z = 플레이트 두께(10) 부터 6000 까지 파이프(OD·ID 는 Params 수식으로)- 앞면(-Y) 벽에만 점검구·케이블 인입구 포켓 (뒤 벽은 뚫지 말 것)만들면 스케치 DoF 와 부피를 알려 줘.AI 가 하는 일 — Params 시트를 만들고, 기둥 Body 에 Pad(원 2개 = 파이프)와 개구부 Pocket 을 쌓습니다. 포켓은 XZ 평면 스케치를 -Y 로 반지름+10 만큼만 파서 앞 벽만 뚫습니다. 치수는 Params.pole_od 같은 수식으로 연결됩니다.
확인하기 — 트리에 Params, Pole 이 있고 스케치 DoF 가 0 입니다. 3D 뷰에서 기둥 아래쪽 앞면에 작은 사각 구멍(케이블 인입구), 위쪽에 점검구가 보입니다.
4. 가로 파이프와 각관
섹션 제목: “4. 가로 파이프와 각관”가로 파이프 Body(Bar): X 방향, 중심 원점, 소재 길이 2557.1 (코핑 여유 포함), 양 끝을 기둥 곡면(기둥 중심 ±1383.7 에 Ø267.4 원)으로 코핑, Ø50 구멍 5개를 500/500/250/250/500/500 간격으로 앞뒤 관통.각관 Body(Tube): 150×100×4.5, 바닥 중심 원점, Z 로 4500. 뒷면을 기둥 곡면으로 코핑(기둥 중심은 각관 로컬 y = -50 + 77.67 + 133.7). 앞면에 Ø50 × 20개 @200 (첫 구멍은 각관 바닥에서 1100 - 550 = 550 위치), 구멍마다 Ø8 × 4개 십자(중심에서 33 씩). 전부 관통.AI 가 하는 일 — 각 Body 에 Pad + 코핑 Pocket(기둥 지름 원으로 자름) + 구멍 Pocket 을 쌓습니다. 각관 구멍은 Ø50 20개 + Ø8 80개 = 100개가 한 스케치에 들어갑니다.
확인하기 — Bar 의 양 끝이 오목하게 파여 있고 구멍 5개가 뚫려 있습니다. Tube 앞면에 구멍 20조가 일렬로 보입니다. 각 Body 부피를 물어 두면 나중에 비교할 수 있습니다.
코핑 깊이(28.6)나 기둥 중심 거리(2767.4)처럼 AI 가 계산한 값은 그대로 쓰게 둡니다. 「깔끔하게 2770 으로」 같은 반올림은 코핑이 안 맞아 부품이 떠 버립니다.
5. 받침 부품과 기초
섹션 제목: “5. 받침 부품과 기초”나머지 4개도 만들어 줘.- Gusset: 10t, BRACKET1 모양(150×400, 스나이프 20 직선), 기둥 중심 원점 기준 -X 쪽에 세움- BasePlate: 10t, 600×1800- CapPlate: 6t, Ø240- Foundation: 800×1800, 아래로 1500하나씩 만들고 각각 유효한지 확인해 줘.6. Link 로 조립
섹션 제목: “6. Link 로 조립”Frame 그룹을 만들고 Link 로 배치해 줘.- 기둥 2본: x = 0 과 2767.4- 기둥마다 캡(z 6000), 베이스 플레이트, 기초, 각관(앞면), 거싯 8장을 45° 씩 돌려서- 가로 파이프는 두 기둥 가운데, 윗면이 기둥 윗면과 같게원본 Body 7개는 숨기고, 재계산해서 Invalid 가 없는지와 전체 bbox 를 알려 줘. 그리고 iso 로 보여 줘.AI 가 하는 일 — 종류당 Body 하나를 두고 App::Link 27개(기둥 2·캡 2·베이스 2·기초 2·각관 2·거싯 16·가로 파이프 1)를 Placement 로 배치합니다. 재계산 후 Invalid 목록과 bbox 를 보고합니다.
확인하기 — Link 27개, Invalid 0. 스크린샷에서 기둥 두 개 사이에 가로 파이프가 걸리고 각관이 앞면에 붙어 있으면 성공입니다.
7. 검사
섹션 제목: “7. 검사”Frame 안 부품끼리 간섭이 있는지 봐 줘. 코핑한 곳(가로 파이프–기둥, 각관–기둥)은 접촉이어야 하고 겹치면 안 돼.AI 가 하는 일 — 부품 쌍의 최소 거리와 간섭 부피를 검사합니다. 바운딩 박스가 떨어진 쌍은 계산 없이 건너뜁니다.
확인하기 — 코핑 부위는 «접촉(거리 0, 간섭 0)»이고 간섭 부피가 0 이어야 합니다.
지금까지 만든 걸 C:\work\pole\pole_frame.FCStd 로 저장해 줘.결과 확인
섹션 제목: “결과 확인”| 항목 | 성공 기준 |
|---|---|
| 읽기 | 부품표에서 파이프 규격 2종, 치수 2500, MULTILEADER 개구부 2개, BRACKET1 블록을 읽어 냄. 정면도 216 vs 부품표 267.4 어긋남을 보고 |
| 파라미터 | Spreadsheet Params 에 별칭으로 등록, 피처 치수가 수식으로 연결 |
| 부품 | Body 7종 모두 유효, 스케치 DoF 0 |
| 조립 | Link 27개, Invalid 0, 코핑 부위 접촉·간섭 0 |
| 가정 | AI 가 정한 값(각관 두께·기초 깊이·스나이프 근사)이 모두 표로 나와 승인됨. 뜻이 불명확한 치수 2개는 모델에 없음 |
잘 안 될 때
섹션 제목: “잘 안 될 때”- DXF 를 FreeCAD 로 열었더니 2분 넘게 걸리고 객체가 수백 개 — FreeCAD 의 DXF 가져오기는 실크·치수 폴리라인까지 전부 Draft 객체로 만듭니다. 그래서 ezdxf 로 필요한 것만 뽑습니다. 실습 3 과 같은 이유입니다.
- AI 가 정면도의 216 을 기둥 지름으로 썼다 — 「부품표를 따르라」고 다시 말합니다. 도면·부품표가 다를 때 무엇을 따를지는 사람이 정합니다.
- 한 번에 다 만들다 FreeCAD 가 멈췄다 — 긴 파이썬 실행은 중단할 수 없습니다. 끝나길 기다리거나 강제 종료하고, 부품 단위로 나눠 다시 시킵니다.
- 떨어진 Pad 를 한 Body 에 넣으려다 실패 — 거싯 8장을 Body 하나에 Pad 8개로 만들면 안 됩니다. 거싯은 Body 하나 + Link 8개입니다.
- 간섭 검사가 오래 걸린다 — 27개면 몇 초지만 더 큰 어셈블리는 부품 이름을 좁혀 여러 번 나눠 부릅니다.
- Ø 기호가 “□” 나 “%%C” 로 보인다 — DXF 글꼴 문제로 지름 기호가 깨진 것입니다. 값은 그대로 지름입니다.
더 해보기
섹션 제목: “더 해보기”- 실습 7 방식으로 Frame 그룹의 어셈블리 도면(정면·평면·상세 2개·치수 13개)을 만들어 봅니다. 원본 기록에서는 87초가 걸렸습니다.
- 실습 9 방식으로 각관 Ø50 구멍 하나에 옆으로 500 N 을 걸어 구멍 주변 응력을 봅니다.
- 「기둥은 STEEL, 기초는 밀도 2.4」로 전체 질량과 무게중심을 물어봅니다.
- Params 시트에서 span 을 3000 으로 바꾸고 재계산해 가로 파이프와 Link 위치가 따라오는지(안 따라오면 어디를 수식으로 바꿔야 하는지) AI 에게 물어봅니다.
뒤에서 도는 기능
섹션 제목: “뒤에서 도는 기능”| 단계 | 기능 |
|---|---|
| DXF 읽기 | AI 툴 쪽 파이썬 + ezdxf (FreeCAD 밖) |
| 파라미터·피처 쌓기 | build_features (params → Spreadsheet, circles·polygons·rect·pocket through/midplane) |
| Link 배치·그룹 | execute_code (App::Link, Placement) |
| 간섭·질량 | check_interference, get_mass_properties |
| 확인·저장 | tracked_recompute, get_screenshot, save_document |