개요
이 개발일지는 2D 작도와 3D 모델링을 한 프로그램에서 수행하는 CAD 프로그램 iCAD 의 개발 과정을 기록한다. v1.0.0.0(2026.9.10.)부터 v1.0.0.5(2026.10.30.)까지 여섯 판의 작업을 한 편으로 종합하였다.
2D 작도는 AutoCAD 의 명령 체계와 화면 배치를 따르고, 3D 모델링은 ANSYS SpaceClaim 의 직접 모델링 방식을 따른다. 형상 계산에는 공개 형상 커널 OCCT 를, 화면에는 Python 과 PySide6 를 사용하였다.
그림 1은 iCAD 의 기능 목록과 구현 여부를 나타낸다. 그림 2는 판별 작업 순서와 날짜를 나타낸다.
-
- 1로고 창
- 2리본
- 3파일 메뉴
- 4명령줄
- 5플로팅 명령줄
- 6입력 자동 완성
- 7선택지 링크
- 8모형·배치 탭
- 9상태 표시줄
- 10도킹 창
- 11작업 공간 전환
- 12도움말
- 132D 배경 밝기
- 14여러 문서 탭
- 15명령 별칭 사용자 지정
- 16리본 사용자 지정
- 17다국어
- 18팔레트 창
-
- 1설정 파일
- 2옛 설정 이어받기
- 3저장되는 값
- 4사용자 별칭 파일
- 5객체 스냅 종류 고르기
- 63D 도구 옵션 창
- 7격자 간격·극좌표 증분 바꾸기
- 8통합 옵션 대화상자
- 9단위 선택
-
-
- 1Windows 실행 파일
- 2exe 다시 빌드
- 3실행 파일 크기
- 4설치 프로그램
-
- 1엔진 시험
- 2화면 시험
- 3실행 파일 자체 점검
- 4실제 Windows 손 시험
- 5반응속도 측정
-
- 1개발일지 1편
- 2genealogypost.com 게시
-
-
-
- 1선
- 2폴리선
- 3원
- 4호
- 5직사각형
- 6폴리곤
- 7한 줄 문자
- 8타원
- 9스플라인
- 10점
- 11구성선
- 12도넛·구름형 수정 기호
-
- 1지우기
- 2이동
- 3복사
- 4회전
- 5축척
- 6대칭
- 7간격띄우기
- 8자르기
- 9연장
- 10분해
- 11모깎기
- 12모따기
- 13그립 편집
- 14배열
- 15늘리기
- 16끊기
- 17잇기
- 18특성 일치
- 19길이 조정
- 20정렬
-
- 1선형 치수
- 2정렬 치수
- 3반지름 치수
- 4지름 치수
- 5해치
- 6각도 치수
- 7기준선·연속 치수
- 8지시선
- 9여러 줄 문자
- 10치수·문자 스타일
- 11치수 한 명령
- 12세로좌표 치수
- 13연관 치수
- 14치수 그립·문자 편집
- 15치수 재지정
- 16표
-
- 1도면층
- 2특성 창
- 3선 종류 표시
- 4선 가중치
- 5선 종류 축척
- 6블록
- 7도면층 도구
- 8도면층 상태
- 9정리·검사
-
- 1블록 속성
- 2블록 편집기
- 3블록 팔레트
- 4비균일 축척 블록
- 5블록 쓰기
- 6외부 참조
- 7DesignCenter
- 8그룹·그리기 순서
- 9클립보드
- 10동적 블록
-
- 1좌표 입력
- 2객체 스냅 9종
- 3직교
- 4극좌표 추적
- 5격자·격자 스냅
- 6동적 입력
- 7객체 스냅 추적
- 8임시 재지정
-
- 1거리
- 2면적
- 3점 좌표
- 4객체 정보
-
- 1줌·이동
- 2창·교차 선택
- 3되돌리기·다시 실행
- 4오른쪽 클릭 메뉴
- 53D 스케치로 보내기
- 6올가미 선택
- 7빠른 선택·유사 선택
- 8반응속도 최적화
-
- 1배치·뷰포트
- 2뷰포트 축척
- 3페이지 설정
- 4PDF 플롯
- 5표제란
- 6프린터 인쇄
-
- 1표면거칠기 기호
- 2기하공차 틀·데이텀
- 3치수공차 첨자·끼워맞춤 기호
- 4부품번호 풍선·부품표
- 5요목표
- 6나사·기어·베어링 약도
- 7표제란·도면 양식
-
-
-
- 1스케치 평면 고르기
- 2선·사각형·원·3점 호
- 3잘라내기·곡선 지우기
- 4그리는 중 치수 입력
- 5스케치 스냅
- 6영역 자동 인식
- 72D 도면에서 가져오기
- 8스케치 구속조건
- 9폴리곤·슬롯·타원·스플라인
- 10스케치 모깎기·간격띄우기
-
- 1영역을 입체로
- 2면 당기기
- 3모서리 당기기
- 4회전 당기기
- 5원통면 당기기
- 6쓸기
- 7블렌드
- 8구배
- 9대상까지 당기기
-
- 1이동·회전 조작기
- 2수치 이동·회전
- 3대칭
- 4패턴
-
- 1채우기
- 2합치기·빼기·교차
- 3쉘
- 4면 간격띄우기
- 5몸체 나누기
-
- 1기준 평면
- 2원점 평면 표시
- 3기본 도형
- 4기준 축·점
-
- 1거리 측정
- 2질량 속성
- 3재료 지정
- 4각도 측정
- 5단면 모드
- 6간섭 검사
-
- 1제3각법 투영
- 2단면도·상세도
-
- 1표준 방향
- 2마우스 회전·이동·확대
- 3구조 트리
- 4되돌리기·다시 실행
- 5표시 모드
- 6조립품
-
-
-
- 1자체 형식
- 2STEP · STP
- 3IGES · IGS
- 4STL
- 53MF
- 6DXF
- 7DWG
- 8PDF 내보내기
- 9SVG · PNG 내보내기
- 10OBJ · Parasolid · SAT
-
- 1새로 만들기·열기·저장
- 2가져오기
- 3최근 파일
- 4한글 경로
- 5자동 저장·복구
-
- 요구 조건과 비교 대상(AutoCAD, SpaceClaim) 정리
- 형상 커널과 화면 구조 결정
- 첫 판에서 2D 작도, 3D 모델링, 파일 형식을 한 번에 구현
- 기능 지도 작성 후 판마다 공백 항목 보완
- 설치 파일 생성과 실제 Windows PC 시험
- 반응속도 측정과 개선
- ☑ 2D 작도·3D 모델링·형식 7종 첫 판 구현 (3.1절)
- ☑ 기능 지도 158개 조사와 판별 계획 수립 (2.2절)
- ☑ 2D 보완 25건, v1.0.0.1과 v1.0.0.2 (3.2절)
- ☑ AutoCAD 방식 명령줄·치수·배치·PDF 출력 (3.3절)
- ☑ 회전 당기기·원통면 당기기·대칭·재료 15종 (3.4절)
- ☑ AutoCAD 명령 수집과 공백 46건 보완, 명령 196개 (3.5~3.6절)
- ☑ Inno Setup 설치 파일 생성과 PC 사례 시험 6건 (3.5절)
- ☑ 반응속도 측정, 휠 확대 354 ms에서 4 ms (3.7절)
- ☑ 동력전달장치 기준 도면 수집 (1.3절)
- ☐ 기계 제도 기호(표면거칠기, 기하공차, 부품표) (4절, 다음 판)
- ☐ 새 설치 파일의 마우스 작도 시험 (4절, 진행 중)
1. 정보수집
1.1 요구 조건과 비교 대상
첫 판의 요구는 2D 작도와 3D 모델링을 함께 지원하고, IGES, STL, STEP, DXF, DWG 형식을 주고받는 것이었다. 완료 기준은 2D 스케치를 입체로 만들어 STEP 과 STL 로 저장하는 것으로 정하였다.
작업 중에 화면 기준이 추가되었다. 2D 는 AutoCAD 수준, 3D 는 ANSYS SpaceClaim 수준의 인터페이스를 갖추도록 하였다. 표 1은 iCAD 와 상용 CAD 의 형상 생성 방식을 비교한 것이다.
표 1 형상 생성 방식 비교
| 프로그램 | 2D 도면 | 3D 형상 생성 | 형상 커널 |
|---|---|---|---|
| AutoCAD | 독립 2D 작도가 중심 | 솔리드 명령 위주, 이력 없음 | ShapeManager |
| SolidWorks | 3D 모델에서 투영 | 스케치 구속과 피처 이력 | Parasolid |
| CATIA | 3D 모델에서 투영 | 스케치 구속과 피처 이력 | CGM |
| Creo | 3D 모델에서 투영 | 스케치 구속과 피처 이력 | Granite |
| SpaceClaim | 3D 모델에서 투영 | 면을 당기는 직접 모델링 | ACIS |
| iCAD | 독립 2D 작도(AutoCAD 명령) | 면을 당기는 직접 모델링 | OCCT 8.0.1 |
iCAD 의 2D 객체와 3D 스케치 객체는 같은 자료 구조를 사용한다.
1.2 AutoCAD 명령 수집
v1.0.0.5 에서는 AutoCAD 강의 영상을 따라 기능 공백을 찾았고, 이어서 Autodesk 공식 도움말의 명령 참조 문서를 기준으로 명령과 옵션을 수집하였다(참고문헌 1, 2).
수집은 네 군으로 나누었다. A군은 그리기와 문자, B군은 수정과 선택, C군은 블록과 참조와 도면층, D군은 치수와 보기와 단축키이다. 군마다 옵션 키워드와 효과를 적고 iCAD 소스와 대조하여 있음, 일부, 없음으로 판정하였다.
대조 결과 공백 46건(G-01~G-46)을 찾았다. 그립 모드 순환, 블록 속성, 블록 편집기, 외부 참조, DesignCenter, 도면층 특성 관리자, 임시 재지정 키가 큰 공백이었다.
1.3 동력전달장치 기준 도면
도면 완성도의 기준은 전산응용기계제도기능사 실기 수준의 동력전달장치 도면으로 정하였다. 한국산업인력공단 공개문제는 도면 쪽이 비어 있어, 도면 양식 규정만 확보하였다(참고문헌 3).
조립도와 부품도는 교육용 공개 자료에서 6종을 모았다. 그 도면에는 표면거칠기 기호, 기하공차 기입 틀, 데이텀, 치수공차 첨자, 부품번호 풍선, 요목표가 쓰인다. 이 기호들은 현재 iCAD 에 없으며 다음 판의 범위로 정하였다.
2. 전략수립
2.1 프로그램 구조
표 2는 첫 판에서 정한 구조와 그 근거를 나타낸다.
표 2 구조 결정
| 항목 | 결정 | 근거 |
|---|---|---|
| 형상 커널 | OCCT 8.0.1 (cadquery-ocp) | STEP, IGES, 불리언, 모깎기, 은선 제거를 한 라이브러리에서 처리한다. LGPL 무료 |
| 3D 방식 | 직접 모델링 | 이력 재생성이 없으므로 위상 명명 문제가 생기지 않는다 |
| 3D 화면 | OCCT V3d·AIS 를 PySide6 창에 연결 | 선택, 강조, 뷰 큐브, 이동 조작기를 OCCT 가 제공한다 |
| 2D 화면 | QPainter 와 명령 생성기 | AutoCAD 명령줄의 입력 요청과 값의 반복은 Python 생성기의 yield 와 같은 형태이다 |
| 2D·3D 자료 | 선, 호, 원, 폴리선 객체 공유 | 2D 도면을 3D 스케치로 보내고 3D 몸체를 2D 도면으로 투영한다 |
| DWG | ODA File Converter 경유 | DWG 는 비공개 규격이므로 직접 구현하지 않았다 |
| 배포 | PyInstaller 폴더형과 Inno Setup | OCCT DLL 이 커서 한 파일형은 실행마다 수백 MB 를 풀어야 한다 |
2.2 기능 지도와 판별 계획
2026.10.26. 소스를 기능 단위로 조사하여 158개 항목을 구현 92, 일부 7, 없음 59로 분류하였다. 이 기능 지도를 기준으로 공백 항목을 판마다 나누어 넣었다. 표 3은 판별 주제를 나타낸다.
표 3 판별 주제
| 판 | 날짜 | 주제 |
|---|---|---|
| v1.0.0.0 | 2026.9.10. | 2D 작도, 3D 모델링, 형식 7종 |
| v1.0.0.1 | 2026.10.27. | 이름 변경, 2D 보완 13건(해치, 배열, 타원, 스플라인 등) |
| v1.0.0.2 | 2026.10.27. | 2D 보완 12건(블록, 여러 줄 문자, 지시선, 표 등) |
| v1.0.0.3 | 2026.10.29. | AutoCAD 방식 명령줄, 치수, 배치와 PDF 출력 |
| v1.0.0.4 | 2026.10.29. | 회전 당기기, 원통면 당기기, 대칭, 각도 측정, 재료 |
| v1.0.0.5 | 2026.10.30. | 2D 공백 46건, 설치 파일, PC 시험, 반응속도 |
2.3 시험 방법
시험은 네 단계로 구성하였다. 엔진 시험(enginetest)은 화면 없이 연산과 파일 왕복을 확인한다. 화면 시험(realtest)은 마우스와 자판 사건을 실제 창에 보내고 화면을 저장한다.
실행 파일 자체 점검(–selftest)은 빌드한 exe 안에서 핵심 기능을 다시 실행한다. 마지막으로 사용자 PC 에 설치 파일을 설치하고 사례 도면을 그린 뒤 제거하는 시험을 반복하였다.
3. 예시. iCAD 개발 과정과 결과
3.1 첫 판 v1.0.0.0
첫 판에서 2D 명령 30개, 3D 도구(선택, 당기기, 이동, 채우기, 결합, 스케치), 파일 형식 7종을 구현하였다. 3D 에서 2D 로 가는 제3각법 투영은 OCCT 은선 제거로 숨은선을 HIDDEN 선 종류로 그린다.
STEP 왕복은 부피 56,858.407 mm³ 로 일치하였다. IGES 는 읽은 결과가 곡면 묶음이라 부피가 54,858 로 달랐고, 꿰매기(Sewing) 후 닫힌 껍질을 고체로 바꾸어 일치시켰다.
2만 3천 객체 도면에서 마우스 이동 한 번에 약 200 ms 가 걸렸다. 객체 전체를 매번 검사하였기 때문이며, 경계 상자 numpy 배열 색인을 적용하여 선택 0.3 ms, 스냅 1 ms 로 줄였다.
3.2 2D 보완 v1.0.0.1, v1.0.0.2
두 판에 걸쳐 2D 명령 25건을 추가하였다. 해치 내부 점의 경계는 3D 스케치 영역 계산과 같은 OCCT 분할기로 찾는다. 그림 3은 v1.0.0.2 에서 추가한 객체를 한 화면에 그린 결과이다.

시계 방향 호 구간이 있는 폴리선의 면적이 틀린 결함을 이 과정에서 발견하였다. 호의 표본점을 반시계 순서로 뽑아 구간마다 점 순서가 뒤집혔기 때문이며, 진행 방향을 지키는 표본 함수로 고쳤다.
3.3 AutoCAD 방식 화면 v1.0.0.3
작도 화면 위에 반투명 플로팅 명령줄을 두고, 명령 이름과 별칭과 한글 이름으로 자동 완성 후보를 보이게 하였다. 치수는 DIM 한 명령으로 선, 원, 호를 보고 종류를 정한다.
치수 스타일 관리자는 AutoCAD 와 같은 7개 탭과 45개 변수를 갖는다. 그림 4는 DIM 명령으로 만든 선형, 각도, 지름 치수를 나타낸다.

배치는 모형 탭과 배치 탭, 용지 공간, 뷰포트와 축척, 페이지 설정, 600 dpi PDF 출력을 갖추었다. 그림 5는 배치1 의 뷰포트 화면이다.

3.4 3D 기본기 v1.0.0.4
3D 에는 면을 축 둘레로 돌리는 회전 당기기와, 구멍이나 축의 지름을 바꾸는 원통면 당기기를 추가하였다. 그림 6은 직선 당기기와 모서리 모깎기로 만든 판이고, 그림 7은 Z 축 둘레 회전 당기기 결과이다.


재료는 강, 알루미늄 6061, ABS 등 15종과 사용자 밀도를 지정할 수 있으며, 질량 속성 계산에 반영된다.
3.5 설치 파일과 PC 사례 시험 v1.0.0.5
Windows 실행 파일은 컨테이너의 wine 환경에서 PyInstaller 로 만들고, Inno Setup 으로 설치 파일(86 MB)을 생성하였다. 관리자 권한 없이 사용자 폴더에 설치되고 제어판에서 제거된다.
wine 에서는 Qt6Core 가 Windows 10 시스템 DLL 인 icuuc.dll 을 요구하였다. 함수 20개를 가진 대역 DLL 을 mingw 로 만들어 wine 에만 두었고, 설치 파일에는 넣지 않았다.
사용자 PC 에 설치한 뒤 공개 연습 도면 6건을 그리거나 열어 보았다. 표 4는 이 시험에서 발견하여 고친 결함을 나타낸다.
표 4 PC 사례 시험에서 고친 결함
| 현상 | 원인과 조치 |
|---|---|
| 모깎기한 사각형을 안쪽으로 간격띄우기하면 실패 | 반지름이 0 이하가 되는 호 구간을 빼고 이웃 구간을 잇도록 수정 |
| DXF 로 저장하면 HIDDEN 선 종류가 실선으로 바뀜 | ezdxf 기본 선 종류 표에 없는 무늬를 저장 전에 추가 |
| 반지름으로 그린 폴리곤의 아래 변이 기울어짐 | 시작 각을 −90°+180°/n 으로 바꾸어 아래 변을 수평으로 |
| RECOVER 가 DXF 를 읽지 못함 | DXF 이면 ezdxf 복구 읽기를 사용 |
| 확인 창의 예·아니요 단추가 영어로 표시됨 | Qt 한국어 번역 파일을 실행 파일에 포함 |
| 인접한 두 고리의 해치 면적이 0 | 고리마다 포함 관계를 판정하여 섬만 빼도록 수정 |
| 폴리선 면적이 근삿값 | 호 구간의 활꼴 면적을 정확한 식으로 계산 |
| 새 배치에 뷰포트가 생기지 않음 | LAYOUTCREATEVIEWPORT 와 같이 첫 열람 때 뷰포트 생성 |
3.6 블록, 참조, 탐색기 v1.0.0.5
1.2절의 공백 46건을 9개 묶음으로 나누어 구현하였다. 블록에는 속성(ATTDEF), 블록 편집기(BEDIT), 비균일 축척, 블록 쓰기(WBLOCK)를 넣었고, 블록 팔레트에서 끌어 놓아 삽입할 수 있다.

탐색기 계열에는 외부 참조 팔레트, DesignCenter, 도면층 특성 관리자를 추가하였다. 도면층 관리자는 필터 나무, 검색, 상태 기호, 병합과 격리 메뉴를 갖는다. 그림 9는 도면층 관리자 화면이다.

그립은 Enter 로 신축, 이동, 회전, 축척, 대칭을 차례로 바꾸고, 누른 채 끌면 올가미 선택이 된다. Shift 와 객체 스냅 키를 누르는 동안 스냅을 임시로 바꾸는 임시 재지정 키도 추가하였다. 명령은 196개가 되었다.
3.7 반응속도 측정과 개선
CAD 는 마우스 동작과 화면 응답 사이의 지연이 작업 속도를 정한다. 이에 객체 1천, 1만, 5만 개의 도면을 만들어 사용자가 체감하는 동작 9가지의 시간을 측정하였다. 표 5는 개선 전후 값을 나타낸다.
표 5 동작별 응답 시간 (ms, 사건 처리와 다시 그리기 포함)
| 동작 | 1만 개 전 | 1만 개 후 | 5만 개 전 | 5만 개 후 |
|---|---|---|---|---|
| 휠 확대 한 단계 | 354.6 | 4.1 | 1,609.8 | 3.2 |
| 가운데 단추 끌어 이동 | 346.9 | 5.0 | 1,688.5 | 4.3 |
| 선 하나 그리기 명령 | 449.0 | 26.5 | 2,055.5 | 74.8 |
| 되돌리기 | 541.2 | 56.3 | 2,887.5 | 483.6 |
| 전체 선택 후 화면 | 3,248.0 | 10.3 | 93,509.6 | 23.0 |
| 선 그리기 중 마우스 이동(스냅) | 10.7 | 9.4 | 19.0 | 21.1 |
| 처음 전체 그리기 | 397.3 | 325.2 | 1,699.8 | 1,631.4 |
측정 scripts/bench.py, 가상 화면 1500×900, 7회 측정의 중앙값
휠 확대와 끌어 이동은 화면 전체를 다시 그리던 방식에서, 직전 그림을 새 축척으로 옮겨 보이고 동작이 140 ms 멈추면 다시 그리는 방식으로 바꾸었다.
도면이 바뀌면 객체마다 특성을 직렬화하여 이전 값과 비교하고, 바뀐 객체의 경계 상자 영역만 다시 그린다. 부분 갱신 그림과 전체 그림을 화소 단위로 비교하는 시험 32건을 모두 통과하였다.
전체 선택의 93.5초는 번호로 객체를 찾는 함수가 목록을 처음부터 검색하여 생긴 지연이었다. 번호 사전을 두어 23 ms 로 줄였다. 처음 전체 그리기와 5만 개 도면의 되돌리기는 개선하지 못하였다.
3.8 시험 결과 추이
표 6은 판별 시험 결과를 나타낸다. 모든 판에서 시험을 전부 통과하였다.
표 6 판별 시험 결과
| 판 | 엔진 시험 | 화면 시험 | 자체 점검 |
|---|---|---|---|
| v1.0.0.0 | 34/34 | 40/40 | 14/14 (wine exe) |
| v1.0.0.1 | 64/64 | 56/56 | 16/16 |
| v1.0.0.2 | 90/90 | 75/75 | 17/17 |
| v1.0.0.3 | 129/129 | 111/111 | 20/20 |
| v1.0.0.4 | 151/151 | 128/128 | 24/24 |
| v1.0.0.5 | 382/382 | 188/188 | 32/32 |
v1.0.0.5 wine exe 자체 점검은 31/32. 한글 파일 이름을 만들지 못하는 wine 제약 1건이며 실제 Windows 에서는 정상이다.
그림 10은 3D 몸체를 2D 도면으로 투영한 결과이다. 정면도, 평면도, 우측면도, 등각도가 한 도면에 배치된다.

4. 결과 및 남은 일
본 작업에서는 AutoCAD 방식 2D 작도와 SpaceClaim 방식 3D 직접 모델링을 한 프로그램에 통합한 iCAD 를 v1.0.0.5 까지 개발하였다.
2D 명령은 196개, 기능 지도의 끝 항목은 199개 중 165개를 구현하였다. 설치 파일을 사용자 PC 에 설치하여 사례 6건을 시험하였고 결함 8건을 고쳤다.
휠 확대와 끌어 이동은 5만 개 도면에서 4 ms 안팎으로 응답한다. 동력전달장치 도면에 필요한 기계 제도 기호는 아직 없으며, 다음 판에서 구현한다.
표 7 열린 항목
| 항목 | 내용 | 예정 |
|---|---|---|
| 기계 제도 기호 | 표면거칠기, 기하공차 틀과 데이텀, 치수공차 첨자, 부품번호 풍선과 부품표, 요목표 | v1.0.0.6(안) |
| 도면 양식 | A2 표제란, 윤곽선, 중심마크 | v1.0.0.6(안) |
| 마우스 작도 시험 | 새 설치 파일로 격자와 객체 스냅을 써서 대략 그린 뒤 간격띄우기와 자르기로 치수를 맞추는 시험 | 진행 중 |
| 반응속도 | 처음 전체 그리기 1.6초, 5만 개 되돌리기 0.48초, DXF 읽기 6.3초(5만 개) | 다음 판 |
| DXF 미지원 객체 | 3D 솔리드, 래스터 이미지, 와이프아웃, 다중선, 공차 객체 | 다음 판 |
| 3D 기본기 2 | 쉘, 패턴, 면 간격띄우기, 단면 모드, 기본 도형 | v1.0.0.7(안) |
참고문헌
- Autodesk, “AutoCAD 2024 Help, Commands”. https://help.autodesk.com/view/ACD/2024/ENU/
- Autodesk, “AutoCAD Keyboard Shortcuts Guide”. https://www.autodesk.com/shortcuts/autocad
- 한국산업인력공단, “전산응용기계제도기능사 실기 공개문제”, Q-Net. https://www.q-net.or.kr
- Open Cascade, “Open CASCADE Technology 8.0 Documentation”. https://dev.opencascade.org/doc/overview/html/
- ezdxf, “ezdxf Documentation”. https://ezdxf.readthedocs.io/