本帖最后由 cie0588 于 2013-5-7 16:57 编辑
选择对象的时候提前控制好图层之类的。减少判断
 - (defun c:tt (/ ss lst-ename lst-b x y ss-c)
- (vl-load-com)
- (setvar "CMDECHO" 0)
- ;;;选择多线段对象
- (setq ss (ssget '((0 . "LWPOLYLINE"))))
- ;;; 定义将选择集转化为对象图元名列表
- (defun ss-enamelst (ss)
- (vl-remove-if-not
- '(lambda (x) (equal (type x) 'ename))
- (mapcar 'cadr (ssnamex SS))
- )
- )
- ;;;end defun
- ;;; 将多线段选择集转化为图元名列表
- (setq lst-ename (ss-enamelst ss))
- ;;; 通过 ssget "WP" 将多线段和多线段内部的对象(可以再加上过滤,过滤掉非园)组成一个表
- (setq
- lst-b
- (mapcar '(lambda (x)
- (progn
- ;;; 多线段端点列表内部窗选
- (setq ss-c (ssget "WP"
- (apply
- 'append
- (mapcar '(lambda (y)
- (if (eq (car y) 10)
- (list (cdr y))
- )
- )
- (entget x)
- )
- )
- )
- )
- ;;;判断选择集是否存在。也可以加入其它的判断
- (if (null ss-c)
- (list x)
- (append (list x) (ss-enamelst ss-c))
- )
- ) ;end progn
- ) ;end lambda
- lst-ename
- )
- )
- ;;;生成无名块并删除原有对象
- (mapcar '(lambda (x)
- (progn
- (entmakenonameblock x (cdr (assoc 10 (entget (car x)))))
- (mapcar '(lambda (y)
- (vl-cmdf "erase" y "")
- )
- x
- )
- )
- )
- lst-b
- )
- (prin1)
- )
- ;;;; 图元列表生成无名快
- (defun entmakenonameblock (lst pt / i name)
- (entmake
- (list '(0 . "block") '(2 . "*U") '(70 . 1) (cons 10 pt))
- )
- (mapcar '(lambda (x) (entmake (cdr (entget x)))) lst)
- (setq name (entmake '((0 . "ENDBLK"))))
- (entmake (list '(0 . "INSERT") (cons 2 name) (cons 10 pt)))
- name
- )
|