明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2005|回复: 9

有关XDATA的一个奇怪问题

[复制链接]
发表于 2005-6-11 05:35 | 显示全部楼层 |阅读模式
第一次发现:
  1. (REGAPP "TEST")
  2. (ENTMOD (APPEND (ENTGET (SSNAME (SSGET '((0 . "TEXT"))) 0)) '((-3 ("TEST" (1000 . "TEST"))))))
  3. (ENTMOD (APPEND (ENTGET (SSNAME (SSGET '((0 . "*LINE"))) 0)) '((-3 ("TEST" (1000 . "TEST"))))))(SSGET "X" '((0 . "TEXT") (-3 ("TEST" (1000 . "TEST"))))) ;选择集为NIL
  4. (SSGET "X" '((0 . "*LINE") (-3 ("TEST" (1000 . "TEST"))))) ;选择集正确
复制代码
搞了一个晚上,终于发现了问题所在,这是BUG吗?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2005-6-11 08:18 | 显示全部楼层
(ssget "X" '((0 . "TEXT") (-3 ("TEST"))))         不要后面的就ok啦
发表于 2005-6-11 09:59 | 显示全部楼层
我这里测试,两者都为nil
发表于 2005-6-11 10:29 | 显示全部楼层
包包说的对的:)
 楼主| 发表于 2005-6-12 10:34 | 显示全部楼层
本帖最后由 作者 于 2005-6-12 10:55:43 编辑

操作过程记录如下:
  1. 生成TEXT
  2. 命令: TEXT
  3. 当前文字样式:   Standard   当前文字高度:   2.5000
  4. 指定文字的起点或 [对正(J)/样式(S)]: 0,0
  5. 指定高度 <2.5000>:
  6. 指定文字的旋转角度 <0>:
  7. 输入文字: TEXT
  8. 输入文字:生成LWPOLYLINE
  9. 命令: PLINE
  10. 指定起点: 0,0
  11. 当前线宽为 0.0000
  12. 指定下一个点或 [圆弧(A)/半宽(H)/长度(L)/放弃(U)/宽度(W)]: 10,10
  13. 指定下一点或 [圆弧(A)/闭合(C)/半宽(H)/长度(L)/放弃(U)/宽度(W)]:注册TEST
  14. 命令: (REGAPP "TEST")
  15. "TEST"分别为TEXT和LWPOLYLINE添加XDATA
  16. 命令: (ENTMOD (APPEND (ENTGET (SSNAME (SSGET '((0 . "TEXT"))) 0)) '((-3 ("TEST"
  17. (1000 . "TEST"))))))
  18. 选择对象: 找到 1 个
  19. 选择对象:
  20. ((-1 . <图元名: 40057df0>) (0 . "TEXT") (330 . <图元名: 40057cf8>) (5 . "66")
  21. (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10
  22. 0.0 0.0 0.0) (40 . 2.5) (1 . "TEXT") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 .
  23. "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 .
  24. "AcDbText") (73 . 0) (-3 ("TEST" (1000 . "TEST"))))
  25. 命令: (ENTMOD (APPEND (ENTGET (SSNAME (SSGET '((0 . "*LINE"))) 0)) '((-3
  26. ("TEST" (1000 . "TEST"))))))
  27. 选择对象: 找到 1 个
  28. 选择对象:
  29. ((-1 . <图元名: 40057df8>) (0 . "LWPOLYLINE") (330 . <图元名: 40057cf8>) (5 .
  30. "67") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 .
  31. "AcDbPolyline") (90 . 2) (70 . 128) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 0.0
  32. 0.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 10.0 10.0) (40 . 0.0) (41 . 0.0) (42
  33. . 0.0) (210 0.0 0.0 1.0) (-3 ("TEST" (1000 . "TEST"))))检测选择集
  34. 命令: (SSGET "X" '((0 . "TEXT") (-3 ("TEST" (1000 . "TEST")))))
  35. nil
  36. 命令: (SSGET "X" '((0 . "*LINE") (-3 ("TEST" (1000 . "TEST")))))
  37. <Selection set: 12>
复制代码
开始的目标是:
在图上添加一个唯一标识。当此图插入到其它图后,或者标识本身的内容被修改处理后,仍然能够根据唯一的标识直接检索出目标来。处理尝试
开始时尝试在词典中用XRecord来处理,发现XRECORD不能添加XDATA。
再尝试在词典中添加其它条目,发现也不能为条目添加XDATA,虽然对条目进行ENTMOD更新时没有错误,但条目并未保存下XDATA。现在的处理方案
我就在注册了应用程序,并在1000项的内容存放一个唯一标识的,方便修改处理。
出现了这种情况,只好如老包所说那样选择,再对选择集的内容检索唯一标识。希望有处理过此种情况的朋友提供方案,谢谢。
发表于 2005-6-12 10:55 | 显示全部楼层
2006 下没有问题

_$ (entget (car (entsel)) '("*"))
((-1 . <Entity name: 7ef68f68>) (0 . "TEXT") (330 . <Entity name: 7ef68cf8>) (5 . "E5") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbText") (10 550.969 269.314 0.0) (40 . 67.5815) (1 . "331441") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0) (-3 ("TEST" (1000 . "TEST"))))
_$ (ssget "X" '((0 . "text") (-3("TEST"))))
<Selection set: b>
_$ (sslength (ssget "X" '((0 . "text") (-3("TEST")))))
1
_$
 楼主| 发表于 2005-6-12 10:59 | 显示全部楼层
回6楼的Ea: 选择时除了-3后带的应用程序外,还要添加唯一标识,是这样的
(SSGET "X" '((0 . "TEXT") (-3 ("TEST" (1000 . "TEST"))))) 我用的是2000 i。
发表于 2005-6-12 12:15 | 显示全部楼层
存放唯一的 xdate (-3) 不行吗,为什么还要用 1000 来过滤?
 楼主| 发表于 2005-6-12 23:24 | 显示全部楼层
如果全用-3来表示,就要注册一大堆的应用程序,显然,这不是个好方法。
发表于 2005-6-13 01:30 | 显示全部楼层
本帖最后由 作者 于 2005-6-13 2:23:48 编辑

既然直接过滤行不通,可以增加约束比如实体、图层、颜色等等,选出来后再判断。

另2006下对line增加 1000 过滤后选择也返回 nil
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-11 13:08 , Processed in 0.178427 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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