在您的代码中,整个IF语句需要返回T才能循环,如果返回了,您将无法退出。
更容易:
(defun c:test (/ *error* DIMOFF P1 P2 P3 P4 SPC TXT UFLAG) (vl-load-com) (setq DimOff 400.0) ;; Dimension Offset Distance (defun *error* (msg) (and uFlag (vla-EndUndoMark doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (setq doc (cond (doc) ((vla-get-ActiveDocument (vlax-get-Acad-Object)))) spc (if (zerop (vla-get-activespace doc)) (if (= (vla-get-mspace doc) :vlax-true) (vla-get-modelspace doc) (vla-get-paperspace doc)) (vla-get-modelspace doc))) (while (and (setq p1 (getpoint "\nPick Center Point: ")) (setq p2 (getpoint "\nPick Corner Point: ")) (/= "" (setq txt (getstring "\nColumn Number: ")))) (setq uFlag (not (vla-StartUndoMark doc))) (apply (function vla-AddDimRotated) (append (list spc) (mapcar (function vlax-3D-point) (list (setq p3 (list (car p1) (cadr p2) (caddr p1))) p2 (polar p3 (angle p1 p3) DimOff))) '(0.))) (apply (function vla-AddDimRotated) (append (list spc) (mapcar (function vlax-3D-point) (list p2 (setq p4 (list (car p2) (cadr p1) (caddr p1))) (polar p4 (angle p1 p4) DimOff))) (list (/ pi 2.)))) (vla-AddText spc txt (vlax-3D-point (polar p2 (angle p1 p2) (sqrt (* 2. DimOff Dimoff)))) (getvar "TEXTSIZE")) (setq uFlag (vla-EndUndoMark doc))) (princ))