找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 874|回复: 2

[每日一码] “另类方法”求实体的AcDbObjectId值

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-7-30 00:30:07 | 显示全部楼层 |阅读模式

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

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

×
我们对 <图元名: -24dbf0> 实体名很眼熟了,那么通过实体名能求出该实体的AcDbObjectId值吗

我们看看这个实体的ID值是多少,看下面图

搜狗截图20170730001005.png

ID是 -2415600,

那实体名里面的数字 <图元名: -24dbf0>   -24dbf0

是16进制的,我们把它转换成十进制,看看结果



  1. 命令: (xd::math:hex2dec "-24dbf0")
  2. -2415600
复制代码


看出来了,实体名里面的数字转换成10进制就是对象的ID值。

下面写个测试工具,大家可以找个实体测试下

  1. (defun c:tt ()
  2.   (if (setq e (car (entsel)))
  3.     (progn
  4.       (setq str (xd::var:tostring e))
  5.       (xdrx_prompt "\n实体名是:" str)
  6.       (setq num        (xdrx_string_regexps "(?<=: ).*(?=>)" str)
  7.             num        (car num)
  8.       )
  9.       (xdrx_prompt "\n数字是:" num)
  10.       (xdrx_prompt
  11.         "\n转换成10进制是:"
  12.         (setq num (xd::math:hex2dec num))
  13.       )
  14.       (xdrx_prompt
  15.         "\n对象的AcDbObjectId为:"
  16.         (setq id (vla-get-objectid (vlax-ename->vla-object e)))
  17.       )
  18.       (if (= num id)
  19.         (xdrx_prompt
  20.           "\n所以实体名中的数字转换成10进制等于该实体的AcDbObjectId值."
  21.         )
  22.       )
  23.     )
  24.   )
  25.   (princ)
  26. )


xd::math:hex2dec 函数见: http://bbs.xdcad.net/thread-711205-1-1.html

下面是通过这个方法获得的ID的函数:

  1. (defun _id (e)
  2.   (setq str (xd::var:tostring e))
  3.   (setq        num (xdrx_string_regexps "(?<=: ).*(?=>)" str)
  4.         num (car num)
  5.   )
  6.   (xd::math:hex2dec num)
  7. )


或者

  1. (defun _id (e)
  2.   (setq str (vl-princ-to-string e))
  3.   (setq        num (xd::string:regexps "(-)?[0-9a-f]+" str "")
  4.         num (car num)
  5.   )
  6.   (xd::math:hex2dec num)
  7. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2476个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-5 09:38 , Processed in 0.421057 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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