vlsf1980 发表于 2022-7-6 08:33:35

选择anothe内的对象

你好
 
我的设计有一个无法解决的问题。希望这里有人能帮我。
 
我正在绘制一个由两级阵列组成的设计。每个阵列都是相同的;圆形排列成六边形,我画出来没有问题。
 
 
 

共有两个阵列,在下图所示的较小圆形阵列的顶部有一个直径较大的圆形(绿色)阵列:

两个阵列位于不同的层中。现在的问题是,我需要删除里面的那些较小的圆和那些穿过较大圆参数的圆。
 
通过使用lisp调用wps,我成功地删除了较大圆中的较小圆。但是那些交叉的圆没有被删除。此外,它只允许我一次选择一个圆,这对我来说没有用,因为我有一系列较大的圆要删除。

 
 
希望有人会知道一个方法或推荐我一个Lisp程序,我可以用来解决这个问题。非常感谢!
wps。lsp
大堆图纸

ReMark 发表于 2022-7-6 08:39:18

你不是要修剪小圆圈与大圆圈相交的地方吗?

vlsf1980 发表于 2022-7-6 08:44:37

那些接触较大圆圈周长的较小圆圈也需要移除,而不是修剪。

ReMark 发表于 2022-7-6 08:47:12

好啊只是检查一下。然后听起来好像需要一个lisp例程来删除较大直径圆内的所有对象以及可能位于圆本身上的任何对象。明白了。好吧,看起来你已经完成了90%,只需要对你提到的lisp例程进行调整。

SLW210 发表于 2022-7-6 08:49:54

我把这个移到了AutoLISP、Visual LISP和DCL论坛。
 
你查过李的网站了吗?他可能有那样的东西。

ReMark 发表于 2022-7-6 08:54:37

我可以使用“非lisp”方法来实现,但它有一个小缺点,我还没有解决。它涉及使用Express Tools中的FASTSEL命令。

Lee Mac 发表于 2022-7-6 08:56:58

在你的绿色圆圈上开一扇窗:
 
(defun c:test ( / a b c e i j l n r s )
   (if (setq s (ssget '((0 . "CIRCLE") (8 . "Layer1"))))
       (repeat (setq i (sslength s))
         (setq e (entget (ssname s (setq i (1- i))))
               c (cdr (assoc 10 e))
               r (cdr (assoc 40 e))
               l nil
               a (/ pi 25.)
               n (- a)
         )
         (repeat 50
               (setq l (cons (polar c (setq n (+ n a)) r) l))
         )
         (if (setq b (ssget "_CP" l '((0 . "CIRCLE") (8 . "Layer2"))))
               (repeat (setq j (sslength b))
                   (entdel (ssname b (setq j (1- j))))
               )
         )
       )
   )
   (princ)
)

vlsf1980 发表于 2022-7-6 09:02:40

 
您好,谢谢您的帮助。我将在周一回去工作时试用你提到的fastsel命令。如果你有任何其他好方法,请分享。
 
至于lisp例程,虽然我是autocad用户多年了,但除了使用web上的内容外,我还没有学会如何编写lisp例程。如果这里的一些专业人士可以帮我修改wps。列表(如果可能的话)包括删除那些被较大的圆交叉的,并且可以在数组中一次用于多个圆的,我非常感谢。
 
我想也是时候学习如何欣赏和理解lisp了。

ReMark 发表于 2022-7-6 09:04:00

vlsf:看看你前面的帖子就知道了。李·麦克来救你了。就像一个好邻居。。。李在那里。

vlsf1980 发表于 2022-7-6 09:08:26

哇!谢谢李和评论!
 
当我在我的笔记本电脑上试用lisp时,我几乎从椅子上跳了起来(它有一个2004年的旧版本:oops:)
 
这个论坛很棒!你们帮我省去了很多麻烦…:D: D
页: [1] 2
查看完整版本: 选择anothe内的对象