Ориентирует указанные символьные объекты, входящие в сеть, вдоль направлений входящих в них участков
Visual Basic:
Function SetSymbolOrientation(Elems) As Long
Elems - объект типа VARIANT содержащий ключи символьных объектов, подлежащих ориентированию. В переменной могут содержаться следующие типы данных:
VT_DISPATCH или VT_UNKNOWN - коллекция ключей ElementKeys
VT_BYREF|VT_I4 - массив чисел long, в первом элементе которого записано количество ключей
VT_I2 или VT_I4 - одиночный ключ конкретного объекта
Метод разворачивает символьные объекты по направлению входящего в них участка: угол объекта (Angle) получает значение, соответствующее направлению участка, - каждый объект набора разворачивается по своему участку. У объекта, уже стоящего по направлению участка, угол не меняется.
Метод всегда возвращает -1 - и когда объекты развернулись, и когда ничего не изменилось, и на несуществующий ключ, и на линейный объект. Судить об успехе по ответу нельзя: смотреть нужно угол объектов.
Угол объекта система учитывает при отрисовке, но увидеть поворот можно не у всякого символа: у круглого значка разворот не различается. Поэтому результат надежнее проверять по свойству Angle, а не по виду карты.
В VBScript годятся две формы: одиночный ключ числом и коллекция ElementKeys - например, ответ метода SelectByType. Массив вариантов, какой получается из Array(...), не работает: углы остаются прежними.
В макросах на python проходит только одиночный ключ: коллекция принимается без ошибки, но углы не меняются. Несколько объектов там разворачивают по одному, в цикле. То же различие есть у метода SetElemStyle.
Пример разворачивает потребителей слоя вдоль подходящих к ним участков.
Visual Basic:
Sub Layer_SetSymbolOrientation 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Готовим данные сети и берем объекты типа 3 (потребители) L.NetWorkDataPrepare False Set Keys = L.SelectByType(3, 0) S = "Потребителей: " & Keys.Count S = S & vbCrLf & "угол первого до: " & L.Elements.Item(Keys.Item(1)).Angle 'Ориентируем их вдоль входящих участков L.SetSymbolOrientation Keys S = S & vbCrLf & "угол первого после: " & L.Elements.Item(Keys.Item(1)).Angle MsgBox S End SubPython:
import zulu def Macro_Layer_SetSymbolOrientation(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Готовим данные сети и берем объекты типа 3 (потребители) L.NetWorkDataPrepare(False) keys = L.SelectByType(3, 0) print("Потребителей:", keys.Count) print("угол первого до:", L.Elements.Item(keys.Item(1)).Angle) # Ориентируем их вдоль входящих участков: в python - по одному ключу for i in range(1, keys.Count + 1): L.SetSymbolOrientation(keys.Item(i)) print("угол первого после:", L.Elements.Item(keys.Item(1)).Angle)