MJLM 发表于 2022-7-5 23:22:31

基于句柄的选择集

我试图选择所有句柄大于给定值的行。I类型
 
(setq hdl (getstring "\nEnter handle: "))

(setq lngrss (ssget "X" (list (cons 0 "LINE") (cons -4 ">") (cons 5 hdl)))
 
然而,这返回零。
 
我该怎么做?

Bhull1985 发表于 2022-7-5 23:28:58

你说的“把手”是什么意思
通常人们按图层、线宽、线型进行过滤。。。。

Tharwat 发表于 2022-7-5 23:30:08

 
 
句柄是字符串类型中的唯一数字或字符和数字的混合值,不能与同一图形中的任何其他对象复制。

Bhull1985 发表于 2022-7-5 23:32:40

那么它就像珐琅?

MJLM 发表于 2022-7-5 23:37:48

正如塔瓦特所说,这是图纸中任何实体的唯一标识符。它始终以十六进制格式与标志“5”一起存储。我无法根据线型、颜色或图层进行过滤,因为我的线条共享相同的属性。

Tharwat 发表于 2022-7-5 23:40:13

 
你可以这么说。
 
不管怎么说,这意味着用户需要倾听。

MSasu 发表于 2022-7-5 23:42:15

MJLM,句柄是一个表示十六进制数的字符串,所以我不确定是否可以定义一个过滤器来对句柄小于某个值的所有实体进行排序。
为了按创建顺序解析实体,我建议检查ENTNEXT函数。

MSasu 发表于 2022-7-5 23:47:05

句柄和实体名称之间的区别在于,第一个是不变的,而第二个在同一实体的每个会话中是不同的。然而,两者在一幅图中都是独一无二的。

Tharwat 发表于 2022-7-5 23:48:33

当然,如果一行与句柄匹配,请尝试使用此代码高亮显示该行。
 
如果高亮显示任何线图元,则需要重新生成以取消高亮显示图元。
 
(if (and (/= "" (setq hdl (getstring "\nEnter handle: ")))
      (setq go t s (ssget "_X" '((0 . "LINE"))))
   )
((lambda (i /)
    (while (and go (setq n (ssname s (setq i (1+ i)))))
      (if (vl-some '(lambda (u) (and (eq (car u) 5) (eq (cdr u) (strcase hdl)))) (entget n))
      (progn (redraw n 3) (setq go nil))
      )
    )
)
   -1
)
)

Bhull1985 发表于 2022-7-5 23:52:39

谢谢你们的澄清
页: [1] 2
查看完整版本: 基于句柄的选择集