提示用户通过指定一个点来选择单个对象(图元)
(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 函数设置的关键字。
参阅
entget、 entmake、 entnext、handent 和 initget 函数。
(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)
)
)
)
)
明经通道 版权所有 未经许可 不得传播 |
评论 |