AutoLISP으로 도면을 자동 작도할 때 가장 먼저 갈리는 결정은 객체를 어떻게 만들 것인가입니다. 같은 선 하나를 긋더라도 방법이 여러 갈래이고 무엇을 고르느냐에 따라 도구의 안정성과 두 CAD 호환성이 달라집니다. AutoCAD와 CADian에서 함께 도는 도면 작도 도구를 만들며 이 선택을 도형은 entmake, 치수는 command로 정리했습니다. 그 기준을 정리합니다.
command 방식의 함정
가장 직관적인 방법은 사람이 명령어를 치듯 command 함수로 그리는 것입니다. (command "_line" p1 p2 "")처럼 쓰면 실제 LINE 명령이 실행됩니다. 익숙하고 빠르게 짜이지만 문제가 있습니다. command는 현재 도면의 상태에 그대로 영향을 받습니다. 객체 스냅(osnap)이 켜져 있으면 클릭하지 않은 점에 선이 붙고 명령 에코(cmdecho) 설정에 따라 명령창이 지저분해집니다.
더 큰 문제는 부작용입니다. command로 작업하려면 osmode나 cmdecho 같은 시스템 변수를 잠시 바꿔야 할 때가 많은데, 이 변수를 원래대로 되돌리지 않으면 도구를 쓴 뒤 사용자의 도면 환경이 달라집니다. 자동화 도구를 한 번 썼더니 스냅이 꺼져 있더라는 경험은 실무자가 그 도구를 버리는 이유가 됩니다.
entmake는 순수 함수다
그래서 도형 생성은 전부 entmake로 처리했습니다. entmake는 DXF 그룹 코드로 표현한 객체 정의를 받아 도면에 엔티티를 직접 만듭니다. 예를 들어 선은 (0 . "LINE")에 시작점과 끝점 코드를 얹은 연관 리스트를 넘기면 생성됩니다. 원, 호, 폴리라인, 텍스트도 같은 방식입니다.
entmake의 장점은 순수함입니다. 명령을 실행하는 게 아니라 데이터로 객체를 기술하는 방식이라, 객체 스냅이나 명령 에코 같은 시스템 변수의 영향을 받지 않고 그 값을 바꾸지도 않습니다. 사용자의 도면 상태가 어떻든 넘긴 좌표 그대로 객체가 생깁니다. 결과가 환경에 흔들리지 않으니 두 CAD에서 동일하게 동작시키기도 쉽습니다.
부작용이 없다는 것은 오류 처리 부담도 줄여 줍니다. 시스템 변수를 건드리지 않으니 되돌릴 것도 없고 entmake가 실패하면 그냥 nil을 반환합니다. 이 반환값을 감지하는 얇은 래퍼로 감싸 실패를 명령창에 남기게 했더니, 도형 생성 단계는 도구에서 가장 조용하고 안정적인 부분이 됐습니다.
그런데 치수는 command로 그렸다
모든 것을 entmake로 하고 싶었지만 치수선만은 예외로 뒀습니다. 치수(DIMENSION)는 단순한 선이 아니라 치수 스타일과 블록 참조에 얽힌 복합 객체입니다. entmake로 치수를 직접 만들려면 여러 서브클래스와 스타일 참조를 손으로 조립해야 하고 그 구조가 CAD 버전마다 달라서 깨지기 쉽습니다. 반면 표준 치수 명령은 두 CAD에서 이름이 같고 동작이 안정적입니다.
그래서 치수만은 command로 그리되, command의 부작용을 감수하는 대신 관리하기로 했습니다. 치수 명령을 부르기 전에 관련 시스템 변수를 통째로 저장하고 그리기가 끝나면 저장해 둔 값으로 되돌립니다. 명령이 도중에 취소되더라도 오류 핸들러가 같은 복원을 수행합니다. 치수 글자 높이 같은 값을 도구가 잠시 바꿔 쓰더라도 사용자에게는 그 흔적이 남지 않습니다.
역할 분담이 곧 설계다
정리하면 기준은 단순합니다. 시스템 변수에 의존하지 않고 데이터로 기술할 수 있는 단순 객체는 entmake로, 스타일과 블록에 얽혀 entmake로 안전하게 만들기 어려운 복합 객체는 command로 그리되 변수를 저장하고 복원합니다. 선·원·호·폴리라인·텍스트는 entmake, 치수는 command입니다.
이 역할 분담은 단순한 구현 취향이 아니라 도구 전체의 성격을 정합니다. 대부분의 작도가 부작용 없는 entmake로 처리되니 도구는 사용자 환경을 존중하고 부작용이 불가피한 치수만 좁게 격리해 저장·복원으로 감쌌습니다. ActiveX나 Excel 연동처럼 환경 의존이 큰 방식을 아예 배제한 것도 같은 원칙에서 나왔습니다. 이 도구가 여러 CAD에서 예측 가능하게 도는 이유는 결국 이 한 줄의 기준 덕분입니다.
시스템 변수를 저장하고 되돌리는 구체적인 방법은 사용자 도면을 지키는 오류 핸들러에서, 두 CAD 양립 설계 전반은 AutoCAD와 CADian 양립 설계에서 이어집니다. 이 도구의 전체 그림은 AutoCAD 도면 작도 자동화 도구 사례에서 볼 수 있습니다.
자주 묻는 질문
entmake와 command는 무엇이 다른가요?
command는 사람이 명령창에 명령어를 치는 것과 같은 방식으로 객체를 만들고 entmake는 DXF 코드로 기술한 객체 정의를 도면에 직접 등록하는 방식입니다. command는 객체 스냅이나 명령 에코 같은 현재 도면 상태의 영향을 받지만 entmake는 그런 시스템 변수와 무관하게 넘긴 데이터 그대로 객체를 만듭니다.
왜 치수만 command로 그렸나요?
치수는 치수 스타일과 블록 참조가 얽힌 복합 객체여서 entmake로 직접 조립하면 CAD 버전마다 구조가 달라 깨지기 쉽습니다. 표준 치수 명령은 두 CAD에서 이름과 동작이 안정적이라, 치수만은 command로 그리고 대신 관련 시스템 변수를 저장했다가 되돌리는 방식으로 부작용을 관리했습니다.
entmake가 부작용이 없다는 게 왜 중요한가요?
자동화 도구가 사용자의 도면 설정을 바꿔 버리면 실무자는 그 도구를 신뢰하지 않습니다. entmake는 시스템 변수를 읽지도 바꾸지도 않으므로 도구를 쓴 뒤에도 도면 환경이 그대로 유지됩니다. 되돌릴 상태가 없으니 오류 처리도 단순해집니다.