找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2006|回复: 2

[研讨] Vla方便获取和修改 Xrecord 数据

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-27 11:45:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
看到几个帖子求助关于 Xrecord ,抽了点时间自己写了一个,下面的程序可以列出附着在实体的 Xrecord 数据,
  1. (defun c:ListXrc (/ e obj dicts xd xt lst)
  2.   (if (and (setq e (car (entsel "\nSelect Object: ")))
  3.     (setq obj (vlax-ename->vla-object e))
  4.     (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  5.       )
  6.     (progn
  7.       (setq dicts (vla-GetExtensionDictionary obj))
  8.       (vlax-for dict dicts
  9. (if (= (vla-get-objectname dict) "AcDbXrecord")
  10.    (progn
  11.      (vla-getxrecorddata dict 'xt 'xd)
  12.      (setq lst
  13.      (cons
  14.        (cons (vla-get-name dict)
  15.       (mapcar
  16.         '(lambda (x y)
  17.     (cons x y)
  18.          )
  19.         (safearray-value xt)
  20.         (mapcar 'variant-value (safearray-value xd))
  21.       )
  22.        )
  23.        lst
  24.      )
  25.      )
  26.    )
  27. )
  28.       )
  29.     )
  30.   )
  31.   (foreach x lst
  32.     (princ "\n")
  33.     (princ x)
  34.   )
  35.   (princ)
  36. )

命令: LISTXRC
Select Object:
(QLR_BSM (1001 . QLR_BSM) (1071 . 0))
(QLR_DJH (1001 . QLR_DJH) (1000 . 121100GCAA002))
(QLR_DLRDHHM (1001 . QLR_DLRDHHM) (1000 . ))
(QLR_DLRSFZMS (1001 . QLR_DLRSFZMS) (1000 . ))
(QLR_DLRXM (1001 . QLR_DLRXM) (1000 . 代理人))
(QLR_DLRZJH (1001 . QLR_DLRZJH) (1000 . 22222222222222222222222222222222222222))
(QLR_DLRZJLX (1001 . QLR_DLRZJLX) (1000 . 3 护照))
(QLR_FRDBDHHM (1001 . QLR_FRDBDHHM) (1000 . ))
(QLR_FRDBSFZMS (1001 . QLR_FRDBSFZMS) (1000 . ))
(QLR_FRDBXM (1001 . QLR_FRDBXM) (1000 . 法人代表))
(QLR_FRDBZJH (1001 . QLR_FRDBZJH) (1000 . 33333333333333333333333333333333333333))
(QLR_FRDBZJLX (1001 . QLR_FRDBZJLX) (1000 . 2 军官证))
(QLR_QLRMC (1001 . QLR_QLRMC) (1000 . 罗桑))
(QLR_QLRZJH (1001 . QLR_QLRZJH) (1000 . 1111111111111111111111111111))
(QLR_QLRZJLX (1001 . QLR_QLRZJLX) (1000 . 1 居民身份证))
(QLR_TDZH (1001 . QLR_TDZH) (1000 . 土地证号))
(SOUTH (1001 . SOUTH) (1000 . 罗桑))

能查询了,修改只要用 SetXrecordData 就可以了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-27 12:58:25 | 显示全部楼层
一个简单修改程序
  1. (defun c:tt (/ e obj name data dicts xd)
  2.   (if (and (setq e (car (entsel "\nSelect Object: ")))
  3.     (setq obj (vlax-ename->vla-object e))
  4.     (= (vla-get-hasExtensionDictionary obj) :vlax-true)
  5.     (setq Name (getstring "\nXrecord Name: "))
  6.     (setq data (getstring "\nXrecord Data<String>: "))
  7.       )
  8.     (progn
  9.       (setq dicts (vla-GetExtensionDictionary obj))
  10.       (vlax-for dict dicts
  11. (if (and (= (vla-get-objectname dict) "AcDbXrecord")
  12.    (= (strcase (vla-get-name dict)) (strcase name))
  13.      )
  14.    (progn
  15.      (vla-getxrecorddata dict 'xt 'xd)
  16.      (setq xd (safearray-value xd))
  17.      (vla-setxrecorddata
  18.        dict
  19.        xt
  20.        (vlax-safearray-fill
  21.   (vlax-make-safearray
  22.     vlax-vbvariant
  23.     '(0 . 1)
  24.   )
  25.   (list (car xd) (vlax-make-variant data vlax-vbstring))
  26.        )
  27.      )
  28.    )
  29. )
  30.       )
  31.     )
  32.   )
  33.   (princ)
  34. )

命令: TT
Select Object:
Xrecord Name: QLR_TDZH
Xrecord Data<String>: Myname
命令:
命令: LISTXRC
Select Object:
(QLR_BSM (1001 . QLR_BSM) (1071 . 0))
(QLR_DJH (1001 . QLR_DJH) (1000 . 121100GCAA002))
(QLR_DLRDHHM (1001 . QLR_DLRDHHM) (1000 . ))
(QLR_DLRSFZMS (1001 . QLR_DLRSFZMS) (1000 . ))
(QLR_DLRXM (1001 . QLR_DLRXM) (1000 . 代理人))
(QLR_DLRZJH (1001 . QLR_DLRZJH) (1000 . 22222222222222222222222222222222222222))
(QLR_DLRZJLX (1001 . QLR_DLRZJLX) (1000 . 3 护照))
(QLR_FRDBDHHM (1001 . QLR_FRDBDHHM) (1000 . ))
(QLR_FRDBSFZMS (1001 . QLR_FRDBSFZMS) (1000 . ))
(QLR_FRDBXM (1001 . QLR_FRDBXM) (1000 . 法人代表))
(QLR_FRDBZJH (1001 . QLR_FRDBZJH) (1000 . 33333333333333333333333333333333333333))
(QLR_FRDBZJLX (1001 . QLR_FRDBZJLX) (1000 . 2 军官证))
(QLR_QLRMC (1001 . QLR_QLRMC) (1000 . 罗桑))
(QLR_QLRZJH (1001 . QLR_QLRZJH) (1000 . 1111111111111111111111111111))
(QLR_QLRZJLX (1001 . QLR_QLRZJLX) (1000 . 1 居民身份证))
(QLR_TDZH (1001 . QLR_TDZH) (1000 . Myname))
(SOUTH (1001 . SOUTH) (1000 . 罗桑))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-10-6 21:17:59 | 显示全部楼层
很好的示例,学了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 17:51 , Processed in 0.344052 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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