匆匆肥马 发表于 2021-6-8 20:48:01

选择的时候还可以输入关键字符

大侠们,我想在ssget选择的时候可以输入字符或数字。

xj6019 发表于 2021-6-8 22:06:00

;;带关键字的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)
                                )
      )
    )
)
       

start4444 发表于 2021-6-8 22:06:53

(initget )
能够接受关键字输入的函数有 getint、getreal、getdist、getangle、getorient、getpoint、getcorner、getkword、entsel、nentsel 和 nentselp。getstring 函数是唯一不接受关键字的用户输入函数。

匆匆肥马 发表于 2021-6-9 09:38:39

xj6019 发表于 2021-6-8 22:06
;;带关键字的ssget
;;Msg=提示信息,Kwd=关键字,Fil=条件
        ;示例:(PEACE:Fsxm-ssget "\n请选择一个 ...

好的,我先试试,感谢大神!!!

树櫴希德 发表于 2021-6-9 15:34:37

具体干什么用 为什么要输入关键字符

匆匆肥马 发表于 2021-6-10 01:52:45

树櫴希德 发表于 2021-6-9 15:34
具体干什么用 为什么要输入关键字符

因为我们做的命令有一些参数需要设置。

树櫴希德 发表于 2021-6-16 15:29:06

匆匆肥马 发表于 2021-6-10 01:52
因为我们做的命令有一些参数需要设置。

可以举个小列子介绍一下吗?大神
页: [1]
查看完整版本: 选择的时候还可以输入关键字符