2086x
001379
2016-12-20

Интерфейс COM в VBA | 2.1 Создание стержня

Im ersten Teil der Serie ging es um das Öffnen und Erstellen eines Modells in RFEM. Im zweiten Teil soll es am Beispiel eines Stabes um das Anlegen und Verändern von Elementen gehen. Die Elemente aus Teil 1 werden daher nicht erneut angesprochen.

Основы

Элемент в программе RFEM состоит из нескольких элементов, которые более или менее зависят друг от друга. Если один из этих элементов отсутствует, элемент не может быть создан. Следующая структура должна быть соблюдена.

Для создания данного типа элемента необходимо получить интерфейс для конструктивных данных:

'Получить интерфейс для данных модели.
Dim iModelData As iModelData

Set iModelData = iModel.GetModelData ()

Этот интерфейс позволяет окончательно передать данные в RFEM.

Режим редактирования

После изменения или создания данных в программе RFEM необходимо переключить ее в режим редактирования. Например, в данном режиме нельзя выполнять какие -либо расчеты, а переданные данные доступны только после выхода из режима. Для перехода в режим редактирования необходимо использовать метод PrepareModification (), а для выхода из режима - FinishModification ():

'Перевести элементы в режим редактирования.
iModelData.PrepareModification
'...
iModelData.FinishModification

Создание элементов

Наша цель - создать стержень с сечением IPE 100 и конструкционной стали S235 от точки P0 (0,0,0) до точки P1 (1,0,0). Во-первых, необходимо создать узлы. В следующем примере используется массив, так как он представляет наибольшую гибкость для дальнейших модификаций программы:

'Создать узлы.
Dim nodeList (0 To 1)As RFEM5.Node
nodeList (0) .RefObjectNo = 0
nodeList (0) .No = 1
nodeList (0) .X = 0 #
nodeList (0) .Y = 0 #
nodeList (0) .Z = 0 #

nodeList (1) .RefObjectNo = 0
nodeList (1) .No = 2
nodeList (1) .X = 1 #
nodeList (1) .Y = 0 #
nodeList (1) .Z = 0 #

iModelData.PrepareModification
iModelData.SetNodes nodeList
iModelData.FinishModification

Как упоминалось выше, массив, включающий данные узла, передается с помощью методов PrepareModification () и FinishModification (). Для нумерации важен следующий факт: При переносе нового элемента, который уже включает в себя ссылочные номера, существующие элементы не перезаписываются, а добавляется в конец списка. Если вы введете ноль, элемент будет автоматически установлен на следующее свободное место.

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

'Создать линии.
Dim lineList (0 To 0) As RFEM5.Line
lineList (0) .nodeList = «1,2»
lineList (0) .Type = LineType.PolylineType

'Перевести элементы в режим редактирования.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Изменение элементов

Чтобы создать сечение, необходимо сначала создать материал. В новой модели RFEM, в первую очередь всегда используются материалы из ранее созданной модели. Чтобы обеспечить использование соответствующего материала, необходимо удалить или изменить все существующие материалы. В данном случае проще всего удалить все существующие материалы и создать новый. В отличие от создания новых элементов, интерфейс отдельных элементов должен быть активирован в случае удаления или изменения. Шаги следующие:

'Получить количество существующих материалов.
Dim число As Integer
num = iModelData.GetMaterialCount

'Зациклите существующие материалы.
iModelData.PrepareModification
Dim iAs Integer
For i = 0To num - 1
'Получить интерфейс к материалу.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial (i, AtIndex)
'Удалить материал.
iMat.Delete
Next i
iModelData.FinishModification

Интерфейс материала можно получить либо с помощью соответствующего номера материала (AtNo), либо с помощью индекса в списке всех материалов. В отличие от номера материала, индекс начинается с нуля и не имеет пробелов.

Завершение стержня

После удаления всех материалов, вы можете создать новый материал. Как и в программе RFEM, можно перенести материал прямо из базы данных материалов, используя его имя. Для этого с помощью свойства TextID вводится соответствующая строка (подробнее см. RF -COM 5.chm в SDK):

'Создать новый материал из библиотеки материалов.
Dim коврики (0 To 0) As RFEM5.Material
mats (0) .TextID = "NameID | Сталь S 235 @ TypeID | STEEL @ StandardID | DIN EN 1993-1-1-10"
mats (0) .No = 1

'Перевести элементы в режим редактирования.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification
Сечение создается так же, как и материал. Кроме того, указывается номер материала:
'Создать новое сечение из библиотеки.
Dim crs (0 To 0) As RFEM5.CrossSection
crs (0) .TextID = «IPE 100»
crs (0) .МатериалNo = 1
crs (0) .No = 1

'Перевести элементы в режим редактирования.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification
Поскольку все элементы стержня были созданы, стержень можно перенести:
'Создать новый стержень.
Dim mems (0 To 0) As RFEM5.Member
mems (0) .LineNo = 1
mems (0) .StartCrossSectionNo = 1
mems (0) .No = 1

'Перевести элементы в режим редактирования.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification

Как и в программе RFEM, здесь достаточно указать сечение в начале стержня. Концевое высвобождение стержня создавать не требуется, поскольку оно автоматически считается жестким.

Оптимизация

До настоящего времени, режим редактирования был найден для каждого элемента отдельно. Чтобы увеличить скорость обработки данных, можно перенести все элементы в один режим редактирования, Исключением являются удаление материалов и создание новых материалов. В данном случае необходимо использовать два отдельных блока, поскольку в одном блоке невозможно удалить и создать элементы:

'Удалить элементы в режиме редактирования.
iModelData.PrepareModification
Dim iAs Integer
For i = 0To num - 1
'Получить интерфейс к материалу.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial (i, AtIndex)
'Удалить материал.
iMat.Delete
Next i
iModelData.FinishModification

'Перевести элементы в режим редактирования.
iModelData.PrepareModification

iModelData.SetNodes nodeList
iModelData.SetLines lineList
iModelData.SetMaterials mats
iModelData.SetCrossSections crs
iModelData.SetMembers mems

iModelData.FinishModification

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

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


Автор

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

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