Вопрос:
Как можно с помощью интерфейса COM создать разрез?
Ответ:
Разрез сам по себе является таким же элементом как, например, стержень, потому он создается таким же образом. Сначала требуется наличия интерфейса к соответствующим объектам. Для стержня это интерфейс IModelData, а для сечений - ISections. Данный интерфейс находится в IModel3:
Sub test_section()
' get interface from the opened model and lock the licence/program
Dim iModel As RFEM5.IModel3
Set iModel = GetObject(, "RFEM5.Model")
iModel.GetApplication.LockLicense
On Error GoTo E
Размеры iSecs как RFEM5.ISections
Установите iSecs = iModel.GetSections ()
Все ранее созданные разрезы сначала удаляются, а затем создаются два новых разреза.
Первый разрез должен быть разрез через тело с видимой площадью сечения (см. Рисунок 01). Все данные вводятся также как и в программе RFEM. В качестве типа нужно выбрать «SectionOnSectionalArea». Угловые точки разреза затем задаются с помощью «EdgePoint», а направление разреза определяет «Vector»:
' сначала удалить все разделы
iSecs.PrepareModification
iSecs.DeleteObjects («Все»)
iSecs.FinishModification
' задать сечение на теле
Dim sec As RFEM5.Section
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 5
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 8
sec.EdgePointB.Z = 0
sec.no = 1
sec.Name = «сплошной профиль»
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = False
sec.Type = SectionOnSolidSectionLine
sec.ObjectList = «1»
iSecs.PrepareModification
iSecs.SetSection сек
iSecs.FinishModification
Так же как и у других элементов, будет новый разрез, наконец, перенесен в блок Prepare-/FinishModification. В качестве второго разреза нужно создать разрез поверхности (см. Рисунок 02). Для этого разреза требуется использовать тип «SectionViaSurfacePlane». Затем нужно кроме вектора направления разреза, выбрать также плоскость для отображения результатов. В следующем примере была с помощью команды «GlobalPlaneInPositiveX» выбрана плоскость xy.
' set section on surface
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 0
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 3
sec.EdgePointB.Z = 0
sec.no = 2
sec.Name = «сечение поверхности»
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = True
sec.Type = SectionViaSurfacePlane
sec.ObjectList = «1»
sec.Vector.X = 0
sec.Vector.Y = 0
sec.Vector.Z = 1
iSecs.PrepareModification
iSecs.SetSection сек
iSecs.FinishModification
Результаты разреза можно получить также с помощью отдельного метода «GetResultsInSection» в интерфейсе «IResults2». Далее будут получены поперечные силы на разрезе через поверхность. Распределение внутренних сил затем с помощью команды «ContinuousDistributionWithinObjects» определяется как «Непрерывно внутри поверхности»:
' получить результаты
Dim iCalc As ICalculation2
Set iCalc = iModel.GetCalculation
Dim iRes As IResults2
Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, 1)
Dim secRes () как в RFEM5.SectionResult
secRes = iRes.GetResultsInSection (2; AtNo,
ShearForceVy, ContinuousDistributionWithinObjects, False)
В разделе «Загрузки» затем можно скачать макрос для Excel и тестовый файл для сравнения с программой.