이 리습은 곱한값의 글씨가 새로생성돼는데 원래 있던 숫자가 값을 바꾸게 하고싶습니다.
어떻게하냐요?
(defun c:*(/ AcDoc oSpace ss TextInP NumText num1 k numm ss-del Textobj Num2 Num3 en)
(princ “nOPERATION MUL”)
(princ “n선택된 숫자의 곱를 구하여 문자로 삽입합니다.”)
(vl-load-com)
(setq AcDoc (vla-get-activedocument (vlax-get-acad-object)))
(cond
((= (vla-get-activespace AcDoc) 1) (setq oSpace (vla-get-modelspace AcDoc)))
((= (vla-get-activespace AcDoc) 0) (setq oSpace (vla-get-paperspace AcDoc)))
)
(vla-startundomark AcDoc)
(setq ss (ssget (list (cons 0 “*TEXT”))))
(if (not Precision) (setq Precision 3))
(initget 128)
(setq TextInP (getpoint (strcat “계산값 삽입점 지정 또는 [소수점 자리수 입력 <” (rtos Precision 3 0) “>] :”)))
(if (= (type TextInP) ‘STR)
(progn (setq Precision (atoi TextInP)) (setq TextInP (getpoint “계산값 삽입점 지정 :”)))
)
(setq en (ssname ss 0))
(setq NumText (vla-get-TextString (setq tobj (vlax-ename->vla-object en))))
(setq num1 (@numout NumText))
(setq k 0 numm num1)
(setq ss-del (ssdel (ssname ss 0) ss))
(repeat (sslength ss-del)
(setq Textobj (vlax-ename->vla-object (ssname ss-del k)))
(setq numm (* numm (@numout (vla-get-TextString Textobj))))
(setq k (1+ k))
)
(setq Num2 (rtos numm 2 Precision))
(if (/= Precision 0)
(setq Num3 (@SosuDot Num2 Precision))
(setq Num3 Num2)
)
(setq NewTextobj (vla-addtext oSpace Num3 (vlax-3d-point TextInP) (vla-get-Height tobj)))
(vla-put-layer NewTextobj (vla-get-layer tobj))
(vla-put-StyleName NewTextobj (vla-get-StyleName tobj))
(vla-endundomark AcDoc)
(princ)
)
;; 숫자만 골라서 List화 (“66.01” “” “1256.01” “” “” “5658”…)
;; 문자리스트중 가장긴 문자를 숫자로-하루
(defun @numout (NumText / k num numlist num1)
(setq k 0 num “” NumList ‘())
(repeat (strlen NumText)
(if (or (<= 48 (vl-string-elt NumText k) 57) (= 46 (vl-string-elt NumText k)))
(setq num (strcat num (chr (vl-string-elt NumText k))))
(setq NumList (append NumList (list num)) num “”)
)
(setq k (1+ k))
)
(if (/= num “”) (setq NumList (append NumList (list num)) num “”))
(setq num1 (atof (car (vl-sort NumList
(function (lambda (e1 e2) (> (strlen e1) (strlen e2)))))))
)
num1
)
;소숫점 자리수 맞추기-하루
(defun @SosuDot (txt Precision / Prenum txt)
(if (vl-string-search “.” txt)
(progn (setq Prenum (- (strlen txt) (vl-string-search “.” txt) 1))
(repeat (- Precision Prenum) (setq txt (strcat txt “0”))))
(progn (setq txt (strcat txt “.”))
(repeat Precision (setq txt (strcat txt “0”))))
)
txt
)