Объект, содержащий описание и методы работы по созданию стиля одиночной линии или символа для добавления в объект LineStyleDef.
Входит в состав библиотеки ZuluGIS 2021 Library.
PROGID:
ZuluLib.LineStyleElement
CLSID:
{1250748F-11DD-4DDC-AFDA-3007DB025F4D}
Свойств у объекта нет: все значения читаются и задаются парами методов Get и Set. Одна половина методов описывает одиночную линию, другая - символ, повторяющийся вдоль линии; в стиль элемент добавляют методом AddLineElement или AddSymbolElement в зависимости от того, что он описывает.
У только что созданного элемента тип линии равен 1, толщина - 0,0265 миллиметра, то есть тончайшая линия в одну точку, а цвет, шаг, штрих, сдвиги, окончание, а также все величины символа - нули; символ не задан, и GetSymbol возвращает Nothing. Незаданная половина так и остается нулевой: у линейного элемента величины символа - нули, у символьного - величины линии.
Заданные значения читаются обратно теми же числами. В стиль элемент попадает копией: элемент, взятый из StyleElements, - уже другой объект, а значения у него те же.
Пример собирает стиль из двух элементов - красной линии и символа вдоль нее - и читает обратно то, что получилось.
Visual Basic:
Sub LineStyleElement_cls 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set lsd = CreateObject("ZuluLib.LineStyleDef") 'Элемент-линия: красная, толщиной 2, штриховая Set line = CreateObject("ZuluLib.LineStyleElement") line.SetLineColor RGB(255, 0, 0) line.SetLineWidth 2 line.SetLineStep 10 line.SetLineDash 4 lsd.AddLineElement line 'Элемент-символ: символ слоя через каждые 30 единиц Set sym = CreateObject("ZuluLib.LineStyleElement") sym.SetSymbol L.Symbols.ItemById(2) sym.SetSymbolScale 1 sym.SetSymbolStep 30 lsd.AddSymbolElement sym 'Читаем обратно то, что легло в стиль Set els = lsd.StyleElements S = "Элементов в стиле: " & els.Count S = S & vbCrLf & "линия: цвет " & els.Item(0).GetLineColor & ", толщина " & els.Item(0).GetLineWidth & _ ", шаг " & els.Item(0).GetLineStep & ", штрих " & els.Item(0).GetLineDash S = S & vbCrLf & "символ: масштаб " & els.Item(1).GetSymbolScale & ", шаг " & els.Item(1).GetSymbolStep 'Кладем стиль в библиотеку стилей слоя S = S & vbCrLf & "новый стиль получил Id " & L.LineStyles.AddItem(lsd, -1) MsgBox S End SubPython:
import zulu def Macro_LineStyleElement_cls(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active lsd = zulu.LineStyleDef() # Элемент-линия: красная, толщиной 2, штриховая line = zulu.LineStyleElement() line.SetLineColor(255) line.SetLineWidth(2) line.SetLineStep(10) line.SetLineDash(4) lsd.AddLineElement(line) # Элемент-символ: символ слоя через каждые 30 единиц sym = zulu.LineStyleElement() sym.SetSymbol(L.Symbols.ItemById(2)) sym.SetSymbolScale(1) sym.SetSymbolStep(30) lsd.AddSymbolElement(sym) # Читаем обратно то, что легло в стиль els = lsd.StyleElements print("Элементов в стиле:", els.Count) print("линия: цвет", els.Item(0).GetLineColor(), ", толщина", els.Item(0).GetLineWidth(), ", шаг", els.Item(0).GetLineStep(), ", штрих", els.Item(0).GetLineDash()) print("символ: масштаб", els.Item(1).GetSymbolScale(), ", шаг", els.Item(1).GetSymbolStep()) # Кладем стиль в библиотеку стилей слоя print("новый стиль получил Id", L.LineStyles.AddItem(lsd, -1))