;; 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)