CAD设计论坛

 找回密码
 立即注册
论坛新手常用操作帮助系统等待验证的用户请看获取社区币方法的说明新注册会员必读(必修)
查看: 3140|回复: 10

哪位大师有制作三维标准件(螺栓、螺母等)的小程序???

[复制链接]
发表于 2011-2-28 19:20 | 显示全部楼层 |阅读模式
俺用的是ACAD2009机械版的,在画三维图时,没有三维标准件可调用,画的话很麻烦,哪位朋友有这方面的程序,敬请赏赐一下,多谢!!!
发表于 2011-2-28 19:25 | 显示全部楼层
回复 1# 成人之美


    给你个小程序 我也是在论坛下的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2011-2-28 20:08 | 显示全部楼层
万分感谢,我下载后试试!!祝楼上的朋友天天交好运!!
 楼主| 发表于 2011-2-28 20:16 | 显示全部楼层
我用的是2009版的,复制后按说明里操作怎么不好用呢??
发表于 2011-3-3 15:05 | 显示全部楼层
现在网上发的画三维螺编纹的多,我比较喜欢这个文件
螺旋源程序

(defun c:3DLO (/ 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 threadlength threadangle ptStart / ttal pt1z ang pt1a
pt1az pt3a pt1b pt1bz pt3b pttmp1 pttmp2 pttmp3 pttmp4 pttmp5 pttmp6 pttmp7 pttmp8 pttmp9 pttmp10 pttmp11 pttmp12 tstmp startcone endcone)

   ;(command "undo" "begin")                             ; 开始undo步骤

   (setq ttal (+ (fix (/ (abs threadlength) threadpitch)) 3)
      pttmp1 (list (- (car ptStart) (/ radouter 2.0)) (cadr ptStart) (caddr ptStart))
      pt1z (list (- (car ptStart) (/ radouter 2.0)) (cadr ptStart) (+  (caddr pttmp1) 1.0))
      pttmp2 (polar pttmp1 (/ (* threadangle pi) 180.0) 1)
      pttmp3 (list (+ (car pttmp1) radouter) (+ (cadr pttmp1) (/ threadpitch 2.0))  (caddr ptStart))
      ang (angle pttmp1 pttmp3)
      pt1a (polar pttmp1 (+ ang (/ pi 2.0)) threadpitch)
      pt1az (list (car pt1a) (cadr pt1a) (+  (caddr pt1a) 1.0))
      pt3a (polar pt1a ang radouter)
      pt1b (polar pttmp1 (- ang (/ pi 2.0)) threadpitch)
      pt1bz (list (car pt1b) (cadr pt1b) (+  (caddr pt1b) 1.0))
      pt3b (polar pt1b ang radouter)
      pttmp4 (polar pttmp3 (/ (* (- 180 threadangle) pi) 180.0) 1)
      pttmp5 (inters pttmp1 pttmp2 pttmp3 pttmp4 nil)
      pttmp6 (list (car pttmp5) (cadr ptStart)  (caddr ptStart))
      pttmp7 (polar pttmp1 (/ (* (- 360 threadangle) pi) 180.0) 1)
      pttmp8 (polar pttmp3 (/ (* (+ 180 threadangle) pi) 180.0) 1)
      pttmp9 (inters pttmp1 pttmp7 pttmp3 pttmp8 nil)
      pttmp10 (list (car pttmp9) (cadr pttmp3)  (caddr pttmp3))
      pttmp11 (polar ptStart (/ pi 2.0) threadpitch)
      pttmp12 (polar pttmp11 (/ pi 2.0) (abs threadlength))
   )

   ;-------------------------------------------------------------------
   ; 绘制两个倒置的并偏移1/2螺距的圆锥
   ; 这两个圆锥都以中剖面剖分
   ; 进行并集运算
   ;-------------------------------------------------------------------

(SETQ startcone "order")
(SETQ endcone "Y")
   (command "zoom" "w" (list (car pt1a) (+ (cadr pt1a) (abs threadlength)) (caddr pt1a)) pt3b)

   (princ "\n正在绘制三维螺纹,请等待")
   (command "pline" pttmp1 pttmp5 pttmp6 "c")
   (command "revolve" "l" "" pttmp5 pttmp6 "")
   (command "slice" "l" "" pttmp1 pttmp3 pt1z pttmp5)
   (command "slice" "l" "" pt1a pt3a pt1az pttmp3)
   (setq tstmp (ssadd (entlast)))
   (command "pline" pttmp3 pttmp9 pttmp10 "c")
   (command "revolve" "l" "" pttmp9 pttmp10 "")
   (command "slice" "l" "" pttmp1 pttmp3 pt1z pttmp9)
   (command "slice" "l" "" pt1b pt3b pt1bz pttmp3)
   (setq tstmp (ssadd (entlast) tstmp))
   (command "union" tstmp "")

   ;-------------------------------------------------------------------
   ; 上面的实体被剖切成两份,然后进行镜像以获得螺旋线的螺旋
   ; 单线的高度实际上等于两倍螺距,但是超出或者是在内部或者是
   ; 在最后一步被切除
   ;-------------------------------------------------------------------

   (command "slice" tstmp "" "xy" ptStart "b")
   (setq tstmp (ssadd (entlast) tstmp))
   (command "mirror" "l" "" pttmp1 "@10<0" "y")
   (command "union" tstmp "")

   ;-------------------------------------------------------------------
   ; 螺旋进行阵列操作,然后再作并集(可能会耗费一定时间)
   ; 得到的实体再切除到指定的螺旋高度
   ;-------------------------------------------------------------------

   (setq e (entlast))
   (command "array" tstmp "" "r" ttal 1 threadpitch)
   (repeat (1- ttal)
      (setq e (entnext e)
         tstmp (ssadd e tstmp)
      )
   )
   (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步骤
)

;;;---------------------------------------------------------------------------------------------------------------------;
(arxload "geom3d" nil)
(princ "\n3DThread 已加载。 ")
(princ)

运行命令:3DLO

试试看好用
发表于 2011-4-6 15:11 | 显示全部楼层
喔,good,不知道版本是06的可不可以用,试下看,哈哈
发表于 2011-6-17 21:00 | 显示全部楼层
加载成功后,怎么用呀,用了的朋友,可以说下吗!先谢了.
发表于 2011-6-18 07:27 | 显示全部楼层
我也正想找呢!
发表于 2013-4-18 14:38 | 显示全部楼层
感谢分享!
发表于 2013-4-19 13:58 | 显示全部楼层
我都睡了一觉了
发表于 2013-4-20 08:05 | 显示全部楼层
二维图,用电子图板较好,GB标准
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于|免责|隐私|版权|广告|联系|手机版|CAD设计论坛

GMT+8, 2024-11-23 15:33

CAD设计论坛,为工程师增加动力。

© 2005-2024 askcad.com. All rights reserved.

快速回复 返回顶部 返回列表