yjtdkj 发表于 2021-7-14 15:35:18

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]
查看完整版本: entsel循环处理(不退出程序的情况下返回error信息)