콘텐츠로 이동

실습 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 를 FreeCAD 로 가져온 평면 뷰(도면 밖 잡객체 숨김) — 1/40 도면, 정면·측면·평면과 BOM
완성: 철봉 프레임 3D
완성 Body 7종(피처 12)은 숨기고 Link 27개만 표시 — 기둥·가로 파이프·각관·거싯·베이스·캡·기초, 전부 유효
구분 파일 설명 크기
원본 연대포구 철봉 도면(각관부착).dxf DXF 751 KB
완성 완성-pole_frame.FCStd 프레임 전체 675 KB
완성 완성-pole_frame.step STEP (Link 27개 컴파운드) 1.0 MB
  1. FreeCAD 1.1.3 을 켜고 리포트 뷰에 [CAD X-ray] 서버 시작 을 확인합니다.
  2. AI 툴을 엽니다. DXF 를 읽으려면 AI 툴 쪽 파이썬에 ezdxf 가 필요합니다. 없으면 AI 가 설치를 제안하니 허락합니다.
  3. DXF 를 내려받아 경로를 기억해 둡니다(예: C:\work\pole\연대포구 철봉 도면(각관부착).dxf).
  4. 새 문서를 엽니다.

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) 으로 그려져 있어 부품표와 다른데, 이런 어긋남을 표에 적어 줍니다.

확인하기 — 아래와 비슷한 표가 나와야 합니다. 원본 기록에서 확인된 값입니다.

이렇게 말한다
가정 확인할게.
- 기둥은 부품표(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 뷰에서 기둥 아래쪽 앞면에 작은 사각 구멍(케이블 인입구), 위쪽에 점검구가 보입니다.

이렇게 말한다
가로 파이프 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 부피를 물어 두면 나중에 비교할 수 있습니다.

이렇게 말한다
나머지 4개도 만들어 줘.
- Gusset: 10t, BRACKET1 모양(150×400, 스나이프 20 직선), 기둥 중심 원점 기준 -X 쪽에 세움
- BasePlate: 10t, 600×1800
- CapPlate: 6t, Ø240
- Foundation: 800×1800, 아래로 1500
하나씩 만들고 각각 유효한지 확인해 줘.
이렇게 말한다
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. 스크린샷에서 기둥 두 개 사이에 가로 파이프가 걸리고 각관이 앞면에 붙어 있으면 성공입니다.

이렇게 말한다
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

원본 기록: examples/pole_frame_from_dxf.py