
Sub WaveLineDot()
' 定义一个名为WaveLineDot的子程序,用于生成正负Sin波浪点加连线
' 声明变量
Dim i As Integer ' 循环计数器
Dim jG As Double ' 用于设置点的间隔
Dim inX As Double ' 点的X坐标
Dim inY As Double ' 点的Y坐标
Dim inR As Double ' 圆的半径
Dim inSin As Double ' 当前点的Y坐标值,基于Sin函数
Dim infSin As Double ' 用于生成下一个点的Y坐标值,基于负Sin函数
Dim s1 As Shape ' 第一个创建的圆形对象
Dim s2 As Shape ' 第二个创建的圆形对象
Dim s1sR As New ShapeRange ' 存储第一个圆形对象的范围
Dim s2sR As New ShapeRange ' 存储第二个圆形对象的范围
Dim sL As Shape ' 创建的线段对象
Dim sLr As New ShapeRange ' 存储线段对象的范围
' 设置CorelDRAW文档的单位为毫米
CorelDRAW.ActiveDocument.Unit = cdrMillimeter
' 初始化变量
inX = 0 ' X坐标的初始值为0
inY = 0 ' Y坐标的初始值为0
jG = 10 ' 设置点之间的间隔为10
inR = 2 ' 设置圆的半径为2
' 使用循环创建一系列的点,从i=1到120,每次增加1
For i = 1 To 120 Step 1
' 根据i计算正弦值并转换为弧度
inSin = 100 * Sin(DegToRad(i * 5))
' 计算负的sin值
infSin = -inSin
' 为当前点设置Y坐标值并创建圆形对象
inY = inSin
Set s1 = ActiveLayer.CreateEllipse2(inX, inY, inR)
s1sR.Add s1 ' 将圆形对象添加到s1sR范围中
' 为下一个点设置Y坐标值并创建圆形对象
inY = infSin
Set s2 = ActiveLayer.CreateEllipse2(inX, inY, inR)
' 如果i * 5的倍数除以180的余数为0,则删除该圆形对象,否则添加到s2sR范围中
If i * 5 Mod 180 = 0 Then
s2.Delete
Else
s2sR.Add s2
' 在两个圆形对象之间创建线段对象并添加到sLr范围中
Set sL = ActiveLayer.CreateLineSegment(s1.CenterX, s1.CenterY, s1.CenterX, s2.CenterY)
sLr.Add sL
End If
' 为下一个点设置X坐标值
inX = inX + jG
Next i ' 结束循环
' 将s1sR、s2sR和sLr中的对象组合成一个组对象,方便管理或进一步操作
s1sR.Group ' 将s1sR中的对象组合成一个组对象,即上波浪
s2sR.Group ' 将s2sR中的对象组合成一个组对象,即下波浪
sLr.Group ' 将sLr中的对象组合成一个组对象,即连接竖线
End Sub ' 子程序结束
Private Function DegToRad(ByVal Degrees As Double) As Double
' 将角度转换为弧度
Dim Pi As Double
Pi = 3.14159265
DegToRad = Degrees * Pi / 180
End Function