Вопрос:
Как с помощью интерфейса COM изменить список параметров?
Ответ:
Параметры модели можно легко изменить посредством интерфейса IModel (начиная с версии IModel3):
Sub test_parameter()
Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")
iApp.LockLicense
Dim j As Integer
j = iApp.GetModelCount
Dim iMod As RFEM5.IModel3
Set iMod = iApp.GetActiveModel
On Error GoTo e
Dim formParams() As RFEM5.FormulaParameter
' get all formula parameters
formParams = iMod.GetFormulaParameters
' delete all formula parameters
iMod.CleanFormulaParameters
' set list of formula parameters
ReDim Preserve formParams(0 To UBound(formParams, 1) + 1)
formParams(UBound(formParams, 1)).Name = "p"
formParams(UBound(formParams, 1)).Unit = "m"
formParams(UBound(formParams, 1)).UnitType = LengthUnitType
formParams(UBound(formParams, 1)).Value = 0
formParams(UBound(formParams, 1)).ValueType = DoubleType
formParams(UBound(formParams, 1)).Comment = "new parameter"
formParams(UBound(formParams, 1)).Formula = "b/3"
formParams (UBound (formParams, 1)). RangeOfValues = "(3; 5,5"
iMod.SetFormulaParameters formParams
e:
If Err.Number 0 Then MsgBox Err.description, vbCritical, Err.Source
iMod.GetApplication.UnlockLicense
Set iMod = Nothing
End Sub
Однако прочитать все параметры можно только с помощью функции GetFormulaParameters(). Благодаря функции SetFormulaParameters(), затем можно повторно передавать как измененные, так и новые параметры, но только в виде списка. Это значит, что изменение и считывание отдельных параметров невозможно.
Следует также отметить, что «Значение», связанное с определенным типом (ValueTyp) и единицей измерения (Unit), должно быть всегда в заданных пределах (RangeOfValues), иначе появится сообщение об ошибке. Но если значение рассчитывается так, как показано в примере, тогда оно не имеет значения. В таком случае потом важно, чтобы в пределах, если они заданы, находилось значение, рассчитанное по заданной формуле (Formula).