明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6524|回复: 16

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

  [复制链接]
发表于 2013-7-8 11:33 | 显示全部楼层 |阅读模式
本帖最后由 vectra 于 2013-7-10 08:29 编辑

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

  1. (defun ace-reg-appid (name /)
  2.   (if (null (tblsearch "APPID" name))
  3.     (regapp name)
  4.   )
  5. )

  6. (defun ace-xdata-get (ename appid /)
  7.   (if (= "*" appid)
  8.     (cdr (assoc '-3 (entget ename (list appid))))
  9.     (cdr (assoc appid (cdr (assoc '-3 (entget ename (list appid))))))
  10.   )
  11. )

  12. (defun ace-xdata-set (ename appid data / code data-3 data-old data-app)
  13.   (setq        code         (entget ename (list "*"))
  14.         data-3         (assoc '-3 code)
  15.         data-app (append (list appid) data)
  16.   )

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

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

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

  29.   (entmod code)
  30. )


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

  35.   (if (and data-3 (setq data-old (assoc appid (cdr data-3))))
  36.     (progn
  37.       (setq
  38.         code (subst (subst (list appid) data-old data-3) data-3 code)
  39.       )
  40.       (entmod code)
  41.     )
  42.   )
  43. )




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...")))

评分

参与人数 1明经币 +2 收起 理由
Gu_xl + 2 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-5-7 19:36 | 显示全部楼层
请教一下楼主,用LDATA一样也能存储数据,而且读写更为简单,那么XDATA的优势是什么呢?
发表于 2021-6-19 15:26 | 显示全部楼层
感觉很有用,很方便,只是现在天正的图元不能entmod,很讨厌
发表于 2018-9-29 12:14 | 显示全部楼层
非常改写楼主
发表于 2013-7-8 11:38 | 显示全部楼层
顶一个,先收下,谢谢!
发表于 2013-7-8 11:38 | 显示全部楼层
顶一个,先收下,谢谢
发表于 2013-7-8 15:44 | 显示全部楼层
,收藏了
发表于 2013-7-8 15:48 | 显示全部楼层
做啥用的哈
发表于 2013-7-8 16:21 | 显示全部楼层
不错不错,正需要用到
发表于 2013-7-9 16:54 | 显示全部楼层
收藏了
发表于 2013-7-23 21:27 | 显示全部楼层
顶一个,先收下,谢谢
发表于 2015-6-4 11:41 | 显示全部楼层
正需要用到
发表于 2015-6-21 11:56 | 显示全部楼层
谢谢老大,不知道怎么用的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 04:49 , Processed in 0.417736 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表