马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我们对 <图元名: -24dbf0> 实体名很眼熟了,那么通过实体名能求出该实体的AcDbObjectId值吗
我们看看这个实体的ID值是多少,看下面图
ID是 -2415600,
那实体名里面的数字 <图元名: -24dbf0> -24dbf0
是16进制的,我们把它转换成十进制,看看结果
- 命令: (xd::math:hex2dec "-24dbf0")
- -2415600
复制代码
看出来了,实体名里面的数字转换成10进制就是对象的ID值。
下面写个测试工具,大家可以找个实体测试下
 - (defun c:tt ()
- (if (setq e (car (entsel)))
- (progn
- (setq str (xd::var:tostring e))
- (xdrx_prompt "\n实体名是:" str)
- (setq num (xdrx_string_regexps "(?<=: ).*(?=>)" str)
- num (car num)
- )
- (xdrx_prompt "\n数字是:" num)
- (xdrx_prompt
- "\n转换成10进制是:"
- (setq num (xd::math:hex2dec num))
- )
- (xdrx_prompt
- "\n对象的AcDbObjectId为:"
- (setq id (vla-get-objectid (vlax-ename->vla-object e)))
- )
- (if (= num id)
- (xdrx_prompt
- "\n所以实体名中的数字转换成10进制等于该实体的AcDbObjectId值."
- )
- )
- )
- )
- (princ)
- )
xd::math:hex2dec 函数见: http://bbs.xdcad.net/thread-711205-1-1.html
下面是通过这个方法获得的ID的函数:
 - (defun _id (e)
- (setq str (xd::var:tostring e))
- (setq num (xdrx_string_regexps "(?<=: ).*(?=>)" str)
- num (car num)
- )
- (xd::math:hex2dec num)
- )
或者
 - (defun _id (e)
- (setq str (vl-princ-to-string e))
- (setq num (xd::string:regexps "(-)?[0-9a-f]+" str "")
- num (car num)
- )
- (xd::math:hex2dec num)
- )
|