我正在编写一个宏,最终(希望!)从excel或文本文件中读取部件号,然后搜索我的部件库的配置并将相应的组件插入到程序集中,然后进行相应的配置活性。
插入零件和/或组件时遇到问题。 我开始记录插入零件的宏。很简单。它使用AddComponent命令,该命令需要文件路径和x-y-z坐标。这似乎工作正常,但它不断出现故障。 从我能够弄清楚的是,这个命令无法插入零件或装配体,除非在当前的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等一个组件(由这些部件组成)并将它们插入到活动组件中,并将它们隔开。
总之,我该如何解决这个问题?是否有另一个命令来插入不依赖于“加载到SW内存”的部件,似乎正在发生的事情?或者执行此操作的命令并将部件加载到SW存储器中?
答案 0 :(得分:3)
首先,您错过了正在使用的SolidWorks版本。因此,了解应使用哪种API方法变量非常重要(例如,在SolidWorks 2013中,它将是AddComponent5而不是AddComponent)。
这个重要细节的一部分,通常是说,SolidWorks处理组件的方式与您已经注意到的完全相同。
根据SolidWorks API文档,要将组件添加到装配体,首先需要将该文件加载到内存中。使用 OpenDoc 方法将文件加载到内存中(请注意,这取决于您拥有的SolidWorks版本,在2013年您应该使用 ISldWorks :: OpenDoc6 或 ISldWorks :: OpenDoc7 强>)。
您还应该考虑到调用 ISldWorks :: OpenDoc6 不会激活&如果ModelDoc2(文档)已在程序集或工程图文档中打开(在内存中),则显示它。
ISldWorks :: OpenDoc6 返回对ModelDoc2(IModelDoc2)的引用。使用获得的引用并将其传递给ISldWorks :: ActivateDoc2或ISldWorks :: IActivateDoc3以激活和显示。
您还应该查看相关的OpenDoc事件,如FileOpenNotify2,ActiveDocChangeNotify和ActiveModelDocChangeNotify,以微调和控制文档的加载和激活过程。
以下是相关API文档页面的一些链接(API 2013):
AddComponent5
OpenDoc6
OpenDoc7
AddComponent5示例:添加组件并配对
http://help.solidworks.com/2013/English/api/sldworksapi/add_component_and_mate_example_vb.htm