2

我正在编写一个宏,它最终(希望如此!)从 excel 或文本文件中读取零件编号,然后搜索我的零件库的配置并将相应的组件插入到组件中,然后激活相应的配置。

我在插入零件和/或组件时遇到问题。我开始录制插入零件的宏。很简单。它使用 AddComponent 命令,该命令需要文件路径和 xyz 坐标。这似乎工作正常,但它一直出现故障。据我所知,此命令无法插入零件或装配体,除非该零件或装配体已在当前的 Solidworks 会话期间使用过。

Option Base 1 
Dim swApp As Object 
Dim Part As Object 
Dim SelMgr As Object 
Dim boolstatus As Boolean 
Dim longstatus As Long, longwarnings As Long 
Dim Feature As Object 
Dim filepath As String 
Dim partnum(8) As String 
Dim posx As Integer 
Dim posy As Integer 
Dim posz As Integer 
Dim x As Integer 

Sub main() 
Set swApp = Application.SldWorks 
Set Part = swApp.ActiveDoc 
Set SelMgr = Part.SelectionManager 

posx = 0 
posy = 0 
posz = 0 

partnum(1) = "07010304" 
partnum(2) = "07010318" 
partnum(3) = "07010321" 
partnum(4) = "07010331" 

For x = 1 To 8
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Parts\"+ partnum(x) + ".SLDPRT" 
Part.AddComponent filepath, posx, posy, posz 
filepath = "C:\Documents and Settings\user\My Documents\Solid Works Testing\Assemblies\" + partnum(x) + ".SLDASM" 
Part.AddComponent filepath, posx, posy, posz 
posx = posx + 1.5 
Next 

End Sub 

这个宏抓取三个部件 07010304.SLDPRT、07010318.SLDPRT 等一个组件(由这些部件组成)并将它们插入到活动组件中,并在这样做时将它们隔开。

  1. 如果我打开程序集并运行宏,则不会发生任何事情。
  2. 如果我打开一个程序集,插入多维数据集,删除它,然后运行宏,它会插入多维数据集。
  3. 如果我打开一个装配体,插入所有零件,删除它们,然后运行宏,它会插入所有零件(但不是由其中两个组成的装配体)。
  4. 如果我打开一个程序集,插入立方体球体程序集,删除它,然后运行宏,它将插入立方体、球体和立方体球体程序集,但不会插入圆柱体。
  5. 如果零件已在一个装配中使用,并且另一个已打开或激活,则宏在新窗口中可以正常工作。

所以总而言之,我该如何解决这个问题?是否有另一个命令可以插入不依赖于似乎正在发生的“加载到 SW 内存”的事情?还是执行此操作并将零件加载到软件内存中的命令?

4

1 回答 1

4

首先,您缺少正在使用的 SolidWorks 版本。因此,重要的是您知道应该使用哪种 API 方法变体(即在 SolidWorks 2013 中,它将是 AddComponent5 而不是 AddComponent)。

这个重要细节的一部分,一般来说,SolidWorks 处理将组件添加到装配体的过程与您已经注意到的完全一样。

根据 SolidWorks API 文档,要将组件添加到装配体中,您首先需要将该文件加载到内存中。使用OpenDoc方法将文件加载到内存中(请注意,这取决于您拥有的 SolidWorks 版本,在 2013 中您应该使用ISldWorks::OpenDoc6ISldWorks::OpenDoc7)。

您还应该考虑到调用ISldWorks::OpenDoc6不会激活并显示 ModelDoc2(文档),如果它已经在装配或工程图文档中打开(在内存中)。

ISldWorks::OpenDoc6返回对 ModelDoc2 (IModelDoc2) 的引用。使用获得的引用并将其传递给 ISldWorks::ActivateDoc2 或 ISldWorks::IActivateDoc3 以激活和显示。

您还应该查看相关的 OpenDoc 事件,例如 FileOpenNotify2、ActiveDocChangeNotify 和 ActiveModelDocChangeNotify,以微调和控制文档的加载和激活过程。

以下是相关 API 文档页面 (API 2013) 的一些链接:

添加组件5

http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~AddComponent5.html

OpenDoc6

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc6.html

OpenDoc7

http://help.solidworks.com/2013/English/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~opendoc7.html

AddComponent5 示例:添加组件和配合

http://help.solidworks.com/2013/English/api/sldworksapi/add_component_and_mate_example_vb.htm

于 2014-01-19T14:09:42.103 回答