NetworkSwitchAnalyze method (Layer)

Моделирует переключение на сети и возвращает результат моделируемого переключения.

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

Layer

Синтаксис:

Visual Basic:

Function NetworkSwitchAnalyze(States As ZElemsStates, nFlags As Long) As IZSwitchStates

States - коллекция переключаемых объектов

nFlags - флаги определяющие, какие типы объектов должны попадать в ответ: 1 - потребители, 2 - все узловые объекты, 4 - участки

Описание:

На входе метода коллекция с объектами, которые будут участвовать в переключении. Элемент коллекции должен содержать ID объекта (отсекающего устройства или участка) и режим в который он должен перейти в результате переключения.

На выходе коллекция IZSwitchStates, содержащая объекты, которые изменят свое состояние по отношению к источникам в результате моделируемого переключения.

Входная коллекция набирается методами AddItem(ID, режим) или AddTypeModeItem(ID, тип, режим) - результат тот же. Ответ читается по номеру от 0 до GetCount - 1: ID объекта дает GetID, а его новое состояние - GetState.

Потребители попадают в ответ всегда, даже при nFlags = 0; флаг 2 добавляет к ним остальные узлы, флаг 4 - участки.

Сам слой метод не меняет - это только прикидка. Чтобы переключение состоялось, режимы задают методом SetModesByElemsStates, а сеть пересчитывают методом NetWorkRecalc.

В макросах на python GetState возвращает None: значения перечислений, отданные методом, в модуль zulu не попадают. Идентификаторы объектов при этом читаются как обычно, поэтому на python берут GetID, а состояние смотрят из VBScript.

Пример:

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

Visual Basic:

Sub Layer_NetworkSwitchAnalyze
'Берем активный слой карты
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
'Моделируем ее перевод в режим 2 с выводом узлов и участков
Set Elems = CreateObject("ZuluLib.ZElemsStates")
Elems.AddItem Valve, 2
Set States = L.NetworkSwitchAnalyze(Elems, 2 + 4)
S = "Задвижка " & Valve & vbCrLf & "изменят состояние: " & States.GetCount & " объектов"
'Показываем их на карте и перечисляем первые три
L.Selection.Clear
For i = 0 To States.GetCount - 1
  L.Selection.AddElem States.GetID(i)
  If i < 3 Then S = S & vbCrLf & "объект " & States.GetID(i) & ", состояние " & States.GetState(i)
Next
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_NetworkSwitchAnalyze():
    # Берем активный слой карты
    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)
    # Моделируем ее перевод в режим 2 с выводом узлов и участков
    elems = zulu.ZElemsStates()
    elems.AddItem(valve, 2)
    states = L.NetworkSwitchAnalyze(elems, 2 + 4)
    print("Задвижка", valve)
    print("изменят состояние:", states.GetCount(), "объектов")
    # Показываем их на карте и перечисляем первые три
    # (состояние из python не прочитать - GetState отдает None)
    L.Selection.Clear()
    for i in range(states.GetCount()):
        L.Selection.AddElem(states.GetID(i))
        if i < 3:
            print("объект", states.GetID(i))