gpt4 book ai didi

vba - 使用solidworks宏将零件插入基于excel文件的装配体中

转载 作者:行者123 更新时间:2023-12-01 17:31:27 26 4
gpt4 key购买 nike

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

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

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. 如果零件已在一个装配体中使用,并且另一个装配体已打开或处于事件状态,则宏在新窗口中可以正常工作。

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

最佳答案

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

一般来说,SolidWorks 是这一重要细节的一部分,它会按照您已经注意到的方式将零部件添加到装配体中。

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

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

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

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

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

AddComponent5

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

关于vba - 使用solidworks宏将零件插入基于excel文件的装配体中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19645066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com