lanjqka 发表于 2019-10-10 13:44:07

;;; 屏幕内快速选择

;;; 屏幕内快速选择
(defun c:ff (/ *error* SS1 I ENS EL FL FLL FLS SS2)
(defun *error* (msg)
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*,*中断,*取消*,*退出*") (princ msg))
)
(or (setq SS1 (cadr (ssgetfirst))) (setq SS1 (ssget)) (exit))
(repeat (setq I (sslength SS1)) (setq ENS (cons (ssname SS1 (setq I (1- I))) ENS)))
(foreach en ENS
    (setq EL (entget en))
    (setq FL (append '((-4 . "<AND"))
                     (vl-remove 'nil (mapcar '(lambda (i) (assoc i EL)) '(0 8 62))) ;DXF组码匹配(0 8 62)
                     '((-4 . "AND>"))
             )
    )
    (or (member FL FLL) (setq FLL (cons FL FLL)))
)
(setq FLS (append '((-4 . "<OR")) (apply 'append FLL) '((-4 . "OR>"))))
(cond ((setq SS2 (ssget "_W" (getvar 'VSMIN) (getvar 'VSMAX) FLS))
         (sssetfirst nil SS2)
         (foreach x (list "\n选择了" (sslength SS2) "个。") (princ x))
      )
      ((foreach x (list "\n无匹配选择对象,保留原选择集的" (sslength SS1) "个对象。") (princ x)))
)
(princ)
)

happy336 发表于 2019-10-14 22:31:10

谢谢分享,支持

war3_undead 发表于 2019-10-15 20:02:04

虽然代码看的明,但补充几句话说明逻辑选择是干什么的,节约时间吧。

friendship 发表于 2019-10-16 18:03:47

你好,麻烦问一下。如果是全屏(全图)选择,需要怎么改呢?

mocheng 发表于 2019-10-16 20:15:24

谢谢楼主分享

paulpipi 发表于 2019-10-17 06:59:23


谢谢楼主分享

hncjddd 发表于 2019-10-17 09:50:12

能不能全域呢
页: [1]
查看完整版本: ;;; 屏幕内快速选择