ADN Club > Civil 3D API
Как получить имя сети для трубы или колодца через COM?
Дмитрий Загорулькин:
Я так понимаю, что это подтверждает наличие сети в HardReferences в ARXDBG и MGDDBG? Сеть там есть у трубы и у колодца.
Александр Ривилис:
--- Цитата: Дмитрий Загорулькин от 25-12-2019, 12:14:44 ---Я так понимаю, что это подтверждает наличие сети в HardReferences в ARXDBG и MGDDBG?
--- Конец цитаты ---
Да.
--- Цитата: Дмитрий Загорулькин от 25-12-2019, 12:14:44 ---Сеть там есть у трубы и у колодца.
--- Конец цитаты ---
Значит действительно ограничение в COM-модели.
Дмитрий Загорулькин:
Интересно, а в COM нет какого-то способа получить объекты из HardReferences?
Александр Ривилис:
--- Цитата: Дмитрий Загорулькин от 25-12-2019, 14:33:27 ---Интересно, а в COM нет какого-то способа получить объекты из HardReferences?
--- Конец цитаты ---
100% нет.
Nutson:
У себя решал проблему аналогично, перебором всех элементов.
Позже додумался что из коллекции Network.Pipes / Network.Structures можно получать элемент по имени.
Таким образом получается нужно обойти только все трубопроводные сети, а их количество гораздо меньше чем элементов в каждой из них.
--- Код - Visual Basic [Выбрать] ---Public Function network_from_select_part1(p_doc As AeccPipeDocument, ByRef struct As AeccStructure) Dim Network As AeccPipeNetwork Dim existStruct As AeccStructure On Error Resume Next If p_doc.PipeNetworks.Count > 0 Then For Each Network In p_doc.PipeNetworks Set existStruct = Network.structures(struct.Name) 'пробую получить элемент по имени из коллекции If Err = 0 Then ' если вылетела ошибка, значит элемента нет в коллекции If Not existStruct Is Nothing And existStruct.Handle = struct.Handle Then 'если получил элемент то проверяю хендлы, так как у элементов в разных сетях могут быть одинаковые имена Set network_from_select_part = Network Exit Function End If End If Err.Clear Next End IfEnd Function
Навигация
Перейти к полной версии