1554x
001459
2017-06-29

Интерфейс COM в VBA 5: Оптимизация рамы 1

В разделах 4.1 и 4.2 данной серии статей описана оптимизация рамы в дополнительном модуле RF-/STEEL EC3. Der fünfte Teil deckt dabei die Anbindung des Moduls und das Holen relevanter Stäbe ab. Конструктивные элементы, объясненные в предыдущих частях, мы не будем пояснять заново.

Фильтрация соответствующих стержней

Цель состоит в том, чтобы перенести в расчет RF-/STEEL EC3 только стержни определенного сечения. В следующем примере нужно отфильтровать все стержни с сечением IPE 300. Для этого нужно сначала получить все сечения из основной программы:


'   Создайте строку желаемого сечения
Dim crsc_descКак строка

crsc_desc =«IPE 300»

' Получить все сечения из RFEM
Dim crscs ()As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Перемещение по всем сечениям
Dim crsc_noAs Long
crsc_no = -1
Dim iAs Long
Простой вопрос - быстрый ответ: i = 0To UBound (crscs, 1)
' Если описание сечения правильное, сохранить номер сечения
If InStr (LCase (crscs (i) .Description), LCase (crsc_desc))> 0Then
crsc_no = crscs (i) .No
Exit For
End If
Next i

' Выйти из программы, если требуемое сечение не найдено
If crsc_no = -1Then
Err.Raise 513, «Получить номер сечения»,«Без сечения с« »» & crsc_desc &"" "в описании найдено!"
End If

Описание сечения должно быть как можно более общим. Для этого в описании сечения, а также в искомой строке сначала задаются строчные буквы с помощью «LCase», а затем ищется строка в описании сечения. Если подходящее сечение не найдено, номер сечения остается на -1, который затем можно запросить и подтвердить с помощью прерывания.

После этого шага будет известен номер сечения, и можно будет выполнить поиск стержней с этим номером. Только стержень с этим сечением в начале и конце стержня должен быть принят:

' Создать строку для списка стержней и обнулить
Dim mems_strКак строка
mems_str = vbanullstr

' Получить все стержни из RFEM
Dim мемы ()As RFEM5.Член
mems = iModelData.GetMembers

' Перебрать все стержни
Простой вопрос - быстрый ответ: i = 0To UBound (mems, 1)
' Если у стержня есть этот номер сечения в начале и в конце,
' затем введите это число в строку
If mems (i) .EndCrossSectionNo = crsc_noThen
If mems (i) .EndCrossSectionNo = mems (i) .StartCrossSectionNoThen
mems_str = mems_str & mems (i) .No & ","
End If
End If
Next i

' Выйти из программы, если ни один участник не найден
If mems_str = vbanullstrThen
Err.Raise 514, «Получить участников»,«Нет стержня с сечением» «» & crsc_desc &"" "найдено!"
End If

Получение интерфейса дополнительного модуля

Ссылка на модуль точно такая же, как ссылка на RFEM или RSTAB. Единственное отличие состоит в том, что нет никакой разницы между открытием уже открытого экземпляра или открытием нового экземпляра, поскольку всегда есть один уже открытый экземпляр:

' Получить интерфейс для модуля
Dim iStec3As STEEL_EC3.Module
Set iStec3 = iModel.GetModule («STEEL_EC3»)

Далее удаляются все существующие случаи модуля:

' Получить количество существующих модульных кейсов
Dim считатьAs Long
count = iStec3.moGetCaseCount

' При обнаружении случаев всегда удалять первый в таблице
If количество> 0Then
Простой вопрос - быстрый ответ: i = 0To count - 1
iStec3.moDeleteCase i, AT_INDEX
Next i
End If

Теперь можно создать требуемый случай и ввести рассчитываемый стержень с помощью ранее созданной строки.

' Создать случай модуля ' Оптимизация '
Dim iStec3CaseAs STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase (1,«Оптимизация»)

' Стержни для расчета
iStec3Case.moSetMemberList mems_str

Наконец, что не менее важно, вы можете ввести желаемые сочетания нагрузок:

' Задать сочетания нагрузок
Dim iStec3_uls_loads (0To 2) As STEEL_EC3.ULS_LOAD

iStec3_uls_loads (0) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (0) .No = 1
iStec3_uls_loads (0) .Type = ILOAD_GROUP

iStec3_uls_loads (1) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (1) .No = 2
iStec3_uls_loads (1) .Type = ILOAD_GROUP

iStec3_uls_loads (2) .DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads (2) .No = 3
iStec3_uls_loads (2) .Type = ILOAD_GROUP

iStec3Case.moSetULSLoads iStec3_uls_loads

Резюме и перспективы применения

Процедуры, описанные в этой статье, можно использовать для всех модулей, которые могут управляться через COM. Исходный код и файл Excel помогут вам лучше понять суть вопроса. В моей следующей статье я хотел бы углубиться в этот вопрос и объяснить связь между элементами в модуле и в основной программе.


Автор

Г-н Гюнтель осуществляет техническую поддержку пользователей Dlubal Software.

Ссылки
Скачивания