도면에서 객체 여럿을 한 줄로 맞추거나 일정한 간격으로 벌려 놓는 일은, ZWCAD 기본 기능만으로는 은근히 손이 많이 간다. 기준이 될 객체 하나를 찍어 두고 나머지를 그 선에 맞춰 정렬하거나 등간격으로 분배하는 명령어 AAD를 만들어 쓰고 있다.

캐드 내 객체 정렬, 어떤 문제였나
파워포인트에도 있고 일러스트레이터에도 있는 그 흔한 정렬 버튼이, 정작 도면을 그리는 CAD에는 변변히 없다. AL(align) 명령이 있긴 하지만 원본 점과 대상 점을 일일이 지정해야 하고, 객체 여럿을 한 번에 줄 세우는 용도로는 영 거추장스럽다.
그래서 결국 손이 한다. 객체를 잡아 끌고, 오스냅에 물리고, 한 칸 어긋나면 다시 끌고. 심볼 몇 개를 윗변에 맞추는 정도야 금방이지만, 표제란 안의 글자들이나 범례 항목처럼 “위로 가지런히, 사이는 똑같이”를 동시에 요구하는 작업이 들어오면 이야기가 달라진다. 정렬 따로, 간격 맞추기 따로. 눈대중으로 끌다 보면 어느새 절반은 비뚤어져 있다.
어떻게 풀었나
발상은 단순하다. 기준 객체(마스터) 하나를 고정해 두고, 나머지를 그 객체에 맞춘다.
정렬은 여섯 방향을 준비했다. 위·아래·왼쪽·오른쪽 변 맞추기, 그리고 수평 중앙과 수직 중앙 맞추기. 각 객체의 바운딩 박스를 읽어 모서리나 중심선을 마스터의 그것에 일치시키는 방식이다.
등간격 분배는 가로(DH)와 세로(DV) 두 가지다. 선택한 객체 전체를 한 축으로 정렬한 뒤 양 끝 범위를 균등하게 나눠 재배치하는데, 여기서 한 가지 원칙을 두었다. 마스터는 절대 움직이지 않는다. 기준으로 찍은 객체가 분배 도중에 슬그머니 자리를 옮겨 버리면 기준이라는 말이 무색해지니까. 그래서 마스터가 있어야 할 이상적 위치와 실제 위치의 편차를 계산해, 나머지 전체를 그만큼 보정해 끼워 넣는다.
내부적으로는 ZWCAD 특유의 폴리선 바운딩 박스 버그에 대비해 정점 좌표로 직접 영역을 계산하는 우회로를 두었고, XLINE이나 RAY처럼 영역이 무한해 정렬 대상이 될 수 없는 객체는 미리 걸러낸다. 작업 전체는 하나의 Undo 단위로 묶어, 결과가 마음에 안 들면 U 한 번으로 통째로 되돌릴 수 있게 했다.
어떻게 달라졌나
기준을 찍고, 나머지를 선택하고, 방향 키 하나. 눈대중으로 끌어 맞추던 정렬이 클릭 몇 번과 키 한 번으로 끝난다. 마음 같아선 정렬과 간격을 한 번에 처리하고 싶지만, 적어도 “정렬은 정렬대로, 간격은 간격대로 따로 씨름하던” 시간은 사라졌다.
사용 환경
- ZWCAD 2023 기준으로 개발·검증했다. AutoCAD 호환은 검증하지 않았다.
- 객체의 바운딩 박스를 기준으로 동작하므로, 블록·폴리선·텍스트 등 영역이 잡히는 객체에 쓴다.
어떻게 쓰나
- 명령행에
AAD입력. - 기준(고정)할 객체 하나를 클릭한다. 미리 선택해 둔 객체가 있으면 그대로 기준으로 잡힌다.
- 정렬·분배할 나머지 객체들을 선택한다.
- 옵션을 키로 고른다. 그냥 엔터를 치면 수평 중앙(CH)으로 동작한다.
| 키 | 동작 |
|---|---|
| T / B | 위 / 아래 변 맞추기 |
| L / R | 왼쪽 / 오른쪽 변 맞추기 |
| CH / CV | 수평 중앙 / 수직 중앙 맞추기 |
| DH / DV | 가로 / 세로 등간격 분배 |
정렬(T~CV)은 마스터를 기준선으로 삼아 나머지를 끌어다 붙이고, 분배(DH·DV)는 마스터를 제자리에 둔 채 나머지를 균등한 간격으로 벌린다.
받은 .lsp를 그때그때 APPLOAD로 불러 써도 되지만, 매번 반복하기 번거롭다면 한 폴더에 모아 도면을 열 때마다 자동으로 로드되게 해 두는 편이 편하다. 그 방법은 acaddoc.lsp로 리습 상시 자동 로드하기에 정리해 두었다.
아직 안 되는 것
- 등간격은 객체의 좌하단(min) 모서리 기준이다. 크기가 제각각인 객체들을 분배하면 중심이 아니라 가장자리가 균등해진다.
- 분배에서 마스터가 양 끝이 아니라 가운데에 있으면, 전체 묶음이 마스터를 기준으로 평행 이동한다. 의도된 동작이지만, 결과가 예상과 다르게 느껴질 수 있다.
- 두 객체가 좌표까지 완전히 포개져 있으면 정렬 과정에서 하나가 누락될 수 있다(실무에서 거의 없는 극단적 경우다).
- AutoCAD에서의 동작은 검증하지 않았다.
받아 가기
받는 중에 막히거나 동작이 이상하면 댓글로 남겨 주세요.
짧은 회고
이 도구의 뼈대는 AI와 주고받으며 짰다. 하지만 코드가 내 마음대로 움직이지 않던 순간들, 그걸 발견하고 원인을 짚고 막은 것은 결국 내 손이었다. 코드를 누가 처음 타이핑했느냐보다, 무엇이 잘못됐는지 알아보고 책임지고 고쳤느냐가 그 코드를 내 것으로 만든다고, 요즘은 그렇게 생각한다.
이 글의 LISP는 개인·비영리 목적으로 자유롭게 쓰실 수 있고, 출처(Talkative Archi)를 표기하면 수정도 가능합니다. 무단 재배포와 상업적 판매는 금지하며, 무보증·본인 책임으로 사용해 주세요. 자세히
답글 남기기