sidharth 发表于 2022-7-6 12:01:48

按扩展数据信息删除数据

你好
 
我的图形有不同类型的实体(多段线(闭合)、圆、线、点),并附有扩展数据。
扩展数据索引唯一值。我正在尝试根据扩展数据索引删除实体的代码
 
(定义c:delobj()
(setq selobj(entsel“选择要删除的对象:”))
(setq ndx(cdr(cadr(cadr(assoc-3(entget(car selobj)'(“索引”))))))))
(setq a(ssget“X”(list(list-3(list“Index”(cons 1000 ndx 1070;)Ю)))))
(setq b(ssname a 0))
(entdel b)
)
 
我只能删除多段线(闭合)和圆,但线和点a显示错误。
 
提前感谢
 
Sidharth kamasani公司

SteveK 发表于 2022-7-6 12:17:39

我想这条线会对你有帮助。基本上你不能那样做。这是为您准备的线程:
 
(defun c:delents (/ EN I SS VAL)
;; Courtesy of MP, http://www.theswamp.org/index.php?topic=7229.msg89412#msg89412
(defun RemoveFromPicksetIf ( ss func / I ENAME)
   ;;The supplied func must take one
   ;;argument, an ename. What it does
   ;;we don't care, but if it returns
   ;;a non nil result remove the entity
   ;;from the pickset
   (if (eq 'pickset (type ss))
   (repeat (setq i (sslength ss))
   (if
   (func
       (setq ename
          (ssname ss
            (setq i (1- i))
            )
         )
       )
   (ssdel ename ss)
   )
   )
   )
   ss
   )

(AND (setq en (entsel))
      (setq val (cdr (assoc 1000 (cdr (assoc "INDEX" (cdr (assoc -3 (entget (car en) (list "*")))))))))
      (setq ss
         (RemoveFromPicksetIf
       (ssget "X" '((-3 ("INDEX"))))
       (lambda ( ename / xdata )
         (or
         (null
             (setq xdata
                (assoc -3
                   (entget ename
                     '("INDEX")
                     )
                   )
               )
             )
         (null
             (member
         (cons 1000 val)
         (cdadr xdata)
         ))))))
       (setq i -1)
       (while (setq en (ssname ss (setq i (1+ i))))
         (entdel en)
         )
       )
      (princ)
         )

David Bethel 发表于 2022-7-6 12:38:19

 
我可能错了,但我不认为可以在ssget“X”过滤器中使用扩展数据(-3)。(从我记忆中未被使用的部分的后面)-大卫

sidharth 发表于 2022-7-6 13:00:35

谢谢大家宝贵的解决方案
 
热regds
 
Sidharth kamasani公司

SteveK 发表于 2022-7-6 13:09:31

希望你能找到工作。
页: [1]
查看完整版本: 按扩展数据信息删除数据