明经通道 AutoLISP 函数   
entsel
 

提示用户通过指定一个点来选择单个对象(图元)

(entsel [msg])

参数

msg

用于提示用户的字符串。如果省略该参数,则提示信息为“选择对象”。

返回值

表,其中第一个元素是用户所选对象的图元名,第二个元素是用户选择对象时指定的拾取点的坐标值(用当前 UCS 表示)。

entsel 函数返回的拾取点不一定在所选对象上,它返回的是选择对象时十字光标的位置。拾取点和对象之间的关系依赖于拾取框的尺寸和当前缩放比例。

示例

下面的 AutoCAD 命令说明了 entsel 函数的使用方法及其返回的表:

命令: line

起点: 1,1

下一点: 6,6

下一点: ENTER

命令: (setq e (entsel "请选择一个对象: "))

请选择一个对象: 3,3

(<图元名: 60000014> (3.0 3.0 0.0))

有时候在操作一个对象时,不但需要选中一个对象,同时还需要知道指定的点。例如在 AutoCAD 中的 Object Snap 以及 BREAK、TRIM 和 EXTEND 命令中就是这样。entsel 使得 AutoLISP 程序可以实现这种操作。它通过选取点的方式来选取单个对象。除非在函数中作特别申明,否则 initget 函数将忽略当前 Osnap 设置。entsel 函数支持它前面通过调用 initget 函数设置的关键字。

参阅

entgetentmakeentnexthandentinitget 函数。

(vl-load-com)
(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 Pt2Str (pt)
  (strcat (rtos (car pt) 2 20)
   ","
   (rtos (cadr pt) 2 20)
   ","
   (rtos (caddr pt) 2 20)
   "\n"
  )
)
;;带关键字的ssget
(defun Fsxm-ssget (Msg Kwd Fil / Kwd0 pt var)
  (cond ((cadr (ssgetfirst)))
 (t
  (setq Kwd0 "W L C BOX ALL F WP CP G A R M P U AU SI")
  (initget (strcat Kwd0 " " kwd))
  (cond ((and (listp (setq var (fsxm-entsel Msg Fil)))
       (/= 52 (getvar "errno"))
  )
  (vla-sendcommand *doc* (Pt2Str (cadr (grread t))))
  (ssget Fil)
        )
        ((member var (fsxm-split Kwd0 " "))
  (vla-sendcommand *doc* (strcat var "\n"))
  (ssget Fil)
        )
        (t var)
  )
 )
  )
)

明经通道 版权所有 未经许可 不得传播

 评论