본문 바로가기
  • 이웃집 찰스

정보나라

캐드 글자 편집 딜레이 렉 지연 / 텍스트 리습

by 리뷰하는 김과장 리뷰하는 김과장 2021. 8. 28.
 

1. 오토 캐드 글자 편집시 딜레이 현상 원인

 

 

 

캐드를 사용하다보면 다른 건 괜찮은데 텍스트를 수정하려고 하면 좀 기다려야 수정 창이 뜨는 경우가 있습니다. 10초에서 20초 정도 지연되는데 글자 수정 작업이 많으면 엄청나게 짜증 납니다. 빨리빨리 해서 작업을 끝내야 하는데 여기서 발목이 잡혀서 매우 짜증 나는 상황이죠~ 아무래도 제 포스팅을 검색해서 들어오신 분은 아마 다 공감을 하실 겁니다. 이렇게 딜레이 되는 원인은 다양합니다.

 

▶ 너무 많은 글꼴이 시스템이나 AutoCAD 글꼴 폴더에 설치되어 있는경우 딜레이가 발생할 수가 있습니다.
 그림의 데이터 손상, 특히 텍스트 스타일의 손상된 경우에도 텍스트 수정시 지연 현생이 발생할 수가 있습니다.
 손상된 프로파일일 경우 글자수정시 렉 현상이 일어날 수가 있습니다.
 파일이 이전 버전의 AutoCAD에서 작성되었을경우 지연 현상이 발생할 수가 있습니다.
 컴퓨터 시스템이 오래되어서일 경우 이런 렉 현상이 발생할수가 있습니다.
 AutoCAD의 설치에 오류로 인해 발생할수가 있습니다.

이처럼 다양한 원인으로 글자 수정시 딜레이 현상이 발생할 수가 있습니다. 글자 수정 시 10초에서 20초 정도 딜레이가 되는데 안 당해 본 사람은 모르죠~ 정말 짜증이 많이 납니다. 자 그럼 이것을 해결하는 방법에 대해서 자세히 알아보도록 하겠습니다~ 따라오세요~

 

 

 

 

 

 

 

 

 

 

 

2. dxeted 값을 1로 변경해서 지연현상 없애기

 

 

 

오토캐드 2006 이상 사용하는 분들 중에 텍스트 편집할 때 렉이 걸린 것처럼 딜레이가 될 때 dtexted 값을 1로 변경하시면 2005 이하 버전에서 문자 변경하던 식으로 변경이 가능합니다. 딜레이가 없어져서 시간이 단축될 겁니다.

 

 

 

 

 

 

 

▲ 명령어 입력란에 "dtexted"를 입력하고 엔터 합니다.

 

 

 

▲ 기본은 "2"로 설정이 되어 있을 겁니다. 여기서 우리는 "1"을 입력하고 엔터를 합니다.

 

이제 글자 수정 시 좀 더 빠르게 수정이 가능할 겁니다.

 

 

 

3. 리습으로 좀 더 편하고 빠르게 글자 수정하기

 

 

보통은 앞에 소개한 "dtexted" 를 "1" 로 수정하면 지연현상이 없어집니다. 하지만 간혹 이 방법으로도 해결이 안되는 분들이 계실겁니다. 이런분들을 위한 팁입니다. 사실 리습을 이용해서 캐드를 사용하면 다양한 기능이 있어서 시간을 보다더 단축할수있고 매우 편리하답니다. 제가 추천하는 방법이랍니다. 

 

 

 

 

 

 

tt.LSP
0.01MB

 

 

위 리습을 다운로드해서 설치하시면 됩니다. 

 

리습 설치방법은 아래 사이트에 가시면 잘 설명이 되어 있네요~ 설명이 길어질 것 같아서 링크로 대체합니다.

 

https://itqnara.tistory.com/51

 

오토캐드 리습(autocad lisp) 모음과 등록해서 사용방법 꿀팁~

안녕하세요 낭만고양이 입니다. 오늘은 오토캐드 리습(autocad lisp)파일을 공유하려합니다. 리습이란 오토캐드 작업을 보다효율적으로 하기위해서 사용자가 직적 개발한 명령어라고 할수가 있습

itqnara.tistory.com

 

 

siwddedit.dcl
0.00MB

 

"siwddedit.dcl" 파일은 설치된 오토캐드 폴더방에 Support 폴더가 있을겁니다. 요기다가 넣어주세요.

저 같은 경우 경로가 "C:\Program Files (x86)\AutoCAD 2007\Support" 입니다. 아마 다른분들은 경로가 조금씩 틀릴겁니다. 

 

 

설치를 제대로 하셨다면 이제 사용법을 알아야겠죠~

사용법과 명령어는 아래와 같습니다.

 

▶ 텍스트 수정하기 tw

(가장 기본적인 기능이죠 글자 수정하기입니다. 하나씩 수정할때 이용하세요)

 

▶ 텍스트 수정하기 tt

(다중 텍스트 편집이 가능합니다. 다중이라고 해서 여러가지 문자를 편집할때만 사용하는것이 아니라 한가지 문자를 편집할때도 사용하면 편리합니다. 사실 저는 tw 명령은 잘 사용하지 않고 tt 명령어로 거의다 사용합니다. tt 명령명령어는 기존문자에서 일부 변경할때 매우 편리하기 때문입니다. 사용해보시면 그 편리함을 아실겁니다.)


▶ 텍스트 일괄 치환하기 tc

-글자 속에 있는 일부 단어를 치환할 수가 있습니다. 여러 가지 글자를 동시에 변경 가능합니다.


▶ 치수나 문자 앞에 파이 삽입 ppp

-보통 치수 앞에 %%C 를 입력해서 수정 작업을 많이 하죠~ 보다 편하고 빨리 작업할 수가 있습니다.


▶ 치수나 문자 앞에 M 삽입 mmm

-치수에 텝 표기를 해야 할 때 M을 넣는 경우가 있는데 이럴 때 사용하시면 편리합니다. 저는 자주 사용하는 기능이라 리습에 넣어 봤습니다.


▶ 모두 대문자로 변경 LLL

-모든 영어문자를 대문자로 변경합니다.


▶ 모두 소문자로 변경 sss

-모든 영어문자를 소문자로 변경합니다.

 

▶ 모든 문자 폰트를 굴림체로 변경 stg

- 캐드파일을 열면 문자가 깨져서 ??? 로 표기되는 현상을 많이 봤을겁니다. 이렇게 어떤 문자인지 알수가 없을때 일괄 굴림체로 모두 변경해줘서 깨진 문자가 다 보이게 하는 기능입니다. 매우 요긴하게 사용할수가 있으니 명령어를 잘 기억해 두시기 바랍니다.  만약 이렇게 했는데도 계속해서 ??? 표시가 나온다면 폭탄(명령어 X) 을 한번 터트려 주시고 다시한번 stg 명령을 주시면 해결되는 경우가 있습니다. 그렇게 했는데도 안된다면 특성일치(명령어ma) 로 해결하시면 됩니다. 


▶ 글자를 동일하게 변경 et

-동일한 글자로 변경하고 싶을 때 사용하시면 편리합니다. 아마 한 번쯤은 요긴하게 사용될 일이 있을 겁니다.

 

▶ 치수앞에 문자 삽입하기 g

말그대로 치수앞에 특수문자나 일반문자를 삽입하고자 할때 사용하시면 편리합니다.

 

▶ 치수뒤에 문자 삽입하기 gg

치수뒤에 특수문자나 일반문자를 삽입하고자 할때 사용하세요~

 

▶ 명령어를 확인하고 싶을 때 ttt

명령창에 ttt 를 입력하면 명령 창에 명령어들이 주르륵 나오게 됩니다. 안보이면 명령창 높이를 조절해서 키워보세요~ 명령어가 어떤게 있었는지 헷갈릴때는 ttt 만 기억하시면 됩니다.

 

 

 

더보기



; 텍스트 수정 tt -----------------
(defun C:tw(/ a b c d e)
  (prompt "\nSelect text to edit: ")
  (setq a (ssget))
  (setq b (sslength a))
  (setq c 0)
  (while (<= 1 b)
     (setq d (ssname a c))
     (if (or  (= (cdr  (assoc  0 (entget  d))) "TEXT")   (= (cdr (assoc  0  (entget d))) 
"DIMENSION") (= (cdr (assoc 0 (entget d))) "MTEXT"))
        (progn
           (redraw d 3)
           (prompt "\nNew text string <")
           (princ (cdr (assoc 1 (entget d))))
           (princ ">:")
           (setq e (getstring T ))
           (if (= e "")
               (setq e (cdr (assoc 1 (entget d))))
           )
           (entmod (subst (cons 1 e) (assoc 1 (entget d)) (entget d)))
           (redraw d 4)
        )
     )
  (setq b (- b 1))
  (setq c (+ c 1))
  )
  (princ)
)

; 텍스트 체인지 tc -----------------

(defun C:tc (/ sset n index txlist tx newtx newlist tx1)
     (prompt "\n Multi TEXTs Change..Pick Texts...<according DIMENSION>..")
     (setq o_txt (getstring  "\n ORIG'L TEXT in-put...."))
     (setq n_txt (getstring  "\n NEW    TEXT in-put...."))
     (setq o_qty (strlen o_txt))

     (prompt "\nPick TEXTs to change...")
     (setq sset (ssget ))
     (setq count (sslength sset))
     (setq osu 0)
     (repeat count
       (COND ((OR (= (cdr (assoc 0 (setq txtin (entget (ssname sset OSU))))) "MTEXT")
                  (= (cdr (assoc 0 (setq txtin (entget (ssname sset OSU))))) "TEXT")
              )
        (setq newtx (cdr (assoc 1 (setq txtin (entget (ssname sset OSU))))) )
          ;;;(setq txtin (entget (ssname sset osu)))
        (setq txt (cdr (assoc 1 txtin)))
        (setq su 1)
        (setq index 0)
          (setq rm-k "")
          (setq rm+k "")
          (setq rmsame nil)
          (setq co (strlen txt))
          (repeat co 
               (setq rmk (substr txt su o_qty))
               (setq rm-k (substr txt 1 (- su 1)))
               (setq rm+k (substr txt (+ su o_qty) co))
               (cond ((= o_txt rmk)
                    (setq f_txt (strcat rm-k n_txt rm+k))
                    (setq rmsame 111)
               ))
               (setq su (+ su 1))
          )
          (if (= rmsame 111) (entmod (subst (cons 1 f_txt) (assoc 1 txtin) txtin)))
       ))
          (setq osu (+ 1 osu))
     )`
)


; 치수나 문자 앞에 파이삽입 -----------------
(defun c:ppp(/ os ss sslen ass1 otxt ntxt elist k)
   (setvar "cmdecho" 0)
   (setq os (getvar "osmode"))
   (setvar "osmode" 0)
   (prompt "\n파이(Ø) 넣기할 치수나 문자선택 ")
   (setq ss (ssget))
   (setq sslen (sslength ss) k 0)
   (while (< k sslen)
       (setq elist (entget (ssname ss k)) )
       (setq ass1 (assoc 1 elist) otxt (cdr ass1) )
       (if (= otxt "") (setq otxt "<>"))
       (if (and (= (wcmatch otxt "%%c*") nil) (= (wcmatch otxt "%%C*") nil))
           (progn
              (setq ntxt  (strcat "%%C" otxt ) elist (subst (cons 1 ntxt) ass1 elist))
              (entmod elist)
           )
       )
       (setq k (+ K 1))
   )
   (setvar "osmode" os)
   (prin1)
)

; 치수나 문자 앞에 M삽입 -----------------
(defun c:mmm(/ os ss sslen ass1 otxt ntxt elist k)
   (setvar "cmdecho" 0)
   (setq os (getvar "osmode"))
   (setvar "osmode" 0)
   (prompt "\n M 넣기할 치수나 문자선택 ")
   (setq ss (ssget))
   (setq sslen (sslength ss) k 0)
   (while (< k sslen)
       (setq elist (entget (ssname ss k)) )
       (setq ass1 (assoc 1 elist) otxt (cdr ass1) )
       (if (= otxt "") (setq otxt "<>"))
       (if (and (= (wcmatch otxt "M*") nil) (= (wcmatch otxt "M*") nil))
           (progn
              (setq ntxt  (strcat "M" otxt ) elist (subst (cons 1 ntxt) ass1 elist))
              (entmod elist)
           )
       )
       (setq k (+ K 1))
   )
   (setvar "osmode" os)
   (prin1)
)

; 대문자 변경 LLL -----------------
; 소문자 변경 SSS -----------------
(defun c:sss ()
(tt1 1)
(princ))

(defun c:LLL ()
(tt1 nil)
(princ))




(defun tt1 (mmgt / temp text edata)
(if (setq edata (entsel "\n 대(A), 소(a) 문자로 바꾸고 싶은 문자를 선택해 주세요 :  "))
    (progn
       (setq edata (entget (car edata))
             temp (assoc 1 edata)
             text (strcase (cdr temp) mmgt )
             edata (subst (cons 1 text) temp edata)
       )
       (entmod edata)
))
(princ))

(princ "\n▶대소문자전환.lsp 올려짐, 대문자로 바꿀땐 LLL, 소문자로 바꿀땐 SSS")
(princ)



; 동일한 글자로 et -----------------
(defun C:et (/ selobj selobj2 new)
    (setvar "cmdecho" 0)
    (if (setq a (entsel "\nOriginal object select:"))
      (progn (redraw (car a) 3)
        (setq sel (car a)) 
        (setq selobj (entget sel))
        (setq OLDSELECT sel) 

        (princ "\nAlteration object select:")
        (if (setq ss (ssget))
          (progn (setq k 0) 
            (repeat (sslength ss) 
             (setq ent (ssname ss k))
             (setq selobj2 (entget ent))
             (setq #1 (cdr (assoc 0 selobj2)))
             (cond ((= #1 "TEXT")
                   (setq new (assoc 1 selobj))
                   (setq selobj2 (subst new (assoc 1 selobj2) selobj2)))
                   ((= #1 "MTEXT")
                   (setq new (assoc 1 selobj))
                   (setq selobj2 (subst new (assoc 1 selobj2) selobj2)))
                   ((= #1 "DIMENSION")
                   (setq new (assoc 1 selobj))
                   (setq selobj2 (subst new (assoc 1 selobj2) selobj2)))
             ) ;cond
             (entmod selobj2)
             (setq k (1+ k))
            ) ;repeat
           );progn
       );if
      (redraw (car a) 4)
      );progn
     );if
(princ) 
)

; 치수 앞글자 바꾸기 -----------------
(defun C:g (/ o_txt n_txt o_qty sset count osu txti txt su rm-k rm+k co f_txt rmsame)                                            
     (prompt "\n Multi TEXTs ATTCH... text--> **text ..")
     (setq n_txt (getstring  "\n attch    TEXT in-put...."))
 
     (prompt "\nPick TEXTs to change...")
     (setq sset (ssget ))  
     (setq count (sslength sset))
     (setq osu 0)
     (repeat count
          (setq txtin (entget (ssname sset osu)))
          (setq txt (cdr (assoc 42 txtin)))
          (setq txt (rtos txt 2 2 ))
          (setq f_txt (strcat n_txt txt))
          (entmod (subst (cons 1 f_txt) (assoc 1 txtin) txtin))
          (setq osu (+ 1 osu))
     )
)

; 치수 뒷글자 바꾸기 -----------------
(defun C:gg (/ o_txt n_txt o_qty sset count osu txti txt su rm-k rm+k co f_txt
rmsame)                          
     (prompt "\n Multi TEXTs ATTCH... text--> text** ..")
     (setq n_txt (getstring  "\n attch    TEXT in-put...."))
 
     (prompt "\nPick TEXTs to change...")
     (setq sset (ssget ))
     (setq count (sslength sset))
     (setq osu 0)
     (repeat count
          (setq txtin (entget (ssname sset osu)))
          (setq txt (cdr (assoc 42 txtin)))
          (setq txt (rtos txt 2 2 ))
          (setq f_txt (strcat txt n_txt))
          (entmod (subst (cons 1 f_txt) (assoc 1 txtin) txtin))
          (setq osu (+ 1 osu))
     )    
)



; 다중 글자 변환 -----------------

(defun C:tt (/ a b c d e dcl_id )
  (setq dcl_id (LOAD_DIALOG "siwddedit.dcl"))
  (prompt "\nSelect text to edit: ")
  (setq a (ssget))
  (setq b (sslength a))
  (setq c 0)
  (while (<= 1 b)
     (setq d (ssname a c))
     (if (or  (= (cdr  (assoc  0 (entget  d))) "TEXT")   (= (cdr (assoc  0  (entget d))) 
"DIMENSION") (= (cdr (assoc 0 (entget d))) "MTEXT"))
        (progn
           (redraw d 3)
           (setq e (cdr (assoc 1 (entget d))))
           (new_dialog "newddeditbox" dcl_id)
           (set_tile "newddeditbox" e)
           (MODE_TILE "newddeditbox" 2)
           (action_tile "newddeditbox" "(setq e $value)")
           (start_dialog)
           (entmod (subst (cons 1 e) (assoc 1 (entget d)) (entget d)))
           (redraw d 4)
        )
     )
  (setq b (- b 1))
  (setq c (+ c 1))
  )
  (princ)
)

; 문자 스타일 변경 stg -----------------

;; Style Change  --------------->   st

(DEFUN C:stg()  
;(defun stylech ()

   (setvar "cmdecho" 0)
   (command "style" "standard" "굴림" "" "" "" "" "")
   (prompt "\n This Program is change STYLE  -->  굴림으로 전환  \n ")
   (setq sss(ssget "X" '((0 . "TEXT"))))
   (setq num (sslength sss))
   (setq i 0)
 (repeat num
   (setq ent (entget (ssname sss i)))
   (setq i (1+ i))
   (setq ass (assoc 0 ent))
 (if
      (= "TEXT" (cdr ass))
 (progn
  (setq ass1 (assoc 7 ent))
  (setq co (cons 7 "standard"))
  (setq entl (subst co ass1 ent))
  (entmod entl)
)
)
)
 (prompt "\n")
 (princ num) (prompt " TEXT changed ")
 (setvar "cmdecho" 0) (princ)
)



(defun c:aa()
   (setq n 0)
(setq ss (ssget))
(setq id (load_dialog "aaa.dcl"))
(new_dialog "aaa" id)
(mode_tile "edit" 2)
(action_tile "edit" "(setq ed $value)")
(setq ok (start_dialog))
(if (= ok 1)
   (draw)
   )
(unload_dialog id)
)
(defun draw()
(setq sl (sslength ss))
(repeat sl
   (setq sn (ssname ss n))
   (setq get (entget sn))
   (setq as (assoc 1 get))
   (setq con (cons 1 ed))
   (setq sub (subst con as get))
   (entmod sub)
   (setq n (1+ n))
   )
)


; 단축키 확인 ttt -----------------
(defun C:ttt (/ )
(princ "\n ▶ 다중 글자변환 tt")
(princ "\n ▶ 텍스트 수정하기 tw")
(princ "\n ▶ 텍스트 일괄 치환하기 tc")
(princ "\n ▶ 치수나 문자 앞에 파이 삽입 ppp")
(princ "\n ▶ 치수나 문자 앞에 M 삽입 mmm")
(princ "\n ▶ 모두 대문자로 변경 LLL")
(princ "\n ▶ 모두 소문자로 변경 sss")
(princ "\n ▶ 문자 폰트 굴림체로 변경 stg")
(princ "\n ▶ 글자를 동일하게 변경 et")
(princ "\n ▶ 치수앞글자 변환 g")
(princ "\n ▶ 치수뒷글자 변환 gg")
(princ) 
)

 

이렇게 해서 텍스트 수정시 지연(렉) 현상 해결방법에 대해 알아보았습니다. 왠만하면 2번째 소개한 dtexted 를 "1"로 설정하면 해결될겁니다. 하지만 좀더 전문적으로 그리고 더욱 편하게 사용하실려면 리습을 이용하는것이 작업효율을 높이는데 도움이 될겁니다. 저도 텍스트 지연현상때문에 이것저것 알아보다가 알게되었고 지금은 리습을 이용해서 2d 도면을 그리고 있습니다. 너무편합니다~ 여러분들도 한번 사용해보세요~ 그럼 다음에는 더욱 유용한 정보로 찾아올것을 약속드리며 이번 포스팅은 여기까지 하도록 하겠습니다~ 행복하세요~ ^^

 

 

 

 

♥공감은 고래도 춤추게 합니다~ ^^

 

 

 





댓글0