;;其它论坛有画链轮的程序,明经论坛也应该有
;;曾经有一段时间,我常画链轮,须不复杂,每次计算确很繁琐,所以关注它
;;希望改编后的程序更完善
(defun Draw_Chain2 (c1 p dr pt b1 z h / A ANG1
ANGDD ANGM1 ANGM2 ANGM3 ANGM4
AREA1 AREA2 C2 CLAYER CR1 CR2 D
DA DF DG H1 H2 L1 L2 PA1 PA2 PA3
PA4 PA5 PA6 PA7 RE RI S1 S2 U1 U2
V1 V2 W1
)
(setq ang1 (/ pi z)) ;ang1为180/z的弧度值
;;以下进行链轮参数计算
(setq angdd (/ (* 2 pi) z)) ;每个齿对应的角度
(setq re (* 0.12 dr (+ z 2))) ;齿面圆弧半径
(setq ri (* dr 0.505)) ;齿沟圆半径
(setq a (- (* (/ pi 180) 140) (/ (* pi 0.5) z))) ;齿沟角
(setq d (/ p (sin (/ pi z)))) ;分度圆直径
(setq da (fix (/ (+ (- (+ d (* p (- 1 (/ 1.6 z)))) dr)
(- (+ d (* p 1.25)) dr)
)
2
)
)
) ;齿顶圆直径
(setq df (- d dr)) ;齿根圆直径
(setq dg (fix (- (* p (/ (cos ang1) (sin ang1))) (* h 1.04) 0.76 dr)))
;齿侧凸缘直径
;;链轮中心点
(setq c2 (polar c1 (* -1 (* angdd 0.5)) (* d 0.5)))
(setq cr1 (polar c2 (- (+ pi (* a 0.5)) (* angdd 0.5)) (+ re ri)))
(setq cr2 (polar c2 (- (- pi (* a 0.5)) (* angdd 0.5)) (+ re ri)))
;;求三角1角度angm1
(setq u1 (* d 0.5))
(setq v1 (+ ri re))
(setq w1 (distance c1 cr1))
(setq s1 (* (+ u1 v1 w1) 0.5))
(setq area1 (sqrt (* s1 (- s1 u1) (- s1 v1) (- s1 w1))))
(setq h1 (/ (* 2 area1) w1))
(setq l1 (sqrt (- (* u1 u1) (* h1 h1))))
(setq angm1 (atan h1 l1))
;;求三角2角度angm2
(setq u2 (* da 0.5))
(setq v2 re)
(setq s2 (* 0.5 (+ u2 v2 w1)))
(setq area2 (sqrt (* s2 (- s2 u2) (- s2 v2) (- s2 w1))))
(setq h2 (/ (* 2 area2) w1))
(setq l2 (sqrt (- (* u2 u2) (* h2 h2))))
(setq angm2 (atan h2 l2))
;;求齿顶圆弧对应的角度angm4
(setq angm3 (- angm1 angm2))
(setq angm4 (- angdd (* angm3 2)))
;;继续进行绘图点的定义与赋值
(setq pa1 (polar c1 (* -1 (+ (* angdd 0.5) angm3)) (* da 0.5)))
(setq pa2 (polar c2 (- (+ pi (* 0.5 a)) (* angdd 0.5)) ri))
(setq pa3 (polar c1 (* -1 (* angdd 0.5)) (- (* d 0.5) ri)))
(setq pa4 (polar c2 (- (- pi (* a 0.5)) (* angdd 0.5)) ri))
(setq pa5 (polar c1 (* -1 angm4 0.5) (* da 0.5)))
(setq pa6 (polar c1 0 (* da 0.5)))
(setq pa7 (polar c1 (* angm4 0.5) (* da 0.5)))
;;绘制轮齿
(command "_.pline" pa1 "w" 0 "" "a" "ce" cr1 pa2 "s" pa3 pa4 pa5 "s"
pa6 pa7 "")
(command "_.array" (entlast) "" "p" c1 z "" "")
(setq Clayer (getvar "clayer"))
(command "_.layer" "make" "中心线" "L" "ACAD_ISO10W100"
"" "Color" 6 "" ""
)
(command "_.circle" c1 c2)
(setvar "clayer" Clayer)
) |