Найти в Дзене

SolidWorks API Уравнения

Промучался целый день с Уравнениями и хочу поделиться, так что всё максимально сухо но даю рабочий код. Исходные данные, Активный эскиз в детали, в нём есть два размера (D1 и D2), D1 уже является формулой (допустим =15+18), перед значением размера должен появится знак Суммы как на картинке в заголовке. D2 размер но не уравнение. У меня размеры к двум линиям, но может быть любой вариант объект нас в это раз не интересуют. И так код: 'Работаем с активным эскизом Option Explicit Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSelMgr As SldWorks.SelectionMgr
Dim swAnnotation As SldWorks.Annotation
Dim annotationPosition As Variant
Dim swFeature As SldWorks.Feature
Dim swDispDim As SldWorks.DisplayDimension
Dim swDim As Dimension
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim status As Boolean
Dim swSketch As SldWorks.Sketch
Dim refPoints As Variant
Dim mathPoint As SldWorks.mathPoint
Dim pointData

Промучался целый день с Уравнениями и хочу поделиться, так что всё максимально сухо но даю рабочий код.

Исходные данные, Активный эскиз в детали, в нём есть два размера (D1 и D2), D1 уже является формулой (допустим =15+18), перед значением размера должен появится знак Суммы как на картинке в заголовке. D2 размер но не уравнение. У меня размеры к двум линиям, но может быть любой вариант объект нас в это раз не интересуют.

Эскиз 1
Эскиз 1

И так код:

'Работаем с активным эскизом

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swSelMgr As SldWorks.SelectionMgr
Dim swAnnotation As SldWorks.Annotation
Dim annotationPosition As Variant
Dim swFeature As SldWorks.Feature
Dim swDispDim As SldWorks.DisplayDimension
Dim swDim As Dimension
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim status As Boolean
Dim swSketch As SldWorks.Sketch
Dim refPoints As Variant
Dim mathPoint As SldWorks.mathPoint
Dim pointData As Variant
' Dim swParam As SldWorks.Parameter
Dim swParam As SldWorks.Dimension
Dim swSketchMgr As SldWorks.SketchManager
Dim swSelData As SldWorks.SelectData

Sub main()

' Подключаемся к SolidWorks
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

' Проверяем, является ли документ деталью
If swModel Is Nothing Or swModel.GetType <> swDocPART Then
MsgBox "Откройте деталь в SolidWorks"
Exit Sub
End If

' Получаем активный эскиз
Set swSketchMgr = swModel.SketchManager
Set swSketch = swSketchMgr.ActiveSketch
Set swFeature = swSketch
Set swSelMgr = swModel.SelectionManager
Set swSelData = swSelMgr.CreateSelectData

If swSketch Is Nothing Then
MsgBox "Активный эскиз не найден!", vbExclamation
Exit Sub
End If

'Получаем первый display dimension (это не совсем размер)
Set swDispDim = swFeature.GetFirstDisplayDimension

' Перебираем всё размеры (Если надо что-то делать с размером то это делаем тут)

Do While Not swDispDim Is Nothing
Set swDim = swDispDim.GetDimension2(0)
Debug.Print "Данные о резмере:"
Debug.Print swDim.Name
Debug.Print swDim.Value
Debug.Print swDim.FullName

Set swDispDim = swFeature.GetNextDisplayDimension(swDispDim)

Loop

' Получаем менеджер уравнений
Dim eqMgr As SldWorks.EquationMgr
Set eqMgr = swModel.GetEquationMgr

' Получаем текущее количество уравнений
Debug.Print eqMgr.GetCount

' Перебираем уравнения получая необходимые совойства
Dim k As Integer
For k = 0 To eqMgr.GetCount - 1
Dim lhs As String
lhs = eqMgr.Equation(k)
Debug.Print lhs
Debug.Print eqMgr.Value(k)
Next k

'GoTo op 'Для отладки

' Если мы хотим записать уравнение используем следующий код 'parameterName = "D2@Эскиз1" _
'Equation = "= 12 + 20" _
'lhs = Chr(34) & parameterName & Chr(34) & Equation _
'В отладчике посылка должна иметь вид "D2@Эскиз1"= 12 + 20 _
'(особое внимание к кавычкам) _
'Chr(34) - это символ кавычек

' Изменить значение существующего уравнения
Dim parameterName As String
Dim Equation As String
parameterName = "D1@Эскиз1"
Equation = "= 12 + 20"
lhs = Chr(34) & parameterName & Chr(34) & Equation
Debug.Print lhs

' "k" это индекс (порядковый номер)нужного уровнения

k = 0
eqMgr.Equation(k) = lhs

' Добавления нового уравнения или глоб.переменной

parameterName = "D2@Эскиз1"
Equation = "= 12 + 20"
lhs = Chr(34) & parameterName & Chr(34) & Equation
Debug.Print lhs
Dim ui As Long
ui = eqMgr.Add2(-1, lhs, True)

' Создаём глобальную переменную
parameterName = "ParamTest"
Equation = "= 85"
lhs = Chr(34) & parameterName & Chr(34) & Equation
Debug.Print lhs
ui = eqMgr.Add2(-1, lhs, True)

op:

' Уравнение с использованием глоб. переменной (правим существующее)
' Обращем внимание на Chr(34)

parameterName = "D2@Эскиз1"
Equation = "=" & Chr(34) & "ParamTest" & Chr(34) & "+ 20"
lhs = Chr(34) & parameterName & Chr(34) & Equation
Debug.Print lhs
k = 1
eqMgr.Equation(k) = lhs

End Sub

Конец Кода!

Для меня основная сложность была разобраться в том как передавать переменные уравнения (Пример "D2@Эскиз1") если мы их смотрим в окне редактирования уравнений, вот где есть кавычки там они у Вас и должны быть.
Чтобы понять как они передаются выводим их с помощью Debug.Print в окно отладки и смотрим что передалось.

Окно управления уравнениями Инструменты/Уравнения
Окно управления уравнениями Инструменты/Уравнения

Надеюсь кому-нибудь с экономил время.