(command "union" tstmp "")
; 若开始创建45度的圆锥
(if (/= startcone "order")
(progn (setq e (entlast))
(command "cone" (list (car ptStart) (+ (cadr ptStart) threadpitch) (caddr ptStart)) "d" radmid "a"
(list (car ptStart) (+ (+ (cadr ptStart) (/ radmid 2)) threadpitch) (caddr ptStart)))
(command "union" "l" e "")
)
)
(command "slice" "l" "" "zx" pttmp11 pttmp12)
(command "slice" "l" "" "zx" pttmp12 pttmp11)
(command "move" "l" "" ptStart (list (car ptStart) (- (cadr ptStart) threadpitch) (caddr ptStart)))
; 创建最小直径的圆柱体,然后与螺旋作交集
(setq e (entlast))
(command "cylinder" ptStart "d" radinner "c" (list (car ptStart) (+ (cadr ptStart)
(abs threadlength)) (caddr ptStart)))
(command "union" "l" e "")
(setq tstmp (entlast))
; 创建中空的圆柱体
(command "cylinder" ptStart "d" radmid "c" (list (car ptStart) (+ (cadr ptStart)
(abs threadlength)) (caddr ptStart))) ; minor dia
(setq e (entlast))
; 若最后创建45度的圆锥
(if (/= endcone "order")
(progn (command "move" "l" "" ptStart (list (car ptStart) (- (cadr ptStart) (/ (- radmid radinner) 2)) (caddr ptStart)))
(command "cone" ptStart "d" radmid "a" (list (car ptStart) (+ (cadr ptStart)
(/ radmid 2)) (caddr ptStart)))
(command "move" "l" "" ptStart (list (car ptStart) (- (+ (cadr ptStart)
(abs threadlength)) (/ (- radmid radinner) 2)) (caddr ptStart)))
(command "union" "l" e "")
(setq e (entlast))
)
)
; 从大圆柱中减去小直径圆柱
(command "cylinder" ptStart "d" (* radmid 1.5) "c" (list (car ptStart)
(+ (cadr ptStart) (abs threadlength)) (caddr ptStart)))
(command "subtract" "l" "" e "")
(setq e (entlast))
; 从螺旋中减去圆柱
(command "subtract" tstmp "" e "")
; 如果螺旋长度为负然后镜像
(setq e (entlast))
(if (< threadlength 0) (mirror3d e "zx" ptStart "y"))
(command "zoom" "p")
; (command "undo" "end") ; 结束undo步骤

