veteranus 发表于 2022-7-5 16:13:40

需要选择lisp例程

你好
 
我想从闭合多段线区域内选择的图层中选择对象。但最重要的是;我也要选择闭合多段线区域。
 
例如
 
首先,这是一个简单的绘图,包括简单的矩形。但逻辑是一样的。当然,我在工作中面临着更复杂的任务。这可以是一个矩形或圆形,甚至可能是一个无形的形状,但每次都会有一个闭合的多段线。我想选择1号区域内的所有红色矩形(或层名称)。如何使用lisp例程实现这一点。
 
感谢所有的帮助
 
https://image.prntscr.com/image/tEoB3WcpT0KC187AFqrjbg.png
 
感谢所有的帮助

ziele_o2k 发表于 2022-7-5 16:46:38

又快又脏
(defun c:selobjs ( / ln enx l )
(if
   (and
   (setq ln (cdr (assoc 8 (entget (car (entsel "\nSelect object for source layer: "))))))
   (setq enx (entget (car (entsel "\nSelect pline: "))))
   (wcmatch (cdr (assoc 0 enx)) "*POLYLINE")
   )
   (progn
   (foreach x enx
       (if (= 10 (car x)) (setq l (cons (trans (cdr x) 0 1) l)))
   )
   (sssetfirst nil (ssget "_WP" l (list (cons 8 ln))))
   )
)
)
 
编辑:
请勿支持pline的凸起部分。
编辑2:
增加了对ucs的支持。

veteranus 发表于 2022-7-5 16:55:15

谢谢你的回答。这很好ı添加我的库,如何修改这个选择层而不是选择对象?并绘制一个选框,而不是选择闭合多边形?

ziele_o2k 发表于 2022-7-5 17:18:19

像这样的?
(defun c:selobjs2 ( / ln enx l )
(if
   (and
   (setq ln (cdr (assoc 0 (entget (car (entsel "\nSelect object for source object type: "))))))
   (setq enx (entget (car (entsel "\nSelect pline: "))))
   (wcmatch (cdr (assoc 0 enx)) "*POLYLINE")
   )
   (progn
   (foreach x enx
       (if (= 10 (car x)) (setq l (cons (trans (cdr x) 0 1) l)))
   )
   (sssetfirst nil (ssget "_WP" l (list (cons 0 ln))))
   )
)
)
我不明白这个
页: [1]
查看完整版本: 需要选择lisp例程