AutoCAD와 CADian에서 파일 하나로 도는 AutoLISP 도구 설계

업무 자동화4분 읽기

CAD 자동화 도구를 하나 만들 때, 하나의 CAD만 지원하면 일이 절반으로 줄어듭니다. 문제는 현장이 그렇게 단순하지 않다는 데 있습니다. 사무실은 AutoCAD를 쓰고 다른 자리는 국산 CADian을 씁니다. 도면 작도 자동화 도구를 만들며 처음부터 걸린 조건이 AutoCAD 2022와 CADian 2026 양쪽에서 같은 파일 하나로 동작해야 한다는 것이었습니다. 두 CAD를 동시에 만족시키기 위해 세운 원칙을 정리합니다.

두 CAD는 닮았지만 같지 않다

CADian은 IntelliCAD 계열이라 AutoCAD와 명령어 체계도 비슷하고 AutoLISP과 DCL도 지원합니다. 겉보기에는 거의 같아 보여서 한쪽에서 짠 코드가 다른 쪽에서도 그냥 돌 것 같지만 함정은 세부에 있습니다. 특정 CAD에만 있는 확장 함수, 버전마다 다른 파일 경로, ActiveX나 COM 같은 외부 연동은 한쪽에서만 동작하거나 아예 크래시를 냅니다.

그래서 원칙을 뒤집었습니다. 두 CAD가 각각 무엇을 지원하는지 나열해 교집합을 찾는 대신, 처음부터 양쪽이 확실히 지원하는 표준 함수만 쓰기로 못 박았습니다. 화려한 기능을 포기하는 대신 어디서도 깨지지 않는 기반을 택했습니다.

쓰지 않기로 정한 것들

호환성 설계에서는 무엇을 쓸지보다 무엇을 쓰지 않을지가 더 중요했습니다. 가장 먼저 배제한 것은 ActiveX와 COM 연동입니다. AutoCAD에서는 되지만 CADian에서 동작이 보장되지 않고 부팅 시점의 상태에 따라 크래시로 이어질 수 있습니다. 도형을 그릴 때 흔히 쓰는 ActiveX 방식 대신 순수 LISP 함수인 entmake를 택한 것도 이 때문입니다.

엑셀 연동도 뺐습니다. CSV 일괄 작도 기능에서 엑셀 파일을 직접 읽으면 편하지만 그 방식은 엑셀이 설치된 특정 환경에서만 돌고 CADian에서는 기대할 수 없습니다. 그래서 파일을 직접 한 줄씩 읽어 파싱하는 순수 방식으로 CSV를 처리하고 엑셀 직접 읽기는 되면 좋은 부가 기능으로만 뒀습니다. 그 밖에 특정 CAD 전용 확장 도구 함수나 반응자 같은 고급 기능도 이 도구에는 불필요해 쓰지 않았습니다.

표준 함수로만 쌓은 기반

배제하고 나면 남는 도구는 단출하지만 튼튼합니다. 도형은 entmake로, 치수와 선종 로드처럼 복합 작업은 표준 command 명령으로, 삽입점 입력은 getpoint로, 입력창은 DCL의 표준 요소만으로 구성했습니다. 명령어에는 국제화 접두 기호를 붙여 언어 설정이 다른 환경에서도 같은 명령이 불리도록 했습니다.

이렇게 쌓으면 코드가 두 CAD에서 같은 결과를 냅니다. 어느 한쪽에만 있는 기능에 기대지 않으니 한 파일을 두 CAD에 그대로 로드해도 분기 처리 없이 동작합니다. 실무자 입장에서는 어느 자리에 앉든 같은 도구를 씁니다.

그래도 다른 부분은 폴백으로

표준 함수만 써도 환경 차이가 완전히 사라지지는 않습니다. 대표적인 것이 중심선에 쓰는 CENTER 선종입니다. 이 선종은 외부 선종 파일에서 로드해야 하는데 파일 이름과 경로가 CAD와 환경에 따라 다릅니다. 미터법이냐 인치법이냐에 따라 우선 찾을 파일도 갈립니다.

그래서 여러 후보 파일을 순서대로 찾아보고 그래도 로드에 실패하면 CENTER 대신 실선으로 조용히 대체한 뒤 작도를 계속하게 했습니다. 선종 하나 때문에 전체 작도가 멈추는 것보다, 중심선이 실선으로 나오더라도 도면이 완성되는 편이 낫다고 판단했습니다. 환경 차이를 완전히 없앨 수 없을 때는 이렇게 안전한 대체를 준비해 두는 것이 두 CAD 양립의 마지막 안전장치가 됩니다.

파일 경로 의존을 아예 없앤 입력창 처리는 DCL 못 찾음을 없앤 내장 DCL에서, 도형을 순수 함수로 그리는 방식은 entmake로 도형, command로 치수에서 더 다룹니다. 이 도구의 전체 사례는 AutoCAD 도면 작도 자동화 도구에서 볼 수 있습니다.

자주 묻는 질문

CADian은 AutoCAD와 완전히 호환되나요?

CADian은 IntelliCAD 계열이라 명령어 체계가 비슷하고 AutoLISP과 DCL을 지원하지만 세부 동작과 지원 함수에는 차이가 있습니다. 특히 ActiveX나 COM 연동, 일부 확장 함수는 CADian에서 동작이 보장되지 않으므로 두 CAD 공통의 표준 함수만 쓰는 것이 안전합니다.

왜 엑셀 직접 읽기를 기본으로 쓰지 않았나요?

엑셀 파일을 직접 읽으려면 엑셀이 설치된 특정 환경에 의존하는데 CADian에서는 이 방식의 동작을 기대하기 어렵습니다. 그래서 어디서나 도는 CSV 텍스트 직접 파싱을 기본으로 삼고 엑셀 직접 읽기는 환경이 맞을 때만 되는 부가 기능으로 뒀습니다.

환경마다 다른 부분은 어떻게 처리했나요?

표준 함수로도 흡수되지 않는 차이는 폴백으로 대비했습니다. 예를 들어 중심선 선종은 여러 후보 파일을 순서대로 찾고 그래도 로드에 실패하면 실선으로 대체한 뒤 작도를 계속합니다. 한 요소의 환경 차이가 전체 작도를 멈추지 않도록 설계했습니다.

#CADian#AutoCAD#AutoLISP#IntelliCAD#호환성

업무자동화 구축이 필요하신가요?

무료 상담 신청