캐드(AutoCAD) AutoLisp 강좌 예제 - 문자 정렬 하기 (상하, 좌우 정렬)

캐드(AutoCAD) AutoLisp 강좌 예제 - 문자 정렬 (상하, 좌우 정렬)

AutoCAD 도면을 작업하다보면, 문자 (Text, MText)의 상하, 좌우 정렬을 일괄적으로 할 때가 있습니다.
아래의 각 정렬을 위한 간단한 AutoLisp 코드 예제입니다.



좌측 정렬 프로그램 (명령 : left-align())

(defun c:left-align ()
(setq ref-text (car (entsel "\n기준이 되는 텍스트를 선택하세요: "))) ; 기준 텍스트 선택
  (if ref-text
    (progn
      (setq ref-data (entget ref-text))
      (setq ref-x (car (cdr (assoc 10 ref-data)))) ; 기준 텍스트의 X 좌표 가져오기
      (setq ss (ssget '((0 . "TEXT,MTEXT")))) ; 정렬할 텍스트 선택
      (if ss
        (progn
          (setq count (sslength ss))
          (repeat count
            (setq ent (ssname ss (setq count (1- count)))) ; 선택한 엔티티 가져오기
            (setq ent-data (entget ent))

            (if (and (not (= (cdr (assoc 0 ent-data)) "TEXT")) 
                     (not (= (cdr (assoc 0 ent-data)) "MTEXT"))) ; 텍스트가 아닌 경우 건너뛰기
              (progn
                (princ "\n선택한 엔티티는 텍스트가 아닙니다.")
              )
              (progn
                (setq old-pt (cdr (assoc 10 ent-data))) ; 기존 좌표 가져오기
                (setq new-pt (list ref-x (cadr old-pt) (last old-pt))) ; 새로운 X 좌표 설정
                (entmod (subst (cons 10 new-pt) (assoc 10 ent-data) ent-data))
              )
            )
          )
          (princ "\n선택된 텍스트가 기준 텍스트에 맞춰 정렬되었습니다.")
        )
        (princ "\n정렬할 텍스트가 선택되지 않았습니다.")
      )
    )
    (princ "\n기준 텍스트가 선택되지 않았습니다.")
  )
  (princ)
)



우측 정렬 프로그램 (명령 : right-align())

(defun c:right-align ()
  (setq ref-text (car (entsel "\n기준이 되는 텍스트를 선택하세요: "))) ; 기준 텍스트 선택
  (if ref-text
    (progn
      (setq ref-data (entget ref-text))
       (setq ref-y (cadr (cdr (assoc 10 ref-data)))); 기준 텍스트의 Y 좌표 가져오기

      (setq ss (ssget '((0 . "TEXT,MTEXT")))) ; 정렬할 텍스트 선택
      (if ss
        (progn
          (setq count (sslength ss))

          (repeat count
            (setq ent (ssname ss (setq count (1- count)))) ; 선택한 엔티티 가져오기
            (setq ent-data (entget ent))

            (if (and (not (= (cdr (assoc 0 ent-data)) "TEXT")) 
                     (not (= (cdr (assoc 0 ent-data)) "MTEXT"))) ; 텍스트가 아닌 경우 건너뛰기
              (progn
                (princ "\n선택한 엔티티는 텍스트가 아닙니다.")
              )
              (progn
                (setq old-pt (cdr (assoc 10 ent-data))) ; 기존 좌표 가져오기
                (setq new-pt (list (car old-pt) ref-y (last old-pt))) ; 새로운 Y 좌표 설정
                (entmod (subst (cons 10 new-pt) (assoc 10 ent-data) ent-data))                
              )
            )
          )
          (princ "\n선택된 텍스트가 기준 텍스트에 맞춰 정렬되었습니다.")
        )
        (princ "\n정렬할 텍스트가 선택되지 않았습니다.")
      )
    )
    (princ "\n기준 텍스트가 선택되지 않았습니다.")
  )
  (princ)
)

좌측 정렬과 우측 정렬의 AutoLisp 프로그램은 명령을 실행하면, Text, MText를 선택하여 실행하는 간단한 프로그램입니다.

위의 예제는 Lisp을 공부하는 분들에게 도움이 되고자 만든 것이며, 실 사용은 여러분이 원하는 형태로 변경하여 사용하시길 바랍니다.

사용 방법1:
1. 위의 코드를 원하는이름.lsp 파일을 만들어 저장합니다.
2. Appload 명령을 이용하여, 리습파일을 로드합니다.
3. 명령창에 각각의 명령을 입력하면, 객체를 선택하라는 메시지가 나타납니다.
4. 객체를 선택하면, 선택한 객체의 레이어로 현재 레이어가 변경됩니다.

문자 스타일 (폰트 스타일) Style 명령 알아보기