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

插入

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

 

在往装配体中插入零部件时,我们使用addcomponent 函数。如果需要选定零部件的配置,则需要使用addcomponent4。

先学习下语法:

 

addcomponent4:

retval = AssemblyDoc.AddComponent4 ( compName, configName, x, y, z)

 

Input:         (BSTR) compName                    Path name of a loaded part or assembly to add as a component

Input:         (BSTR) configName                   Name of the configuration from which to load the component

Input:        (double) x                                      X coordinate of the component center

Input:         (double) y                                      Y coordinate of the component center

Input:        (double) z                                      Z coordinate of the component center

Output:     (LPCOMPONENT2) retval          Pointer to the Component2 object

 

需要注意的是:参数1为文件的全名(包括路径);参数2为文件的配置名称;当函数执行成功购返回一个指向该零件的指针。

于是我们可以如下写一个小程序,用来给装配体中插零件:

‘filename:insertPart.swp

‘write by
arden
2005-4-4

‘this function add a part called “零件1.SLDPRT” in CurrentWorkingDirectory

‘precondition is there has a part document called  “零件1.SLDPRT” in CurrentWorkingDirectory

‘and it has a configuration called “配置1”

 

Dim swApp As SldWorks.SldWorks

Dim Model As ModelDoc2

Dim pth As String

Dim strpath As String

 

Sub insertPart()

Set swApp = Application.SldWorks

strpath = swApp.GetCurrentWorkingDirectory  ‘当前工作路径

Set Model = swApp.ActiveDoc

pth = strpath & "零件1.SLDPRT"             ‘得到文件的FULLPATH全名

Model.AddComponent4 pth, "配置1", 0, 0, 0   ‘添加零部件

End Sub

 

然而,这个程序比不是想象中那么好用。为什么呢??回头看addcomponent4的remark,上面这样写:

The specified file must be loaded in memory. A file is loaded into memory when you load the file in your

SolidWorks session (SldWorks::OpenDoc6) or open an assembly that already contains the file.

就是说你想指定的插入的文件必须在调用函数之前已经在内存中加载了。

不习惯,你就不能直接打开多简单,没办法,我还没有找到好的方法,只能按人家的来:

看看下面的函数Opendoc6,它打开一个文档:

 

Opendoc6:

retval = SldWorks.OpenDoc6 ( filename, type, options, configuration, &Errors, &Warnings )

Input:        (BSTR) Filename                       Document name or full path if not in current directory, including extension

Input:        (long) Type                                    Document type as defined in swDocumentTypes_e

Input:        (long) Options                              Mode in which to open the document as defined in swOpenDocOptions_e

Input:        (BSTR) Configuration                 Model configuration in which to open this document:

Applies to parts and assemblies, not drawings

If this argument is empty or the specified configuration is not present in the model,

the model is opened in the last-used configuration.

Output:     (long) Errors                                 Load errors as defined in swFileLoadError_e

Output:     (long) Warnings                           Warnings or extra information generated during the open operation as defined in swFileLoadWarning_e

Return:    (LPDISPATCH) retval                  Pointer to a Dispatch object, the newly loaded ModelDoc2, or NULL if failed to open

 

这个函数参数1就是文档的全名,参数2是要插入的类型描述,其中0123分别表示:

0       swDocNONE:不是sw文件

1       swDocPART:零件

2       swDocASSEMBLY:装配体

3       swDocDRAWING:工程图

如果想使用swDocNONE,需要定义:

Public Enum swDocumentTypes_e

}-->    }-->swDocNONE = 0

}-->    }-->swDocPART= 1

}-->    }-->swDocASSEMBLY = 2

    swDocDRAWING=3

End Enum

参数3是打开文档的模式,一般我们就选择swOpenDocOptions_Silent  用0 表示,当然还有只读、只看等选项

参数4是打开选项,一般置空

后面是两个OutPut,用来显示错误打开时的提示

函数返回一个指向打开文件的指针。

 

按照上面的要求我们在向装配体中插入一个零部件时,需要这样步骤:

1、得到装配体

2、使用opendoc6打开需要插入的零件

3、使用addcomponent4插入零件到装配体

我们上面的程序需要这样来修改一下,添加了一个打开文档的函数:

 

' ******************************************************************************

' insertpart 03/21/05 by
arden

'插入零件1

'前提条件:在装配体所在文件夹中有零件“零件1”存在,并且零件1有配置“配置1”

' ******************************************************************************

Dim swApp As SldWorks.SldWorks

Dim Model As ModelDoc2

Dim YSBmodel As ModelDoc2

Dim pth As String

Dim strpath As String

Dim nErrors As Long

Dim nWarnings As Long

 

 

Sub insertpart()

Set swApp = Application.SldWorks

strpath = swApp.GetCurrentWorkingDirectory

Set Model = swApp.ActiveDoc

pth = strpath & "零件1.SLDPRT"

openYSB (pth)  ‘在添加零部件之前,先打开它

Model.AddComponent4 pth, "配置1", 0, 0, 0

End Sub

 

'这个函数打开零件1

Sub openpart(ByVal pth As String)

Dim path As String

Dim newswapp As SldWorks.SldWorks

Set newswapp = Application.SldWorks

 

path = pth

Set YSBmodel = newswapp.OpenDoc6(path, 1, swOpenDocOPtions_Silent, "", nErrors, nWarnings)

YSBmodel.Visible = False  ‘我不想看到零件1

End Sub

 

这样的做法我感觉比较笨~为了赶工程进度我没有再去寻找好的方法,如果您知道有好的方法请告知我,万分感谢。

时间: 2025-01-03 09:34:27

Solidworks二次开发-05-装配体中插入零部件的相关文章

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

Solidworks二次开发-06-在装配体中添加配合     折腾了三天终于完成了计划中的功能模块.在一个装配体中自动判断插入合适的零件,并添加配合. 在前面几篇文章中我已经基本上说明了如何得到零部件的数据信息.如何插入零部件.如何得到已经选择的特征等. 下面只介绍怎样进行配合 在做配合时,需要经常选择到零件的面.线等,这是一个问题,还有就是介绍一下addmate2函数的使用: 一般进行配合我们按照下面的次序来进行:     1-ModelDoc.ClearSelection2  '取消所有选

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

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

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

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

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二次开发—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二次开发-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二次开发-04-修改数据

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

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

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