说实话,用ACAD玩动画绝对比不上专业的三维动画软件,不过这年头自称精通CAD的工程师太多了,而学会用ACAD玩动画一定能提高您的竞争实力, 想象一下您用ACAD动画向老板演示零件的装配方法……
下面的例题是一个最简单的动画,由用户选择一个要移动的对象,然后定位起点和终点,程序会慢慢地把对象移动。
移动方法:object.move 起点坐标,端点坐标
Sub testmove()
Dim p0 As Variant 起点坐标
Dim p1 As Variant 终点坐标
Dim pc As Variant 移动时起点坐标
Dim pe As Variant 移动时终点坐标
Dim movx As Variant x轴增量
Dim movy As Variant y轴增量
Dim getobj As Object 移动对象
Dim movtimes As Integer 移动次数
ThisDrawing.Utility.GetEntity getobj, po, "请选择移动对象"
p0 = ThisDrawing.Utility.GetPoint(, "起点:")
p1 = ThisDrawing.Utility.GetPoint(p0, "终点:")
pe = p0
pc = p0
motimes = 3000
movx = (p1(0) - p0(0)) / motimes
movy = (p1(1) - p0(1)) / motimes
For i = 1 To motimes
pe(0) = pc(0) + movx
pe(1) = pc(1) + movy
getobj.Move pc, pe 移动一段
getobj.Update 更新对象
Next
End Sub
先让用户选择移动的对象、起点、终点,motimes动画是设置动画帧数,这个例程是让对象移动3000小段,movx和movy是每一段移动的距离,然后进行一个3000次的循环,每一次循环移动一小段距离。
看第二个例题:做一个小轮子在一条山坡上运动的动画,山坡为正弦曲线。请注意,应该用偏移法获得轮圆心的轨迹才是正确的。编程思路:先画好圆和横轴,然后画山坡,偏移获得移动轨迹线,放到隐藏图层中,然后根据轨迹线移动圆和轴,在移动之前先旋转轴线。
旋转方法:object. rotate 基点,角度
偏移方法: object.offset(偏移量)
Sub moveball()
Dim ccball As Variant 圆
Dim ccline As Variant 圆轴
Dim cclinep1(0 To 2) As Double 圆轴端点1
Dim cclinep2(0 To 2) As Double 圆轴端点2
Dim cc(0 To 2) As Double 圆心
Dim hill As Variant 山坡线
Dim moveline As Variant 移动轨迹线
Dim lay1 As AcadLayer 放轨迹线的隐藏图层
Dim vpoints As Variant 轨迹点
Dim movep(0 To 2) As Double 移动目标点坐标
cclinep1(0) = -0.1: cclinep2(0) = 0.1 定义圆轴坐标
Set ccline = ThisDrawing.ModelSpace.AddLine(cclinep1, cclinep2) 画直线
Set ccball = ThisDrawing.ModelSpace.AddCircle(cc, 0.1) 画半径为0.1的圆
Dim p(0 To 719) As Double 申明正弦线顶点坐标
For i = 0 To 718 Step 2 开始画多段线
p(i) = i * 3.1415926535897 / 360 横坐标
p(i + 1) = Sin(p(i)) 纵坐标
Next i
Set hill = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) 画正弦线即山坡曲线
hill.Update 显示山坡线
moveline = hill.Offset(-0.1) 球心运动轨迹线
vpoints = moveline(0).Coordinates 获得规迹点
Set lay1 = ThisDrawing.Layers.Add("hidelay") 创建名为"hidelay"的图层
lay1.LayerOn = False 关闭图层
moveline(0).Layer = "hidelay" 将轨迹线放到关闭的图层中
ZoomExtents 显示整个图形
For i = 0 To UBound(vpoints) - 1 Step 2
movep(0) = vpoints(i) 计算移动的轨迹
movep(1) = vpoints(i + 1)
ccline.Rotate cc, 0.05 旋转直线
ccline.Move cc, movep 移动直线
ccball.Move cc, movep 移动圆
cc(0) = movep(0) 把当前位置作为下次移动的起点
cc(1) = movep(1)
For j = 1 To 50000 这次循环的目的是让小球移动得慢一点,循环量应根据自已的电脑速度设置
j = j * 1
Next j
ccline.Update 更新
Next i
End Sub
本课结束,请做思考题:在一条直线上画两个同样大小的圆,然后让这两个圆沿直线相向而行,到互换位置后停下来,尺寸自定