MSasu 发表于 2022-7-6 08:28:09

该解决方案也应该有效-请注意,这种方法将只考虑插入点,而不是文本实体的实际“正文”。

drafter007 发表于 2022-7-6 08:29:28

我还在等待,也许会出现一个更简单的想法。。。

MSasu 发表于 2022-7-6 08:33:59

在此之前,您可以为上述解决方案之一编写代码,并将其发布到此处进行调试/评估(如果需要)。至少,这应该是一次很好的锻炼。

drafter007 发表于 2022-7-6 08:38:41

循环选择-围绕点-对于MSasu-请告诉我你的意见-如何改进。。。。等
 


(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

MSasu 发表于 2022-7-6 08:39:28

我会检查它;乍看之下,代码似乎有点长,但我喜欢这些消息/注释。为什么不在个人资料中填写位置字段?

MSasu 发表于 2022-7-6 08:43:53

首先,这种方法确实无效;对于许多项目来说,这可能很耗时,最重要的是,它会错过一些项目。后者是因为基于DXF代码10的验证方法不可靠。例如,可以根据绘图感觉在选择集中包括或不包括直线,如果中心不在选择区域内,则不包括圆,对于文本或块等也是如此。别忘了你的选择模式是交叉的。
 
 
关于代码:
[列表]
[*]此行包含未定义的变量:
[/列表]
(ssdel e1 sel)
[列表]
[*]您通过索引解析选择集(sel),该索引取从0到所述选择集大小的值;但同时从选择集中删除项目。这种方法可能会遇到超过选择集大小的索引,从而导致错误。您必须解析所述选择集的副本,或者在单独的解析中删除项目。
[/列表]
[列表]
[*]累积选择集的构建无效;您不需要构建一个已找到项的列表(稍后代码中未使用的列表,也不需要返回该列表)并在稍后对其进行解析以将内容添加到选择集-只需在一个步骤中完成。
[/列表]

drafter007 发表于 2022-7-6 08:48:28

另一次尝试。。。

(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

MSasu 发表于 2022-7-6 08:51:49

那好多了;我冒昧地对您的代码进行了一些优化:
(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]
查看完整版本: entmake文本-不工作