选择的时候还可以输入关键字符
大侠们,我想在ssget选择的时候可以输入字符或数字。 ;;带关键字的ssget;;Msg=提示信息,Kwd=关键字,Fil=条件
;示例:(PEACE:Fsxm-ssget "\n请选择一个圆:" "F" '((0 . "circle")))
(defun PEACE:Fsxm-ssget (Msg Kwd Fil / Kwd0 pt var *acad* *doc*)
(setq *acad* (vlax-get-acad-object))
(setq *doc* (vla-get-ActiveDocument *acad*))
;===内部函数开始===
;;带过滤器的entsel
(defun Fsxm-entsel (msg filter)
(setq enp (entsel msg))
(if (or (= (type enp) 'str)
(and enp (ssget (cadr enp) filter))
)
enp
)
)
;;;用分隔符解释字符串成表
(defun Fsxm-Split (string strkey / po strlst xlen)
(setq xlen (1+ (strlen strkey)))
(while (setq po (vl-string-search strkey string))
(setq strlst (cons (substr string 1 po) strlst))
(setq string (substr string (+ po xlen)))
)
(reverse (cons string strlst))
)
;;点化字串
(defun Fsxm-Pt2Str (pt)
(strcat (rtos (car pt) 2 2)
","
(rtos (cadr pt) 2 2)
","
(rtos (caddr pt) 2 2)
"\n"
)
)
;===内部函数结束===
(cond
((cadr (ssgetfirst)))
(T
(setq Kwd0 "W")
(initget (strcat Kwd0 " " kwd))
(cond ((and (listp (setq var (Fsxm-entsel Msg Fil)))
(/= 52 (getvar "errno"))
)
(vla-sendcommand *doc* (Fsxm-Pt2Str (cadr (grread t))))
(ssget Fil)
)
((member var (Fsxm-Split Kwd0 " "))
(vla-sendcommand *doc* (strcat var "\n"))
(ssget Fil)
)
(t var)
)
)
)
)
(initget )
能够接受关键字输入的函数有 getint、getreal、getdist、getangle、getorient、getpoint、getcorner、getkword、entsel、nentsel 和 nentselp。getstring 函数是唯一不接受关键字的用户输入函数。
xj6019 发表于 2021-6-8 22:06
;;带关键字的ssget
;;Msg=提示信息,Kwd=关键字,Fil=条件
;示例:(PEACE:Fsxm-ssget "\n请选择一个 ...
好的,我先试试,感谢大神!!! 具体干什么用 为什么要输入关键字符 树櫴希德 发表于 2021-6-9 15:34
具体干什么用 为什么要输入关键字符
因为我们做的命令有一些参数需要设置。 匆匆肥马 发表于 2021-6-10 01:52
因为我们做的命令有一些参数需要设置。
可以举个小列子介绍一下吗?大神
页:
[1]