NetWorkRecalc method (Layer)

Обновляет состояние сети и возвращает коллекцию ключей элементов, режим которых изменился.

Применяется к:

Layer

Синтаксис:

Visual Basic:

Function NetWorkRecalc() As ElementKeys

Описание:

Метод пересчитывает состояние сети и отдает ключи тех объектов, у которых режим изменился. Если менять было нечего, коллекция пуста: сразу после NetWorkDataPrepare метод вернул 0 ключей, и повторный вызов подряд - тоже 0.

После смены режима отсекающего устройства, например закрытия задвижки, метод возвращает ключи потребителей, у которых изменилась подача. Возврат устройства в прежний режим дает те же ключи: пересчет отмечает переход в обе стороны.

Режимы задаются методом SetModesByElemsStates, а прикинуть последствия переключения, ничего не меняя, позволяет NetworkSwitchAnalyze.

В случае неудачи возникает исключение с одним из следующих кодов:

Код

Описание

513

Слой не открыт. Операция проводится со слоем, который либо не загружен в карту, либо не открыт с помощью метода Open.

Пример:

Пример закрывает первую задвижку слоя, пересчитывает сеть и возвращает задвижку в прежний режим.

Visual Basic:

Sub Layer_NetWorkRecalc
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Ищем первую задвижку (тип 5)
Set Keys = L.ElementKeys
Valve = -1
For i = 1 To Keys.Count
  If L.Elements.Item(Keys.Item(i)).TypeID = 5 And Valve = -1 Then Valve = Keys.Item(i)
Next
Was = L.Elements.Item(Valve).ModeId
'Закрываем ее и пересчитываем сеть
Set States = CreateObject("ZuluLib.ZElemsStates")
States.AddItem Valve, 2
L.SetModesByElemsStates States
S = "Задвижка " & Valve & ": режим " & Was & " -> 2"
S = S & vbCrLf & "сменили режим: " & L.NetWorkRecalc.Count & " объектов"
'Возвращаем задвижку как было
States.Clear
States.AddItem Valve, Was
L.SetModesByElemsStates States
S = S & vbCrLf & "после возврата: " & L.NetWorkRecalc.Count & " объектов"
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_NetWorkRecalc():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Ищем первую задвижку (тип 5)
    keys = L.ElementKeys
    valve = -1
    for i in range(1, keys.Count + 1):
        if L.Elements.Item(keys.Item(i)).TypeId == 5 and valve == -1:
            valve = keys.Item(i)
    was = L.Elements.Item(valve).ModeId
    # Закрываем ее и пересчитываем сеть
    states = zulu.ZElemsStates()
    states.AddItem(valve, 2)
    L.SetModesByElemsStates(states)
    print("Задвижка", valve, ": режим", was, "-> 2")
    print("сменили режим:", L.NetWorkRecalc().Count, "объектов")
    # Возвращаем задвижку как было
    states.Clear()
    states.AddItem(valve, was)
    L.SetModesByElemsStates(states)
    print("после возврата:", L.NetWorkRecalc().Count, "объектов")