Solidworks二次开发—06—在装配体中添加配合

Solidworks二次开发—06—在装配体中添加配合

 

 

折腾了三天终于完成了计划中的功能模块。在一个装配体中自动判断插入合适的零件,并添加配合。

在前面几篇文章中我已经基本上说明了如何得到零部件的数据信息、如何插入零部件、如何得到已经选择的特征等。

下面只介绍怎样进行配合

在做配合时,需要经常选择到零件的面、线等,这是一个问题,还有就是介绍一下addmate2函数的使用:

一般进行配合我们按照下面的次序来进行:

 

 

1-ModelDoc.ClearSelection2  ‘取消所有选择

2-选择需要配合的实体(entity)

3-使用AddMate2函数进行配合

4-再次使用         ModelDoc.ClearSelection2  ‘取消所有选择

 

 

主要的问题在于如何选择合适的面:

由于面的命名没有什么规律,很多时候是程序自动来命名的,这样,不方便使用selectbyID来选择,我也不想使用坐标值来选择一个面,那样做更加糟糕。

在得到一个组件(component)或者一个特征(feature)时,我们有getfaces、getfirstface、getnextface等方法,我们可以使用这些方法遍历一个组件或特征等的各个面,来达到选择面的目的,看下面程序:

Private Function selectface(dcom As SldWorks.Component2, tp As Integer) As Boolean

 

 

 Set swdowelbody = dcom.GetBody()

  

   If swdowelbody Is Nothing Then   '错误处理

   MsgBox "选择零件失败"

   selectface = False

   Exit Function

   End If

  

   Set swDCface = swdowelbody.GetFirstFace ‘得到第一个面

 

 

   Do While Not swDCface Is Nothing              ‘遍历各个面      

    Set swDsurface = swDCface.GetSurface  ‘得到表面对象

    If swDsurface.IsCylinder Then                     ‘如果是圆柱面  

            If tp = 0 Then   'means cylinder

                    Set swDEnt = swDCface

                    swDEnt.Select4 True, selDdata

                    selectface = True

                    Exit Function

            End If

   Else                        ‘如果是其它,当然实际中我们可能需要使用select来定义好多分支

            If tp = 1 Then   'means plane

                Set swDEnt = swDCface

                swDEnt.Select4 True, selDdata

                selectface = True

                Exit Function

            End If

   End If

   Set swDCface = swDCface.GetNextFace

  

Loop

      

End Function

 

 

此函数接受两个参数,第一个是一个component对象,第二个用来标识选择类型:0表示圆柱面,1表示平面。此函数运行完成后将选择指定组件的指定类型的一个面。需要注意的是我们需要在判断面类型时候需要转换到surface对象。而且选择需要定义一个entity对象,用来select4,达到选择的目的。可能这个过程有些复杂,大家按照这个顺序多测试几次,就明白了它的工作原理。

上面的函数写的并不好,是我从我的工程中截取的一段。

 

 

下面介绍一下addmate2函数:

 

 

Syntax (OLE Automation) OLE语法:

pMateObjOut = AssemblyDoc.AddMate2 ( mateTypeFromEnum, alignFromEnum, flip, distance, distAbsUpperLimit, distAbsLowerLimit, gearRatioNumerator, gearRatioDenominator, angle, angleAbsUpperLimit, angleAbsLowerLimit, errorStatus )

参数:

Input:

(long) mateTypeFromEnum

Type of mate as defined in swMateType_e

配合类型

Input:

(long) alignFromEnum

Type of alignment as defined in swMateAlign_e

对齐选项

Input:

(VARIANT_BOOL) flip

TRUE to flip the component, FALSE otherwise

是否翻转

Input:

(double) distance

Distance value to use with distance or limit mates

距离

Input:

(double) distAbsUpperLimit

Absolute maximum distance value (see Remarks)

距离限制max

Input:

(double) distAbsLowerLimit

Absolute minimum distance value  (see Remarks)

距离限制min

Input:

(double) gearRatioNumerator

Gear ratio numerator value for gear mates

齿轮配合分子值

Input:

(double) gearRatioDenominator

Gear ratio denominator value for gear mates

齿轮配合分母值

Input:

(double) angle

Angle value to use with angle mates

角度

Input:

(double) angleAbsUpperLimit

Absolute maximum angle value

角度限制max

Input:

(double) angleAbsLowerLimit

Absolute minimum angle value

角度限制min

Output:

(long) errorStatus

Success or error as defined by swAddMateError_e

错误报告

Return:

(LPMATE2) pMateObjOut

Pointer to the Mate2 object

返回指向配合的指针

 

 

Remarks

To specify a distance mate without limits, set the distAbsUpperLimit and distAbsLowerLimit arguments equal to the distance argument's value.

 指定一个没有限制的距离,设定距离限制的最大、最小值和距离值相等

If mateTypeFromEnum is swMateDISTANCE or swMateANGLE when the mate is applied to the closest position that meets the mate condition specified by distance or angle, then setting flip to TRUE moves the assembly to the other possible mate position.

 如果是距离或角度配合,配合将从符合条件的最近端进行配合,我们可以设定flip为true,改变配合至另一个合适的位置

Use:使用配合的步骤

ModelDoc2::ClearSelection2(VARIANT_TRUE) before selecting entities to mate.

ModelDocExtension::SelectByID2 with Mark = 1 to select entities to mate.

ModelDoc2::ClearSelection2(VARIANT_TRUE) after the mate is created.

If mateTypeFromEnum is swMateCAMFOLLOWER, then use a selection mark of 8 for the cam-follower face.

如果配合类型为 凸轮,在表面标示8.  注:这个我也不太明白哈哈

If nothing is preselected, then errorStatus is swAddMateError_IncorrectSeletions and pMateObjOut is NULL/Nothing.

如果实现没有限定实体来配合,将会抱错swAddMateError_IncorrectSeletions,函数返回NULL或者Nothing

 

 

上面就是API帮助所说的话,下面给出一段示例程序,假设之前我们已经选择了两个半径一样的圆柱面,那么我们来定义一个同心配合:

 

 

Set swmatefeat = swassy.AddMate2(1, 0, False, 0, 0, 0, 0, 0, 0, 0, 0, nErrors)

其中的       Dim swassy As SldWorks.AssemblyDoc

Dim swmatefeat As Object

注:在编程中有时候不能实现确定一个对象的类型,我们可以声明一个Object对象,让VB自己去匹配。但这样做是影响了效率。

要完成一个距离或者角度要麻烦一些,就像上面的remark中说明的:

Set swmatefeat = swassy.AddMate2(5, 1, True, 0.001, 0.001, 0.001, 0, 0, 0, 0, 0, nErrors)

在这里我们需要将min和max都设置成与距离值相等,要不然配合会认为我们设定了高级配合中的限制条件,会报错。并且第三个参数和第二个参数需要按实际情况来确定。

最后我们列出AddMate2的类型:

 

 

swMateType_e

‘Specifies values for assembly-mate information.

swMateCOINCIDENT                 0       重合

swMateCONCENTRIC               1       同心

swMatePERPENDICULAR        2       垂直

swMatePARALLEL                      3       平行

swMateTANGENT                        4       相切

swMateDISTANCE                      5       距离

swMateANGLE                             6       角度

swMateUNKNOWN                     7       未知

swMateSYMMETRIC                  8       对称

swMateCAMFOLLOWER          9       凸轮

swMateGEAR                              10     齿轮

时间: 2024-08-03 04:44:46

Solidworks二次开发—06—在装配体中添加配合的相关文章

Solidworks二次开发-05-装配体中插入零部件

插入 Solidworks二次开发--装配体中插入零部件     在往装配体中插入零部件时,我们使用addcomponent 函数.如果需要选定零部件的配置,则需要使用addcomponent4. 先学习下语法:   addcomponent4: retval = AssemblyDoc.AddComponent4 ( compName, configName, x, y, z)   Input:         (BSTR) compName                    Path n

solidworks二次开发-01-录制一个宏

solidworks二次开发-01-录制一个宏 第一步: 我们需要自己录制一个宏,然后看看程序产生了什么代码.当初学习excel时候就是这么干的.只是,solidworks要复杂一些,直接录制的宏不能使用,需要做一些调整.在没有经验的时候我们最好按照下面的建议来做.  Edit or Debug SolidWorks Macro   Edit or debug SolidWorks macros using Microsoft VBA.   使用Microsoft VBA编辑或调试宏 To ed

solidworks二次开发-02-用来访问特征的两个API

访问|来访 solidworks二次开发-02-用来访问特征的两个API 来学习两个api: SelectByID2和GetSelectedObject5.这两个函数,第一个通过给出对象的name选择对象.第二个通过启用程序前已经选择的索引得到对象. 看下面程序: Option Explicit Dim swApp As SldWorks.SldWorks Dim Model As ModelDoc2 Dim feature As feature Dim boolstatus As Varian

solidworks二次开发-03-访问特征数据

访问|数据 solidworks二次开发-03-访问特征数据 'coder arden 'filename : getchoosed.swp'date  :2005-03-22'used to get the simple hole infomation dep & dia'finished lucky !!'------------------------------------------------------------ Option ExplicitDim swApp As SldWo

solidworks二次开发-04-修改数据

数据 solidworks二次开发-04-修改数据 上次已经可以访问特征的各参数了,今天我们来修改它: 要修改前面的步骤不能少,当我们已经可以读取一些特征时,我们就可以给他设定一些值.当然有时需要调用特定的参数.solidworks是ole和com的,所以要习惯这样. 在修改完特征后需要调用函数modifydefinition()来实现变化. 我们给一个例子,这个例子比前面的都要全面,它有很好的容错引导机制,可以直接拿来成为一个稳定的宏程序. This example doubles the l

Solidworks二次开发—07—控制草图对象

对象|控制 Solidworks二次开发-07-控制草图对象 Get All Elements of Sketch Example (VB) Solidwork中对草图的控制,下面的例子很详细.特征下的草图在solidwork中其实是特征的子特征,我们可以对特征进行GetFirstSubFeature.及GetNextSubFeature得到. 如果有需要大家可以从中找到对直线.弧线.圆等对象的操作.代码是solidworks的示例文件,里面充斥了debug.print,只是向用户显示程序执行的

sw二次开发-Solidworks二次开发,控制电机旋转

问题描述 Solidworks二次开发,控制电机旋转 在solidworks中的simulation中可以完成电机对滚球丝杠的控制, 现在我想知道能不能通过solidworks的二次开发,通过VB编写程序完成精确控制电机的转速,角位移等. 可通过以下两步来实现,但现在在第二步卡住了: 1.VB发送数据给Solidworks 2.通过SOlidworks上的API来控制电机起停,转过多少度,以及转速... 尤其是第二个步求相关资料,不胜感激. 谢谢大家了,学生一枚,以上功能是论文中的一部分,我尝试

solidworks二次开发--11--开始总体了解

经过了上面的几个练兵之后,对solidworks的对象模型应该有了一个大体的了解,程序的运行机制也清晰了.慢慢的会越来越容易驾驭.下面的几个图片链接是solidworks的对象模型.作为参考,好在需要一种功能或者想要控制一个功能时不知道api藏在那里: 总体结构:site=mblogger 零件结构:site=mblogger 装配体结构:site=mblogger 工程图结构:site=mblogger 特征结构:site=mblogger 注释结构:site=mblogger 工程图注释结构

solidworks二次开发--10--从example中寻找

solidworks的api帮助还是很全面的,里面有好多见简单而有效的程序,成天在api帮助里泡着,现在做程序的速度是越来越快.好像当年成天在excel中录制宏看代码的感觉.下面的程序是api帮助里的,它用来显示装配体的所有零部件.我给我的同事们用,他们觉得不错 :).程序使用了一个简单的递归方法遍历了装配体.Make All Assembly Components Visible Example (VB)This example shows how to make all assembly c