오토캐드 유용한 리습 모음집

오토캐드 리습(AutoLISP)은 AutoCAD 환경에서 반복 작업을 자동화하거나, 사용자 정의 명령을 추가하기 위한 스크립트 언어입니다. 건축·기계·설계 전문가들이 매번 마우스 클릭·명령어 입력으로 반복하던 단순 작업을 자동화함으로써 설계 속도를 크게 향상시킬 수 있습니다.

리습 설치 및 로드 방법

  1. 리습(.lsp) 파일을 준비한다.
  2. AutoCAD 실행 → 명령창에 APPLOAD 입력 → 파일 선택 → Load 클릭.
  3. 시작 시 자동으로 로드하려면 Startup Suite에 등록하거나, acad.lsp/acaddoc.lsp(load "파일경로\\파일명.lsp") 코드를 추가합니다.

유용한 리습 모음

1. 좌표계 변환 리습 (COORDSYS)

  • 기능: 월드(World) 좌표계와 사용자 좌표계(UCS)를 손쉽게 전환
  • 사용 방법: COORDSYS 입력 → W 또는 U 선택
  • 코드 스니펫: (defun c:COORDSYS (/ ans) (setq ans (getkword "\n[W]orld or [U]cs? ")) (cond ((= ans "W") (command "UCS" "W")) ((= ans "U") (command "UCS" "O")) ) (princ) )

2. 치수 공차 일괄 변경 (DIMCHAMFER)

  • 기능: 선택한 치수에 동일한 챔퍼(Chamfer) 설정 적용
  • 사용 방법: DIMCHAMFER 입력 → 챔퍼 거리 입력 → 객체 선택
  • 코드 스니펫: (defun c:DIMCHAMFER (/ d1 d2 ss) (setq d1 (getdist "\n첫 번째 챔퍼 거리: ") d2 (getdist "\n두 번째 챔퍼 거리: ")) (setq ss (ssget '((0 . "DIMENSION")))) (if ss (repeat (setq i (sslength ss)) (setq d (ssname ss (setq i (1- i)))) (command "DIMCHAMFER" d d1 d2) ) ) (princ) )

3. 블록 순차 삽입 (BLKINSER)

  • 기능: 지정 간격, 열/행 수에 따라 블록을 배열
  • 사용 방법: BLKINSER 입력 → 블록 이름→ 행·열→ 간격 입력
  • 코드 스니펫: (defun c:BLKINSER (/ blk rows cols dx dy x y r c) (setq blk (getstring "\n블록 이름: ") rows (getint "\n행 수: ") cols (getint "\n열 수: ") dx (getdist "\nX 간격: ") dy (getdist "\nY 간격: ")) (setq y 0) (repeat rows (setq x 0) (repeat cols (command "INSERT" blk (list x y 0) "" "" 0) (setq x (+ x dx)) ) (setq y (+ y dy)) ) (princ) )

4. 레이어 일괄 변경 (LAYERCHANGE)

  • 기능: 선택 객체의 레이어를 지정 레이어로 일괄 이동
  • 사용 방법: LAYERCHANGE 입력 → 대상 레이어명 → 객체 선택
  • 코드 스니펫: (defun c:LAYERCHANGE (/ lay ss i ent) (setq lay (getstring "\n이동할 레이어 이름: ") ss (ssget)) (if ss (progn (setq i 0) (repeat (sslength ss) (setq ent (ssname ss i)) (entmod (subst (cons 8 lay) (assoc 8 (entget ent)) (entget ent))) (setq i (1+ i)) ) (entupd (ssname ss 0)) ) ) (princ) )

5. 객체 면적 합계 (SUMAREA)

  • 기능: 선택한 폐쇄 객체(폴리라인, 서클 등)의 면적을 합산하여 출력
  • 사용 방법: SUMAREA 입력 → 객체 선택
  • 코드 스니펫: (defun c:SUMAREA (/ ss i total ent dat) (setq ss (ssget '((0 . "LWPOLYLINE,CIRCLE,ELLIPSE")))) (setq total 0.0 i 0) (if ss (repeat (sslength ss) (setq ent (ssname ss i) dat (entget ent)) (cond ((= (cdr (assoc 0 dat)) "CIRCLE") (setq total (+ total (* pi (expt (cdr (assoc 40 dat)) 2))))) ((= (cdr (assoc 0 dat)) "LWPOLYLINE") (setq total (+ total (vlax-curve-getarea (vlax-ename->vla-object ent))))) ) (setq i (1+ i)) ) ) (princ (strcat "\n총 면적: " (rtos total 2 3))) (princ) )

6. 자동 번호 매기기 (AUTONUM)

  • 기능: 선택한 문자 객체에 연속 번호를 부여
  • 사용 방법: AUTONUM 입력 → 시작 번호 입력 → 객체 선택 순서대로 번호 적용
  • 코드 스니펫: (defun c:AUTONUM (/ ss start i ent) (setq start (getint "\n시작 번호: ") ss (ssget '((0 . "TEXT,MTEXT")))) (setq i 0) (if ss (repeat (sslength ss) (setq ent (ssname ss i)) (entmod (subst (cons 1 (itoa (+ start i))) (assoc 1 (entget ent)) (entget ent))) (setq i (1+ i)) ) ) (princ) )

7. 폴리라인 → 스플라인 변환 (PL2SPL)

  • 기능: 매끄러운 곡선 표현을 위해 폴리라인을 스플라인으로 일괄 전환
  • 사용 방법: PL2SPL 입력 → 폴리라인 선택
  • 코드 스니펫: (defun c:PL2SPL (/ ss i pl) (setq ss (ssget '((0 . "LWPOLYLINE")))) (setq i 0) (if ss (repeat (sslength ss) (setq pl (ssname ss i)) (command "PEDIT" pl "Y" "S" "") (setq i (1+ i)) ) ) (princ) )

8. 자동 백업 생성 (AUTOBACKUP)

  • 기능: 저장할 때마다 지정 폴더에 날짜·시간 기반 백업 파일(.bak) 자동 복사
  • 사용 방법: acad.lsp 등에 아래 코드 추가
  • 코드 스니펫 (acaddoc.lsp 등) (vl-load-com) (defun s::SAVESELECTION () (let* ((doc (vla-get-ActiveDocument (vlax-get-acad-object))) (fpath (vl-filename-directory (vla-get-FullName doc))) (fname (vl-filename-base (vla-get-FullName doc))) (bakdir (strcat fpath "\\Backup")) (bkname (strcat bakdir "\\" fname "_" (rtos (getvar "DATE") 2 6) ".bak"))) (if (not (vl-file-directory-p bakdir)) (vl-mkdir bakdir)) (vl-file-copy (vla-get-FullName doc) bkname) ) (prin1) )

소개한 리습들은 오토캐드 작업 시간을 획기적으로 줄여주고, 실수를 예방하는 데 도움을 줍니다. 각 리습을 자신의 업무 프로세스에 맞게 수정·응용해 보세요.

댓글 남기기