SetElemStyle method (Layer)

Изменяет стиль отображения у заданной группы объектов.

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

Layer

Синтаксис:

Visual Basic:

Function SetElemStyle(Elems, Style As ElemStyle, GraphType As eElemGraphType) As Boolean

Elems - параметр VARIANT со списком ключей объектов, для которых изменяется стиль, содержащий либо целочисленный массив VT_ARRAY ключей , либо коллекцию ключами IElementKeys.

Style - новый стиль объектов.

GraphType - графический тип объектов, к которым применяется новый силь.

Описание:

Метод возвращает True, если стиль применен. Ключи удобнее всего передавать готовой коллекцией - ответом ElementKeys, SelectByType или SelectByTypes.

Массив в Elems должен быть именно целочисленным: массив вариантов, какой получается в VBScript из Array(1, 2, 3), метод не принимает - возвращает False и ничего не меняет.

Одному объекту стиль задается проще: в Elems передается сам ключ числом, и это работает в обоих языках. В макросах на python это единственный рабочий способ - коллекция ключей, список и кортеж там дают False, тогда как в VBScript коллекция принимается.

Стиль собирается в объекте ElemStyle: цвет и толщина линии, цвет заливки, символ и прочее. Какие из этих свойств пойдут в дело, определяет GraphType - вид объектов, к которым применяется стиль.

Пример:

Пример добавляет в слой свой участок за краем данных, красит его в красный цвет и убирает за собой.

Visual Basic:

Sub Layer_SetElemStyle
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
Set R = L.GetBoundsRectangle
nBefore = L.GetLargestID
'Свой участок за краем данных слоя
Set PL = CreateObject("ZuluLib.PolyLine")
PL.AddPoint R.Xmax + 100, R.Ymin
PL.AddPoint R.Xmax + 100, R.Ymin + 200
Key = L.AddPolyLine(PL, CreateObject("ZuluLib.ElemStyle"), 6, 1)
'Красим его в красный
Set St = CreateObject("ZuluLib.ElemStyle")
St.LineColor = 255
St.LineWidth = 3
'Одному объекту ключ передается числом
S = "Применен стиль: " & L.SetElemStyle(Key, St, 0)
S = S & vbCrLf & "цвет участка: " & L.Elements.Item(Key).ElemStyle.LineColor
'Убираем за собой все, что добавили
Set Keys = L.ElementKeys
For i = Keys.Count To 1 Step -1
  If Keys.Item(i) > nBefore Then L.DeleteElement Keys.Item(i)
Next
MsgBox S
End Sub

Python:

import zulu

def Macro_Layer_SetElemStyle():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    R = L.GetBoundsRectangle()
    n_before = L.GetLargestID()
    # Свой участок за краем данных слоя
    pl = zulu.PolyLine()
    pl.AddPoint(R.Xmax + 100, R.Ymin)
    pl.AddPoint(R.Xmax + 100, R.Ymin + 200)
    key = L.AddPolyLine(pl, zulu.ElemStyle(), 6, 1)
    # Красим его в красный
    st = zulu.ElemStyle()
    st.LineColor = 255
    st.LineWidth = 3
    # Одному объекту ключ передается числом
    print("Применен стиль:", L.SetElemStyle(key, st, 0))
    print("цвет участка:", L.Elements.Item(key).ElemStyle.LineColor)
    # Убираем за собой все, что добавили
    keys = L.ElementKeys
    for i in range(keys.Count, 0, -1):
        if keys.Item(i) > n_before:
            L.DeleteElement(keys.Item(i))