자동화, Macro/Auto LISP

간단한 AUTO LISP 예제#1_객체 선택

JnC-electrical design 2024. 12. 8. 02:40
반응형

아래의 예제는 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)
)

 

코드의 분석은 아래와 같습니다.

  1. 함수 정의: (defun c:MtextToText (/ ss i ent))는 MtextToText라는 명령을 정의합니다. 이 명령은 AutoCAD에서 MtextToText를 입력하면 실행됩니다. / 뒤에 나열된 ss, i, ent는 함수 내에서 사용할 지역 변수입니다.
  2. Mtext 객체 선택: (setq ss (ssget '((0 . "MTEXT"))))는 사용자가 선택한 모든 Mtext 객체를 선택 집합(ss)에 저장합니다. ssget 함수는 선택 집합을 반환하며, 여기서는 Mtext 객체만 선택하도록 필터링합니다.
  3. 선택 집합이 비어 있지 않은 경우: (if ss (progn ...))는 선택 집합이 비어 있지 않은 경우에만 다음 명령을 실행합니다. progn은 여러 명령을 순차적으로 실행할 수 있게 합니다.
  4. 반복문: (while (< i (sslength ss)) ...)는 선택 집합의 모든 객체를 순회합니다. sslength 함수는 선택 집합의 길이를 반환합니다.
  5. 객체 이름 가져오기: (setq ent (ssname ss i))는 선택 집합에서 현재 객체의 이름을 가져옵니다
  6. Text 객체 생성: (entmake (list ...))는 새로운 Text 객체를 생성합니다. entmake 함수는 객체를 생성하며, list 함수는 객체의 속성을 정의합니다. 여기서는 위치(10), 높이(40), 내용(1), 스타일(7), 레이어(8) 등의 속성을 설정합니다.
  7. 원래 Mtext 객체 삭제: (entdel ent)는 원래 Mtext 객체를 삭제합니다.
  8. 반복문 인덱스 증가: (setq i (1+ i))는 반복문 인덱스를 1 증가시킵니다.
  9. 함수 종료: (princ)는 함수의 출력을 종료합니다.

매뉴얼 작업으로 하기위해서는 'QSELECT' 로 모든 MTEXT를 선택한 다음,

'EXPLODE' 명령으로 MTEXT를 TEXT로 변경할 수 있습니다.

 

AUTO LISP VS 매뉴얼 작업으로 보았을 때, 큰 차이가 없을 수 있으나,

만약, 복잡한 작업을 하기위해 진행해야할 단계라면 LISP으로 작성해두는 편이 편리하겠죠.

작업 중간 중간 마다, 직접 작업을 하지 않아도 되니,,

 

'자동화, Macro > Auto LISP' 카테고리의 다른 글

AUTO CAD LISP , SCRIPT 학습하기  (0) 2024.11.25