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
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:

' 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