;; XiCAD 에 사용된 보조 함수 중 선택 세트의 DXF 코드 내용을 변경하는 보조함수
;; 사용방식 : (xi:SubUpd 객체 DXF코드 변경할내용)
;; 사례1 : 원의 반경을 500 으로 변경
;; (xi:SubUpd (car (entsel"\n>> 원 선택: ")) 40 500)
;; 사례2 : 문자 내용을 "가나다라" 로 변경
;; (xi:SubUpd (car (entsel"\n>> 문자 선택: ")) 1 "가나다라")
;; 사례3 : 선의 시작 점을 (0 0 0) 으로 변경
;; (xi:SubUpd (car (entsel"\n>> 시작점을 변경할 선을 선택: ")) 10 '(0 0 0))
;; ssget 도 사용가능
;; (xi:SubUpd (ssget) 62 1)
;; izzarder.com
;; xi:getDXF (xi:getDXF code ename)
(defun xi:getDXF (code ename / ent lst a)
(if (= (type code) 'LIST)
(progn
(setq ent (entget ename)
lst '()
)
(foreach a code
(setq lst (cons (list a (cdr (assoc a ent))) lst))
)
(reverse lst)
)
(if (= code -3)
(cdr (assoc code (entget ename '("*"))))
(cdr (assoc code (entget ename)))
)
)
)
(defun xi:SubUpd (ename code val / ent x y i s1)
(cond ((= (type ename) 'ENAME)
(setq ent (entget ename))
(if (and (= (type code) 'LIST) (= (type val) 'LIST))
(mapcar '(lambda (x y) (xi:SubUpd ename x y)) code val)
(progn
(if (= (xi:getdxf code ename) nil)
(entmod (append ent (list (cons code val))))
(entmod (subst (cons code val) (assoc code ent) ent))
)
(entupd ename)
)
)
)
((= (type ename) 'PICKSET)
(setq i -1)
(while (setq s1 (ssname ename (setq i (1+ i))))
(xi:SubUpd s1 code val)
)
)
((= (type ename) 'LIST)
(foreach s1 ename (xi:SubUpd s1 code val))
)
)
ename
)
(princ)