我的程序没写那么规矩,凑活看,这个现在只能在命令行有提示
 - (vl-load-com)
- ; 测试程序
- (defun c:Q( / ss_k)
- (setq ss_k (ssgetSEL "" nil "提示语3" ))
- (command "chprop" "p" "" "c" "1" "")(princ))
- ; ssget关键字提示函数简版
- (defun ssgetSEL(sel fls msg / ss ov)
- (setq ov (getvar "OSMODE"))
- (setq ss(vl-catch-all-apply 'ssgetSEL00 (list sel fls msg)))
- (setvar "OSMODE" ov)(setvar "nomutt" 0)
- (if(vl-catch-all-error-p ss)(exit)ss)
- )
- (defun ssgetSEL00(sel fls msg / p p2 d ps)
- (setq sel(if(= 'str(type sel))(strcase sel)sel)
- msg(cond((and msg(/= "" msg))msg)
- ((member sel '(":E:S" ":S:E" ":E"))"\n拾取对象<>:")
- (t "\n拾取或框选对象<>:"))
- )
- (setvar "OSMODE" 16384)
- (cond
- ((member sel '("L" "X" "P" "A" "I"))(ssget sel fls))
- ((member sel '(nil "" ":L" ":D" ":N" ":E" ":S" ":E:S" ":S:E"))
- (setvar "nomutt" 1)(princ msg)
- (if(member sel '(nil ""))(ssget fls)(ssget sel fls))
- );无互动/无点表参数的均可加入
- ;((and (member sel '("F" "WP" "CP"))(listp msg)(>(length msg)))(ssget sel msg fls))
- ;可利用msg设为点表参数执行的ssget"F" "Wp" "Cp"模式 意义不大
- ( (setq d(* 0.5(getvar 'pickbox)(/ (getvar 'viewsize)(cadr(getvar 'screensize)))))
- (initget (strcat (vl-string-right-trim " " sel)" "))
- ;自定义关键字最后要双空格
- (setq p(entsel msg))
- (cond((and p (listp p))(ssget "_C"
- (mapcar '- (cadr p)(list d d))(mapcar '+ (cadr p)(list d d))fls
- ));仿ssget拾取框尺寸
- ((not p)(setq p(cadr(grread t)))(if
- (setq p2(getcorner p "\n指定对角点:"));框选
- (ssget(if(> (car p)(car p2))"_C" "_W") p p2 fls)
- ))
- ((and p(/= "" p))p);返回关键字
- )
- )
- )
- )
|