请帮我编写一套完整、可直接运行的 SolidWorks VBA 宏，用于教学演示“标准斜齿圆柱齿轮”的参数化自动建模。

我要的是：

SolidWorks VBA + SolidWorks API

不是Python，不需要联网，不使用Toolbox直接插入标准件。

请直接一次性输出完整代码，不要只给局部修改。

最终至少包含：

1. 普通Module完整代码
2. UserForm完整代码
3. 所有辅助函数完整代码

不要让我自己从旧代码里寻找需要替换的片段。


==================================================
一、总体目标
==================================================

运行宏以后，弹出一个简单的参数窗口，一次性输入：

1. 法向模数 mn，单位mm
2. 齿数 z，整数
3. 法向压力角 αn，单位°
4. 螺旋角 β，单位°
5. 齿宽 b，单位mm
6. 中心孔直径，单位mm
7. 旋向：右旋 / 左旋

默认参数：

mn = 2
z = 30
αn = 20°
β = 20°
b = 20 mm
中心孔 = 15 mm
旋向 = 右旋

点击：

“生成斜齿轮”

以后，SolidWorks自动完成完整建模。

要求最终生成的是普通、可编辑的SolidWorks特征树，而不是黑盒实体。


==================================================
二、核心建模思想
==================================================

非常重要：

不要为斜齿轮单独重新发明一套齿形算法。

斜齿轮应该理解成：

“端面渐开线单齿 + 沿轴向恒定扭转扫掠”

因此流程必须是：

法向参数
↓
换算端面参数
↓
使用与稳定直齿轮相同的端面渐开线逻辑
↓
获得端面单齿
↓
沿轴向直线路径进行恒定扭转扫掠
↓
得到单个斜齿
↓
360°圆周阵列


==================================================
三、法向参数与端面参数
==================================================

用户输入采用法向参数：

mn
αn
β

内部自动换算端面参数：

端面模数：

mt = mn / cos(β)

端面压力角：

αt = atan(tan(αn) / cos(β))

分度圆直径：

d = mt*z

分度圆半径：

rp = mt*z/2

标准法向制齿顶高：

ha = mn

标准法向制齿根高：

hf = 1.25*mn

齿顶圆半径：

ra = rp + mn

齿根圆半径：

rf = rp - 1.25*mn

端面基圆半径：

rb = rp*cos(αt)


==================================================
四、必须额外生成“分度圆草图”
==================================================

教学用必须单独生成一个参考草图：

“斜齿轮分度圆草图（端面）”

圆心：

(0,0)

半径：

rp

最好设置成构造圆。

注意：

展示的是分度圆 rp，

不是基圆 rb。

基圆仍然只在内部用于渐开线计算。


==================================================
五、端面渐开线齿形
==================================================

渐开线必须是真正的函数渐开线。

禁止使用大量小直线逼近。

标准渐开线参数方程：

p(t) = rb*(cos(t)+t*sin(t))

q(t) = rb*(sin(t)-t*cos(t))

分度圆处半齿厚角：

halfTooth = PI/(2*z)

invAlphaT = tan(αt)-αt

基圆处半齿角：

gamma = halfTooth + invAlphaT

只生成齿中心线上方的一侧渐开线：

x(t)
=
p(t)*cos(gamma)
+
q(t)*sin(gamma)

y(t)
=
p(t)*sin(gamma)
-
q(t)*cos(gamma)

使用：

SketchManager.CreateEquationSpline2

创建。

非常重要：

渐开线永远从基圆开始：

tStart = 0

不要再写：

If rf > rb Then
    startR = rf
Else
    startR = rb
End If

不要因为齿数不同切换渐开线起点逻辑。

齿顶参数：

tEnd = sqrt((ra/rb)^2 - 1)


==================================================
六、关键渐开线点必须由数学公式直接计算
==================================================

不要依赖SolidWorks返回的端点坐标决定齿轮几何。

渐开线基圆起点直接数学计算：

xRoot = rb*cos(gamma)

yRoot = rb*sin(gamma)

注意普通SolidWorks几何API单位用米，所以需要除以1000。

渐开线齿顶点：

pTip
=
rb*(cos(tEnd)+tEnd*sin(tEnd))

qTip
=
rb*(sin(tEnd)-tEnd*cos(tEnd))

xTip
=
pTip*cos(gamma)
+
qTip*sin(gamma)

yTip
=
pTip*sin(gamma)
-
qTip*cos(gamma)

并检查：

sqrt(xTip^2+yTip^2) = ra

SolidWorks的Spline端点对象只用于建立Coincident重合约束，不允许用它返回的点顺序决定理论齿形。


==================================================
七、齿根区域采用“稳定教学简化方案”
==================================================

当前宏主要为了：

稳定
教学
自动化

不要求精确模拟滚刀真实齿根包络曲线。

因此不要生成复杂trochoid，不要使用偏心齿根圆角。

统一使用以下稳定逻辑：

先计算：

innerLimit = min(rf, rb)

innerR = innerLimit - 0.25*mn

如果中心孔较大，则自动调整innerR，使：

innerR > 中心孔半径

且：

innerR < rf
innerR < rb

然后单侧齿根由：

① 内部同心圆弧
② 径向直线
③ 基圆渐开线

组成。

内部圆弧：

圆心 = (0,0)

起点：

(innerR, 0)

终点：

(innerR*cos(gamma),
 innerR*sin(gamma))

这段内圆弧完全位于齿根圆柱内部，因此最终实体外部不会显示。

再建立径向直线：

起点：

(innerR*cos(gamma),
 innerR*sin(gamma))

终点：

(rb*cos(gamma),
 rb*sin(gamma))

然后连接到渐开线。

因此半个齿的轮廓固定是：

内部同心圆弧
↓
径向直线
↓
基圆渐开线
↓
齿顶圆弧

不要使用：

中心线点直接斜连基圆的V形方案

不要使用：

rootHalfLine + 极短rootConnect两段线方案

不要使用：

偏心齿根圆角方案


==================================================
八、齿顶圆弧要求
==================================================

齿顶圆弧必须是真正齿顶圆的一部分。

因此：

圆心必须固定：

(0,0)

半径必须等于：

ra

它必须与：

分度圆
基圆
齿根圆
中心孔

同心。

单侧齿顶圆弧：

起点：

渐开线齿顶：

(xTip, yTip)

终点：

(ra,0)

使用：

SketchManager.CreateArc

但不要写死一定用：

Direction = +1

或：

Direction = -1

请写一个通用函数，例如：

CreateShortCenteredArc

逻辑：

1. 先用Direction=+1创建
2. 读取GetLength
3. 如果长度 <= PI*radius，则保留
4. 如果长度 > PI*radius，说明生成了错误长圆弧
5. 删除它
6. 换Direction=-1重新创建
7. 最终再次检查长度必须 < 半圆长度

这个函数既用于：

内部同心圆弧

也用于：

齿顶同心圆弧


==================================================
九、左右齿面必须用镜向实体生成
==================================================

绝对不要分别计算左右两条渐开线。

必须：

只生成上侧半个齿
↓
建立水平齿中心构造线
↓
使用SolidWorks SketchMirror
↓
得到下侧严格镜像

水平中心线：

从：

(0,0)

到：

(1.25*ra,0)

普通被镜像实体使用：

Selection Mark = 1

镜像中心线：

Selection Mark = 2

被镜像实体包括：

1. 内部同心圆弧
2. 径向直线
3. 函数渐开线
4. 齿顶同心圆弧

调用：

SketchMirror

得到完整闭合单齿。

这样：

20齿
30齿
33齿
37齿
41齿

都不能因为左右渐开线分别求解而产生不对称。


==================================================
十、根切自动判断
==================================================

宏必须自动进行斜齿轮理论根切风险判断。

当量齿数：

zv = z / cos^3(β)

标准全齿高近似临界齿数：

zMin = 2 / sin^2(αn)

注意这里使用法向压力角 αn。

判断：

If zv < zMin Then

弹出：

“当前参数存在理论根切风险”

同时显示：

当量齿数 zv
临界齿数 zMin

让用户选择：

继续生成
或
取消

如果：

zv >= zMin

正常继续。

最终完成提示里也显示：

当量齿数
临界齿数
根切风险判断结果


==================================================
十一、斜齿轮螺旋参数
==================================================

旋向：

右旋：

handSign = +1

左旋：

handSign = -1

齿宽范围内总扭转角：

twistAngle
=
handSign
*
b*tan(β)/rp

导程：

Lead
=
PI*d/tan(β)

=
PI*(2*rp)/tan(β)

完成后弹窗显示：

导程L
齿宽总扭转角φ


==================================================
十二、斜齿轮实体建模流程
==================================================

最终设计树建议大致为：

斜齿轮分度圆草图（端面）
↓
斜齿轮基体草图
↓
斜齿轮齿根圆柱
↓
斜齿轮中心轴
↓
斜齿轮端面单齿草图
↓
斜齿轮轴向扫掠路径
↓
单个斜齿轮齿
↓
斜齿轮轮齿圆周阵列


==================================================
十三、齿根圆柱
==================================================

在前视基准面建立：

齿根圆：

半径 rf

中心孔：

半径 holeD/2

然后凸台拉伸：

长度 = b

要求：

中心孔直接包含在该基体草图中。


==================================================
十四、中心轴
==================================================

利用齿根圆柱外圆柱面建立：

Reference Axis

命名：

斜齿轮中心轴

以后扫掠和圆周阵列均围绕这根轴工作。


==================================================
十五、轴向3D扫掠路径
==================================================

创建3D草图。

建立轴向直线：

起点：

(0,0,0)

终点：

(0,0,b)

注意普通API单位用米：

b/1000

命名：

斜齿轮轴向扫掠路径


==================================================
十六、恒定扭转扫掠
==================================================

端面单齿草图作为：

Profile

Selection Mark = 1

轴向3D路径作为：

Path

Selection Mark = 4

使用SolidWorks Sweep API。

当前可以采用：

InsertProtrusionSwept3

TwistCtrlOption = 8

表示：

Constant Twist Along Path

TwistAngle：

使用前面计算的：

twistAngle

要求：

生成的单个斜齿必须和齿根圆柱合并为同一个实体。

特征名称：

单个斜齿轮齿


==================================================
十七、圆周阵列
==================================================

单个斜齿生成成功以后：

选择单齿特征
+
斜齿轮中心轴

做360°等距圆周阵列。

禁止自己计算并四舍五入：

360/z

必须直接使用：

总角度 = 2*PI
实例数 = z
EqualSpacing = True

实例数z包括原始单齿。

例如：

z=20
z=29
z=30
z=33
z=37
z=41

都必须由SolidWorks自动整圈等分。


==================================================
十八、SolidWorks单位问题
==================================================

非常重要。

SolidWorks普通几何API：

CreateLine
CreateArc
CreateCircleByRadius
拉伸长度
3D路径坐标

统一使用“米”。

所以：

mm输入必须除以1000。

例如：

20 mm → 0.02 m


但是：

CreateEquationSpline2

中的方程字符串，在当前MMGS文档下使用毫米数值。

例如：

rb = 36.717 mm

方程字符串必须使用：

36.717

不能使用：

0.036717

否则渐开线会缩小1000倍。


==================================================
十九、UserForm要求
==================================================

宏包含一个：

frmHelicalGear

UserForm。

设计器可以完全空白。

所有控件通过：

UserForm_Initialize()

使用：

Me.Controls.Add

动态生成。

参数窗口需要：

法向模数 mn
齿数 z
法向压力角 αn
螺旋角 β
齿宽 b
中心孔直径
旋向

默认：

mn = 2
z = 30
αn = 20
β = 20
b = 20
孔径 = 15
右旋

旋向使用ComboBox：

右旋
左旋

按钮：

生成斜齿轮
取消

界面标题：

标准斜齿圆柱齿轮生成器

界面尽量简单，适合教学，不要做复杂UI。


==================================================
二十、防呆要求
==================================================

必须检查：

mn > 0

z必须是整数

αn：

0 < αn < 45°

β：

0 < β < 45°

b > 0

holeD >= 0

中心孔不能侵入齿根区域

ra > rb

innerR必须：

> holeRadius
< rf
<或接近rb内部要求


==================================================
二十一、错误提示
==================================================

请设置一个全局字符串：

gStage

在每一步更新。

例如：

gStage = "创建端面分度圆"
gStage = "创建齿根圆柱"
gStage = "创建端面单齿草图"
gStage = "创建轴向3D扫掠路径"
gStage = "执行恒定扭转扫掠"
gStage = "执行圆周阵列"

如果失败，最终MsgBox必须显示：

宏运行错误

失败阶段：
xxxx

详细信息：
xxxx

不要只显示：

对象变量未设置

这种没有定位价值的错误。


==================================================
二十二、完成后的教学提示
==================================================

生成成功以后MsgBox显示：

【输入参数】

mn
z
αn
β
旋向
b
中心孔


【端面参数】

mt
αt


【基本尺寸】

分度圆直径 d
齿顶圆直径 da
齿根圆直径 df
基圆直径 db


【根切判断】

当量齿数 zv
临界齿数 zMin
是否有理论根切风险


【螺旋参数】

导程L
总扭转角φ


建模过程：

法向参数
→ 端面参数
→ 函数渐开线
→ 稳定径向齿根过渡
→ 恒定扭转扫掠
→ 圆周阵列


==================================================
二十三、明确禁止的方案
==================================================

不要：

1. 用大量小直线拟合渐开线。

2. 分别独立计算左右两条渐开线。

3. 根据rf>rb改变渐开线起点。

4. 用一根斜线直接从齿中心线连到基圆，形成明显V形假根切。

5. 使用rootHalfLine + 很短rootConnect两段线的方案，因为某些齿数下容易退化。

6. 使用偏心齿根圆角，因为不同齿数下CreateArc容易取成长弧。

7. 用局部三点圆弧做齿顶。

8. 让齿顶圆弧圆心偏离齿轮中心。

9. 写死齿顶弧一定使用Direction=+1或-1。

10. 分别重新计算下侧齿面。

11. 手工Round(360/z)后阵列。

12. 一次性在草图里画全部几十个齿。

13. 使用Toolbox直接插入齿轮。

14. 使用Python代替SolidWorks VBA。

15. 联网调用外部API才能生成模型。


==================================================
二十四、重点测试参数
==================================================

请至少考虑以下参数：

测试1：

mn=2
z=20
αn=20°
β=20°
b=20
hole=15
右旋

要求：

理论根切判断应显示：
无明显根切风险。

齿根不应出现明显V形假根切。


测试2：

mn=2
z=30
αn=20°
β=20°
b=20
hole=15
右旋


测试3：

mn=2
z=37
αn=20°
β=20°
b=20
hole=15
右旋

要求：

不能因为rf与rb关系变化而使用另一套算法。


测试4：

相同参数但：

左旋

要求：

与右旋相比，只改变扫掠扭转方向。


==================================================
二十五、最终代码输出要求
==================================================

请先检查全部几何逻辑、单位和API调用是否自洽。

然后一次性输出：

第一部分：
完整Module VBA代码

第二部分：
完整frmHelicalGear UserForm代码

不要只给修改建议。

不要只给某一个函数。

不要让我自己找旧代码中的替换位置。

所有代码尽量添加中文注释，适合SolidWorks教学。

避免大量VBA行继续符“_”导致：

Too many line continuations

优先保证：

稳定
易用
傻瓜式
教学可解释
不同齿数适应性