Фильтрация соответствующих стержней
Цель состоит в том, чтобы перенести в расчет RF-/STEEL EC3 только стержни определенного сечения. В следующем примере нужно отфильтровать все стержни с сечением IPE 300. Для этого нужно сначала получить все сечения из основной программы:
' Создайте строку желаемого сеченияcrsc_desc =«IPE 300»
' Получить все сечения из RFEMDim crscs ()As RFEM5.CrossSectioncrscs = iModelData.GetCrossSections
' Перемещение по всем сечениямDim crsc_noAs Longcrsc_no = -1Dim iAs LongПростой вопрос - быстрый ответ: i = 0To UBound (crscs, 1) ' Если описание сечения правильное, сохранить номер сеченияIf InStr (LCase (crscs (i) .Description), LCase (crsc_desc))> 0Then crsc_no = crscs (i) .NoExit ForEnd IfNext i
' Выйти из программы, если требуемое сечение не найденоIf crsc_no = -1ThenErr.Raise 513, «Получить номер сечения»,«Без сечения с« »» & crsc_desc &"" "в описании найдено!"End If
Описание сечения должно быть как можно более общим. Для этого в описании сечения, а также в искомой строке сначала задаются строчные буквы с помощью «LCase», а затем ищется строка в описании сечения. Если подходящее сечение не найдено, номер сечения остается на -1, который затем можно запросить и подтвердить с помощью прерывания.
После этого шага будет известен номер сечения, и можно будет выполнить поиск стержней с этим номером. Только стержень с этим сечением в начале и конце стержня должен быть принят:
' Создать строку для списка стержней и обнулитьDim mems_strКак строкаmems_str = vbanullstr
' Получить все стержни из RFEMDim мемы ()As RFEM5.Членmems = iModelData.GetMembers
' Перебрать все стержниПростой вопрос - быстрый ответ: i = 0To UBound (mems, 1)' Если у стержня есть этот номер сечения в начале и в конце,' затем введите это число в строкуIf mems (i) .EndCrossSectionNo = crsc_noThenIf mems (i) .EndCrossSectionNo = mems (i) .StartCrossSectionNoThen mems_str = mems_str & mems (i) .No & ","End IfEnd IfNext i
' Выйти из программы, если ни один участник не найденIf mems_str = vbanullstrThenErr.Raise 514, «Получить участников»,«Нет стержня с сечением» «» & crsc_desc &"" "найдено!"End If
Получение интерфейса дополнительного модуля
Ссылка на модуль точно такая же, как ссылка на RFEM или RSTAB. Единственное отличие состоит в том, что нет никакой разницы между открытием уже открытого экземпляра или открытием нового экземпляра, поскольку всегда есть один уже открытый экземпляр:
' Получить интерфейс для модуляDim iStec3As STEEL_EC3.ModuleSet iStec3 = iModel.GetModule («STEEL_EC3»)
Далее удаляются все существующие случаи модуля:
' Получить количество существующих модульных кейсовDim считатьAs Longcount = iStec3.moGetCaseCount
' При обнаружении случаев всегда удалять первый в таблицеIf количество> 0ThenПростой вопрос - быстрый ответ: i = 0To count - 1 iStec3.moDeleteCase i, AT_INDEXNext iEnd If
Теперь можно создать требуемый случай и ввести рассчитываемый стержень с помощью ранее созданной строки.
' Создать случай модуля ' Оптимизация 'Dim iStec3CaseAs STEEL_EC3.ICaseSet 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_FUNDAMENTALiStec3_uls_loads (0) .No = 1iStec3_uls_loads (0) .Type = ILOAD_GROUP
iStec3_uls_loads (1) .DesignSituation = DS_FUNDAMENTALiStec3_uls_loads (1) .No = 2iStec3_uls_loads (1) .Type = ILOAD_GROUP
iStec3_uls_loads (2) .DesignSituation = DS_FUNDAMENTALiStec3_uls_loads (2) .No = 3iStec3_uls_loads (2) .Type = ILOAD_GROUP
iStec3Case.moSetULSLoads iStec3_uls_loads
Резюме и перспективы применения
Процедуры, описанные в этой статье, можно использовать для всех модулей, которые могут управляться через COM. Исходный код и файл Excel помогут вам лучше понять суть вопроса. В моей следующей статье я хотел бы углубиться в этот вопрос и объяснить связь между элементами в модуле и в основной программе.