entsel循环处理(不退出程序的情况下返回error信息)
本帖最后由 yjtdkj 于 2021-7-14 15:36 编辑刚刚研究出来,需要的拿去,不谢~~
;|-----------------------------------------------------
本函数可以让entsel函数返回4类信息,并分别处理
1.如果选中对象,则与entsel返回的内容一致,继续循环执行
2.如果鼠标对到空白处,则返回nil,则有提示,仍然循环执行
3.如果按空格键,则返回"",返回所有选中的图层
4.如果按Esc键,则退出并返回错误信息
-------------------------------------------------------
yjtdkj.2021.07.14
|;
(DEFUN c:tt (/ ENL ENLAYER LST SS SSL SSLST)
(defun yj-ss2lst (ss / i l)
(if ss
(repeat(setq i (sslength ss))
(setq l (cons (ssname ss (setq i (1- i))) l))
)
)
)
(defun doENTSEL ()
(SETQ enl (VL-CATCH-ALL-APPLY 'ENTSEL
(list "\n选择任意对象以获取执行图层<空格确认返回>:")
)
)
(if(VL-CATCH-ALL-ERROR-P enl)
(vl-catch-all-error-message enl)
enl
)
)
(initget " ")
(while (/= (type
(doENTSEL)
)
'STR
)
(IF(= enl NIL)
(PRINC "\n** 没有对象被选择 **")
(PROGN
(SETQ enLayer (CDR (ASSOC 8 (ENTGET (CAR enl)))))
(setq lst (cons enLayer lst))
(setq ss (ssget "X" (list (cons 8 enLayer))))
(setq ssl (yj-ss2lst ss))
(foreach n ssl (redraw n 3)) ;亮显图层内所有对象
(setq sslst (append ssl sslst))
)
)
(initget " ")
)
(foreach n sslst (redraw n 4)) ;取消亮显
(IF (= enl "")
lst
enl
)
)
页:
[1]