Interfejs COM w VBA | 2.1 Tworzenie pręta

Artykuł o tematyce technicznej

Pierwsza część serii artykułów poświęcona interfejsowi COM opisała otwieranie i tworzenie modelu w programie RFEM. W drugiej części objaśniono tworzenie i modyfikowanie elementów na przykładzie pręta. Elementy opisane w części 1 nie będą tutaj ponownie omawiane.

Podstawy

Pręt w programie RFEM składa się z kilku elementów, które są od siebie w większym lub mniejszym stopniu zależne. Jeżeli brakuje jednego z tych elementów, pręt nie może zostać utworzony. Musi być zachowana następująca struktura.

Rysunek 01 - Konstrukcja elementu pręta

W celu utworzenia takiego elementu należy uzyskać interfejs dla danych konstrukcyjnych:

' Get interface for model data.
Dim iModelData As iModelData
Set iModelData = iModel.GetModelData()

Ten interfejs umożliwia przeniesienie danych do programu RFEM.

Tryb edycji

Po zmodyfikowaniu lub utworzeniu danych w programie RFEM konieczne jest przełączenie programu RFEM w tryb edycji. Na przykład w tym trybie nie można przeprowadzać obliczeń, a przesłane dane są dostępne dopiero po zakończeniu pracy z danym trybem. W celu przejścia do trybu edycji należy użyć metody PrzygotowaćModyfikację (), a następnie opcji Wykończenie (), aby wyjść z trybu:

' Transfer elements to editing mode.
iModelData.PrepareModification
' ...
iModelData.FinishModification

Tworzenie elementów

Celem jest utworzenie pręta o przekroju IPE 100 i stali konstrukcyjnej S235 z Punktu P0 (0,0,0) do Punktu P1 (1,0,0). Najpierw należy utworzyć węzły. W poniższym przykładzie użyto tablicy, która stanowi największą elastyczność dla dalszych modyfikacji programu.

' Create nodes.
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

Jak wspomniano wyżej, tablica zawierająca dane węzła jest przenoszona za pomocą metod PrepareModification () i FinishModification (). W przypadku numeracji ważny jest następujący fakt: W przypadku przesyłania nowego elementu zawierającego już numery referencyjne istniejące elementy nie są nadpisywane, ale element zostaje dodany na końcu listy. W przypadku wprowadzenia zera element zostanie automatycznie ustawiony w następnym wolnym miejscu.

Proces tworzenia linii jest podobny, z niewielką różnicą w odniesieniu do węzłów. Lista węzłów jest przesyłana w postaci ciągu dokładnie tak, jak w programie RFEM:

' Create lines.
Dim lineList(0 To 0) As RFEM5.Line
lineList(0).nodeList = "1,2"
lineList(0).Type = LineType.PolylineType

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Modyfikowanie elementów

Aby utworzyć przekrój, należy najpierw utworzyć materiał. W nowym modelu programu RFEM najpierw wykorzystywane są zawsze materiały z wcześniej utworzonego modelu. W celu zapewnienia, że używany materiał jest używany, należy usunąć lub zmienić wszystkie istniejące materiały. W tym przypadku najłatwiej jest usunąć wszystkie istniejące materiały i utworzyć nowy materiał. W odróżnieniu od tworzenia nowych elementów w przypadku ich usunięcia lub modyfikacji należy aktywować interfejs poszczególnych elementów. Kroki są następujące:

' Get number of existing materials.
Dim num As Integer
num = iModelData.GetMaterialCount

' Loop over existing materials.
iModelData.PrepareModification
DimAs Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Delete material.
iMat.Delete
Next
iModelData.FinishModification

Interfejs materiału można uzyskać poprzez podanie odpowiedniego numeru materiału (AtNo) lub indeksu na liście wszystkich materiałów. W odróżnieniu od numeru materiału indeks zaczyna się od zera i nie ma w nim przerw.

Element wykończeniowy

Po usunięciu wszystkich materiałów można utworzyć nowy materiał. Podobnie jak w RFEM, możliwe jest tutaj bezpośrednie przeniesienie materiału z biblioteki materiałów za pomocą jego nazwy. W tym celu należy wprowadzić odpowiedni ciąg znaków przy użyciu właściwości TextID (szczegółowe informacje można znaleźć w sekcji RF-COM 5.chm w pakiecie SDK):

' Create new material from material library.
Dim mats(0 To 0) As RFEM5.Material
mats(0).TextID = "NameID|Steel S 235@TypeID|STEEL@StandardID|DIN EN 1993-1-1-10"
mats(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification

Przekrój poprzeczny jest tworzony w taki sam sposób, jak materiał. Dodatkowo podany jest numer materiału:

' Create new cross‑section from library.
Dim crs(0 To 0) As RFEM5.CrossSection
crs(0).TextID = "IPE 100"
crs(0).MaterialNo = 1
crs(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification

Ponieważ wszystkie elementy pręta zostały utworzone, pręt można teraz przesłać:

' Create new member.
Dim mems(0 To 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification

Podobnie jak w RFEM, w tym przypadku wystarczy określić przekrój na początku pręta, nie jest też konieczne tworzenie zwolnienia końcowego pręta, ponieważ automatycznie przyjmuje się, że jest ono sztywne.

Optymalizacja

Do tej pory tryb edycji był pobierany indywidualnie dla każdego elementu. W celu zwiększenia prędkości przetwarzania danych można przenosić wszystkie elementy w jednym trybie edycji, z wyjątkiem usuwania materiałów i tworzenia nowego materiału. W tym przypadku należy użyć dwóch oddzielnych bloków, ponieważ nie jest możliwe usunięcie i utworzenie elementów w jednym bloku:

' Delete elements in editing mode.
iModelData.PrepareModification
DimAs Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial (i, AtIndex)
' Delete material.
iMat.Delete
Next
iModelData.FinishModification

' Transfer elements to editing mode.
iModelData.PrepareModification

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

iModelData.FinishModification

Podsumowanie i przegląd

Procedury opisane w tym artykule stanowią podstawę dla wszystkich elementów konstrukcyjnych, które mogą być przenoszone za pośrednictwem modelu COM. Wyjątkiem są nieliniowe zwolnienia prętów lub podpory węzłowe zawierające dodatkowe zagnieżdżenia. Elementy te zostaną wyjaśnione w kolejnych artykułach tej serii.

Do pobrania

Linki

RFEM Program główny
RFEM 5.xx

Program główny

Oprogramowanie do obliczeń płaskich i przestrzennych układów konstrukcyjnych, obejmujących płyty, ściany, powłoki, pręty (belki), bryły i elementy kontaktowe, z wykorzystaniem Metody Elementów Skończonych (MES)

Cena pierwszej licencji
3 540,00 USD
RFEM Inne
RF-COM 5.xx

Moduł dodatkowy

Programowalny interfejs (API) w oparciu o technologię COM

Cena pierwszej licencji
580,00 USD