807x
004961
2021-04-08

Вопрос

Как можно с помощью интерфейса COM удалить в модели, например, все узлы или стержни?


Ответ:

Для удаления элементов используется в интерфейсе данных модели функция «DeleteObjects()». Удаление всех стержней затем выполняется следующим образом:

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


Обратите внимание на то, что функция «DeleteObjects» работает только с номером объекта, а не с его индексом. Эти номера затем передаются в виде строки, разделенной запятыми.

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