Interfejs COM w VBA | 4.1 Optymalizacja ramki
Artykuł o tematyce technicznej
W części 4.1 i 4.2 tej części artykułu dokonano optymalizacji ramki przy użyciu modułu dodatkowego RF- / STEEL EC3 . Piąta część wyjaśnia, w jaki sposób połączyć moduł z odpowiednimi prętami. Elementy już wyjaśnione w poprzednich częściach nie są ponownie opisane.
Filtrowanie odpowiednich prętów
Celem jest przeniesienie prętów o określonym przekroju tylko do konstrukcji RF- / STEEL EC3. W poniższym przykładzie wszystkie pręty o przekroju IPE 300 powinny być filtrowane. W tym celu należy najpierw pobrać wszystkie przekroje z programu głównego:
' Create a string of a desired cross‑section
Dim crsc_desc As String
crsc_desc = "IPE 300"
' Get all cross-sections from RFEM
Dim crscs() As RFEM5.CrossSection
crscs = iModelData.GetCrossSections
' Lopp over all cross-sections
Dim crsc_no As Long
crsc_no = -1
Dim i As Long
For i = 0 To UBound(crscs, 1)
' If the cross-section description is right, save the cross-section number
If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0 Then
crsc_no = crscs(i).No
Exit For
End If
Next i
' Quit the program if the desired cross-section was not found
If crsc_no = -1 Then
Err.Raise 513, "Get cross-section number", "No cross-section with "" " & crsc_desc & " "" within its description found!"
End If
Opis przekroju powinien być zsynchronizowany w sposób możliwie najbardziej ogólny. W tym celu zarówno opis przekroju, jak i szukany ciąg znaków są pisane małymi literami za pomocą funkcji "POZYCJA", a następnie w opisie przekroju wyszukiwany jest ciąg. Jeżeli nie zostanie znaleziony odpowiedni przekrój, numer przekroju pozostaje przy -1, który może zostać wywołany i potwierdzony przez przerwanie.
Po tym kroku numer przekroju jest znany i można wyszukiwać pręty o tym przekroju. Należy zastosować tylko pręt o takim przekroju na początku i końcu pręta.
' Create string for the list of members and set it to zero
Dim mems_str As String
mems_str = vbanullstr
' Get all members from RFEM
Dim mems() As RFEM5.Member
mems = iModelData.GetMembers
' Lopp over all members
For i = 0 To UBound(mems, 1)
' If a member has this cross-section number at the start and the end,
' then take this number in the string
If mems(i).EndCrossSectionNo = crsc_no Then
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNo Then
mems_str = mems_str & mems(i).No & ","
End If
End If
Next i
' Quit the program if no member was found
If mems_str = vbanullstr Then
Err.Raise 514, "Get members", "No member with cross-section "" " & crsc_desc & " "" found!"
End If
Interfejs modułu dodatkowego
Łącze do modułu jest dokładnie takie samo, jak łącze do RFEM lub RSTAB. Jedyna różnica polega na tym, że nie ma różnicy pomiędzy otwarciem już otwartej instancji lub otwarciem nowej instancji, ponieważ zawsze istnieje jedna już otwarta instancja:
' Get interface for the module
Dim iStec3 As STEEL_EC3.Module
Set iStec3 = iModel.GetModule( "STEEL_EC3" )
Następnie usuwane są wszystkie istniejące przypadki modułów.
' Get number of existing module cases
Dim count As Long
count = iStec3.moGetCaseCount
' If there are any cases, always delete the first one in the table
If count > 0 Then
For i = 0 To count - 1
iStec3.moDeleteCase i, AT_INDEX
Next i
End If
Teraz można utworzyć żądany przypadek i wprowadzić pręt, który ma zostać zaprojektowany, za pomocą utworzonego wcześniej ciągu znaków.
' Create the 'Optimization' module case
Dim iStec3Case As STEEL_EC3.ICase
Set iStec3Case = iStec3.moSetCase(1, "Optimization" )
' Set members for design
iStec3Case.moSetMemberList mems_str
Dodatkowo można wprowadzić żądane kombinacje obciążeń:
' Set load combinations
Dim iStec3_uls_loads(0 To 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
Podsumowanie i przegląd
Procedury opisane w tym artykule mogą być stosowane do wszystkich modułów, które mogą być sterowane przez COM. Kod źródłowy i plik Excel pomagają lepiej zrozumieć tematykę. W kolejnym artykule chciałbym zagłębić się w tę kwestię i wyjaśnić związek pomiędzy elementami w module oraz w programie głównym.
Do pobrania
Linki
Kontakt
Mają Państwo pytania lub potrzebują porady?
Zapraszamy do bezpłatnego kontaktu z nami drogą mailową, poprzez czat lub forum lub odwiedzenia naszej strony z FAQ z użytecznymi wskazówkami i rozwiązaniami.