一、齒輪輪齒漸開漸開線
(defun c:gear(/)
(
setq
p0 (getpoint"輸入齒輪中心p0: ")
m (getreal"輸入齒輪模數M: ")
z (getint"輸入齒輪齒數Z: ")
ha 1
c 0.25
a (/ pi 9)
ra(/ (* (+ z (+ ha ha)) m) 2)
rf(/ (* (- z (+ (+ ha ha) c)) m) 2)
r(/ ( * m z) 2)
rb ( * r (cos a))
ri rb
ang 0
g (polar p0 ang rb)
)
(command "circle" p0 ra)
(command "circle" p0 rf)
(command "circle" p0 r)
(command "line" g)
(while (< ri ra)
(setq
ang ( + ang(/ pi 360))
ri ( / rb (cos ang))
cta ( - (/ (sin ang) (cos ang)) ang)
g(polar p0 cta ri)
)
(command g)
)
(command )
)
二、螺旋源程序
(defun errMsg (s)
(if (/= s "function cancelled") (princ (strcat "\nError: " s)))
; 當命令執行時出現錯誤
(setvar "cmdecho" ocmdold) ; 例如用戶按下了CTRL + C
(setvar "osmode" osmold)
(setq *error* olderr) ; 恢復舊的錯誤處理
(princ)
)
(defun c:3Dthread (/ radouter threadpitch threadlength threadangle
ptStart innerdiafactor radmid radinner ocmdold osmold 4H 5H 6H h6 g6)
;-------------------------------------------------------------------
; 獲取公制外徑大小、螺距總長
; 然後計算一系列幾何點
; 並且關閉對象捕捉、命令回顯
;-------------------------------------------------------------------
(setq 4H (list 0.0015 0.002 0.002 0.0025 0.003 0.0035 0.004 0.005 0.006 0.007 0.008 0.009 0.010))
(setq 5H (list 0.002 0.0025 0.003 0.004 0.0045 0.0055 0.0065 0.0075 0.009 0.010 0.0115 0.0125 0.0135))
(setq 6H (list 0.003 0.004 0.0045 0.0055 0.0065 0.008 0.0095 0.011 0.0125 0.0145 0.016 0.018 0.020))
(setq h6 (list -0.003 -0.004 -0.0045 -0.0055 -0.0065 -0.008 -0.0095 -0.011 -0.0125 -0.0145 -0.016 -0.018 -0.020))
(setq g6 (list -0.005 -0.008 -0.0095 -0.0115 -0.0135 -0.017 -0.0195 -0.023 -0.0265 -0.0295 -0.033 -0.036 -0.0515))
(setq osmold (getvar "osmode")) ; 保存調用前的osmode系統變數值
(setq ocmdold (getvar "cmdecho")) ; 保存調用前的cmdecho系統變數值
(setvar "osmode" 0) ; 關閉對象捕捉
(setvar "cmdecho" 0) ; 關閉命令的回顯
(setq innerdiafactor 1.5) ; 設置內徑係數
(initget 7) ; radmid 必須非零、非空、非負
(setq radmid (getdist "\n公制外徑: "))
(initget 7) ; threadpitch 必須非零、非空、非負
(setq threadpitch (getreal "\n螺距: "))
(initget 1) ; ptStart 必須非空
(setq ptStart (getpoint "\n起始點: "))
(initget 3) ; threadlength 必須非零、非空、非負
(setq threadlength (getdist "\n螺紋總長(Y方向): "))
; 對公制外徑添加公差
(if (<= radmid 3) (setq order 0) ; 根據公制外徑確定公差帶中位置
(if (<= radmid 6) (setq order 1)
(if (<= radmid 10) (setq order 2)
(if (<= radmid 18) (setq order 3)
(if (<= radmid 30) (setq order 4)
(if (<= radmid 50) (setq order 5)
(if (<= radmid 80) (setq order 6)
(if (<= radmid 120) (setq order 7)
(if (<= radmid 180) (setq order 8)
(if (<= radmid 250) (setq order 9)
(if (<= radmid 315) (setq order 10)
(if (<= radmid 400) (setq order 11)
(if (<= radmid 500) (setq order 12)
)))))))))))))
(if (< threadpitch 0.25) (setq radmid (+ radmid (nth order 4H))) ; 根據螺距確定公差帶
(if (< threadpitch 0.35) (setq radmid (+ radmid (nth order 5H)))
(if (>= threadpitch 0.35) (setq radmid (+ radmid (nth order 6H)))
)))
(setq h (* 0.866025 threadpitch)) ; 計算齒高
(setq radouter (+ radmid (/ h 4))) ; 計算外徑
(setq radinner (- radouter (* h innerdiafactor))) ; 計算內徑
(setq threadangle (+ 30 0)) ; 計算齒頂角
(auxithread radouter radmid radinner threadpitch threadlength threadangle ptStart) ; 調用繪製三維螺紋的子函數
(princ "\n三維螺紋創建完成")
(setvar "osmode" osmold) ; 恢復調用前的osmode系統變數值
(setvar "cmdecho" ocmdold) ; 恢復調用前的cmdecho系統變數值
(princ)
)
(defun auxithread (radouter radmid radinner threadpitch th