在此我写了个删除图形内小于一定长度的小程序,可不知哪里出的问题,我的界定方式明明是小于等于,而等于却不发挥作用。且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)
- )
|