아래 리습은 공차리습인데요. 글자 크기랑 글자 색상을 변경하려고 하면 어디를 변경해야 하나요?
파일첨부하겠습니다.
;;
;; 치수, 문자에 대한 공차 입력 LISP
;;
(defun C:DT( / *error* PTE:highlight acDoc ss #DIMTOLERANCE n)
(vl-load-com)
(defun PTE:highlight (ss x) (mapcar ‘(lambda (ent)(redraw ent x)) (vl-remove-if ‘listp (mapcar ‘cadr (ssnamex ss)))))
(defun *error* (x) (if ss (PTE:highlight ss 4)) (princ))
(setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
;광역변수 지정
(if (= #PlusTol NIL) (setq #PlusTol “”))
(if (= #MinusTol NIL) (setq #MinusTol “”))
;초기값 확인 메세지
(prompt (strcat “DimTolerance”))
(if (= #PlusTol “”)(prompt (strcat “n윗 공차: 미지정”))(prompt (strcat “n윗 공차: ” #PlusTol)))
(if (= #MinusTol “”)(prompt (strcat ” 아래공차: 미지정”))(prompt (strcat ” 아래공차: ” #MinusTol)))
;;;; MAIN PROGRAM
(defun #DIMTOLERANCE ( ss / Buffer DimText n dzn en ob ed dt nu nx)
(PTE:highlight ss 3)
;공차값 입력
(if (/= (setq Buffer (getstring T (strcat “n 윗공차<” #PlusTol “>: “))) “”)
(if (= Buffer “0”) (setq #PlusTol ” 0″) (setq #PlusTol Buffer))
)
(if (/= (setq Buffer (getstring T (strcat “n 아래공차<” #MinusTol “>: “))) “”)
(if (= Buffer “0”) (setq #MinusTol ” 0″) (setq #MinusTol Buffer))
)
;상/하한 공차 자동적용
(vla-startundomark acDoc)
(if (or (> (atof #PlusTol) (atof #MinusTol))
(and (/= ” 0″ #PlusTol) (= 0 (atof #PlusTol)))
(and (/= ” 0″ #MinusTol) (= 0 (atof #MinusTol)))
)
(if (= (rtos (- 0 (atof #PlusTol))) (rtos (atof #MinusTol)))
(setq DimText (strcat ” {\H0.5x;\C1;%%p” (rtos (abs (atof #PlusTol))) “}”))
(setq DimText (strcat ” {\H0.5x;\C1;\S” #PlusTol “^” #MinusTol “;}”))
)
(if (= (rtos (- 0 (atof #PlusTol))) (rtos (atof #MinusTol)))
(setq DimText (strcat ” {\H0.5x;\C1;%%p” (rtos (abs (atof #PlusTol))) “}”))
(setq DimText (strcat ” {\H0.5x;\C1;\S” #MinusTol “^” #PlusTol “;}”))
)
)
;문자 변경
(setq n 0 dzn (getvar “dimzin”))
(setvar “cmdecho” 0)
(setvar “dimzin” 8)
(repeat (sslength ss)
(setq en (ssname ss n) ob (vlax-ename->vla-object en) n (1+ n))
(if (= (cdr (assoc 0 (entget en))) “DIMENSION”)
;DIMENSION일때 공차적용
(progn
(setq ed (vla-get-TextOverride ob) dt (vl-string-search “<>” ed))
(if (/= (vla-get-ToleranceDisplay ob) 0)
(progn
(vla-put-ToleranceUpperLimit ob 0)
(vla-put-ToleranceLowerLimit ob 0)
(vla-put-ToleranceDisplay ob 0)
(vla-put-ToleranceHeightScale ob 1.0)
(vla-put-ToleranceJustification ob 0)
)
)
(cond
((= ed “”)(vla-put-TextOverride ob (strcat “<>” DimText)))
((= 0 dt)(vla-put-TextOverride ob (strcat “<>” DimText)))
((= dt nil)(vla-put-TextOverride ob (strcat ed DimText)))
((> (+ 3 dt) (strlen ed))(vla-put-TextOverride ob (strcat (substr ed 1 dt) “<>” DimText)))
((= dt)(vla-put-TextOverride ob (strcat (substr ed 1 dt) “<>” DimText)))
)
)
;MTEXT일때 공차적용
(progn
(setq ed (vla-get-TextString ob) nu 0)
;적용공차 삭제
(while (or (setq nx (vl-string-search “{\H” ed)) (setq nx (vl-string-search “{\h” ed)))
(setq ed (strcat (substr ed 1 nx) (substr ed (1+ (vl-string-search “}” ed nx)))))
)
;앞의 치수 하나만 공차적용할 땐 while문을 if문으로 변경
(while (or (setq buffer (vl-string-search “%%c” ed nu)) (setq buffer (vl-string-search “%%C” ed nu)))
(progn
(setq nu (+ buffer 3) buffer (substr ed (1+ nu) 1))
(while (not (and (/= buffer “0”) (/= buffer “.”) (= (atof buffer) 0)))
(setq nu (1+ nu) buffer (substr ed (1+ nu) 1))
)
(setq ed (strcat (substr ed 1 nu) DimText (substr ed (1+ nu))))
)
)
(if (= (vla-get-TextString ob) ed)
(vla-put-TextString ob (strcat ed DimText)) (vla-put-TextString ob ed)
)
(if (and (assoc 102 (entget en)) (assoc 330 (entget en))) (entupd (cdr (assoc 330 (entget en)))))
)
)
)n
)
;객체선택 시 프로그램 실행
(if (setq ss (ssget (list (cons 0 “dimension,mtext”)))) (setq n (#DIMTOLERANCE ss)))
(prompt (strcat (rtos n) “개의 치수가 수정되었습니다.”))
(setvar “cmdecho” 1)
(vla-endundomark acDoc)
(princ)
)
감사합니다. 4군데를 다 수정 하는거였군요. 감사합니다.