SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1371|回复: 8
打印 上一主题 下一主题

求教vba 生成齿轮的程序

[复制链接]

12

主题

255

帖子

24

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
298
QQ
跳转到指定楼层
楼主
发表于 2009-11-9 17:18:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

   经典图书
Private Sub CommandButton1_Click()

Dim points(9) As Double
Dim CZ As Double, CM As Double, CA As Double, CRa As Double
CZ = Me.TextBox1
CM = Me.TextBox2 / 1000
CA = Me.TextBox3 * 3.141 / 180

'计算齿轮轮廓线的坐标points 和顶园坐标CRa
Call 齿轮廓线(CZ, CM, CA, points(), CRa)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim nPtData(26) As Double
Dim vPtData As Variant
Dim swSketchSeg(1) As SldWorks.SketchSegment
Set swApp = Application.SldWorks
Set swMoldel = swApp.ActiveDoc

Set swSketchSeg(0) = swModel.CreateCircleByRadius2(0, 0, 0, CRa) '老是这行出错
swModel.InsertSketch2 True
nPtData(0) = -points(8): nPtData(1) = points(9): nPtData(2) = 0#
nPtData(3) = -points(6): nPtData(4) = points(7): nPtData(5) = 0#
nPtData(6) = -points(4): nPtData(7) = points(5): nPtData(8) = 0#
nPtData(9) = -points(2): nPtData(10) = points(3): nPtData(11) = 0#
nPtData(12) = -points(0): nPtData(13) = points(1): nPtData(14) = 0#
nPtData(15) = -points(2): nPtData(16) = points(3): nPtData(17) = 0#
nPtData(18) = -points(4): nPtData(19) = points(5): nPtData(20) = 0#
nPtData(21) = -points(6): nPtData(22) = points(7): nPtData(23) = 0#
nPtData(24) = -points(8): nPtData(25) = points(9): nPtData(26) = 0#
vPtData = nPtData
Set swSketchSeg(1) = swModel.CreateSpline(vPtData) '创建此轮轮廓线条曲线
Dim bRet As Boolean
'会支持论定圆曲线
bRet = swModel.CreateArcByCenter(0, 0, 0, points(8), points(9), 0, -points(8), points(9), 0)
swModel.InsertSketch2 True
swModel.ViewZoomtofit2 '整平显示图形
End Sub

Sub 齿轮廓线(CZ As Double, CM As Double, CA As Double, points() As Double, CRa As Double)
Dim CR As Double, CRb As Double, CRf As Double, CSb As Double, Th(3)
'------------------------------------------
CR = CM * CZ / 2 '齿轮分度圆半径
CRf = (CR - 1.25 * CM) '齿轮根圆半径
CRb = CR * Cos(CA) '齿轮基圆半径
CRa = CR + CM ' 齿轮顶圆半径
'-------------------------------------------
'齿轮基员齿厚
CSb = Cos(CA) * (3.14 * CM / 2 + CM * CZ * (Tan(CA) - (CA)))
Th(1) = (3.14 * CM * Cos(CA) - CSb) / (2 * CRb)
Th(2) = Th(1) + Tan(CA) - CA
' ACos---反余弦 自定义函数
Th(3) = Th(1) + Tan(Acos(CRb / CRa)) - Acos(CRb / CRa)

'第零点
points(0) = 0: points(1) = CRf
'第一点
points(2) = CRf * Sin(Th(0)): points(3) = CRf * Cos(Th(0))
'第2点
points(4) = CRf * Sin(Th(1)): points(5) = CRf * Cos(Th(1))
'第3点
points(6) = CRf * Sin(Th(2)): points(7) = CRf * Cos(Th(2))
'第4点
points(8) = CRf * Sin(Th(3)): points(9) = CRf * Cos(Th(3))
'调整
If CRb < CRf Then
points(2) = points(6) * 0.2: points(3) = points(1) + 0.25 * CM * 0.03

points(4) = points(6) * 0.7: points(5) = points(1) + 0.25 * CM * 0.8
End If
End Sub

Function Acos(X As Double) As Double '反余弦
Dim pi As Double
pi = 4# * Atn(1#) '45度=pi/4
If Abs(X) > 1# Then
MsgBox "cosX>1,Acos(x)函数出错", 1 + 16, "警告": Exit Function
Else
If Abs(X) = 1# Then
Acos = (1# - X) * pi / 2#
Else
Acos = pi / 2 - Atn(X / Sqr(-X * X + 1))
End If
End If
End Function

Private Sub CommandButton2_Click()
End
End Sub
Private Sub UserForm_Initialize()
Me.Label1 = "齿 数"
Me.Label2 = "模 数"
Me.Label3 = "压力角"
Me.CommandButton1.Caption = "确 定"
Me.CommandButton2.Caption = "取 消"
Me.TextBox1 = 21
Me.TextBox2 = 12
Me.TextBox3 = 20
End Sub
example.rar (27.07 KB, 下载次数: 196)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞11995 拍砖拍砖5142
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

14

主题

205

帖子

32

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
244
QQ
沙发
发表于 2009-11-9 17:21:38 | 只看该作者
正在学这个,呵呵
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

8

主题

215

帖子

15

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
239
QQ
板凳
发表于 2009-11-9 17:24:58 | 只看该作者

   经典图书
正在用vb做这sw的开发,程序是你用录制的还是自己写的?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

13

主题

201

帖子

38

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
245
QQ
地板
发表于 2009-11-9 17:26:53 | 只看该作者
想叫高手教教变位的怎么编写
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

232

帖子

36

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
293
QQ
5#
发表于 2009-11-9 17:32:34 | 只看该作者

   经典案例图书
看看咯
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

231

帖子

15

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
263
QQ
6#
发表于 2009-11-9 17:45:01 | 只看该作者
哪位高手指点一下啊,我也遇到这个问题了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

83

主题

297

帖子

251

金币

堂主

Rank: 4

积分
581
QQ
7#
发表于 2009-11-9 17:45:10 | 只看该作者

   经典案例图书
高手指点!!我想画个内斜齿轮,上面的程序我改了
CR = CM * CZ / 2 &#39;齿轮分度圆半径
    CRf = (CR - 1.25 * CM) &#39;齿轮根圆半径
    CRb = CR * Cos(CA) &#39;齿轮基圆半径
    CRa = CR + CM &#39; 齿轮顶圆半径
这一部分,可是没办法生成内齿!!!!求高手指点!!!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

888

帖子

450

金币

传奇

Rank: 8Rank: 8

积分
3120

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

8#
发表于 2021-4-8 21:56:57 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

9

主题

888

帖子

450

金币

传奇

Rank: 8Rank: 8

积分
3120

最佳新人活跃会员热心会员宣传达人灌水之王突出贡献

9#
发表于 2021-4-16 22:00:55 | 只看该作者
感谢楼主分享,很不错!
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

SOLIDWORKS 2023 机械设计从入门到精通

手机版|小黑屋| GMT+8, 2025-5-23 15:51 , Processed in 0.281977 second(s), 26 queries , Memcache On.

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

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