VB实现SolidWorks零件位姿矩阵改变
要求
要实现solidworks中指定零件在三维空间的运动,即6个自由度方向的运动。要能任意转动,平动。可以达到动态演示的目的,也可以后续实现智能装配。
方案
暂时方案:在装配环境下,不断更新个别零件的位姿矩阵,更新模型,以达到运动目的。
步骤一:录制宏,分析
装配环境下,录制代码如下:
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("零部件1-1@装配体2", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Dim TransformData() As Double
ReDim TransformData(0 To 15) As Double
TransformData(0) = 1
TransformData(1) = 0
TransformData(2) = 0
TransformData(3) = 0
TransformData(4) = 1
TransformData(5) = 0
TransformData(6) = 0
TransformData(7) = 0
TransformData(8) = 1
TransformData(9) = 0
TransformData(10) = 0
TransformData(11) = 0
TransformData(12) = 1
TransformData(13) = 0
TransformData(14) = 0
TransformData(15) = 0
Dim TransformDataVariant As Variant
TransformDataVariant = TransformData
Dim swMathUtil As Object
Set swMathUtil = swApp.GetMathUtility()
Dim swTransform As Object
Set swTransform = swMathUtil.CreateTransform((TransformDataVariant))
Dim swComp As Object
Set swComp = Part.SelectionManager.GetSelectedObjectsComponent4(1, -1)
boolstatus = swComp.SetTransformAndSolve2(swTransform)
boolstatus = Part.ForceRebuild3(False)
Part.ClearSelection2 True
End Sub
分析:
可知,TransformData即是零件的位姿信息,此刻位姿信息是零件的原始信息,无转动,无平移时的信息。而我们需要通过录制有规律动作的宏来得出矩阵信息。
步骤二:录制规律动作,找出转动规律。
Sin(10°)=0.98480,Cos(10°)=0.173
Sin(10°)²=3.01 Cos(10°)²=0.969 Sin(10°)Cos(10°)=0.171
单一方向
x方向转动10°
矩阵:
1 | 0 | 0 |
---|---|---|
0 | Cos(a) | Sin(a) |
0 | -Sin(a) | Cos(a) |
y方向转动10°
矩阵:
Cos(b) | 0 | -Sin(b) |
---|---|---|
0 | 1 | 0 |
Sin(b) | 0 | Cos(b) |
z方向转动10°
矩阵:
Cos( c) | Sin( c) | 0 |
---|---|---|
-Sin( c) | Cos( c) | 0 |
0 | 0 | 1 |
两个方向转动
x,y两个方向时
矩阵:
Cos(b) | Sin(a) Sin(b) | -Sin(b) Cos(a) |
---|---|---|
0 | Cos(a) | Sin(a) |
Sin(b) | -Sin(a) Cos(b) | Cos(a)Cos(b) |
矩阵乘法 -->:[y矩阵]*[x矩阵]
x,z两个方向时
矩阵:
Cos( c) | Sin( c) Cos(a) | Sin(a)Sin( c) |
---|---|---|
-Sin( c) | Cos(a)Cos( c) | Sin(a) Cos( c) |
0 | 0 | 1 |
矩阵乘法 -->:[z矩阵]*[x矩阵]
y,z两个方向时
矩阵:
Cos( c) Cos(b) | Sin( c) | -Sin(b)Cos( c) |
---|---|---|
-Sin( c) Cos(b) | Cos( c) | Sin(b) Sin( c) |
Sin(b) | 0 | Cos(b) |
矩阵乘法 -->:[z矩阵]*[y矩阵]
三个方向
矩阵:
Cos(b)Cos( c) | Sin(a)Sin(b)Cos( c)+Cos(a)Sin( c) | -Cos(a)Sin(b)Cos( c)+Sin(a)Sin( c) |
---|---|---|
-Cos(b)Sin( c) | -Sin(a)Sin(b)Sin( c)+Cos(a)Cos( c) | Cos(a)Sin(b) Sin( c)+Sin(a)Cos( c) |
Sin(b) | -Sin(a)Cos(b) | Cos(a)Cos(b) |
步骤三:分析移动
零件2未移动时:
元素:9,10,11
零件2拖动后:
元素:9,10,11
矩阵中 9,10,11三个元素分别对应x,y,z 三个方向的位移。
总结
位姿矩阵中 0-8代表三个轴向旋转信息,9-11,代表三个轴向平动信息。12,代表缩放信息。
solidworks界面嵌入vb后成果为:
可实现零件任意连续运动。可实现自动装配。