Move assembly component

Hi,

I am trying to move component along X axis with macro. I've foundthis sample in API tutorial, but i cant manage to transform it tomake a translation from one point to another. Can someone pleasehelp me. Ohh and i need to keep all mates active.

' Problem:

' This code shows how to use the MathUtility object

' to directly create a transformation matrix (object)

' that represents rotation about a point and an axis,

' without having to know details of the OpenGL transformations.

'

' Preconditions:

' (1) Assembly is open and fully resolved.

' (2) Assembly component is selected.

'

' Postconditions: Selected component is rotated 90° aboutassembly X axis.

'

'------------------------------------------------------------------



Option Explicit



Const PI As Double = 3.14159

Const RadPerDeg As Double = PI / 180#

' DragOperator::TransformType

' Translation 0

' Transform is translation only

'

' Axial rotation 1

' Transform is rotation only

'

' General 2

' Transform can be translation or rotation or both

' DragOperator:ragMode

' Minimum Move 0

' Move smallest number of geometries

'

' Maximum Move 1

' Move geometries rigidly if possible

'

' Relaxation 2

' Solve geometries using relaxation

Sub main()



Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swAssy As SldWorks.AssemblyDoc

Dim swDragOp As SldWorks.DragOperator

Dim swSelMgr As SldWorks.SelectionMgr

Dim swComp As SldWorks.Component2

Dim swXform As SldWorks.MathTransform

Dim swMathUtil As SldWorks.MathUtility

Dim swOriginPt As SldWorks.MathPoint

Dim swX_Axis As SldWorks.MathVector

Dim nPts(2) As Double

Dim vData As Variant

Dim nNow As Single

Dim i As Long

Dim bRet As Boolean





Set swApp = CreateObject("SldWorks.Application")

Set swModel = swApp.ActiveDoc

Set swAssy = swModel

Set swDragOp = swAssy.GetDragOperator

Set swSelMgr = swModel.SelectionManager

Set swComp = swSelMgr.GetSelectedObjectsComponent2(1)

Set swMathUtil = swApp.GetMathUtility



nPts(0) = 0#

nPts(1) = 0#

nPts(2) = 0#

vData = nPts

Set swOriginPt = swMathUtil.CreatePoint(vData)



nPts(0) = 1#

nPts(1) = 0#

nPts(2) = 0#

vData = nPts

Set swX_Axis = swMathUtil.CreateVector(vData)

' This is an incremental rotation,

' so angle is always the same

Set swXform = swMathUtil.CreateTransformRotateAxis( _

swOriginPt, swX_Axis, 1# * RadPerDeg)





bRet = swDragOp.AddComponent(swComp, False)

Debug.Assert bRet



swDragOp.CollisionDetectionEnabled = False

swDragOp.DynamicClearanceEnabled = False



' Axial rotation

swDragOp.TransformType = 1



' Solve by relaxation

swDragOp.DragMode = 2



bRet = swDragOp.BeginDrag

Debug.Assert bRet

For i = 0 To 90

' Returns false if drag fails, for example, because of a collision

bRet = swDragOp.Drag(swXform)



' Wait for 0.1 secs

nNow = Timer

While Timer < nNow + 0.1

' Process event loop

DoEvents

Wend

Next i

bRet = swDragOp.EndDrag

Debug.Assert bRet

End Sub
SolidworksApi macros