[태그:] 리습

  • 평행선 트림, 기준선 두 개만 고르면 안팎이 자동으로 (TRA·TRB)

    평행선 트림, 기준선 두 개만 고르면 안팎이 자동으로 (TRA·TRB)

    평행선 트림 TRA·TRB로 기준선 두 개만 골라 안팎 자동 트림

    도면을 정리하다 보면 손이 먼저 지친다. 평행하게 놓인 두 선, 그 사이로 잔뜩 지나가는 선들. 한 줄 한 줄 트림 명령으로 잘라낸다. 기준선 찍고, 자를 선 찍고, 또 찍고. 단순한데 끝이 없다.

    게다가 두 선이 비스듬히 누운 사선이면 더 신경 쓰인다. 손이 미끄러지면 엉뚱한 데가 잘리고, 되돌리고, 다시. 그래서 평행선 트림만큼은 사람 손에서 떼어내고 싶었다.

    어떤 문제였나

    실무에서 평행한 두 선은 자주 나온다. 도곽선 두 줄, 나란한 벽체, 배관 한 쌍. 그 두 선을 기준으로 안쪽을 비우거나, 바깥으로 삐져나온 선들을 정리하는 일이 끊이지 않는다.

    기본 트림은 기준선을 고른 뒤 자를 객체를 일일이 클릭하게 한다. 객체가 수십 개면 클릭도 수십 번이다. 사선이면 화면을 돌려가며 찍어야 해서 더 번거롭다. 그리고 정작 기준선 자체나, 옆 도면에서 참조로 끌어온 선까지 실수로 건드리기 쉽다.

    어떻게 풀었나

    기준이 되는 두 선만 선택하면, 나머지는 리습이 알아서 처리하도록 만들었다. 안쪽을 비우는 명령이 TRA, 바깥쪽을 정리하는 명령이 TRB다. 둘은 같은 엔진을 쓰고, 겨냥하는 구간만 다르다.

    두 선을 모두 가로지르는 객체만 골라내기

    먼저 선택한 두 선의 양 끝점으로 작업 범위를 잡고, 누락을 막기 위해 조금 넉넉하게 키운다. 그 범위 안의 선과 폴리선 가운데 두 기준선을 모두 가로지르는 객체만 대상으로 추린다. 한쪽 선만 스치거나 사이를 비켜 가는 선은 자연히 손대지 않는다.

    안쪽은 사이를, 바깥쪽은 양 끝을

    대상마다 두 기준선과 만나는 두 교차점을 계산한다. TRA는 그 두 점 사이 구간의 한가운데를 찍어 사이를 지운다. TRB는 두 점 바깥으로 남는 양쪽 꼬리를 각각 찍어 정리한다. 좌표계를 돌리거나 보조선을 긋지 않고 객체별 교차점을 직접 계산하기 때문에, 두 선이 가로든 세로든 비스듬한 사선이든, 서로 정확히 평행하지 않아도 똑같이 동작한다.

    여기에 실무에서 사고 나기 쉬운 곳들을 막아 두었다. 참조 도면(Xref)과 잠긴 도면층은 선택에서 자동으로 빠진다. 자르기 전 환경 변수를 백업하고, 도중에 문제가 생기면 한 단계로 통째 되돌린다.

    어떻게 달라졌나

    선마다 찍던 일이 두 선만 고르는 일로 줄었다. 사이를 비울 땐 TRA, 바깥을 정리할 땐 TRB. 둘은 같은 엔진에서 겨냥하는 구간만 뒤집은 한 쌍이라, 손에 붙으면 거의 반사적으로 쓰게 된다. 선택만 하면 알아서 정리되는 이 흐름은 도곽만 선택하면 낱장 DWG로 분리되는 RRAW와 같은 결이다.

    사용 환경

    • ZWCAD 2023 기준으로 개발·검증했다. AutoCAD에서의 동작은 확인하지 않았다.
    • 기준선과 잘리는 대상 모두 LINE 또는 LWPOLYLINE이다. 기준선은 두 개를 고른다. 두 선이 평행하지 않아도, 어떤 각도로 놓여 있어도 동작한다.
    • 파일 인코딩은 CP949(ZWCAD 한글 호환)를 유지했다.

    어떻게 쓰나

    1. 두 파일을 받아 APPLOAD로 불러온다. 매번 불러오기가 번거로우면 도면 열 때 리습이 알아서 로드되게 만드는 acaddoc.lsp 방식으로 상시 등록해 두면 편하다.
    2. 사이를 비우려면 명령창에 TRA, 바깥을 정리하려면 TRB를 입력한다.
    3. 기준이 될 두 선을 선택한다. 명령 전에 미리 두 선을 선택해 두고 실행해도 된다.
    4. 나머지는 자동이다. 좌표계와 화면 배율은 끝나면 원래대로 돌아온다.

    아직 안 되는 것

    • 기준선은 정확히 두 개, 선이나 폴리선이어야 한다. 호나 원은 기준선으로 쓸 수 없고, 셋 이상이면 멈추고 알린다.
    • 잘리는 대상도 선과 폴리선만 처리한다. 호·원·스플라인은 두 기준선을 가로질러도 손대지 않는다.
    • 대상은 두 기준선을 모두 가로지르는 객체여야 한다. 한쪽 선만 만나는 선은 그대로 둔다.

    받아 가기

    TRA(안쪽 트림)와 TRB(바깥쪽 트림)를 하나로 묶어 둡니다. 받아서 압축을 풀면 두 파일이 들어 있습니다.

    쓰다 막히거나 고쳐 줬으면 하는 부분이 있으면 댓글로 남겨 주세요. 읽고 있습니다.

    짧은 회고

    트림은 사소한 명령이다. 그런데 사소한 일을 하루에 수백 번 반복하면 사소하지 않다. 이 한 쌍을 만들고 나서야, 그동안 내가 손으로 메우던 시간이 얼마였는지 보였다. 도구는 결국 그 보이지 않던 시간을 눈에 보이게 만드는 일인 것 같다.


    이 리습은 개인·비영리 목적으로 자유롭게 쓰실 수 있습니다. 출처(Talkative Archi)를 밝히면 수정도 가능하고, 무단 재배포와 상업적 판매만 삼가 주세요. 무보증이며 사용에 따른 책임은 사용자에게 있습니다. 자세히

  • 도곽만 선택하면 낱장 DWG로 자동 분리 — RRAW

    도곽만 선택하면 낱장 DWG로 자동 분리 — RRAW

    한 파일 안에 도면이 여러 장 작성되어 있는 경우가 있다. 평면이 여러 장인 경우도 있고, 배치도 옆에 평면, 그 옆에 입면, 또 단면. 검토할 땐 한 자리에 모여 있는 편이 낫지만, 막상 다른 사용자에게 넘길 때가 되면 이야기가 달라진다. 협력사엔 장별로 따로 달라 하고, 세움터 업로드도 도면번호별 개별 파일이어야 하고. 그래서 결국 한 장씩 떼어내기 시작한다.

    작업이 어려운 건 아니다. 다만 손이 많이 간다. 도곽 하나 잡아서 WBLOCK, 그다음 파일명. 파일명을 뭐라고 칠지는 표제란을 눈으로 읽어 직접 타이핑한다. 도면번호 보고, 도면명 보고, 오타 안 나게. 그걸 스무 장, 서른 장 반복하고 나면 머리가 멍해진다. 머리를 쓰는 일이 아니라서 더 그렇다.

    RRAW로 도곽만 선택하면 낱장 DWG로 자동 분리

    어떤 문제였나

    문제는 단순함과 반복의 조합이다. 단계 하나하나는 누구나 할 수 있다. 그런데 그 묶음이 장 수만큼 되풀이된다.

    • 도곽 하나를 정확히 선택한다. 옆 도곽 객체가 딸려 들어가면 안 된다.
    • WBLOCK으로 떠낸다.
    • 표제란을 읽어 파일명을 손으로 적는다.

    여기에 함정이 몇 개 숨어 있다. 도곽이 잠긴 레이어 위에 있으면 옮기다 막히고, 외부참조(XREF)로 걸린 도곽이면 통째로 엉뚱하게 떨어진다. 인접한 도곽이 가까이 붙어 있으면 선택 범위에 남의 선이 슬쩍 끼어든다. 그리고 가장 자주 나는 실수는 파일명. 도면번호 한 자리를 잘못 쳐서 나중에 폴더를 다시 뒤지는 일. 손으로 하는 작업의 비용은 시간만이 아니다. 틀릴 여지가 매번 새로 생긴다는 것, 그게 더 피곤하다.

    어떻게 풀었나

    RRAW는 이 묶음을 한 번에 처리한다. 떼어낼 도곽(타이틀 블록)을 한꺼번에 선택하면, 각 도곽을 개별 DWG로 자동 분리한다. 핵심은 두 가지다.

    첫째, 파일명을 사람 대신 읽는다. 도곽이 가로냐 세로냐에 따라 표제란이 있을 자리를 자동으로 잡고, 그 영역 안의 글자만 모은다. 그중 큰 글자(도면번호·도면명)를 추려 조합하고, A1·A3·NONE·SCALE처럼 규격이나 축척을 가리키는 군더더기 텍스트는 걸러낸다. 줄을 위아래로 정리해 마지막 줄을 도면번호로, 윗줄을 도면명으로 보고 이름을 만든다. 파일명에 쓸 수 없는 문자도 정리한다. 읽을 표제란이 없으면 그냥 Sheet_1, Sheet_2로 떨어뜨린다.

    둘째, 떠낸 파일을 열었을 때 화면이 맞춰져 있다. 분리는 WBLOCK으로 하는데, 객체를 잠깐 절대원점으로 옮긴 뒤 그 자리에서 떠내고 곧장 제자리로 돌려놓는다. 덕분에 분리된 DWG를 열면 도곽이 화면에 깔끔하게 들어와 있다. 열 때마다 줌부터 맞추던 잔손질이 사라진다.

    안전장치도 같이 넣었다. 시작할 때 잠긴 레이어를 자동으로 풀었다가 끝나면 다시 잠그고, XREF 상태의 도곽이 섞여 있으면 “바인드하고 다시 실행하라”며 멈춘다. 중간에 에러가 나도 화면·시스템 변수·레이어를 원래대로 되돌린다. 인접 도곽의 선이 끼어들면 골라내고, 같은 이름이 이미 있으면 뒤에 _2, _3을 붙여 덮어쓰지 않는다.

    어떻게 달라졌나

    전엔 한 장씩이었다. 복사·WBLOCK·이름짓기를 도곽마다 손으로 반복했다. 지금은 도곽만 한 번에 선택하면 이름까지 자동으로 낱장이 분리된다. 서른 장이든 쉰 장이든, 선택하고 폴더만 고르면 끝난다. 줄어든 건 시간이고, 같이 줄어든 건 매번 새로 생기던 오타의 여지다.

    사용 환경

    • ZWCAD 2023 기준으로 개발·검증했다. AutoCAD 호환은 검증하지 않았다.
    • 도곽은 블록(INSERT)이어야 한다. 폴리라인으로 그린 도곽은 선택 대상으로 잡히지 않는다.
    • 표제란은 실제 글자(TEXT/MTEXT)여야 이름이 자동으로 붙는다. 블록 속성(ATTRIB)이나 이미지로 된 표제란은 못 읽어서 Sheet_N으로 떨어진다.
    • 도곽이 외부참조(XREF)면 먼저 바인드(Bind)한 뒤 실행한다-세움터 업로드를 생각하면 쉽다.
    • 표제란이 도곽의 우하단(가로) 또는 좌하단(세로)에 있는, 일반적인 배치를 전제한다.
    • 파일 인코딩은 CP949다.

    어떻게 쓰나

    1. 리습을 로드한다. 자주 쓸 거라면 매번 APPLOAD 하지 말고 자동 로드로 걸어두는 편이 낫다. (리습 자동 로드는 이 글에서 다뤘다.)
    2. (선택) 분리할 도곽을 미리 선택해 두면 그대로 쓴다. 안 했으면 다음 단계에서 고르면 된다.
    3. 명령행에 RRAW를 입력한다.
    4. 미리 선택하지 않았다면, 떠낼 도곽 블록을 모두 선택한다.
    5. 저장 폴더를 고른다.
    6. 끝. 폴더에 도면번호 도면명.dwg 형태로 파일이 쌓인다. 몇 개 성공했는지, 실패가 있으면 몇 개인지는 명령행에 표시된다.

    아직 안 되는 것

    • 폴리라인 도곽은 지원하지 않는다. 블록 도곽만 대상이다.
    • 표제란이 블록 속성으로 들어가 있으면 글자를 못 읽어 이름이 자동화되지 않는다.
    • 표제란 위치 가정(우하단·좌하단)을 크게 벗어난 도곽은 엉뚱한 텍스트를 읽을 수 있다.
    • 도면번호와 도면명의 줄 구분은 표제란 레이아웃에 따라 빗나갈 수 있다. 떠낸 뒤 파일명을 한 번 훑어보길 권한다.
    • AutoCAD에서는 검증하지 않았다.

    같은 도곽 선택 방식으로 출력까지 한 번에 거는 도구가 따로 있다. 일괄 멀티플롯은 RRAR 멀티플롯 글을 참고하면 된다.

    받아 가기

    파일은 아래 링크에서 받을 수 있다.

    쓰다가 막히는 부분이나 “이건 이렇게 됐으면” 싶은 점이 있으면 댓글로 남겨 주세요. 환경마다 표제란 모양이 달라서, 안 잡히는 사례를 알려 주시면 다듬는 데 큰 도움이 됩니다.

    짧은 회고

    이런 도구를 만들 때마다 느끼는 게 있다. 아껴지는 건 시간이기도 하지만, 더 아껴지는 건 안 해도 되는 판단이다. 도면번호를 한 글자씩 확인하며 옮겨 적던 그 작은 긴장이 사라진다. 손이 기억하던 일을 코드에 넘기고 나면, 정작 머리를 써야 할 곳에 머리가 남는다. 결국 자동화는 일을 빠르게 하는 게 아니라, 신경을 덜 쓰게 하는 일에 가깝다는 생각을 한다.


    개인·비영리 목적이라면 자유롭게 쓰셔도 됩니다. 출처(Talkative Archi)만 밝히면 수정도 괜찮습니다. 무단 재배포·상업적 판매는 금지하며, 무보증이므로 사용에 따른 책임은 본인에게 있습니다. 자세히

  • 도면 열면 리습이 알아서 — acaddoc.lsp 과 LOADER.lsp으로 ZWCAD 상시 자동 로드

    도면 열면 리습이 알아서 — acaddoc.lsp 과 LOADER.lsp으로 ZWCAD 상시 자동 로드

    리습을 다 만들고 나면, 그때부터가 또 일이었다.

    APPLOAD를 열고, 폴더를 뒤져서, 쓰던 리습들을 하나씩 골라 로드한다. ZWCAD를 새로 켤 때마다. 도면을 새로 열 때마다. 손에 익은 명령어 몇 개를 쓰려고 매번 같은 준비 동작을 반복했다.

    정작 그리기를 시작하기도 전에. 만들어 둔 도구가 있는데도, 그 도구를 불러오는 일이 매일의 군더더기가 됐다.

    acaddoc.lsp와 LOADER.lsp로 도면 열 때 ZWCAD 리습 자동 로드

    어떤 문제였나

    APPLOAD의 시작 그룹(StartUp Suite)에 등록해두는 방법도 있긴 하다. 그런데 PC를 바꾸거나, ZWCAD를 다시 깔거나, 리습 폴더 구조를 손대면 그 등록이 풀리거나 어긋났다. 그럴 때마다 어디에 뭘 등록했는지 기억을 더듬어야 했다.

    게다가 리습이 한두 개가 아니었다. 출력용, 도곽용, 정리용… 만들다 보니 리습의 수는 늘어났다. 그러다보니 새 리습을 만들 때마다 시작 그룹에 추가하는 걸 잊어버리기 일쑤였다. 분명 만들어 뒀는데 “어 이거 왜 안 되지” 하고 보면 로드를 안 한 거였다.

    결국 문제는 하나였다. 어떤 리습을 띄울지가 내 머릿속에만 있고, 그걸 매번 손으로 다시 시키고 있다는 사실.

    어떻게 풀었나

    CAD에는 약속된 파일 이름이 하나 있다. acaddoc.lsp. 도면이 열릴 때마다 ZWCAD가 ‘지원 파일 검색 경로’를 훑어서 이 이름의 파일을 찾고, 있으면 알아서 읽어 들인다. 내가 부르지 않아도 된다. 도면을 여는 것 자체가 신호가 된다.

    여기에 한 겹을 더 뒀다. acaddoc.lsp 안에는 딱 한 줄만 넣었다.

    (if (findfile "LOADER.lsp") (load (findfile "LOADER.lsp")))
    

    “검색 경로에서 LOADER.lsp를 찾고, 있으면 로드해라”는 뜻이다. 실제 일은 전부 LOADER.lsp가 한다.

    그리고 LOADER.lsp는 목록을 손으로 적는 방식이 아니다. 자기가 들어 있는 폴더를 스스로 들여다보고, 그 안의 .lsp 파일을 전부 찾아 로드한다. 자기 자신과 acaddoc.lsp만 빼고. 그래서 어떤 리습을 띄울지 어딘가에 따로 적어둘 필요가 없다. 폴더에 파일이 있으면 로드되고, 없으면 안 한다. 목록이 곧 폴더다.

    굳이 둘로 나눈 데는 이유가 있다. acaddoc.lsp는 CAD가 인식하는 고정된 이름이라, 한 번 자리만 잡아두면 다시 건드릴 일이 없는 뼈대다. 거기에 로직을 다 욱여넣는 대신, 실제로 손볼 가능성이 있는 부분은 전부 LOADER.lsp로 빼뒀다. 뼈대와 내용물을 분리한 셈이다. (if (findfile ...))로 감싼 것도 같은 이유다 — LOADER.lsp가 없으면 조용히 넘어가고, 에러를 내지 않는다.

    신경 쓴 건 하나 더 있다. 리습 하나가 깨져 있으면 로드 전체가 멈춰버리는 게 제일 곤란하다. 그래서 파일마다 로드를 따로 감싸서, 하나가 실패해도 나머지는 계속 올라가게 했다. 명령창에는 [OK], [오류], 못 찾은 파일은 [??]로 한 줄씩 찍힌다. 어떤 리습이 말썽인지 도면을 여는 순간 바로 보인다.

    어떻게 달라졌나

    이제 ZWCAD에서 도면을 열면, 쓰던 리습이 전부 올라온 채로 시작한다. APPLOAD를 열 일이 없다. 폴더를 뒤질 일도 없다.

    새 리습을 만들면, 그 폴더에 파일을 넣는 게 전부다. 목록을 고칠 일도, 어딘가에 등록할 일도 없다. 다음에 도면을 열 때부터 그 리습도 같이 따라온다. 도구를 불러오는 일을 더는 기억하지 않아도 된다는 게, 생각보다 컸다.

    사용 환경

    • 개발·검증 환경: Windows 10/11, ZWCAD 2023
    • 작성 언어: AutoLISP
    • 전제: 리습 파일들을 모아둔 폴더가 ZWCAD ‘지원 파일 검색 경로’에 등록되어 있어야 한다.
    • 참고: acaddoc.lsp는 CAD 공통 메커니즘이지만, 이 글의 설정은 ZWCAD 2023 기준으로만 검증했다. AutoCAD 호환은 확인하지 않았다.

    어떻게 쓰나

    먼저 리습들을 한 폴더에 모은다. 예를 들어 C:\CAD\LISP 같은 폴더를 하나 만들고, 쓰는 리습과 이번 글의 두 파일(acaddoc.lsp, LOADER.lsp)을 거기에 같이 둔다.

    그다음 그 폴더를 ZWCAD가 찾을 수 있게 등록한다.

    1. ZWCAD에서 OP(옵션)를 실행한다.
    2. ‘파일’ 탭 → ‘지원 파일 검색 경로’를 펼친다.
    3. ‘추가’ → ‘찾아보기’로 위 폴더를 선택하고 확인한다.
    4. (권장) 같은 ‘파일’ 탭의 ‘신뢰할 수 있는 위치’에도 그 폴더를 추가한다. 보안 경고 없이 자동 로드되게 하기 위해서다.

    이제 끝이다. LOADER.lsp를 열어 뭔가를 적을 필요가 없다. 같은 폴더에 둔 리습이 곧 로드 대상이다. ZWCAD를 새로 켜거나 도면을 새로 열면, 명령창에 [OK]로 시작하는 로드 메시지가 한 줄씩 뜬다. 그게 보이면 성공이다.

    앞으로 새 리습이 생기면 그 폴더에 파일만 넣으면 된다. 빼고 싶으면 폴더에서 꺼내면 된다. 자동 로드 목록을 관리한다는 감각 자체가 없어진다.

    아직 안 되는 것

    acaddoc.lsp는 검색 경로에서 처음 발견된 하나만 로드된다. 만약 다른 프로그램이나 설정이 이미 다른 acaddoc.lsp를 쓰고 있다면 둘이 충돌할 수 있다. 그럴 땐 기존 파일 안에 LOADER.lsp를 불러오는 한 줄을 합쳐 넣는 식으로 풀어야 한다.

    폴더를 통째로 읽는 방식이라 생기는 한계도 있다. 그 폴더의 .lsp는 가리지 않고 전부 로드한다. 그래서 자동 로드를 원치 않는 리습은 이 폴더에 두면 안 된다 — 테스트용이나 미완성 리습은 다른 곳에 둬야 한다. 로드 순서도 파일 이름 순서를 따르기 때문에, 리습끼리 로드 순서를 타는 의존 관계가 있으면 의도와 어긋날 수 있다. 그럴 땐 파일 이름 앞에 숫자를 붙여 순서를 잡아주면 된다.

    그리고 이건 ‘상시 로드’에 맞춘 구조다. 개발 중에 리습을 고쳐가며 빠르게 테스트하는 용도라면, 단축키로 즉시 로드하는 AutoHotkey 방식이 더 맞는다. 둘은 역할이 다르다 — 만드는 단계와 쓰는 단계.

    받아 가기

    LOADER.lsp는 폴더 안의 .lsp를 자동으로 스캔해 로드하는 로더다. 안을 열어 고칠 일은 없다. 그냥 acaddoc.lsp와 함께 리습 폴더에 두기만 하면 된다.

    써보다가 막히는 곳이 있거나 “내 환경에선 이게 안 된다” 싶은 게 생기면, 댓글로 남겨주시면 좋겠다. 같은 길을 먼저 지나온 사람으로서, 아는 선에서 같이 들여다보겠다.

    짧은 회고

    좋은 자동화는 일을 대신 해주는 게 아니라, 기억해야 할 것을 하나 줄여준다.

    이용 조건 — 개인·비영리 목적 자유 사용, 출처(Talkative Archi) 표기 시 수정 가능. 무단 재배포·상업적 판매 금지. 무보증이며 사용에 따른 모든 결과는 본인 책임입니다. (자세히)

  • Ctrl+Shift+S 한 번으로 끝 — 리습 저장과 ZWCAD 로드 자동화

    Ctrl+Shift+S 한 번으로 끝 — 리습 저장과 ZWCAD 로드 자동화

    코드를 짜는 시간보다, 짠 코드를 테스트하러 왕복하는 시간이 더 길었다.

    제미나이로 리습을 작성하면, 그다음이 문제였다. 클립보드에 코드를 복사하고, 파일로 저장하고, 탐색기에서 그 파일을 찾아 ZWCAD 창으로 드래그앤드롭해서 로드해야 했다. 매번 같은 동작을 반복했다. 코드 한 줄 고치고 테스트할 때마다. 구동이 안 될 때마다. 원하는 결과가 나오지 않을 때마다.

    RRAR 같은 리습을 만들때는 버전 번호가 40을 넘어가기 시작했다. 원하는 결과를 위해 수정을 마흔 번 했다는 이야기다.

    이건 자동화가 필요한 일이었다.

    Ctrl+Shift+S 단축키 하나로 리습 저장과 ZWCAD 로드 자동화

    어떤 문제였나

    흐름을 끊는 건 항상 사소한 것들이다. 창을 전환하고, 경로를 타이핑하고, 엔터를 치는 것. 한 번은 아무것도 아니지만, 하루에 수십 번 반복되면 이야기가 달라진다.

    탐색기에서 파일을 찾아 ZWCAD 창으로 드래그앤드롭하는 것도 보기엔 간단해 보이지만, 코드를 조금씩 고치면서 반복 테스트할 때는 이야기가 다르다. 크롬 → 저장 → 탐색기 → ZWCAD, 이 네 단계를 매번 손으로 밟아야 한다. 게다가 ZWCAD가 로드 명령을 받을 때 한/영 IME 상태에 따라 입력이 꼬이는 경우도 있어서, 단순해 보이는 과정이 생각보다 신경을 많이 잡아먹었다.

    어떻게 풀었나

    AutoHotkey로 단축키 하나를 만들었다. Ctrl+Shift+S.

    크롬이 활성화된 상태 — 그러니까 제미나이로 코드를 작성하고 있는 상태 — 에서 이 키를 누르면 세 가지가 순서대로 일어난다.

    1. 저장할 파일 경로를 선택하는 창이 뜬다.
    2. 클립보드의 코드가 그 파일로 저장된다.
    3. ZWCAD로 자동 전환되면서 (load "파일경로") 명령이 명령창에 입력되고 엔터까지 날아간다.

    IME 문제는 AHK의 {Text} 전송 모드로 해결했다. 한/영 상태나 단축키 충돌과 무관하게 문자열을 그대로 전송하는 방식이라, ZWCAD 명령창에 넣을 때도 안정적으로 동작한다. 그리고 백슬래시 경로는 슬래시로 변환해서 넘기도록 처리했다 — ZWCAD의 (load) 명령은 슬래시를 더 잘 인식하기 때문이다.

    어떻게 달라졌나

    크롬에서 코드를 복사하고 Ctrl+Shift+S를 누르는 것으로 끝이다. 저장 경로만 한 번 선택하면, 그다음은 전부 자동이다.

    코드 작성 → 저장 → 로드 → 테스트의 흐름이 한 번의 키 입력으로 이어진다. 창을 왔다 갔다 하고, 명령을 타이핑하던 시간이 사라졌다. 작아 보이지만, 집중을 유지한 채로 코드를 고치고 테스트하는 게 훨씬 수월해졌다.

    사용 환경

    • 개발·검증 환경: Windows 10/11, ZWCAD 2023
    • 작성 언어: AutoHotkey v1
    • 조건: 크롬 활성화 상태에서만 동작 (#IfWinActive chrome.exe)
    • 주의: 관리자 권한으로 실행해야 한다. 스크립트 실행 시 UAC 창이 한 번 뜨는 건 정상이다.
    • 추가 제안: 컴퓨터가 시작할 때 자동으로 구동되도록 시작프로그램 폴더에 넣어놓으면 ahk도 따로 로드할 필요가 없어진다.

    어떻게 쓰나

    1. 이 글에 첨부된 LAL_simple_v1_5.ahk를 내려받는다.
    2. 파일을 우클릭 → 관리자 권한으로 실행한다.
    3. 제미나이(또는 클로드: 클로드는 크롬에서 실행한 웹용 클로드에서만 작동한다)에서 리습 코드를 작성하고 전체 복사한다. 코드박스의 복사 버튼을 눌러도 완전히 작동한다.
    4. 크롬이 활성화된 상태에서 Ctrl+Shift+S를 누른다.
    5. 저장 경로를 선택하면 자동으로 저장 및 ZWCAD 로드까지 완료된다.

    처음 실행 전에 스크립트를 메모장이나 에디터로 열어서 defaultRoot 줄의 경로를 본인이 리습 파일을 저장하고 싶은 폴더 경로로 바꿔야 한다. 예를 들어 C:\Users\홍길동\Documents\LISP 같은 식이다. 이 경로가 저장 창의 기본 위치가 된다.

    아직 안 되는 것

    크롬이 활성화된 상태에서만 동작한다. 다른 에디터나 환경에서 쓰려면 #IfWinActive 조건을 수정해야 한다. 그리고 관리자 권한 실행이 필수라 시작 시 UAC 팝업이 뜨는 게 불편한 점으로 남아 있다.

    받아 가기

    써보다가 막히는 곳이 있거나 궁금한 점이 생기면, 댓글로 남겨주시면 좋겠다. 같은 작업에 지쳐본 사람으로서, 아는 선에서 답해 보겠다.

    짧은 회고

    자동화 도구의 가치는 아낀 시간보다 유지한 집중에 있다. 창을 전환하고 명령을 타이핑하는 10초가 아깝다기보다, 그 10초마다 흐름이 끊긴다는 게 진짜 문제였다. 그 흐름을 지키는 것. 그게 이 도구를 만든 이유였다.

    이용 조건 — 개인·비영리 목적 자유 사용, 출처(Talkative Archi) 표기 시 수정 가능. 무단 재배포·상업적 판매 금지. 무보증이며 사용에 따른 모든 결과는 본인 책임입니다. (자세히)

  • 도면 600장, 도곽만 고르면 끝 — 멀티플롯 리습(RRAR)

    도면 600장, 도곽만 고르면 끝 — 멀티플롯 리습(RRAR)

    도면 출력은 별것 아닌 일이다. 한두 장이라면.

    그런데 600장이 되면 이야기가 달라진다. 영역을 일일이 잡고, 가로·세로 도면을 가려 용지 방향을 바꾸고, 출력을 걸고, 다시 다음 도면으로. 그게 600번 반복된다. 누군가는 다른 일을 다 제쳐두고 하루를 통째로 그 일에 바쳐야 한다. 나는 이게 사람이 할 일이 아니라고 생각했고, 그래서 RRAR이라는 도구를 만들었다.

    이 글은 그 도구가 무엇을, 어떤 환경에서, 어떻게 해주는지에 대한 기록이다. 비슷한 작업에 지쳐본 분이라면 받아서 바로 써보셔도 좋겠다.

    ZWCAD 멀티플롯 RRAR로 도면 600장을 하루 종일에서 1시간 만에 자동 출력

    시작하기 전에 (이걸 모르면 헤맨다)

    이 도구를 받아서 쓰려면 몇 가지 전제가 맞아야 한다. 먼저 적어둔다.

    • 도곽은 블록(INSERT)으로 작성되어 있어야 한다. XREF로 연동되어 있어도 무방하다. 하지만 일반 객체로 그린 도곽은 인식되지 않는다.
    • 도면 번호는 표제란에 실제 글자(TEXT/MTEXT)로 있어야 한다. 영문+숫자 체계(예: A-101)일 때 파일명 추출이 가장 깔끔하게 된다.
    • Windows 환경 전용이다.
    • 첫 실행 때 한 번은 설정을 잡아줘야 한다. 출력 폴더·플로터·용지·CTB를 본인 환경에 맞추는 과정인데, 한 번 해두면 저장되어 다음부터는 바로 출력만 하면 된다.

    어떤 문제를 풀었나

    대량 출력의 번거로움은 한 군데에서 오는 게 아니다. 여러 손길이 겹쳐서 온다.

    • 도면마다 출력 영역을 일일이 지정해야 한다.
    • 가로 도면과 세로 도면이 섞여 있으면 용지 방향까지 바꿔줘야 한다.
    • 출력 순서를 의식하며 객체를 골라야 한다.
    • 파일을 저장할 때 이름도 하나하나 붙여야 한다.

    하나하나는 사소하다. 그런데 600번 곱하면, 그게 하루를 잡아먹는다.

    어떻게 동작하나

    핵심은 한 문장으로 정리된다. 사람은 도곽만 고른다. 나머지는 도구가 판단한다.

    • 도곽 인식 · 순서 비의존 — 도곽(블록)들을 선택하면 그 안의 내용을 출력 대상으로 잡는다. 순서는 신경 쓰지 않아도 된다.
    • 용지 방향 자동 판별 — 도곽의 가로·세로 비율을 보고 가로(Landscape)/세로(Portrait)를 알아서 정한다.
    • 크기 감지 후 축척 제안 — 도곽 크기를 측정해 권장 축척을 제시한다. 같은 크기의 도곽은 하나로 묶이기 때문에, 도면마다가 아니라 크기 종류마다 한 번씩만 축척을 입력하면 된다. (0을 넣으면 용지에 맞춤.)
    • 표제란 기반 파일명 자동 생성 — 도곽 모서리의 표제란 영역에서 가장 큰 글자를 읽어, 영문과 숫자를 가려 A-101 같은 형식으로 도면 번호를 만든다. 같은 이름이 있으면 자동으로 번호를 덧붙인다.
    • 흑백 출력 품질 보정 — 출력 직전, RGB(트루컬러)로 지정된 레이어를 잠시 검정으로 바꿨다가 출력이 끝나면 원래대로 되돌린다. 흑백 PDF가 지저분해지지 않도록 하는 장치다.

    여기에 더해, 작업 도중 중단하거나 오류가 나더라도 변경한 환경값과 레이어 색상을 자동으로 원래대로 되돌리도록 해 뒀다. 믿고 돌려도 도면이 망가지지 않는다.

    ZWCAD에서 겪은 것

    쉽지만은 않았다. ZWCAD 환경은 제 나름의 고집이 있어서, 잘 짠 코드도 그대로 도는 법이 드물다.

    한 예로, 폴리라인의 경계 상자(BoundingBox)를 표준 방식으로 물으면 ZWCAD에서는 엉뚱한 값이 돌아오는 경우가 있었다. 출력 영역을 잡는 데 이 값이 어긋나면 도면이 잘려 나온다. 그래서 표준 방식이 실패하면 폴리라인의 꼭짓점 좌표를 직접 읽어 경계를 다시 계산하도록 우회로를 만들어 뒀다. 도구를 ‘동작하게’ 만드는 일의 대부분은, 사실 이런 자리에 있었다.

    사용 환경

    이 글을 찾으신 분이 가장 궁금해할 부분일 것 같다.

    • 개발·검증 환경: ZWCAD 2023 (Windows)
    • 작성 언어: AutoLISP (ActiveX·레지스트리·DCL 사용)
    • 출력 방식: 캐드 전용 플로터(PC3/PC5)로 출력한다. 기본값은 내장 DWG to PDF.pc3. 설정에서 목록으로 골라 바꿀 수 있고, 한컴 PDF 같은 시스템 프린터는 목록에 아예 뜨지 않는다.
    • 기본 용지 / CTB: A3 풀블리드 / monochrome.ctb(흑백). 둘 다 설정에서 목록으로 고른다. 예전처럼 이름을 정확히 타이핑할 필요 없이, 뜨는 목록에서 고르면 된다. 축척 기준은 A3·A1.
    • AutoCAD 호환: 미검증. 플로터 설정이 ZWCAD 방식에 맞춰져 있어, AutoCAD에서 쓰려면 플로터·용지 설정 조정이 필요하다.
    • PDF 결합용 외부 도구(선택): 알PDF 등

    어떻게 쓰나

    1. 이 글에 첨부된 RRAR_-_다중플롯.lsp를 내려받는다.
    2. ZWCAD에서 APPLOAD 명령으로 리습을 로드한다.
    3. (선택) 출력할 도곽들을 미리 선택해 둔다.
    4. 명령창에 RRAR을 입력한다.
    5. 현재 설정으로 바로 출력하려면 P, 출력 폴더·플로터·용지·CTB를 바꾸려면 S를 누른다. S를 누르면 팝업 목록이 떠서 거기서 고르면 된다. 플로터 목록에는 캐드 전용 플로터만 나타나므로, 엉뚱한 장치를 고를 일이 없다.(처음 시작하는 사람 기준- 무조건 S를 눌러서 세팅이 필요하다.)
    6. (미리 선택하지 않았다면) 출력할 도곽(블록)들을 선택한다.
    7. 크기 종류마다 축척을 한 번씩 입력한다. (입력 전에 도곽 크기를 인식한 권장값이 먼저 제시된다. 0은 용지 맞춤으로 플롯.)
    8. 도구가 방향·표제란·파일명을 인식해 도곽별로 PDF를 출력한다.
    9. (선택) 알PDF 등으로 PDF를 하나로 결합한다. 파일명이 이미 도면 번호로 정리돼 있어 순서를 맞출 필요가 없다.

    이렇게 하면, 예전엔 한 사람이 하루 종일 매달려야 했던 600장이 한 시간 안에 PDF로 떨어진다.

    아직 안 되는 것

    외부 프로그램(Adobe PDF)이나 실제 프린터로 곧바로 뽑는 것도 욕심내 봤다. 결론부터 말하면 막혔다. 리습 차원에서 외부 프린터나 외부 PDF 프로그램을 안정적으로 물려 출력하는 건, 적어도 내 손에서는 깔끔하게 풀리지 않았다. 환경마다 동작이 들쭉날쭉했고, 되는 듯하다가 어딘가에서 꼭 깨졌다. 한동안 붙잡고 있다가, 이건 리습이 잘 닿지 않는 영역이라고 인정하고 손을 뗐다.

    그래서 방향을 바꿨다. 밖으로 나가는 길을 붙드는 대신, 캐드 전용 플로터(PC3/PC5)로 출력하는 길을 단단하게 다졌다. 설정에서 출력 장치를 고를 때 전용 플로터만 목록에 띄우고, 시스템 프린터는 후보에서 아예 빼버렸다. 예전엔 목록에서 시스템 프린터를 잘못 골라 출력이 통째로 깨지는 일이 있었는데, 그 사고가 날 자리 자체를 없앤 셈이다. 출력 사이 대기 시간도 전용 드라이버의 속도에 맞춰 줄여, 한 묶음을 도는 체감 속도가 한결 가벼워졌다.

    남은 제약도 하나 적어둔다. 파일명 추출은 표제란이 일정한 규칙(모서리에 큰 글자로 도면 번호)을 따른다는 전제 위에서 동작한다. 템플릿이 많이 다르면 이름이 어긋나 Plot_Error_ 형태로 떨어질 수 있으니, 처음 쓸 때는 소량으로 한 번 확인해보길 권한다.

    받아 가기

    도곽을 고른다는 같은 흐름으로, 한 도면에 깔린 여러 도곽을 낱장 DWG로 분리해 주는 RRAW도 만들어 두었다. 도곽 단위로 다룰 일이 많다면 같이 보면 좋겠다.

    써보다가 막히는 곳이 있거나 궁금한 점이 생기면, 댓글로 남겨주시면 좋겠다. 같은 작업에 지쳐 본 사람으로서, 아는 선에서 답해 보겠다.

    짧은 회고

    자동화란 결국 무엇을 없애는 일인가. 도구 하나를 만들고 나서 나는 그 답이 화려한 코드에 있지 않다는 걸 다시 확인했다. 600장을 직접 출력해본 사람만 아는 그 지긋지긋함을 없애는 것. 그게 전부였다.

    이용 조건 — 개인·비영리 목적 자유 사용, 출처(Talkative Archi) 표기 시 수정 가능. 무단 재배포·상업적 판매 금지. 무보증이며 사용에 따른 모든 결과는 본인 책임입니다. (자세히)