你当前的位置>>主页>>AutoCAD知识>>专题教程
 

Autocad VBA初级教程 (第十一课:动画基础)

    说实话,用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


本课结束,请做思考题:在一条直线上画两个同样大小的圆,然后让这两个圆沿直线相向而行,到互换位置后停下来,尺寸自定.

本教程共13页    第  [1]  [2] [3] [4] [5] [6] [7] [8] [9] [10]  11   [12]  [13]  页
民众工作室.制作      版权所有