MastroLube 发表于 2022-7-5 18:24:19

删除相交的对象

大家好,我已经问过了。。但我?我找不到帖子(可能已经被删除了?)
不管怎样,麦克·李先生回答我说有两种方法。
1) 慢慢地,它询问每一个物体,并找出它是否与plyne相交
2) 快速,使用缩放功能
 
我已经编译了第一个,但是如果我有很多项目的话,它会非常慢。
 
有人能提醒我第二种方法吗?谢谢大家
 
旧代码
(DEFUN cancella_cerchi (/)
(SETQ
            i 0
       deleted (LIST)
       lista_polilinee (LIST)
)
(sel_polylines "Bordi")


(REPEAT (LENGTH lista_polilinee)
   (setq n 0
         p_linea (NTH i lista_polilinee))
   (REPEAT (LENGTH lista_cerchi)
   (SETQ cerchio_obj (VLAX-ENAME->VLA-OBJECT (NTH n lista_cerchi)))
   (IF
       (/= (VLAX-INVOKE p_linea 'intersectwith cerchio_obj ACEXTENDNONE) nil)
      (PROGN (ENTDEL (NTH n lista_cerchi))
               (SETQ deleted (APPEND deleted (LIST (NTH n lista_cerchi))))
      )
   )
   (SETQ n (1+ n))
   )
   (SETQ del 0)
   (REPEAT (LENGTH deleted)
   (SETQ lista_cerchi (VL-REMOVE (NTH del deleted) lista_cerchi))
   (SETQ del (1+ del))
   )
   (SETQ i (1+ i))
   (entdel (VLAX-VLA-OBJECT->ENAME p_linea))
)
;(prompt (length lista_cerchi))
)
 
编辑:
 

Tharwat 发表于 2022-7-5 18:40:18

 
只是一个例子。
 

(setq s (car (entsel "\nSelect Polyline :")))
(vla-getboundingbox (vlax-ename->vla-object s) 'j 'k)
(vla-ZoomWindow (vlax-get-acad-object) j k)

MastroLube 发表于 2022-7-5 18:58:44

谢谢,我有一个小问题。
看这段视频:http://autode.sk/1My5bQW
创建图案填充时,我保存了边界的多段线,并使用第一种方法删除了对象。。边界不是一个完美的正方形。。
如果边界为矩形,则您发布的代码似乎工作正常。。对的也许我错了,请告诉我
谢谢,丹尼斯

Lee Mac 发表于 2022-7-5 19:18:11

请参阅本线程中建议的方法:http://www.theswamp.org/index.php?topic=50190.0

MastroLube 发表于 2022-7-5 19:28:17

 
谢谢李,很难找到太多论坛了
 
我会试着在那里张贴解决方案!
谢谢
 
编辑:解决方案
 
好吧,这就是解决方案!
 
(defun cdrs (key lst / pair rtn)
(while (setq pair (assoc key lst))
(setq rtn (cons (cdr pair) rtn)
lst (cdr (member pair lst))
)
)
(reverse rtn)
)

(setq vertici_pl (cdrs 10 (entget (car (entsel "\nSelect a polyline")))))
(defun c:cancella_cerchi_interni ( / e i n s x )
   (if (setq s (ssget "_CP" vertici_pl'((0 . "CIRCLE"))))
       (progn
         (setq i 0
               n (sslength s)
         )
         (repeat n
               (setq e (ssname s i)
                     ;x (cdr (assoc 0 (entget e)))
                     i (1+ i)
               )
               (entdel e)
         )
       )
   )
   (princ)
)

(defun c:cancella_cerchi_lungo_linea ( / e i n s x )
   (if (setq s (ssget "_F" (append vertici_pl (list (car vertici_pl)))'((0 . "CIRCLE"))))
       (progn
         (setq i 0
               n (sslength s)
         )
         (repeat n
               (setq e (ssname s i)
                     ;x (cdr (assoc 0 (entget e)))
                     i (1+ i)
               )
               (entdel e)
         )
       )
   )
   (princ)
)
1) 仅删除穿过选择栏的对象
2) 删除内部所有内容并跨越选择栏
 
页: [1]
查看完整版本: 删除相交的对象