我大概看了以下,在下面的程序中已改了几个错的地方。并加了几句。见程序中的注释,还有
你的程序中没考虑出错性,当用户输入的长度宽度等数据,为空时,程序强会出错。你可以用while或if 函数来控制,不好意思哦,说了这么多。哦差点忘了当输入的数据较小时(如长宽等为20是)出来的图可能不符合你的要求变形了,你可以加入比例来控制。

- (defun c:boxd0902a ( / c k p1 p10 p11 p12 p13 p14 p15 p16 p2 p3 p4 p5 p6 p7 p8 p9 r)
- ;;局部变量最好在程序名后的刮号里声明,不然容易和别的程序搞乱,还占机器。
- ;;;盒头及7字
- (setq c (getreal "\n 请输入长度:")) ;;此处的/n应为\n
- (setq k (getreal "\n 请输入宽度:"))
- (setq r (getreal "\n 请输入盒头圆角半径:"))
- ;setq p1 (list 100.00 100.00)) ;;该点应由用户自己定义如下所示
- (setq p1 (getpoint "\n请输入插入点:"))
- (setq p2 (polar p1 0.0 7.0))
- (setq p3 (polar p2 (* pi 1.5) 1.2))
- (setq p4 (polar p2 (* pi 1.5) 0.7))
- (setq p5 (polar p4 0.0 (- c 14.0)))
- (setq p6 (polar p5 (* pi 1.5) 0.5))
- (setq p7 (polar p6 (* pi 0.5) 1.2))
- (setq p8 (polar p7 0. 7.))
- (setq p9 (polar p8 (* pi 1.5) k))
- (setq p10 (polar p8 pi 0.5))
- (setq p11 (polar p10 (* pi 0.5) (- 12.5 r)))
- (setq p12 (polar p11 (* pi 0.75) (sqrt (* 2 r r))))
- (setq p13 (polar p12 pi (- c (* r 2.0) 1.0)))
- (setq p14 (polar p11 pi (- c 1.0)))
- (setq p15 (polar p10 pi (- c 1.0)))
- (setq p16 (polar p1 (* pi 1.5) k))
- (setq oldos (getvar "osmode")) ;;取得原捕捉
- (setvar "osmode" 0) ;;关闭捕捉否则容易出错
- (setq oldcm (getvar "cmdecho"))
- (setvar "cmdecho" 0) ;;关闭回显
- (command "line" p16 p1 p2 p3 "")
- (command "line" p4 p5 "")
- (command "line" p6 p7 p8 p9 "")
- (command "line" p10 p11 "")
- (command "arc" p11 "en" p12 "r" r )
- (command "line" p12 p13 "")
- (command "arc" p13 "en" p14 "r" r )
- (command "line" p14 p15 "")
- (setvar "osmode" oldos) ;;;恢复捕捉
- (setvar "cmdecho" oldcm) ;;;恢复回显原状态
- (princ) ;;此句一般加在程序最后,记得好像是晓东还是谁在老的论坛说过加这句是一个编程者的应该做的扫尾之事。
- )
|