(defun c:ce (/ ss i en edxf point p1 p2 distsel sel j lst ssf ent lf)
(setq distsel (getdist "\nDISTANTA SELECTIE :"))
(princ "\nPUNCTE DE SELECTIE")
(while (setq ss (ssget "_:S" '((0 . "POINT"))))
(setq i 0
en (ssname ss i)
edxf (entget en)
point (cdr (assoc 10 edxf))
p1 (polar point (* 0.25 pi) (* 0.5 distsel))
p2 (polar point (* 1.25 pi) (* 0.5 distsel))
sel (ssget "_C" p2 p1)
sel (ssdel en sel) ; pt indepartarea punctelor din selectie
)
(repeat (sslength sel)
(setq en1 (ssname sel i))
(setq pins (cdr (assoc 10 (entget en1))))
(if (> (distance pins point) (* 0.5 distsel))
(ssdel e1 sel)
) ;_ end of if
(setq i (1+ i))
) ;_ end of repeat
(setq lst (cons sel lst))
) ;_ end of while
(setq i 0)
(repeat (length lst)
(setq j 0)
(setq lst2 (nth i lst))
(repeat (sslength lst2)
(setq e (ssname lst2 j))
(setq lf (cons e lf))
(setq j (1+ j))
) ;_ end of repeat
(setq i (1+ i))
) ;_ end of repeat
(setq ssf (ssadd))
(foreach ent lf (ssadd ent ssf))
(sssetfirst nil ssf)
(princ)
);end defun
我会检查它;乍看之下,代码似乎有点长,但我喜欢这些消息/注释。为什么不在个人资料中填写位置字段? 首先,这种方法确实无效;对于许多项目来说,这可能很耗时,最重要的是,它会错过一些项目。后者是因为基于DXF代码10的验证方法不可靠。例如,可以根据绘图感觉在选择集中包括或不包括直线,如果中心不在选择区域内,则不包括圆,对于文本或块等也是如此。别忘了你的选择模式是交叉的。
关于代码:
[列表]
[*]此行包含未定义的变量:
[/列表]
(ssdel e1 sel)
[列表]
[*]您通过索引解析选择集(sel),该索引取从0到所述选择集大小的值;但同时从选择集中删除项目。这种方法可能会遇到超过选择集大小的索引,从而导致错误。您必须解析所述选择集的副本,或者在单独的解析中删除项目。
[/列表]
[列表]
[*]累积选择集的构建无效;您不需要构建一个已找到项的列表(稍后代码中未使用的列表,也不需要返回该列表)并在稍后对其进行解析以将内容添加到选择集-只需在一个步骤中完成。
[/列表] 另一次尝试。。。
(defun c:ce (/ p r nr point un i lstp ss)
(setq p (getpoint "\nPUNCT CENTRU :"))
(setq r (getdist "\nDISTANTA SELECTIE :"))
;(setq nr (getint "\nNUMAR PUNCTE PE CERC :"))
(setq nr 1000)
(setq un (/ (* 2 pi) nr))
(setq i 0)
(repeat nr
(setq point (polar p (* i un) r))
(setq lstp (cons point lstp))
(setq i (1+ i))
) ;_ end of repeat
(setq ss (ssget "_CP" lstp))
(sssetfirst nil ss)
(princ)
) ;_ end of defun
那好多了;我冒昧地对您的代码进行了一些优化:
(defun c:ce ( / p r nr un lstp )
(if (and (setq p (getpoint "\nPUNCT CENTRU :"))
(setq r (getdist "\nDISTANTA SELECTIE :")))
(progn
(setq nr 1000
un 0.0)
(repeat nr
(setq lstp (cons (polar p (setq un (+ un (/ (* 2 pi) nr))) r)
lstp))
) ;_ end of repeat
(sssetfirst nil (ssget "_CP" lstp))
)
)
(princ)
) ;_ end of defun
页:
1
[2]