本帖最后由 作者 于 2005-9-10 12:48:39 编辑
我在请教各位高手一个问题,下面程序也是我在网上下载的,但这个程序有一个缺点,就是当上偏差或下偏差中有一个数为"0"时,0就和"+"或"-'对起,这不符合国标,我改了一下程序,在上面加了几条代码:
( if (= ltoll+ 0) (setq ltola (strcat "{\\H0.6x;\\S " ltoll+ "^"ltoll-";}"))) (if (= ( ltoll- 0) (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^ "ltoll-";}"))) (if (and (/= ltoll+ 0) (/= ltoll+ 0)) (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^" ltoll-";}")))
但好象函数没判断,不管上下偏差有否为零,它都执行(setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^" ltoll-";}"))),请问那位高手能帮我看一下,错在那里,谢谢! 原程序:
(defun c:gc (/ ++++ ---- ltoll+ ltoll- ltola ltolb diment ENT dimtext ldimdata rr ltoltext1 ccc pr01 ltoltext2 ddd pr02 crackl) (setvar "cmdecho" 0) (if (null ltoldata+)(setq ltoldata+ "0.1")) (if (null ltoldata-)(setq ltoldata- "0.1")) (setq ++++ (strcat "\n输入上公差" "<" ltoldata+ ">" ":")) (initget 128)(setq ltoll+ (getkword ++++))(if (null ltoll+)(setq ltoll+ ltoldata+)) (setq ---- (strcat "\n输入下公差" "<" ltoldata- ">" ":")) (initget 128)(setq ltoll- (getkword ----))(if (null ltoll-)(setq ltoll- ltoldata-)) (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^" ltoll-";}")) (if (= ltoll+ ltoll-)(setq ltolb (strcat "%%P" ltoll+))) (setq ltoldata+ ltoll+);;保存本次输入正公差数值 (setq ltoldata- ltoll-);;保存本次输入负公差数值 ;;选择开始 (SETQ diment (ENTSEL "\n选择应用公差的尺寸 : "));;选择物件 (if (null diment)(exit (PRINC "\n错误! 没有选择任何物件!")));;判断是否为有效选取 (SETQ ENT (ENTGET (CAR diment)));;取得选择的资料串行 (setq dimtext (CDR (ASSOC 0 ENT)));;取得资料串行名称,判断选择的物件是否为尺寸 (if (/= dimtext "DIMENSION")(exit (princ "\n错误! 选择的物件非尺寸或尺寸已分解!"))) (setq ldimdata (CDR (ASSOC 1 ENT)));;取得尺寸资料串行 (setq rr (substr ldimdata 1 2));;抽取尺寸值前2位 (if (or (= rr "") (= rr "<>")) (progn (setq ltoltext1 (strcat "<>" ltola)) (setq ccc(subst (cons 1 ltoltext1)(assoc 1 ENT)ENT)) (entmod ccc);;(entupd diml1) (princ) ) (progn (if (or (/= rr "") (/= rr "<>"))(exit (princ "\n错误! 尺寸被修改过! 只支持实际数值及未分解的尺寸!"))) ) ) (if (= ltoldata+ ltoldata-) (progn (setq ltoltext2 (strcat "<>" ltolb)) (setq ddd(subst (cons 1 ltoltext2)(assoc 1 ENT)ENT)) (entmod ddd) (princ) ) (progn (setq crackl 2006) ) ) (princ (strcat "\nOK! 恭喜你成功标注公差!")) (princ) )
改过后的程序:
(defun c:gc (/ ++++ ---- ltoll+ ltoll- ltola ltolb diment ENT dimtext ldimdata rr ltoltext1 ccc pr01 ltoltext2 ddd pr02 crackl) (setvar "cmdecho" 0) (if (null ltoldata+)(setq ltoldata+ "0.1")) (if (null ltoldata-)(setq ltoldata- "0.1")) (setq ++++ (strcat "\n输入上公差" "<" ltoldata+ ">" ":")) (initget 128)(setq ltoll+ (getkword ++++))(if (null ltoll+)(setq ltoll+ ltoldata+)) (setq ---- (strcat "\n输入下公差" "<" ltoldata- ">" ":")) (initget 128)(setq ltoll- (getkword ----))(if (null ltoll-)(setq ltoll- ltoldata-)) ( if (= ltoll+ 0) (setq ltola (strcat "{\\H0.6x;\\S " ltoll+ "^"ltoll-";}"))) (if (= ( ltoll- 0) (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^ "ltoll-";}"))) (if (and (/= ltoll+ 0) (/= ltoll+ 0)) (setq ltola (strcat "{\\H0.6x;\\S" ltoll+ "^" ltoll-";}"))) (if (= ltoll+ ltoll-)(setq ltolb (strcat "%%P" ltoll+))) (setq ltoldata+ ltoll+);;保存本次输入正公差数值 (setq ltoldata- ltoll-);;保存本次输入负公差数值 ;;选择开始 (SETQ diment (ENTSEL "\n选择应用公差的尺寸 : "));;选择物件 (if (null diment)(exit (PRINC "\n错误! 没有选择任何物件!")));;判断是否为有效选取 (SETQ ENT (ENTGET (CAR diment)));;取得选择的资料串行 (setq dimtext (CDR (ASSOC 0 ENT)));;取得资料串行名称,判断选择的物件是否为尺寸 (if (/= dimtext "DIMENSION")(exit (princ "\n错误! 选择的物件非尺寸或尺寸已分解!"))) (setq ldimdata (CDR (ASSOC 1 ENT)));;取得尺寸资料串行 (setq rr (substr ldimdata 1 2));;抽取尺寸值前2位 (if (or (= rr "") (= rr "<>")) (progn (setq ltoltext1 (strcat "<>" ltola)) (setq ccc(subst (cons 1 ltoltext1)(assoc 1 ENT)ENT)) (entmod ccc);;(entupd diml1) (princ) ) (progn (if (or (/= rr "") (/= rr "<>"))(exit (princ "\n错误! 尺寸被修改过! 只支持实际数值及未分解的尺寸!"))) ) ) (if (= ltoldata+ ltoldata-) (progn (setq ltoltext2 (strcat "<>" ltolb)) (setq ddd(subst (cons 1 ltoltext2)(assoc 1 ENT)ENT)) (entmod ddd) (princ) ) (progn (setq crackl 2006) ) ) (princ (strcat "\nOK! 恭喜你成功标注公差!")) (princ) ) |