pxt2015 发表于 2020-12-8 22:38:44

xdrx_entity_getproperty用法疑问

返回文字选择集的字符串表
(setq strlst (xdrx_entity_getproperty (ssget '((0 . "text"))) "textstring"))


如何用类似以上语句,返回联合列表((str1 en1) ....),其中str1为字符串,en1为图元名

newer 发表于 2020-12-9 07:27:39

本帖最后由 newer 于 2020-12-9 07:32 编辑

1.(mapcar '(lambda(x)(list (xdrx-getpropertyvalue x "textstring") x))(xdrx-pickset->ents (ssget '((0 . "text")))))
2.
(xdrx-entity-getproperty (ssget) "textstring" "handle")

pxt2015 发表于 2020-12-9 19:25:13

本帖最后由 pxt2015 于 2020-12-9 19:27 编辑

第一种方式,xdrx-pickset->ents遍历一次选择集,mapcar再遍历一次表,相对于第二种方式,是不是速度稍慢?

newer 发表于 2020-12-9 19:31:02

pxt2015 发表于 2020-12-9 19:25
第一种方式,xdrx-pickset->ents遍历一次选择集,mapcar再遍历一次表,相对于第二种方式,是不是速度稍慢? ...

对于现在的机器来说,1毫秒和2毫秒的区别
拖慢程序的是算法
这里的代码都是线性,复杂度是n的,1n好 2n没什么区别
你的代码其他地方如果是n*n的,慢的是其他地方

pxt2015 发表于 2020-12-9 20:49:47

受教了,第一种方式便于格式化代码,通用性强。

XDSoft 发表于 2020-12-13 15:42:47

pxt2015 发表于 2020-12-9 20:49
受教了,第一种方式便于格式化代码,通用性强。

2020.12.18版本,可以直接返回实体名了
(xdrx-getpropertyvalue (ssget) "textstring" "ename")

dyjwyqz5221 发表于 2020-12-14 14:06:33

XDSoft 发表于 2020-12-13 15:42
2020.12.18版本,可以直接返回实体名了
(xdrx-getpropertyvalue (ssget) "textstring" "ename")

仅选择 一个时,少了个括号。
命令: (xdrx-getpropertyvalue (ssget) "textstring" "ename")
选择对象: 指定对角点: 找到 1 个
选择对象:
("4%%13225/2%%13220" <图元名: 7ff3fdd1d2b0>)

选择多个时,是正确的:

命令: (xdrx-getpropertyvalue (ssget) "textstring" "ename")
选择对象: 找到 1 个
选择对象: 找到 1 个,总计 2 个
选择对象: 找到 1 个,总计 3 个
选择对象:
(("4%%13225/2%%13220" <图元名: 7ff3fdd1d2b0>) ("4%%13225/2%%13222" <图元名: 7ff3fdd1d2d0>) ("4%%13225/2%%13222" <图元名: 7ff3fdd1d2f0>))

建议仅选择一个时,也在外面加上一层括号就好了。

dyjwyqz5221 发表于 2020-12-14 14:08:05

命令: (xdrx-entity-getproperty (ssget) "textstring" "handle")
选择对象: 找到 1 个
选择对象:
(("4%%13225/2%%13220" "84EB"))
这样是可以的。

pxt2015 发表于 2020-12-14 14:58:41

本帖最后由 pxt2015 于 2020-12-14 15:03 编辑

以上语句中,"84EB"如何转换成图元名?
同样是处理选择集,有时用xdrx-entity-getproperty,有时用xdrx-getpropertyvalue,不知道如何区分

newer 发表于 2020-12-14 15:11:12

pxt2015 发表于 2020-12-14 14:58
以上语句中,"84EB"如何转换成图元名?
同样是处理选择集,有时用xdrx-entity-getproperty,有时用xdrx-ge ...

(handent "84EB")

newer 发表于 2020-12-17 11:27:12

dyjwyqz5221 发表于 2020-12-14 14:06
仅选择 一个时,少了个括号。
命令: (xdrx-getpropertyvalue (ssget) "textstring" "ename")
选择对象: ...

试下最新的API

pxt2015 发表于 2021-1-3 18:32:47

本帖最后由 pxt2015 于 2021-1-3 20:40 编辑

当需要创建联合列表时,
(Xdrx_Getpropertyvalue (ssget '((0 . "text"))) "Textstring" "Rotation" "Ename")

一句话代替了以下一大段代码,有干掉Xdrx_Pickset->Ents函数的趋势,而且避免了局部变量的互相干扰。
代码简化且格式化编程了。
(setq ss (ssget '((0 . "text"))))
(Mapcar 'Set '(i l) '(-1 Nil))
(Repeat      (Sslength ss)
(SetqEn(Ssname ss (Setq i (1+ i)))
      Da(Entget En)
      Str (cdr (assoc 1 Da))
      Ro(cdr (assoc 50 Da))
)
(Setq l (Cons (List Str Ro En) l))
)
(Setq l (reverse l))

页: [1]
查看完整版本: xdrx_entity_getproperty用法疑问