应用VBA程序绘制样条曲线的方法为:AddSpline(PointsArray, StartTangent, EndTangent),其中,PointsArray为样条曲线(渐开线)拟合点的3维坐标组成的列表(即数组,必须为3的倍数),StartTangent,EndTangent为样条曲线的起点和终点切向向量(必需为3元素列表,切向必需与曲线的走向一致)[8]。起点的切向竖直向上[7]181-183,可取(0, 1, 0);根据式(2)可知终点的切向为。
可根据精度要求将所绘渐开线的展角上限等分为J个区间(程序中取J=10),应用For…Next循环计算拟合点的坐标。首先按下式计算展角:
, (j=0, 1, 2, …, J) (3)
再用式(1)计算点K的坐标(xKj, yKj)。
图18 绘制渐开线的窗体
绘制渐开线及基圆的窗体如图18所示,程序如下:
Private Sub cmdOK_Click()
ThisDrawing.Application.Documents.Add
pi = 4 * Atn(1) ’ 定义常数π
Dim rb As Double ’ 定义基圆半径
Dim theta0 As Double ’ 定义渐开线展角
Dim InvPoint(0 To 32) As Double ’ 定义拟合点坐标
Dim SPtan(0 To 2) As Double ’ 定义起点切线方向
Dim EPtan(0 To 2) As Double ’ 定义终点切线方向
Dim InvObj As AcadSpline ’ 定义Spline对象
rb = txtRb.Text
theta0 = txtTheta0.Text * pi / 180 ’ 将角度转换为弧度
delta_theta = theta0 / 10
For j = 0 To 10
theta = j * delta_theta
InvPoint(j * 3) = rb * (Sin(theta) - theta * Cos(theta))
InvPoint(j * 3 + 1) = rb * (Cos(theta) + theta * Sin(theta))
InvPoint(j * 3 + 2) = 0
Next j
SPtan(0) = 0: SPtan(1) = 1: SPtan(2) = 0
EPtan(0) = 1: EPtan(1) = 1 / Tan(theta0): EPtan(2) = 0
’ 设置Spline对象
Set InvObj = ThisDrawing.ModelSpace.AddSpline(InvPoint, SPtan, EPtan)
’ 绘制基圆
Dim CirObj As AcadCircle ’ 定义Circle对象
Dim CenPoint(0 To 2) As Double ’ 定义圆心坐标
CenPoint(0) = 0: CenPoint(1) = 0: CenPoint(2) = 0
’ 设置Circle对象
Set CirObj = ThisDrawing.ModelSpace.AddCircle(CenPoint, rb)
ThisDrawing.SaveAs (“D:\Draw_Inv.dwg”)
End Sub
参考文献
[1] 宋宪一. 计算机辅助工程绘图[M]. 北京: 机械工业出版社, 2002.
[2] 姜勇. AutoCAD中文版机械制图基础培训教程[M]. 北京: 人民邮电出版社, 2005.
[3] 谢泽学, 吴京霞, 谢婧. AutoCAD2004简明教程[M]. 北京: 科学出版社, 2006.
[4] 刘力, 王冰. 机械制图[M]. 北京: 高等教育出版社, 2000.
[5] 刘小年, 刘振魁. 机械制图[M]. 北京: 高等教育出版社, 2000.
[6] 李凤华. AutoCAD 2002/2000 VBA开发指南[M]. 北京: 清华大学出版社, 2001.
[7] 孙桓, 傅则绍. 机械原理[M]. 第4版. 北京: 高等教育出版社, 1993.
[8] 车林仙, 何兵. 基于AutoCAD的摆线型转子泵实体参数化造型[J]. 现代制造工程, 2005(8): 94-96.