안녕하세요. 고수님들의 도움이 필요합니다. 아래 내용 보시고 도움을 주시면 감사하겠습니다.
일반 text를 mtext로 변경하는 리습입니다.
리습을 실행하고 나면 폭비율 (장평) 이 일괄적으로 1로 변경이 되서 안타까운 상황입니다.
혹시 일반 text일때 가지고 있던 폭비율을 그대로 가지고 mtext로 변경이 가능한지요?
어떤 내용을 수정해야 가능할까요?
;;— TEXT를 MTEXT로 변경 ————————————
(defun c:TM (/ *error* acObj acDoc ss n en ent VCT VC VS MTE MinP MaxP AP pos slen)
(defun *error* (x) (setvar ‘nomutt 0) (setvar ‘cmdecho 1) (and acDoc (vla-endundomark acDoc)) (princ))
(prompt “TXT2MTEXTn다중행 문자로 변환 할 일반 문자를 선택…”)
(vl-load-com)
(or (setq ss (ssget (list (cons 0 “TEXT”)))) (quit))
(if (> (sslength ss) 200)
(progn
(eval
(list ‘while (list ‘< ‘(getvar “millisecs”) (+ (getvar ‘millisecs) 200))
‘(princ “r작업 중 입니다. 잠시만 기다리세요…”)
)
)
(setq slen (rtos (sslength ss) 2 0))
)
)
(setq acObj (vlax-get-acad-object) acDoc (vla-get-ActiveDocument acObj))
(setq VCT (getvar ‘viewctr) VC (vlax-3d-point VCT) VS (getvar ‘viewsize))
(vla-startundomark acDoc)
(setq n 0)
(setvar ‘nomutt 1)
(setvar ‘cmdecho 0)
(repeat (sslength ss)
(setq en (ssname ss n) ent (entget en) n (1+ n))
(if slen (princ (strcat “rProcess: ” (rtos n 2 0) “/” slen)))
(if (not (apply ‘and (mapcar ‘= (list (getvar ‘viewctr) (getvar ‘viewsize)) (list VCT VS))))
(vla-ZoomCenter acObj VC VS)
)
(setq pos
(cond
((= (cdr (assoc 73 ent)) 3) (+ 1 (cdr (assoc 72 ent))))
((= (cdr (assoc 73 ent)) 2) (+ 4 (cdr (assoc 72 ent))))
((<= (cdr (assoc 72 ent)) 3) (+ 7 (cdr (assoc 72 ent))))
(T 5)
)
)
(vla-GetBoundingBox (vlax-ename->vla-object en) ‘MinP ‘MaxP)
(setq AP (mapcar ‘/ (apply ‘mapcar (append ‘(+) (mapcar ‘vlax-safearray->list (list MinP MaxP)))) ‘(2.0 2.0)))
(setq MTE
(vl-remove nil
(list
(cons 0 “MTEXT”) (cons 100 “AcDbEntity”) (cons 67 0) (assoc 410 ent) (assoc 8 ent)
(if (assoc 6 ent) (assoc 6 ent) (cons 6 “BYLAYER”)) (if (assoc 347 ent) (assoc 347 ent))
(if (assoc 62 ent) (assoc 62 ent) (cons 62 256)) (cons 100 “AcDbMText”) (assoc 10 ent) (cons 71 7)
(assoc 40 ent) (cons 41 0) (assoc 7 ent) (assoc 1 ent) (assoc 50 ent)
)
)
)
(entdel en)
(vl-cmdf “UNDO” “Mark”)
(initcommandversion 2)
(vl-cmdf “EXPLODE” (entmakex MTE) “”)
(vla-GetBoundingBox (vlax-ename->vla-object (entlast)) ‘MinP ‘MaxP)
(setq AP
(mapcar ‘-
(mapcar ‘/ (apply ‘mapcar (append ‘(+) (mapcar ‘vlax-safearray->list (list MinP MaxP)))) ‘(2.0 2.0))
AP
)
)
(setq MTE (subst (cons 10 (append (mapcar ‘- (cdr (assoc 10 ent)) AP) ‘(0.0))) (assoc 10 ent) MTE))
(vl-cmdf “UNDO” “Back”)
(setq MTE (entmakex MTE))
(and pos (/= pos 7) (vla-put-AttachmentPoint (vlax-ename->vla-object MTE) pos))
)
(setvar ‘nomutt 0)
(setvar ‘cmdecho 1)
(vla-endundomark acDoc)
(prompt (strcat “n” (rtos n 2 0) “개의 객체가 다중행 문자로 변환 되었습니다.”))
(princ)
)
혹시 추가로 아래 장평 변경하는 리습을 사용하여 mtext도 가능하게 변경이 될까요?
고수님들의 도움이 필요 합니다
부탁드리겠습니다
;;— 글자 장평 변경 ————————————
(DEFUN C:TW( / SS1 HT NUM INDEX ENTL CO ENTL1 ASS)
(SETQ SS1 (SSGET ))
(SETQ HT (GETREAL “ENTER NEW TEXT WIDTH ?:”))
(SETQ NUM (SSLENGTH SS1))
(SETQ INDEX 0)
(REPEAT NUM
(SETQ ENTL (ENTGET (SSNAME SS1 INDEX)))
(SETQ INDEX (1+ INDEX))
(SETQ ASS (ASSOC 0 ENTL))
(IF (= “TEXT” (CDR ASS))
(PROGN
(SETQ ASS1 (ASSOC 41 ENTL))
(SETQ CO (CONS (CAR ASS1) HT))
(SETQ ENTL1 (SUBST CO ASS1 ENTL))
(ENTMOD ENTL1)
)
)
)
)