Вопрос:
Как можно в модуле RF-COM считать распределение нагрузки на линию из поля со списком?
Ответ:
Распределение линейной нагрузки определяется с помощью атрибута «Распределение». Атрибут «Распределение» относится к типу «LoadDistributionType», а записи списка в поле со списком относятся к типу «Строка», поэтому требуется преобразование типа. Функция «GetLoadDistributionType» преобразует запись списка типа String в LoadDistributionType.
'--------------------------------------------------------------------------------------------------
Функция GetLoadDistributionType (sType As String) As LoadDistributionType
'--------------------------------------------------------------------------------------------------
Если sType = "Concentrated2x2QType", то
GetLoadDistributionType = Concentrated2x2QType
ElseIf sType = "Concentrated2xQType" Тогда
GetLoadDistributionType = Concentrated2xQType
ElseIf sType = "ConcentratedNxQType" Тогда
GetLoadDistributionType = ConcentratedNxQType
ElseIf sType = "ConcentratedType" Тогда
GetLoadDistributionType = ConcentratedType
ElseIf sType = "ConcentratedUserDefinedType" Тогда
GetLoadDistributionType = "ConcentratedUserDefinedType"
ElseIf sType = "LinearType" Тогда
GetLoadDistributionType = LinearType
ElseIf sType = "LinearXType" Тогда
GetLoadDistributionType = LinearXType
ElseIf sType = "LinearYType" Тогда
GetLoadDistributionType = LinearYType
ElseIf sType = "LinearZType" Тогда
GetLoadDistributionType = LinearZType
ElseIf sType = "ParabolicType" Тогда
GetLoadDistributionType = ParabolicType
ElseIf sType = "RadialType" Тогда
GetLoadDistributionType = RadialType
ElseIf sType = "TaperedType" Тогда
GetLoadDistributionType = TaperedType
ElseIf sType = "TrapezoidalType" Тогда
GetLoadDistributionType = TrapezoidalType
ElseIf sType = "UniformType" Тогда
GetLoadDistributionType = UniformType
ElseIf sType = "VaryingType" Тогда
GetLoadDistributionType = VaryingType
End If
End Function
Процедура «SetLineLoad» создает линейную нагрузку на линии 1. Распределение нагрузки считывается из поля со списком «LoadDistribution» таблицы «LineLoad».
'--------------------------------------------------------------------------------------------------
Sub SetLineLoads ()
'--------------------------------------------------------------------------------------------------
Dim model As RFEM5.model
Расчетная нагрузка Как RFEM5.ILoadCase
Размерные данные (0) Как в RFEM5.LineLoad
'Get interface for model
Set model = GetObject(, "RFEM5.Model")
' Заблокировать лицензию COM и доступ к программе
model.GetApplication.LockLicense
On Error GoTo e
' Получить интерфейс для нагрузок
Задайте load = model.GetLoads.GetLoadCase (0, AtIndex)
' Задать параметры для линейной нагрузки
data (0) .No = 1
данные (0) .LineList = «1»
data (0) .Type = ForceType
' Распределение нагрузки из поля со списком
data (0) .Distribution = GetLoadDistributionType (Worksheets («LineLoad»). DropDowns («LoadDistribution»). List (Worksheets («LineLoad»). DropDowns («LoadDistribution»). ListIndex))
data (0) .Direction = LocalZType
data (0) .DistanceA = 11
data (0) .DistanceB = 22
data (0) .RelativeDistances = True
data (0) .Magnitude1 = 4000
data (0) .Magnitude2 = 5000
data (0) .Magnitude3 = 6000
data (0) .OverTotalLength = False
data (0) .Comment = «линейная нагрузка 1»
' Перенести линейную нагрузку
load.PrepareModification
load.SetLine - загружает данные
load.FinishModification
e: If Err.Number 0 Then MsgBox Err.Description, , Err.Source
Установить нагрузку = ничего
' Лицензия COM разблокирована, доступ к программе снова возможен
model.GetApplication.UnlockLicense
Set model = Nothing
End Sub
Исходный код затем находится в разделе Загрузки.