945x
004903
2021-01-12

Pytanie

Jak edytować listę parametrów za pomocą interfejsu COM?


Odpowiedź:

Parametry modelu można modyfikować za pomocą interfejsu IModel (od IModel3):

Sub test_parametr ()

Dim iApp As RFEM5.Application
Ustaw 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

' uzyskaj wszystkie parametry formuły
formParams = iMod.GetFormulaParametry

' usuń wszystkie parametry formuły
iMod.CleanFormulaParametry

' ustawić listę parametrów formuły
ReDim Zachowaj 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 = "nowy parametr"
formParams(UBound(formParams, 1)).Formula = "b/3"
formParams(UBound(formParams, 1)).RangeOfValues = "(3;5.5>"

iMod.SetFormulaParametry formParams

e:

Jeżeli Err.Number <> 0 to MsgBox Err.description, vbCritical, Err.Source
iMod.GetApplication.UnlockLicense
Ustaw iMod = Nic

Zakończ sub


Odczytanie wszystkich parametrów jest możliwe tylko przy użyciu funkcji GetFormulaParameters (). Zmodyfikowane lub nowe parametry można następnie przenieść ponownie w postaci listy za pomocą funkcji SetFormulaParameters (). Dzięki temu nie można odczytać ani zapisać poszczególnych parametrów.

Należy pamiętać, że "Wartość" związana z typem (ValueTyp) i jednostką (Unit) musi mieścić się w zdefiniowanych granicach (RangeOfValues), w przeciwnym razie pojawi się komunikat o błędzie. Jeżeli wartość jest obliczona, jak w przykładzie, nie ma ona znaczenia, a wartość obliczona ze wzoru (wzór) musi mieścić się w określonych granicach.