vba - 将总表插入工程图 Solidworks 宏
问题描述
我有一个用户需要轻松访问宏的下拉列表,该下拉列表将轻松快速地导入通用表格模板,并让他们通过光标单击将其放置在需要的位置。目前,我用于导入通用表格的代码可以工作,但我对实体工作参数不够熟悉,无法知道传递哪个参数以允许将表格粘贴到用户选择的位置。有问题的具体线路是Set swTable = swDrawing.InsertTableAnnotation2(True, 0, 0, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1)
完整代码如下;
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDrawing As SldWorks.DrawingDoc
Dim swTable As SldWorks.TableAnnotation
Const MATABLE As String = "C:\STANDARD Tables\sampleTable.sldtbt"
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If (swModel Is Nothing) Or (swModel.GetType <> swDocDRAWING) Then
swApp.SendMsgToUser ("To be used for drawings only, Open a drawing first and then TRY!")
Exit Sub
End If
Set swDrawing = swModel
Set swTable = swDrawing.InsertTableAnnotation2(True, 0, 0, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1)
If Not swTable Is Nothing Then
swTable.BorderLineWeight = 0
swTable.GridLineWeight = 0
End If
End Sub
谢谢你。
解决方案
第二个和第三个参数(其中有 0 和 0)用于设置表格的位置,但您还必须将第一个参数设置为False
(指示 API 忽略锚点并使用您的 X 和 Y 坐标)。请参阅http://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IDrawingDoc~InsertTableAnnotation2.html
所以你的行将是,例如:
Set swTable = swDrawing.InsertTableAnnotation2(False, 10, 10, swBOMConfigurationAnchor_TopLeft, MATABLE, 2, 1).
但是,您的代码有几点
首先,您需要将文档加载到您的 VBA Solidworks 应用程序对象中。您编写的代码将无法工作,因为 swApp 没有活动文档。最好的方法是提供一个文件对话框并使用该OpenDoc6()
功能将选定的文件加载到应用程序中。https://help.solidworks.com/2019/english/api/sldworksapi/Open_Document_Example_VB.htm
其次,获取鼠标位置并将其转换为InsetTableAnnotation2()
函数的 X 和 Y 参数需要了解一些 WinAPI 和一些像素计算知识。这是完全可行的,但涉及一些编码。另一方面,如果您将 设置swApp.Visible
为 true,那么当表格成功地插入到 Solidworks 文档中时,它将对用户可见并且可以随意拖动。您可能会发现这对您来说是一个更简单的解决方案。
顺便说一句,Solidworks 对许可和用户数量非常严格。您当然只需要 , 的一个实例swApp
,因此在模块级别声明它,但您可能还需要检查是否有超过许可数量的错误。
推荐阅读
- python - 使用 numpy 像素数组进行对象检测
- java - Java将字符串列表写入文件,但文件为空
- apache-flink - apache flink事件时间处理窗口进程函数没有被调用
- jquery - 使用 jQuery 计时器通过 PHP 检查数据库是否有新记录?
- python - 了解 tf.contrib.lite.TFLiteConverter 量化参数
- ios - Scenekit:动画时模型改变大小
- laravel - Laravel 加载资源失败 (404)
- c# - 为什么 C# 不读取类似人类的表情符号?
- java - Android Studio 中有什么方法可以让我们的应用程序防篡改吗?
- java - Ctrl+箭头 - “下一个单词”键绑定不起作用