Изменяет стиль отображения у заданной группы объектов.
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 SubPython:
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))