使用AutoLISP编程实现各特征的参数化绘图

题目

用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)

)

结果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值