vectra 发表于 2013-7-8 11:33:49

发几个操作XDATA的函数,操作XDATA不再害怕

本帖最后由 vectra 于 2013-7-10 08:29 编辑

先发代码,求优化注释说明以后再补充




(defun ace-reg-appid (name /)
(if (null (tblsearch "APPID" name))
    (regapp name)
)
)

(defun ace-xdata-get (ename appid /)
(if (= "*" appid)
    (cdr (assoc '-3 (entget ename (list appid))))
    (cdr (assoc appid (cdr (assoc '-3 (entget ename (list appid))))))
)
)

(defun ace-xdata-set (ename appid data / code data-3 data-old data-app)
(setq      code         (entget ename (list "*"))
      data-3         (assoc '-3 code)
      data-app (append (list appid) data)
)

(if (null data-3)
    ;; 不存在扩展数据时添加
    (setq code (append code (list (list -3 data-app))))

    (if      (setq data-old (assoc appid (cdr data-3)))
      ;; 扩展数据中已存在APPID项, 仅在内容不同时才进行替换
      (if (not (equal data-app data-old))
      (setq code (subst (subst data-app data-old data-3) data-3 code))
      )

      ;; 在扩展数据中加入新项
      (setq code (subst (append data-3 (list data-app)) data-3 code))
    )
)

(entmod code)
)


(defun ace-xdata-remove      (ename appid / code data-3 data-old)
(setq      code   (entget ename (list "*"))
      data-3 (assoc '-3 code)
)

(if (and data-3 (setq data-old (assoc appid (cdr data-3))))
    (progn
      (setq
      code (subst (subst (list appid) data-old data-3) data-3 code)
      )
      (entmod code)
    )
)
)




Sample

_$ (ace-reg-appid "T1")
"T1"
_$ (ace-reg-appid "T2")
"T2"
_$ (ace-xdata-set (handent "1BB") "T1" '((1000 . "Text")(1000 . "More Text...")))
...
_$ (ace-xdata-get (handent "1BB") "T1")
((1000 . "Text") (1000 . "More Text..."))
_$ (ace-xdata-set (handent "1BB") "T2" '((1070 . 10)))
...
_$ (ace-xdata-get (handent "1BB") "T2")
((1070 . 10))
_$ (ace-xdata-get (handent "1BB") "*")
(("T1" (1000 . "Text") (1000 . "More Text...")) ("T2" (1070 . 10)))
_$ (ace-xdata-set (handent "1BB") "T2" '((1070 . 20)(1070 . 30)))
...
_$ (ace-xdata-get (handent "1BB") "T2")
((1070 . 20) (1070 . 30))
_$ (ace-xdata-remove (handent "1BB") "T2")
...
_$ (ace-xdata-get (handent "1BB") "*")
(("T1" (1000 . "Text") (1000 . "More Text...")))

weilu 发表于 2023-5-7 19:36:46

请教一下楼主,用LDATA一样也能存储数据,而且读写更为简单,那么XDATA的优势是什么呢?

Zrrrrr 发表于 2021-6-19 15:26:24

感觉很有用,很方便,只是现在天正的图元不能entmod,很讨厌

ashleytgg 发表于 2018-9-29 12:14:55

非常改写楼主

阿霸jun 发表于 2013-7-8 11:38:08

顶一个,先收下,谢谢!

品茗新秀 发表于 2013-7-8 11:38:52

顶一个,先收下,谢谢

阿然 发表于 2013-7-8 15:44:04

,收藏了

richine001 发表于 2013-7-8 15:48:45

做啥用的哈

819534890 发表于 2013-7-8 16:21:01

不错不错,正需要用到

流_星 发表于 2013-7-9 16:54:28

收藏了

香田里浪人 发表于 2013-7-23 21:27:58

顶一个,先收下,谢谢

dbqtju 发表于 2015-6-4 11:41:17

正需要用到

434939575 发表于 2015-6-21 11:56:30

谢谢老大,不知道怎么用的.
页: [1] 2
查看完整版本: 发几个操作XDATA的函数,操作XDATA不再害怕