SetSymbolOrientation method (Layer)

Ориентирует указанные символьные объекты, входящие в сеть, вдоль направлений входящих в них участков

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

Layer

Синтаксис:

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 Sub

Python:

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)