solidworks vba二次开发配合问题
二次开发装配的步骤
solidworks可以使用宏录制配合过程从而得到配合的vba代码,步骤如下:
1.选择两个配合的面(点、线等)
2. 建立配合
例如将两个圆柱面同心(图中高亮):
配合后
我们看一下宏录制的代码:
Sub main()
//激活solidworks接口
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
//选择两个圆柱面,注意此处是根据坐标选择,不利于后续参数化建模,后面改进
boolstatus = Part.Extension.SelectByRay(-1.69885129389868E-04, -1.55922908504635E-04, 4.19939127477846E-02, -1.71257863820577E-02, 0.810121487380594, -0.586011845550114, 2.94872532560055E-04, 2, True, 0, 0)
boolstatus = Part.Extension.SelectByRay(6.57294917582796E-03, 4.67071603702607E-03, 0.051885298550701, -1.71257863820577E-02, 0.810121487380594, -0.586011845550114, 2.94872532560055E-04, 2, True, 0, 0)
//这一部分是激活视图可以删去
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
//创建配合
' Create ConcentricMateFeatureData
Dim MateData As ConcentricMateFeatureData
Set MateData = Part.CreateMateData(1)
' Set the Entities To Mate
Dim EntitiesToMate(1) As Object
Set EntitiesToMate(0) = Part.SelectionManager.GetSelectedObject6(1, -1)
Set EntitiesToMate(1) = Part.SelectionManager.GetSelectedObject6(2, -1)
Dim EntitiesToMateVar As Variant
EntitiesToMateVar = EntitiesToMate
MateData.EntitiesToMate = (EntitiesToMateVar)
' Set the Mate Alignment
MateData.MateAlignment = 0
' Set the Lock Rotation
MateData.LockRotation = False
' Create the mate
Dim MateFeature As Feature
Set MateFeature = Part.CreateMate(MateData)
Part.ClearSelection2 True
Part.EditRebuild3
End Sub
上述代码中最重要的就是选择配合面+配合生成(具体参数见solidworks api help)
代码中的选择配合面是通过点选的坐标选择的,模型稍微变动就不能正常配合,所以我们在配合之前一定要给配合物体加足够多的特征以便将点选转化为特征间的配合(比如将两圆柱面同心可以转化为圆柱面中心轴的配合,这就需要提前添加参考基准轴)
我们修改一下:
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
//此处选择便用了SelectByID2,并没有用到坐标信息
boolstatus = Part.Extension.SelectByID2("基准轴1@l16-1@装配体1", "AXIS", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基准轴1@l36-1@装配体1", "AXIS", 0, 0, 0, True, 0, Nothing, 0)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("基准轴1@l16-1@装配体1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("基准轴1@l36-1@装配体1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
' Create CoincidentMateFeatureData
Dim MateData As CoincidentMateFeatureData
Set MateData = Part.CreateMateData(0)
' Set the Entities To Mate
Dim EntitiesToMate(1) As Object
Set EntitiesToMate(0) = Part.SelectionManager.GetSelectedObject6(1, -1)
Set EntitiesToMate(1) = Part.SelectionManager.GetSelectedObject6(2, -1)
Dim EntitiesToMateVar As Variant
EntitiesToMateVar = EntitiesToMate
MateData.EntitiesToMate = (EntitiesToMateVar)
' Set the Mate Alignment
MateData.MateAlignment = 0
' Create the mate
Dim MateFeature As Feature
Set MateFeature = Part.CreateMate(MateData)
Part.ClearSelection2 True
Part.EditRebuild3
End Sub
面的重合也是一样,必须提前在面上加参考几何体,利用参考几何体之间的配合完成目标物体的配合。
这只是我找到的一种方法,如果有其他方法欢迎交流!