- ;;无痕问这个问题我有点吃惊,下面的程序可以实现——是受了你的程序的启发,就是 ERRNO 的应用
- ;; (lt:ssget-for msg flt fun)
- ;; 参考无痕的程序
- ;; [功能] 获取选择集并实时进行指定函数的操作---没加入出错处理
- ;; [参数] msg---提示信息(STR),如果nil时则显示缺省为"\n选择对象: "
- ;; flt---等同于 ssget 函数图元过滤表
- ;; fun---要对所选对象执行的函数
- ;; [返回] 成功->选择集,反之->nil
- ;; [测试]
- ;|
- (lt:ssget-for "\n删除对象:" nil 'entdel)
- (defun c:tt ()
- (lt:ssget-for "选择要改变颜色的直线:"
- '((0 . "line"))
- '(lambda (x)
- (if (or (>= col 256) (not col)) (setq col 0))
- (vla-put-color (vlax-ename->vla-object x) (setq col (1+ col)))
- )
- )
- )
- |;
- (defun LT:SSGET-FOR (MSG FLT FUN / FLAG NOM N SS SS2 E)
- (setq NOM (getvar "NOMUTT") FLAG T)
- (if MSG (setq MSG (strcat "\r" MSG))
- (setq MSG "\r选择对象: ")
- )
- (setvar "NOMUTT" 1)
- (while FLAG
- (princ MSG)
- (if (setq SS (ssget ":S" FLT))
- (progn
- (or SS2 (setq SS2 (ssadd)))
- (repeat (setq N (sslength SS))
- (setq E (ssname SS (setq N (1- N))))
- (if FUN (apply FUN (list E)))
- (ssadd E SS2)
- )
- )
- )
- (if (= (getvar "ERRNO") 52)
- (setq FLAG nil)
- )
- )
- (setvar "NOMUTT" NOM)
- SS2
- )
|