807x
004961
8.4.2021

Dotaz

Jak mohu smazat např. všechny uzly nebo pruty v modelu pomocí rozhraní COM?


Odpověď:

Pro mazání prvků slouží funkce "DeleteObjects()" v rozhraní dat modelu. Smazání všech prutů potom vypadá následovně:

Sub test_delete_objects()

Dim iApp As RFEM5.Application
Set iApp = GetObject(, "RFEM5.Application")

iApp.LockLicense

Dim iMod As RFEM5.IModel3
Set iMod = iApp.GetActiveModel


On Error GoTo e

' get interface for model data
Dim iModData As RFEM5.IModelData2
Set iModData = iMod.GetModelData
    
' get all members
    Dim mems() As RFEM5.Member
mems() = iModData.GetMembers
    
' create member list
Dim mem_list As String
Dim i As Integer
For i = 0 To UBound(mems, 1)
mem_list = mem_list & mems(i).no & ","
Next
    
' delete members
iModData.PrepareModification
iModData.DeleteObjects MemberObject, mem_list
iModData.FinishModification
    
e:

If Err.Number <> 0 Then MsgBox Err.description, vbCritical, Err.Source

iMod.GetApplication.UnlockLicense
Set iMod = Nothing

End Sub


Je nutné vzít do úvahy, že funkce "DeleteObjects" funguje pouze s číslem objektů a ne s indexem objektů. Tato čísla se přenášejí jako řetězec oddělená čárkami.

Z tohoto důvodu bylo třeba nejdříve načíst všechny pruty. Poté pole prutu proběhlo ve smyčce a do řetězce se zanesla všechna čísla prutů.