跳到主要内容

使用SOLIDWORKS API运行组件的旋转动画

组件围绕Y轴的旋转动画

该宏演示了如何使用演示变换通过SOLIDWORKS API中的IComponent2::PresentationTransform方法来运行组件围绕Y轴的平滑旋转动画。

这样可以仅为了视觉效果而移动组件,而不改变几何形状。组件将被移动,无论它在空间中是否完全定义(通过约束或固定约束)。并且约束仍然保持不变。

  • 选择装配中的任何组件并运行宏
  • 组件围绕其Y轴旋转
  • 要停止动画,请清除选择(取消选择所有对象)
  • 要修改旋转速度,请更改RunRotationAnimation方法的可选speed参数
If Not swComp Is Nothing Then
RunRotationAnimation swModel, swComp, 2 '速度x2
Else
MsgBox "请选择组件"
End If

注意

为了启用演示模式,需要将IAssemblyDoc::EnablePresentation属性设置为True。

在动画完成后,需要将此属性设置为False,否则所有SOLIDWORKS菜单都将被锁定:

装配演示模式中的锁定菜单{ width=300 }

Const PI As Double = 3.14159265359

Dim swApp As SldWorks.SldWorks

Sub main()

Set swApp = Application.SldWorks

Dim swModel As SldWorks.ModelDoc2

Set swModel = swApp.ActiveDoc

If Not swModel Is Nothing Then

Dim swSelMgr As SldWorks.SelectionMgr

Set swSelMgr = swModel.SelectionManager

Dim swComp As SldWorks.Component2
Set swComp = swSelMgr.GetSelectedObjectsComponent4(1, -1)

If Not swComp Is Nothing Then
RunRotationAnimation swModel, swComp
Else
MsgBox "请选择组件"
End If

Else
MsgBox "请打开装配"
End If

End Sub

Sub RunRotationAnimation(assy As SldWorks.AssemblyDoc, comp As SldWorks.Component2, Optional speed As Double = 1)

Dim swSelMgr As SldWorks.SelectionMgr

Set swSelMgr = assy.SelectionManager

Dim rotStep As Double
rotStep = PI * 2 / 360 * speed

Dim curAng As Double

Dim swModelView As SldWorks.ModelView
Set swModelView = assy.ActiveView

assy.EnablePresentation = True

While swSelMgr.GetSelectedObjectCount2(-1) <> 0
For curAng = 0 To PI * 2 Step rotStep
Dim animStep As MathTransform
Set animStep = GetTransform(comp, curAng)
comp.PresentationTransform = animStep
swModelView.GraphicsRedraw Nothing
DoEvents
Next
Wend

assy.EnablePresentation = False

End Sub

Function GetTransform(comp As SldWorks.Component2, angle As Double) As MathTransform

Dim swMathUtils As SldWorks.MathUtility

Set swMathUtils = swApp.GetMathUtility

Dim swOrigPt As SldWorks.MathPoint
Dim dPt(2) As Double
dPt(0) = 0: dPt(1) = 0: dPt(2) = 0

Set swOrigPt = swMathUtils.CreatePoint(dPt)

Set swOrigPt = swOrigPt.MultiplyTransform(comp.Transform2)

Dim swAxisVec As SldWorks.MathVector
Dim dVec(2) As Double
dVec(0) = 0: dVec(1) = 1: dVec(2) = 0

Set swAxisVec = swMathUtils.CreateVector(dVec)

Set swAxisVec = swAxisVec.MultiplyTransform(comp.Transform2)

Set GetTransform = swMathUtils.CreateTransformRotateAxis(swOrigPt, swAxisVec, angle)

End Function