Изменяет типы и режимы элементов слоя, список ID и состояния которых заданы коллекцией ZElemsStates.
Visual Basic:
Function SetModesByElemsStates(States As ZElemsStates) As Boolean
States - коллекция ID элементов и их типов и режимов.
Коллекция набирается двумя методами: AddItem(ID, режим) меняет только режим, а AddTypeModeItem(ID, тип, режим) - и тип, и режим.
Метод возвращает True, если коллекция не пуста; на пустой коллекции - False. Несуществующий ключ в коллекции ошибки не вызывает, и ответ все равно True, так что проверять стоит сами объекты - их режим дает свойство ModeId.
Смена режима у отсекающих устройств меняет состояние сети: после нее сеть пересчитывают методом NetWorkRecalc, а прикинуть последствия заранее позволяет NetworkSwitchAnalyze.
Пример закрывает первую задвижку слоя и возвращает ее в прежний режим.
Visual Basic:
Sub Layer_SetModesByElemsStates 'Берем активный слой карты 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 'Переводим её в режим 2 Set States = CreateObject("ZuluLib.ZElemsStates") States.AddItem Valve, 2 S = "Задвижка " & Valve & ", режим " & Was S = S & vbCrLf & "смена режима: " & L.SetModesByElemsStates(States) S = S & vbCrLf & "стало: " & L.Elements.Item(Valve).ModeId 'Возвращаем как было States.Clear States.AddItem Valve, Was L.SetModesByElemsStates States S = S & vbCrLf & "после возврата: " & L.Elements.Item(Valve).ModeId MsgBox S End SubPython:
import zulu def Macro_Layer_SetModesByElemsStates(): # Берем активный слой карты 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 # Переводим её в режим 2 states = zulu.ZElemsStates() states.AddItem(valve, 2) print("Задвижка", valve, ", режим", was) print("смена режима:", L.SetModesByElemsStates(states)) print("стало:", L.Elements.Item(valve).ModeId) # Возвращаем как было states.Clear() states.AddItem(valve, was) L.SetModesByElemsStates(states) print("после возврата:", L.Elements.Item(valve).ModeId)