题目
用Autolisp编程实现各特征的参数化绘图。如下图
代码
(defun c:featurea()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq c (getdist p0 "\n 输入倒角的距离"))
(setq p2 (polar p0 (+ (* 0.5 pi) alf) ( - (* 0.5 d) c)))
(setq p1 (polar p2 (+ (* 0.25 pi) alf) (* 1.414 c)))
(setq p3 (polar p2 (+ (* 1.5 pi) alf) (- d (* 2 c))))
(setq p4 (polar p1 (+ (* 1.5 pi) alf) d))
(command "line" p1 p2 p3 p4 " ")
)
(defun c:featureb()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq b (getdist p0 "\n 输入轴的长度"))
(setq p2 (polar p0 (+ (* 0.5 pi) alf) (* 0.5 d) ))
(setq p1 (polar p2 alf b))
(setq p3 (polar p2 (+ (* 1.5 pi) alf) d))
(setq p4 (polar p3 alf b))
(command "line" p1 p2 p3 p4 " ")
)
(defun c:featurec()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq d1 (getdist p0 "\n 槽直径"))
(setq b (getdist p0 "\n 槽宽度"))
(setq p1 (polar p0 (+ (* 0.5 pi) alf) (* 0.5 d)))
(setq p2 (polar p0 (+ (* 0.5 pi) alf) (* 0.5 d1)))
(setq p3 (polar p0 (+ (* 1.5 pi) alf) (* 0.5 d1)))
(setq p4 (polar p0 (+ (* 1.5 pi) alf) (* 0.5 d)))
(setq p5 (polar p2 alf b))
(setq p6 (polar p3 alf b))
(command "line" p1 p4 "")
(command "line" p2 p5 "")
(command "line" p3 p6 " ")
)
(defun c:featured()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq b (getdist p0 "\n 输入轴的长度"))
(setq p2 (polar p0 (+ (* 0.5 pi) alf) (* 0.5 d) ))
(setq p1 (polar p2 alf b))
(setq p3 (polar p2 (+ (* 1.5 pi) alf) d))
(setq p4 (polar p3 alf b))
(command "line" p1 p2 p3 p4 "c")
)
(defun c:featuree()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq b (getdist p0 "\n 输入轴的长度"))
(setq r (getdist p0 "\n 输入圆角半径"))
(setq p2 (polar p0 (+ (* 0.5 pi) alf) (* 0.5 d) ))
(setq p1 (polar p2 alf b))
(setq p3 (polar p0 (+ (* 1.5 pi) alf) d))
(setq p4 (polar p3 alf b))
(setq p5 (polar p1 (+ (* 0.5 pi) alf) r))
(setq p6 (polar p5 alf r))
(setq p7 (polar p4 (+ (* 1.5 pi) alf) r))
(setq p8 (polar p7 alf r))
(command "arc" p1 "c" p5 p6)
(command "line" p1 p2 p3 p4 "")
(command "arc" p8 "c" p7 p4)
)
(defun c:featuref()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq d (getdist p0 "\n 输入轴的直径"))
(setq b (getdist p0 "\n 槽宽度"))
(setq t1 (getdist p0 "\n 槽深度"))
(setq r (* 0.5 d) b1 (* 0.5 b))
(setq l (sqrt(- (* r r) (* b1 b1))))
(setq sit (atan b1 l))
(setq p1 (polar p0 (+ alf sit) r))
(setq p2 (polar p0 (+ pi sit) r))
(setq p3 (polar p0 (- alf sit) r))
(setq p4 (polar p3 (+ alf pi) t1))
(setq p5 (polar p1 (+ alf pi) t1))
(command "arc" p1 p2 p3)
(command "line" p3 p4 p5 p1 " ")
)
(defun c:featureg()
(setq p0 (getpoint "\n 选择基点位置:"))
(setq alf(getangle p0 "\n 输入旋转角度:"))
(setq l (getdist p0 "\n 槽直径"))
(setq b (getdist p0 "\n 槽宽度"))
(setq r (* 0.5 b) l1 (- 1 b))
(setq p1 (polar p0 (+ (* 0.5 pi) alf) r))
(setq p2 (polar p1 alf l1))
(setq p3 (polar p2 (+ (* 1.5 pi) alf) b))
(setq p4 (polar p1 (+ (* 1.5 pi) alf) b))
(command "pline" p1 p2 "a" p3 "l" p4 "a" p1)
)