alanjt 发表于 2022-7-6 07:14:29

这是我测试的一个示例。。。。。
实例图纸

kasra 发表于 2022-7-6 07:17:08

我从你的dwg上看出来,你也想修剪一下。试着去theSwamp。组织并搜索CookieCutter2或使用Express Tools Extrim。

lpseifert 发表于 2022-7-6 07:23:46

我很担心。
是的,CookieCutter2可能是最好的选择。

alanjt 发表于 2022-7-6 07:25:57

不,这是一个例子。
我需要一个操作,包括extrim和擦除闭合多段线中的所有对象。

kasra 发表于 2022-7-6 07:29:28

所以只需执行extrim,然后使用提供的例程。
在同样的情况下,我只执行extrim,然后我编写了一个小例程,它将删除我没有选择的所有内容。我们只讨论了两个步骤。
 
这是:http://www.cadtutor.net/forum/showpost.php?p=305140&postcount=70

alanjt 发表于 2022-7-6 07:32:01

谢谢你的关注。
这是一个好主意:首先运行extrim命令,然后删除多段线内外的所有对象。
但主要问题是,当闭合多段线的形状不规则时,如何选择多段线内外的对象。

kasra 发表于 2022-7-6 07:35:08

探索选择选项:
 
(defun c:EIO (/ _p2ss o ent ssIn ssOut)
;; Erase Inside/Outside of selected LWPolyline (objects touching LWPolyline are deleted)
;; Alan J. Thompson, 04.02.10

(or *EIO:Opt* (setq *EIO:Opt* "Inside"))

(setq _p2ss (lambda (ename)
               (ssget "_CP"
                      ((lambda (e / l)
                         (foreach x e (and (eq 10 (car x)) (setq l (cons (cdr x) l))))
                         (reverse l)
                     ) ;_ lambda
                        (entget ename)
                      )
               ) ;_ ssget
             ) ;_ lambda
) ;_ setq

(and (setq o (car (entsel "\nSelect LWPolyline: ")))
      (or (eq "LWPOLYLINE" (cdr (assoc 0 (setq ent (entget o)))))
          (alert "Invalid object!")
      ) ;_ or
      (not (initget 0 "Inside Outside"))
      (setq *EIO:Opt*
             (cond
               ((getkword (strcat "\nSpecify erase option <" *EIO:Opt* ">: ")))
               (*EIO:Opt*)
             ) ;_ cond
      ) ;_ setq

      (cond
      ((and (eq *EIO:Opt* "Inside") (setq ssIn (_p2ss o)))
         ((lambda (i)
            (while (setq e (ssname ssIn (setq i (1+ i))))
            (or (eq o e) (vl-catch-all-apply (function entdel) (list e)))
            ) ;_ while
          ) ;_ lambda
         -1
         )
      )

      ((eq *EIO:Opt* "Outside")
         (setq ssIn(_p2ss o)
               ssOut (ssget "_X" (list (cons 410 (getvar 'ctab))))
         ) ;_ setq
         ((lambda (i)
            (while (setq e (ssname ssOut (setq i (1+ i))))
            (if ssIn
                (or (ssmemb e ssIn) (eq o e) (vl-catch-all-apply (function entdel) (list e)))
                (or (eq o e) (vl-catch-all-apply (function entdel) (list e)))
            ) ;_ if
            ) ;_ while
          ) ;_ lambda
         -1
         )
      )
      ) ;_ cond
) ;_ and
(princ)
) ;_ defun

 
见鬼,我们为你提供了三个独立的例程。

alanjt 发表于 2022-7-6 07:40:10

谢谢大家对我的关心。
我试着以最好的方式利用你的日常生活。
我感谢所有人。

kasra 发表于 2022-7-6 07:43:47

页: 1 [2]
查看完整版本: 删除边界外的对象