2023년 8월 11일 금요일

Python 기반 Autocad 모델링 자동화 방법 및 코딩하기

이 글은 Python 기반 autocad 설계 모델링 자동화 및 코딩 방법을 예제를 통해 간단히 소개한다. 

캐드 디자인 자동화 예시

애드인 기반 설계 자동화 도구 개발
오토캐드는 매우 대중적?인 모델링 프로그램이다. 본인도 설계를 처음 접할 때 오토캐드를 사용했었다. 오토캐드는 장점이 많은 디자인 도구이나, 단점도 많다. 그 중 하나가 단순 반복적인 도면 작성 노가다이다. 이를 줄여주는 방법이 애드인 개발을 통한 디자인 자동화이다. 이를 이용하면, 몇 번의 파라메터 입력만으로 단순 반복적인 설계를 자동화할 수 있다. 

애드인 개발 방법은 다음과 같이 다양하다.
  • LISP 기반 개발. 도면 작도 유틸리티 개발이 가능.
  • .NET COM 기반 개발. VB, C# 등을 이용해 코딩. 사용자 이벤트 받아 처리하는 등의 개발 가능. 
  • ARX 기반 개발. C++을 이용해 코딩. Civil3D와 같은 복잡한 프로그램 개발이 가능함.
이 글은 이 방법 이외에 개발이 편리한 파이썬 pyautocad 기반 애드인 개발 방법을 정리한다. 이 라이브러리는 실행된 오토캐드와 연결되어, 캐드 기능 API를 호출할 수 있다. 참고로, 이외 에 pywin32 라이브러리를 통해 .NET COM이 지원되는 오토캐드를 포함한 모든 윈도우 프로그램을 파이썬으로 조작할 수 있다. 

개발 환경
오토캐드 파이썬 기반 개발을 위해 다음과 같이 프로그램을 설치한다.
pip install --upgrade pyautocad

옵션으로 vscode를 설치하면, 개발이 편리하다.

코딩 따라하기
현재 실행된 캐드 도면창에 간단한 텍스트 심벌을 가진 선과 원을 100개 생성해 본다. 파이썬 파일을 만들고, 다음을 코딩해 실행해 본다. 
 
from pyautocad import Autocad, APoint
import numpy as np

acad = Autocad(create_if_not_exists=True)
acad.prompt("Hello pyautocad\n")
print(acad.doc.Name)

no = 0
for i in range(10):
    for j in range(10):
        p1 = APoint(i * 35, j * 25)
        p2 = APoint(i * 35, j * 25 + 10)
        text = acad.model.AddText(u'Symbol-%s' % no, p1 - 1.0, 2.5)
        no += 1
        acad.model.AddLine(p1, p2)
        radius = np.random.randint(5, 10)
        acad.model.AddCircle(p1, radius)
 
for obj in acad.iter_objects():
    print(obj.ObjectName)


실행 결과는 다음과 같다. 자동으로 도형이 생성된다. 

파이썬으로 작업하므로, 편리한 라이브러리를 쉽게 사용할 수 있다. 도면 정보를 엑셀 스프레드시트로 저장해 본다. 
우선, pandas 라이브러리를 설치한다.
pip install pandas

다음을 코딩해 실행해 본다.
from pyautocad import Autocad, APoint
import pandas as pd

acad = Autocad(create_if_not_exists=True)

# save excel file
df = pd.DataFrame(columns=['Text', 'X', 'Y', 'Z'])
for obj in acad.iter_objects('Text'):
    x, y, z = obj.InsertionPoint
    df = pd.concat([df, pd.DataFrame([[obj.TextString, x, y, z]], columns=['Text', 'X', 'Y', 'Z'])])

df.to_excel('data.xlsx', index=False)


실행 결과는 다음과 같이 캐드 객체들의 정보가 엑셀이 저장된다.

마무리
이 글은 Python 기반 pyautocad 라이브러리를 이용해, 캐드 상에서 반복적이고 복잡한 설계 모델을 자동으로 생성하는 방법을 소개하고, 간단한 코딩 예제를 소개한다. 이 방법을 이용해, 강력한 파이썬 라이브러리를 이용해, 유용한 디자인 도구를 캐드 기반 위에 개발할 수 있을 것이다.  

부록: 오토캐드 객체 구조도

레퍼런스





댓글 2개: