找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4739|回复: 19

[每日一码] 【Gu_xl】动态浏览图形的扩展数据

[复制链接]

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-9-24 12:17:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 牢固 于 2013-9-24 20:37 编辑

加在程序后,输入命令:ViewXData,鼠标在含有扩展数据的对象上停留,会自动在屏幕上显示出该对象的扩展数据,鼠标移开则扩展数据显示自动消失!再次键入命令ViewXData,则自动关闭该功能!
程序加在前需加在XDRX_API! VIEWXDATA.gif
  1. ;;动态查看扩展数据,BY Gu_xl
  2. (defun c:ViewXData  (/ ret)
  3.   (VL-ACAD-DEFUN 'Gxl-Dyn_View_XData)
  4.   (if *ViewXData*
  5. (progn
  6.    (xdrx_PointMonitor)
  7.    (princ "\n扩展数据浏览关闭!")
  8.    (setq *ViewXData* nil)
  9.    )
  10. (progn
  11.    (xdrx_PointMonitor "Gxl-Dyn_View_XData")
  12.    (princ "\n扩展数据浏览打开!")
  13.    (setq *ViewXData* t)
  14.    )
  15. )
  16.   (princ)
  17.   )
  18. (defun Gxl-Dyn_View_XData  (PT / ENT ENL STR)
  19.   (setq ent (nentselp pt)
  20. ent (if (and ent (= (type (last (last ent))) 'ename))
  21.        (last (last ent))
  22.        (car ent)
  23.        )          ;if
  24. )
  25.   (if ent
  26.     (progn
  27.       (setq enl (entget ent '("*")))
  28.       (if (setq enl (assoc -3 enl))
  29. (progn
  30.    (foreach a  (cdr enl)
  31.      (if str
  32.        (progn
  33.   (setq str (strcat str
  34.       "\n\n"
  35.       "  应用名: \""
  36.       (car a)
  37.       "\""))
  38.   (foreach b  (cdr a)
  39.     (setq str (strcat str
  40.         "\n   "
  41.         (VL-PRIN1-TO-STRING b)))
  42.     )
  43.   )
  44.        (progn
  45.   (setq str (strcat "扩展数据:\n  应用名: \""
  46.       (car a)
  47.       "\""))
  48.   (foreach b  (cdr a)
  49.     (setq str (strcat str
  50.         "\n    "
  51.         (VL-PRIN1-TO-STRING b)))
  52.     )
  53.   )
  54.        )
  55.      )
  56.    str
  57.    )
  58. )
  59.       )
  60.     )
  61.   )


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

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-24 12:37:41 | 显示全部楼层
获取扩展实体数据,也可以用API函数, (xdrx_xdata_get ent "应用程序名) 获取看, 不给应用程序名参数,直接得到该实体上所有的扩展实体数据,表的格式。

点评

这个函数有Bug,不带应用名,(xdrx_xdata_get (car(entsel))),返回值: '(("SOUTH")) . 只能返回扩展数据的应用名,并没有扩展数据! 给应用名称 (xdrx_xdata_get (car(entsel) "SOUTH") 或 (xdrx_xdata_get (car(en  详情 回复 发表于 2013-9-24 14:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-9-24 14:40:13 | 显示全部楼层
newer 发表于 2013-9-24 12:37
获取扩展实体数据,也可以用API函数, (xdrx_xdata_get ent "应用程序名) 获取看, 不给应用程序名参数,直 ...


这个函数有Bug,不带应用名,(xdrx_xdata_get (car(entsel))),返回值: '(("SOUTH")) . 只能返回扩展数据的应用名,并没有扩展数据!
给应用名称 (xdrx_xdata_get (car(entsel) "SOUTH") 或 (xdrx_xdata_get (car(entsel) '("SOUTH") ),都返回nil,
使用版本:2004

点评

你用API的 xdrx_xdata_set 函数,写下扩展数据呢,然后读读试试。  详情 回复 发表于 2013-9-24 16:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-24 16:53:57 | 显示全部楼层
牢固 发表于 2013-9-24 14:40
这个函数有Bug,不带应用名,(xdrx_xdata_get (car(entsel))),返回值: '(("SOUTH")) . 只能返回扩展数 ...

你用API的 xdrx_xdata_set 函数,写下扩展数据呢,然后读读试试。

点评

不行啊! 命令: ( xdrx_xdata_set (car(entsel)) "AAA" "CCC") 选择对象: T 命令: le Select a Object : ((-1 . ) (0 . "TEXT") (330 . ) (5 . "32F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "  详情 回复 发表于 2013-9-24 19:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-9-24 19:20:12 | 显示全部楼层
newer 发表于 2013-9-24 16:53
你用API的 xdrx_xdata_set 函数,写下扩展数据呢,然后读读试试。

不行啊!
命令: ( xdrx_xdata_set (car(entsel)) "AAA" "CCC")
选择对象: T
命令: le
Select a Object :
((-1 . <图元名: -10ef88>) (0 . "TEXT") (330 . <图元名: -13c308>) (5 . "32F") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "ZDH") (6 . "Continuous") (100 .
"AcDbText") (10 200.25 -0.375 0.0) (40 . 1.0) (1 . "2") (50 . 0.0) (41 . 0.8)
(51 . 0.0) (7 . "HZ") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100
. "AcDbText") (73 . 0) (-3 ("AAA" (1070 . 20001) (1000 . "CCC"))))
命令:
命令: (xdrx_getxdata (car(entsel)))
选择对象:
ERROR: malfomed Xdata tag: 20001(("AAA"))


点评

试试这个 (xdrx_xdata_get (car (entsel)) "aaa") 和 (xdrx_xdata_get (car (entsel)))  详情 回复 发表于 2013-9-24 20:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-9-24 20:04:56 | 显示全部楼层
牢固 发表于 2013-9-24 19:20
不行啊!
命令: ( xdrx_xdata_set (car(entsel)) "AAA" "CCC")
选择对象: T

试试这个   (xdrx_xdata_get (car (entsel)) "aaa") 和   (xdrx_xdata_get (car (entsel)))

点评

用 ( xdrx_xdata_get (car(entsel)) "AAA" 222) 为什么扩展数据会多出 (1070 . 20001) ?添加扩展数据后组码结果: 命令: le Select a Object : ((-1 . ) (0 . "LINE") (330 . ) (5 . "343") (100 . "AcDbEntity  详情 回复 发表于 2013-9-24 20:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-9-24 20:22:21 | 显示全部楼层
newer 发表于 2013-9-24 20:04
试试这个   (xdrx_xdata_get (car (entsel)) "aaa") 和   (xdrx_xdata_get (car (entsel)))

用 ( xdrx_xdata_get (car(entsel)) "AAA" 222) 为什么扩展数据会多出 (1070 . 20001) ?添加扩展数据后组码结果:
命令: le
Select a Object :
((-1 . <图元名: -10eee8>) (0 . "LINE") (330 . <图元名: -13c308>) (5 . "343") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "ZDH") (100 . "AcDbLine") (10
198.741 0.323983 0.0) (11 199.04 0.097874 0.0) (210 0.0 0.0 1.0) (-3 ("AAA"
(1070 . 20001) (1070 . 222))))
红色部分是不应该有的啊!
测试结果:
命令: (xdrx_xdata_get (car (entsel)))
选择对象:
ERROR: malfomed Xdata tag: 20001(("AAA"))



命令: (xdrx_xdata_get (car (entsel)) "aaa")
选择对象: 222



其实 (xdrx_xdata_get (car (entsel)))函数应该返回如下的结果才有用:
' (("AAA" (1070 . 222)))

因为同一个应用名下会有各种数据:如实数、整数、字串等等!

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-9-24 21:02:52 来自手机 | 显示全部楼层
xdata实在不好用,早放弃了

点评

好用不好用,问题的关键在于程序数据结构的设计和实际使用的需求!扩展数据和图形词典之间的优缺点是相当分明,使用哪种数据结构,是编程人员根据自己程序结构设计的需求来定!无所谓谁优谁劣!  详情 回复 发表于 2013-9-24 21:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-9-24 21:49:46 | 显示全部楼层
eachy 发表于 2013-9-24 21:02
xdata实在不好用,早放弃了

好用不好用,问题的关键在于程序数据结构的设计和实际使用的需求!扩展数据和图形词典之间的优缺点是相当分明,使用哪种数据结构,是编程人员根据自己程序结构设计的需求来定!无所谓谁优谁劣!

点评

请下载最新的0925 API XDATA支持函数包括: xdrx_object_removeXdata xdrx_xdata_get xdrx_xdata_set xdrx_xdata_setbyproperty xdrx_xdata_setDirection xdrx_xdata_setDisplacement xdrx_xdata_setH  详情 回复 发表于 2013-9-25 00:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-9-25 00:08:24 | 显示全部楼层
牢固 发表于 2013-9-24 21:49
好用不好用,问题的关键在于程序数据结构的设计和实际使用的需求!扩展数据和图形词典之间的优缺点是相当 ...

请下载最新的0925 API

XDATA支持函数包括:


xdrx_object_removeXdata
xdrx_xdata_get
xdrx_xdata_set
xdrx_xdata_setbyproperty
xdrx_xdata_setDirection
xdrx_xdata_setDisplacement
xdrx_xdata_setHandle
xdrx_xdata_setLayer
xdrx_xdata_setPoint
xdrx_xdata_setString
xdrx_xdata_setLong
xdrx_xdata_setInteger
xdrx_xdata_setReal
xdrx_xdata_setPosition
xdrx_xdata_setScale



====================
xdrx_xdata_set 设置通用的点、实数、字符串,不能设置方向、位置、距离、比例、层名、句柄

xdrx_xdata_setByProperty 可以设置方向、位置、距离、比例、层名、句柄、普通点、实数、整数、长整数

用法:
(xdrx_xdata_setByProperty <实体> <应用程序名> < ["Integer" <整数>] ["Real" <实数>] ["Long" <长整数>] ["String" <字符串>] ["Layer" <字符串>]  ["Scale" <实数或整数>] ["Position" <3D点>] ["Displacement" <3D点>] ["Direction" <3D点向量>] ["Distance" <实数或整数>] ["Handle" <实体名>])

测试:

命令: (xdrx_xdata_set (entlast) "faf" 345 34.5)
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 7ef95400>) (0 . "LINE") (330 . <图元名: 7ef93cf8>) (5 . "1B8") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1561.22
418.646 0.0) (11 1906.55 785.498 0.0) (210 0.0 0.0 1.0) (-3 ("faf" (1070 .
20001) (1002 . "{") (1070 . 345) (1040 . 34.5) (1002 . "}"))))

命令: (xdrx_xdata_set (entlast) "def" 456 "faf" (getpoint))
T

命令: (entget (entlast) '("*"))
((-1 . <图元名: 7ef95400>) (0 . "LINE") (330 . <图元名: 7ef93cf8>) (5 . "1B8") (100 .
"AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 1561.22
418.646 0.0) (11 1906.55 785.498 0.0) (210 0.0 0.0 1.0) (-3 ("faf" (1070 .
20001) (1002 . "{") (1070 . 345) (1040 . 34.5) (1002 . "}")) ("def" (1070 .
20001) (1002 . "{") (1070 . 456) (1000 . "faf") (1010 1766.49 425.887 0.0)
(1002 . "}"))))

命令: (xdrx_xdata_get (entlast) "abc")
nil

命令: (xdrx_xdata_get (entlast) "faf")
(345 34.5)

命令: (xdrx_xdata_get (entlast) "def")
(456 "faf" (1766.49 425.887 0.0))

命令: (xdrx_xdata_get (entlast))   ;不给应用程序名,返回所有的
(("faf" 345 34.5) ("def" 456 "faf" (1766.49 425.887 0.0)))


点评

慢慢研习一下!  详情 回复 发表于 2013-9-25 00:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

 楼主| 发表于 2013-9-25 00:36:59 | 显示全部楼层
XDSoft 发表于 2013-9-25 00:08
请下载最新的0925 API

XDATA支持函数包括:

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2017-7-17 12:18:47 | 显示全部楼层
在2010下可以显示数据,在2014下,有时候没有反应,需要鼠标滚轮放大缩小一下,是什么原因
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 15:27 , Processed in 0.219934 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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