newbuser 发表于 2015-1-28 15:05

批量删除小于一定长度的多段线和直线问题瓶颈

在此我写了个删除图形内小于一定长度的小程序,可不知哪里出的问题,我的界定方式明明是小于等于,而等于却不发挥作用。且LINE和LWPOLYLINE删除的情况也有差异,第一次运行删除成功,若将夹点移动拉长多段线(直线),再UNDO回来,程序却无法删除满足条件的线了。还请版主赐教啊。
(defun c:minl(/ ltdl ss lst)
(setq dim (getvar 'dimzin))
(setvar 'dimzin 0)
(princ "\n 删除小于、等于一定长度的直线或者多段线")
(initget 4)
(setq ltdl (getreal "\n 请输入可容许的最小线段长度==>> "))
(setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
(setq lst (ss->lst ss))
(setq lst (mapcar 'vlax-ename->vla-object lst))
(deleteminlength lst ltdl)
)
;;删除小于容许vla实体值函数
(defun deleteminlength ( lst ltdl / )
(vl-remove-if 'not (mapcar
         '(lambda (x)
      (if (<= (vla-get-length x) ltdl)
;;;          x
          (vla-delete x)
      )
      )
         lst
         )
)
(setvar 'dimzin dim)
)


(defun ss->lst (SS / I EN LST_EN)
    (setq LST_EN '()
    I 0
    )
    (repeat (sslength SS)
(setq EN   (ssname SS I)
      LST_EN (cons EN LST_EN)
      I       (1+ I)
)
    )
    ;;返回
    (reverse LST_EN)
)

gzxl 发表于 2015-1-28 20:35

我怎么测试了下,是正常的

yoyoho 发表于 2015-1-29 11:37

autocad 2011 测试---程序正常!

琴剑江山_10184 发表于 2015-1-29 11:45

我也试了下,没什么问题啊,正常使用

500w008 发表于 2020-7-6 21:29

yoyoho 发表于 2020-11-25 09:03

500w008 发表于 2020-7-6 21:29
(defun c:xx ();repeat函数
(setq bs (ssget '((0 . "line")(8 . "beam"))))
(setq si -1)


(defun c:xx ();repeat函数
(setq bs (ssget '((0 . "line"))))
(setq si -1)
(setq ss_n (sslength bs))
(repeat ss_n
(progn
   (setq s_ent (ssname bs (setq si (1+ si))))
   (setq ss_att (entget s_ent))
   (setq ss_s (cdr (assoc 10 ss_att)) ss_e (cdr (assoc 11 ss_att)))
   (setq dd (distance ss_s ss_e))
   (IF (< dd 1000) (command "erase" s_ent ""))
)
);repeat
(princ)
)
页: [1]
查看完整版本: 批量删除小于一定长度的多段线和直线问题瓶颈