下面的代码中加入了osmode变量的控制。但是如果代码一半回车退出或者ESC退出,那么我原来的捕捉设置也就没了。想问一下,对于回车退出或者ESC退出这种条件的判断是什么? (defun c:qx (/ osm d f ss i s1 pt1 px1 py1 pt2 px2 py2 pt3 px3 py3 ang ang1 pt0) (setq osm (getvar "osmode")) (setvar "osmode" 0) (setq d (getreal "\n请输入圆弧偏移距离<150>:")) (if (= d nil) (setq d 150) ) (initget "u d") (setq f (getkword "\n请输入圆弧偏移方向:上(u)或下(d):<d>")) (if (= f nil) (setq f "d") ) (setq ss (ssget '((0 . "LINE"))) i -1 ) (while (setq s1 (ssname ss (setq i (1+ i)))) (setq pt1 (cdr (assoc 10 (entget s1))) pt2 (cdr (assoc 11 (entget s1))) px1 (car pt1) py1 (cadr pt1) px2 (car pt2) py2 (cadr pt2) px3 (/ (+ px1 px2) 2) py3 (/ (+ py1 py2) 2) pt3 (list px3 py3 0) ang (angle pt1 pt2) ) (if (or (< ang (/ pi 2)) (> ang (/ (* pi 3) 2)) (= ang (/ pi 2)) ) (progn (setq ang1 (- ang (/ pi 2))) (if (< ang1 0) (setq ang1 (+ ang1 (* pi 2))) ) (if (= f "d") (setq pt0 (polar pt3 ang1 d)) (setq pt0 (polar pt3 ang1 (- 0 d))) ) ) (progn (setq ang1 (+ ang (/ pi 2))) (if (= f "d") (setq pt0 (polar pt3 ang1 d)) (setq pt0 (polar pt3 ang1 (- 0 d))) ) ) ) (command "arc" pt1 pt0 pt2) (entdel s1) ) (setvar "osmode" osm) (princ (strcat "\n共有<" (itoa i) ">根直线变圆弧了")) (princ) )
|