通过插入点选择对象
Hi编码器想知道是否可以使用visual lisp从仅包含插入点的列表中选择多个对象
所以这个列表包含了需要逐个选择的不同对象的多个插入点,如果在我的例程中实现,请对其进行处理 是-如果对象是块/文本,则遍历所有对象并检查其insertionpoint属性。
否则,如果对象不支持此类属性,则使用“扩展圆”方法选择给定模糊值上最近的对象。 就寝前快点
https://www.cadtutor.net/forum/attachment.php?attachmentid=63592&cid=1&stc=1
; near point - written for DGRL - rlx 25-3-2018
; pl is point list '((x y)(x y)...) , fz is fuzz factor
(defun c:tst ( / pl fz ss)
(setq pl '((10 50)(20 50)(30 50)(40 50)(50 50)) fz 1 ss (ssget '((0 . "INSERT"))))
(if ss (mapcar '(lambda (x) (princ "\n")(princ (getip x))) (chk (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))))
(princ)
)
(defun chk (%ss / l) (mapcar '(lambda (x) (if (near-member (getip x) pl fz) (setq l (cons x l)))) %ss) l)
(defun near-member (l1 l2 tol) (vl-some (function (lambda (l3) (vl-every '(lambda (n1 n2)(equal n1 n2 tol)) l1 l3))) l2))
(defun getip (e) (list (cadr (assoc 10 (entget e)))(caddr (assoc 10 (entget e)))))
(vl-load-com)
;(near-member '(20 50) '((10 50) (20 50) (30 50) (40 50)(50 50)) 0.1) -> T
;(near-member '(20 51) '((10 50) (20 50) (30 50) (40 50)(50 50)) 0.1) -> nil
gr.Rlx
@rlx公司
谢谢你的例子
感谢:-D 请注意,可以直接从ssget筛选器列表中筛选此类组
FWIW,我更喜欢关系测试
优点:简单、可靠、高效
缺点:没有模糊
(setq pl '((10. 50.)(20. 50.)(30. 50.)(40. 50.)(50. 50.)); point list
ss
(ssget
(append (vl-list* '(0 . "CIRCLE,TEXT,INSERT"); filter
'(-4 . "<OR")
(apply 'append (mapcar ''((x) (list '(-4 . "=,=,*") (cons 10 x))) pl ))
)
'((-4 . "OR>"))
)
)
)
)
哦在提交帖子之前,李击败了我
昨晚,我的近会员功能来找我,说他想要一份工作,因为他很无聊。。。所以我给了他一个。。。
我之所以使用fuzz,是因为我使用了一个函数将整个数组或字符串、行和列的“表”从一个集合复制到另一个集合,并且存在混合对齐问题。因此,一列使用了左中,另一列使用了中中等。然后“很快”发现,第10组和第11组都不总是可信的。所以决定使用模糊因子,我的大部分或所有问题都解决了。如果坐标确实可靠,那么你是对的,一个“简单”的ssget过滤器就足够了。
gr.Rlx
在这种情况下,模糊因素仍然是可能的,例如:
(defun ssget-by-pointlist ( lst fuz )
(ssget "_X"
(append
'(
(0 . "ARC,CIRCLE,ELLIPSE,INSERT,TEXT,MTEXT,POINT") ;; Objects for which DXF 10 is meaningful
(-4 . "<OR")
)
(apply 'append
(mapcar
'(lambda ( x )
(list
'(-4 . "<AND")
'(-4 . ">=,>=,>=")
(cons 10 (mapcar '- x (list fuz fuz fuz)))
'(-4 . "<=,<=,<=")
(cons 10 (mapcar '+ x (list fuz fuz fuz)))
'(-4 . "AND>")
)
)
lst
)
)
'(
(-4 . "OR>")
)
)
)
)
我猜这是你的另一个老功能。
页:
[1]
2