Проверяет, находится ли элемент сети слоя в кольце.
Visual Basic:
Function IsInCircle(ElemID As Long, flags As Long) As Boolean
ElemID - ID объекта слоя
flags - зарезервирован, должен быть 0
Кольцом здесь называется замкнутый участок сети: если от объекта можно вернуться в него же, не проходя дважды по одному участку, метод дает True. Проверка годится и для линейных объектов, и для узлов.
Объект вне кольца, объект, не входящий в сеть, и несуществующий ID дают False; на неверный ID метод не ругается. Тупиковая ветка от кольца - тоже False.
Отдельно готовить сеть методом NetWorkDataPrepare для этой проверки не нужно: кольцо, только что собранное из четырех узлов и четырех участков, метод распознает сразу, и ответы до и после подготовки сети совпадают.
В древовидной сети колец нет, и для любого ее объекта метод возвращает False.
Visual Basic:
Sub Layer_IsInCircle 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set Keys = L.ElementKeys n = 0 For i = 1 To Keys.Count If L.IsInCircle(Keys.Item(i), 0) Then n = n + 1 Next MsgBox "Всего объектов: " & Keys.Count & vbCrLf & "из них в кольцах: " & n End SubPython:
import zulu def Macro_Layer_IsInCircle(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active keys = L.ElementKeys n = 0 for i in range(1, keys.Count + 1): if L.IsInCircle(keys.Item(i), 0): n += 1 print("Всего объектов:", keys.Count) print("из них в кольцах:", n)