Run rotation animation for the component using SOLIDWORKS API

Edit ArticleEdit Article

Component rotation animation around Y axis
Component rotation animation around Y axis

This macro demonstrates how to run a smooth animation of components rotation around Y axis of the component using the presentation transforms via IComponent2::PresentationTransform SOLIDWORKS API method.

This allows to only move the components for visual purposes without changing the geometry. Component will be moved regardless if it is fully defined in space (by mates or fix constraint). And the mates are still preserved.

  • Select any component in the assembly and run the macro
  • Component is rotated around its Y axis
  • To stop the animation clear the selection (deselect all objects)
  • To modify the speed of the rotation change the optional speed parameter of RunRotationAnimation method
If Not swComp Is Nothing Then
    RunRotationAnimation swModel, swComp, 2 'speed x2
    MsgBox "Please select component"
End If


In order to enable presentation mode it is required to set the IAssemblyDoc::EnablePresentation proeprty to True.

It is required to set this property to False after the animation is finished otherwise all SOLIDWORKS menues will be locked:

Locked menu in the assembly presentation mode
Locked menu in the assembly presentation mode

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
            MsgBox "Please select component"
        End If
        MsgBox "Please open assembly"
    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
    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


All articles and code at CodeStack are now open-source and hosted on GitHub. If you want to contribute by modifying existing articles and code snippets, submitting new ones, reporting errors and bugs etc. please follow this blog post for more information. We appreciate any contribution.

Product of Xarial Product of Xarial