关于SSGET选择扩展数据
图形边线可以查询到属性((-1 . <图元名: 7ee6f9b8>) (0 . LWPOLYLINE) (5 . 4A7) (102 .
{ACAD_REACTORS) (330 . <图元名: 7ee6f9c0>) (102 . }) (330 . <图元名: 7ee6dcc0>)
(100 . AcDbEntity) (67 . 0) (410 . Model) (8 . JMD) (6 . Continuous) (100 .
AcDbPolyline) (90 . 4) (70 . 129) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 193.223
72.2861) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 193.223 12.5437) (40 . 0.0) (41 .
0.0) (42 . 0.0) (10 260.582 12.5437) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
260.582 72.2861) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0)
(-3 (SOUTH
(1000 . 141111) (1040 . 5.0))))
用ssget 选择
(setq ss (ssget "x" (list (list -3 (list "SOUTH" (cons 1000 "141111"))))))可以选择得到
文字可以查询到属性
((-1 . <图元名: 7ee6f9d0>) (0 . TEXT) (5 . 4AA) (102 .
{ACAD_REACTORS) (330 . <图元名: 7ee6f9c0>) (102 . }) (330 . <图元名: 7ee6dcc0>)
(100 . AcDbEntity) (67 . 0) (410 . Model) (8 . JMD) (6 . Continuous) (100 .
AcDbText) (10 223.044 39.9149 0.0) (40 . 5.0) (1 . 砼) (50 . 0.0) (41 . 0.8)
(51 . 0.0) (7 . 细等线体) (71 . 0) (72 . 2) (11 226.778 42.4149 0.0) (210 0.0
0.0 1.0) (100 . AcDbText) (73 . 2)
(-3 (SOUTH (1000 . 141111-1))))
用ssget 选择
(setq ss (ssget "x" (list (list -3 (list "SOUTH" (cons 1000 "141111-1"))))))
却选择不到,不知道哪里出文图了,求教。。。。。 只能选择多段线,其他的都选择不了(setq ss (LC:ssget-CASSCode (list (cons 0 "line")(cons 8 "DMX")'(-3 ("south"))) "992000")) (defun LC:ssget-CASSCode(filter sCode / ss sn si i ed sc scss) (setq ss(ssget "X" filter )) (setq sn (if ss (sslength ss) 0)) (setq scss(ssadd)) (setq i 0) (while(< i sn) (setq si(ssname ss i)) (setq ed(entget si '("south"))) (setq sc(cdr(cadr (cadr (assoc -3 ed))))) (if(= sc sCode) (ssadd si scss) ) (setq i(1+ i)) ) scss ) tryhi 发表于 2019-5-29 10:50
我的意思是选不到不是因为大小写的原因,而是因为图元类型的原因,自己追加一个扩展属性就能测试
你没明白我的意思:我的意思是并不是大小写的问题,而是符号与字符串的区别。如果是符号,那大小写无所谓,如果是字符串,那大小写就是不同的。但是CAD是不允许非字符串的注册名的。我仔细看了下一楼的,说可以选到,那就姑且认为SOUTH是个值为“south” 变量。
去除注册名的问题,应该是ssget 的过滤方式出现的问题,与图元类型无关(你可以使用扩展数据互换的方法来检验)。其根本问题是(cons 1000 "141111-1") , "-" 是个问题,你可考虑用其他字符代替 ,如(cons 1000 "141111a1")---意思是做程序命名时 就不要高什么带"-"的。我也没有去试验。 lenlenq 发表于 2019-5-29 19:03
你没明白我的意思:我的意思是并不是大小写的问题,而是符号与字符串的区别。如果是符号,那大小写无所谓 ...
证明你还是没有去测试就下定论,跟图元类型有关系,只有多段线可以被选择,你看附件
具体原因不明,查了下资料,"x"支持的组码如下图 我觉得应该写成(list (list -3 (list 'SOUTH (cons 1000 "141111-1"))))就没问题了。 貌似还是选择不到,请指教。 我也是cass用户。我也觉得选不到。遇到这样的, 我都是全选谈好遍历的。 问题出在这--->(-3 (SOUTH
(1000 . 141111) (1040 . 5.0))))
上面的返回值中 注册名为SOUTH但你选择时的过滤条件是“south”,两者不一样。没记错的话,注册名必须为字符串吧。 lenlenq 发表于 2019-5-25 17:56
问题出在这--->(-3 (SOUTH
(1000 . 141111) (1040 . 5.0))))
你可以自己测试一下,扩展数据只有多段线可以过滤,其他类型不行 本帖最后由 lenlenq 于 2019-5-27 18:34 编辑
tryhi 发表于 2019-5-26 19:19
你可以自己测试一下,扩展数据只有多段线可以过滤,其他类型不行
我自己测试一下什么?我回答的是选不到的原因。你的回复我不懂呀。 要测试也要提供图档呀
页:
[1]
2