반응형
아래의 예제는 MTEXT의 객체를 전부 선택하여, TEXT로 변환하는 LISP입니다.
(defun c:MtextToText (/ ss i ent) ; c: '원하는 명령어' 로 변경하시면 됩니다. (setq ss (ssget '((0 . "MTEXT")))) ; Mtext 객체 선택 (if ss (progn (setq i 0) ; 변수 선언한 ss의 if 문 위에서, i 변수를 선언 (while (< i (sslength ss)) ; (setq ent (ssname ss i)) (entmake (list (cons 0 "TEXT") (cons 10 (cdr (assoc 10 (entget ent)))) ; 위치 (cons 40 (cdr (assoc 40 (entget ent)))) ; 높이 (cons 1 (cdr (assoc 1 (entget ent)))) ; 내용 (cons 7 (cdr (assoc 7 (entget ent)))) ; 스타일 (cons 8 (cdr (assoc 8 (entget ent)))) ; 레이어 ) ) (entdel ent) ; 원래 Mtext 삭제 (setq i (1+ i)) ) ) ) (princ) ) |
코드의 분석은 아래와 같습니다.
- 함수 정의: (defun c:MtextToText (/ ss i ent))는 MtextToText라는 명령을 정의합니다. 이 명령은 AutoCAD에서 MtextToText를 입력하면 실행됩니다. / 뒤에 나열된 ss, i, ent는 함수 내에서 사용할 지역 변수입니다.
- Mtext 객체 선택: (setq ss (ssget '((0 . "MTEXT"))))는 사용자가 선택한 모든 Mtext 객체를 선택 집합(ss)에 저장합니다. ssget 함수는 선택 집합을 반환하며, 여기서는 Mtext 객체만 선택하도록 필터링합니다.
- 선택 집합이 비어 있지 않은 경우: (if ss (progn ...))는 선택 집합이 비어 있지 않은 경우에만 다음 명령을 실행합니다. progn은 여러 명령을 순차적으로 실행할 수 있게 합니다.
- 반복문: (while (< i (sslength ss)) ...)는 선택 집합의 모든 객체를 순회합니다. sslength 함수는 선택 집합의 길이를 반환합니다.
- 객체 이름 가져오기: (setq ent (ssname ss i))는 선택 집합에서 현재 객체의 이름을 가져옵니다
- Text 객체 생성: (entmake (list ...))는 새로운 Text 객체를 생성합니다. entmake 함수는 객체를 생성하며, list 함수는 객체의 속성을 정의합니다. 여기서는 위치(10), 높이(40), 내용(1), 스타일(7), 레이어(8) 등의 속성을 설정합니다.
- 원래 Mtext 객체 삭제: (entdel ent)는 원래 Mtext 객체를 삭제합니다.
- 반복문 인덱스 증가: (setq i (1+ i))는 반복문 인덱스를 1 증가시킵니다.
- 함수 종료: (princ)는 함수의 출력을 종료합니다.
매뉴얼 작업으로 하기위해서는 'QSELECT' 로 모든 MTEXT를 선택한 다음,
'EXPLODE' 명령으로 MTEXT를 TEXT로 변경할 수 있습니다.
AUTO LISP VS 매뉴얼 작업으로 보았을 때, 큰 차이가 없을 수 있으나,
만약, 복잡한 작업을 하기위해 진행해야할 단계라면 LISP으로 작성해두는 편이 편리하겠죠.
작업 중간 중간 마다, 직접 작업을 하지 않아도 되니,,
'자동화, Macro > Auto LISP' 카테고리의 다른 글
AUTO CAD LISP , SCRIPT 학습하기 (0) | 2024.11.25 |
---|