티스토리 뷰
Python ezdxf로 AutoCAD처럼 치수선 꾸미기 - 초보자 가이드
AutoCAD에서 치수선을 만들 때, 실제 측정값 앞에 문구를 추가해 꾸미는 기능을 사용해본 적 있으신가요? 예를 들어 "직선거리 1000"처럼 말이죠. 오늘은 Python의 ezdxf 라이브러리를 이용해 AutoCAD와 동일한 기능을 구현하는 방법을 초보자도 쉽게 이해할 수 있도록 설명드리겠습니다.
ezdxf란?
ezdxf는 Python으로 DXF(Drawing Exchange Format) 파일을 생성하고 수정할 수 있는 라이브러리입니다. DXF는 AutoCAD에서 사용하는 도면 파일 형식으로, 이 라이브러리를 사용하면 CAD 소프트웨어 없이도 도면 작업을 자동화할 수 있습니다.
설치하기
ezdxf는 Python 패키지로 간단히 설치할 수 있습니다: ```bash pip install ezdxf
치수선 만들기
목표
"직선거리 1000"과 같은 고정 문구와 가변 거리 값이 포함된 살아있는 치수선을 만들어 봅시다. 거리는 선의 위치를 변경하면 자동으로 업데이트되도록 설정합니다.
기본 코드
아래는 "직선거리" 문구와 함께 치수선을 만드는 예제입니다:
import ezdxf
# 새로운 DXF 파일 생성
doc = ezdxf.new()
# 모델 공간 가져오기
msp = doc.modelspace()
# 치수선 생성
dim = msp.add_linear_dim(
base=(0, 0), # 치수선의 기준점
p1=(0, 0), # 첫 번째 점
p2=(1000, 0), # 두 번째 점 (1000 단위 거리)
override={
"dimpost": "직선거리 <>", # "직선거리" + 측정값
}
)
# 치수선 렌더링
dim.render()
# DXF 파일 저장
doc.saveas("linear_dimension_with_text.dxf")
코드 설명
- 기본 치수선 설정:
- p1과 p2는 치수선의 시작점과 끝점입니다.
- dimpost는 치수선에 표시될 텍스트를 정의합니다. 여기서 <>는 실제 측정값이 들어갈 자리입니다.
- "직선거리" 문구 추가:
- "dimpost": "직선거리 <>"는 치수선 텍스트 앞에 "직선거리"라는 고정 문구를 추가합니다.
- 렌더링과 저장:
- dim.render()는 치수선을 도면에 렌더링합니다.
- doc.saveas()로 파일을 저장합니다.
결과
- 생성된 DXF 파일을 AutoCAD로 열면, 치수선에 "직선거리 1000"이 표시됩니다.
- 선을 스트레치하면, 거리 값(숫자)이 자동으로 업데이트되며 "직선거리"는 고정됩니다.
스타일 커스터마이징
더 세련된 치수선을 만들고 싶다면 색상, 선 스타일, 두께를 추가로 설정할 수 있습니다:
dim = msp.add_linear_dim(
base=(0, 0),
p1=(0, 0),
p2=(1000, 0),
override={
"dimpost": "직선거리 <>",
"dimclrd": 1, # 빨간색 치수선
"dimltype": "DASHED", # 점선 스타일
"dimlwd": 35, # 선 두께 (0.35mm)
}
)
dim.render()
ezdxf를 사용하여 문구를 포함한 가변적인 치수선을 생성할 수 있습니다. 치수선에 "직선거리"와 같은 고정 문구를 추가하고, 치수선의 실제 측정값(거리가 변경될 경우 자동 갱신)과 함께 표시하는 방법은 아래와 같습니다.
주요 아이디어
- 치수선 텍스트 템플릿(dimpost)을 사용하여 문구를 추가합니다.
- 텍스트에서 측정값(<>)을 고정 문구와 결합해 표시합니다.
- 선형 치수선을 생성하고, AutoCAD에서 사용하는 것처럼 가변적으로 치수선을 업데이트할 수 있도록 설정합니다.
예제 코드
아래 코드는 "직선거리"라는 고정 문구와 측정값이 포함된 치수선을 생성합니다.
import ezdxf
# 새로운 DXF 파일 생성
doc = ezdxf.new()
# 모델 공간 가져오기
msp = doc.modelspace()
# 치수선 생성
dim = msp.add_linear_dim(
base=(0, 0), # 치수선의 기준점
p1=(0, 0), # 첫 번째 점
p2=(1000, 0), # 두 번째 점 (1000 단위 거리)
override={
"dimpost": "직선거리 <>", # "직선거리" + 측정값
}
)
# 치수선 렌더링
dim.render()
# DXF 파일 저장
doc.saveas("linear_dimension_with_text.dxf")
설명
- dimpost 속성:
- "직선거리 <>"는 dimpost의 템플릿입니다.
- <>는 치수선의 실제 측정값이 표시되는 자리입니다.
- "직선거리"는 고정된 텍스트입니다.
- 가변 치수선:
- ezdxf의 치수선은 렌더링(render) 후, AutoCAD와 같은 뷰어에서 선의 위치가 변경되면 측정값이 자동으로 갱신됩니다.
- 예를 들어, p1과 p2의 위치를 변경하면 치수선의 값도 업데이트됩니다.
결과
위 코드로 생성된 DXF 파일은:
- 치수선 텍스트: "직선거리 1000" (기본 거리 1000)
- 선을 스트레치하면 측정값(숫자)은 자동으로 갱신됩니다.
- "직선거리"는 고정된 문구로 유지됩니다.
추가 설정 (선 색상 및 스타일)
override 속성을 사용하여 치수선의 스타일을 더욱 세부적으로 조정할 수 있습니다:
dim = msp.add_linear_dim(
base=(0, 0),
p1=(0, 0),
p2=(1000, 0),
override={
"dimpost": "직선거리 <>",
"dimclrd": 1, # 빨간색 치수선
"dimltype": "DASHED", # 점선 스타일
"dimlwd": 35, # 선 두께
}
)
dim.render()
요약
ezdxf를 사용하면 치수선 텍스트 템플릿(dimpost)을 통해 고정 문구와 측정값을 조합할 수 있습니다. AutoCAD와 호환되며, 선의 길이가 변경되더라도 측정값이 자동으로 갱신되는 살아있는 치수선을 만들 수 있습니다. 추가적으로, dimclrd, dimltype, dimlwd를 활용하여 치수선의 색상과 스타일을 커스터마이징할 수도 있습니다.
마무리
ezdxf를 사용하면 AutoCAD와 같은 고급 기능을 Python으로 쉽게 구현할 수 있습니다. 특히 치수선 텍스트 템플릿(dimpost)을 사용하면 문구와 측정값을 조합하여 더욱 직관적인 도면을 만들 수 있습니다. AutoCAD를 자주 사용하거나 DXF 자동화를 고려하고 계신다면, 오늘 배운 내용을 활용해 보세요!
더 궁금한 점이 있다면 댓글로 남겨주세요. DXF 자동화의 세계는 정말 흥미롭습니다!
'IT tech Coding > python' 카테고리의 다른 글
python 조건문 활용으로 프로그래밍 효율성을 높이는 방법 (0) | 2024.12.05 |
---|---|
[파이썬] 도면 자동작도를 위한 import 정리 (0) | 2024.11.20 |
두 개의 엑셀 파일을 비교하고 추가된 행만 추출하는 파이썬 코드 (0) | 2024.08.20 |
OSError: [WinError 193] %1은(는) 올바른 Win32 응용 프로그램이 아닙니다 (0) | 2024.08.09 |
global 선언을 수백개 인경우는 어떻게 하면 더 좋을까? (0) | 2024.07.07 |
- Total
- Today
- Yesterday
- 엑셀입력보호
- #InstallForge
- Bootstrap 5
- 파이썬코드줄바꿈방법
- 코딩효율성
- #파이썬패키징
- chatGPT3.5파이썬버전
- 구글드라이브API
- #InnoSetup
- 테크에능한여성
- #독립실행파일
- sql문장 날짜계산
- 스크립트작성기초
- 오토핫키가이드
- ajax오류메시지
- General error: 2031
- isset을 적용해야 하는 이유
- 엑셀보호
- 오블완
- 엑셀셀보호
- 효율적코딩방법
- #프로그램설치
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- #NSIS
- 뫄프로그래밍
- json파일형태보기
- json파일편하게보는법
- 프로그래머생활
- 코딩튜토리얼
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |