Вставка общих таблиц в чертеж Solidworks Macro

У меня есть пользователь, которому нужен легкий доступ к раскрывающемуся списку макросов, который легко и быстро импортирует общий шаблон таблицы и позволит разместить его там, где он нужен, одним щелчком мыши. В настоящее время код, который у меня есть для импорта общей таблицы, работает, но я недостаточно знаком с параметрами сплошных работ, чтобы знать, какой аргумент передать, чтобы разрешить вставку таблицы в то место, которое выбирает пользователь. Конкретная рассматриваемая строка 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

Спасибо.


person BearsRfuk    schedule 04.01.2021    source источник


Ответы (1)


Второй и третий параметры (где у вас есть 0 и 0) используются для установки позиции таблицы, но вы также должны установить первый параметр равным False (что указывает API игнорировать якорь и использовать ваши координаты X и Y) . См. http://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks%7ESolidWorks.Interop.sldworks.IDrawingDoc%7EInsertTableAnnotation2.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

Во-вторых, получение положения мыши и преобразование его в параметры X и Y для вашей функции InsetTableAnnotation2() потребует знания некоторых WinAPI и небольшого расчета пикселей. Это вполне выполнимо, но требуется немного кодирования. Если, с другой стороны, вы установите для параметра swApp.Visible значение true, то, когда таблица будет успешно вставлена ​​в документ Solidworks, она будет видна пользователю, и ее можно будет перетаскивать по своему усмотрению. Возможно, вы обнаружите, что это более простое решение для вас.

Кроме того, Solidworks довольно строго относится к лицензированию и количеству пользователей. Вам, безусловно, нужен только один экземпляр swApp, поэтому объявите это на уровне модуля, но вам, вероятно, также потребуется проверить наличие ошибки в случае превышения количества лицензий.

person Ambie    schedule 05.01.2021
comment
Знаете ли вы, почему передаваемые аргументы столбцов и строк принимаются, когда Solidworks API предложил бы с допустимым шаблоном игнорировать аргументы строк и столбцов? Во-вторых, я считаю, что вставка шаблона в 0,0 может работать лучше всего, потому что эта координата всегда будет существовать в чертеже и требует меньше кода, чем использование API или MathTransform. - person BearsRfuk; 05.01.2021
comment
Наконец, @ambie, не могли бы вы рассказать подробнее об этой последней части? Я хочу собрать несколько из этих макросов вместе для нескольких разных таблиц и сделать их доступными из раскрывающегося списка, поэтому для меня было бы важно, чтобы макрос не занимал плавающую лицензию. - person BearsRfuk; 05.01.2021
comment
Мои извинения, эта страница API предназначена для другого аргумента, который, я думаю, может лучше подойти для моих целей, но дайте мне знать ваши мысли. - person BearsRfuk; 05.01.2021