Преобразует линейные и площадные объекты группы в символьные.
Visual Basic:
Function ConvertToSymbols(Style As ElemStyle, ElemType As Long, ElemMode As Long, flags As Long) As Long
Style - стиль символьных примитивов: символ из библиотеки слоя (SymbolID) и его размер (SymbolSize). В Python значение None не принимается (TypeError): и для типового символа передают объект ElemStyle.
ElemType - ID символьного типа; -1 - примитив.
ElemMode - номер режима символьного типа; -1 - примитив.
flags - зарезервирован, должен быть 0.
Каждый линейный и площадной объект группы преобразуется так же, как методом Element.ConvertToSymbol (там описано, куда ставится символ и как действуют тип и режим). Символьные объекты группы не меняются, группа сохраняется. Изменения сразу вносятся в слой.
Метод возвращает 0, если объекты преобразованы (и у пустой группы), и -1, если преобразование невозможно: ElemType задает линейный тип или для примитива в стиле не указан символ.
Пример добавляет за краем данных активного слоя ломаную, выделяет ее и преобразует в символьный примитив - первый символ библиотеки слоя.
Visual Basic:
Sub Selection_ConvertToSymbols 'Берем активный слой карты, его группу и габариты Set L = Zulu.ActiveMapDoc.Layers.Active Set S = L.Selection Set R = L.GetBoundsRectangle If L.Symbols.Count = 0 Then MsgBox "В библиотеке слоя нет символов" Else 'Ломаная за краем данных слоя D = (R.Xmax - R.Xmin) / 10 Set PL = CreateObject("ZuluLib.PolyLine") PL.AddPoint R.Xmax + D, R.Ymin PL.AddPoint R.Xmax + 2 * D, R.Ymin Key = L.AddPolyLine(PL, CreateObject("ZuluLib.ElemStyle"), -1, -1) S.Clear S.AddElem Key 'Первый символ библиотеки слоя Set St = CreateObject("ZuluLib.ElemStyle") St.SymbolID = L.Symbols.GetIdByIndex(0) St.SymbolSize = 100 Res = S.ConvertToSymbols(St, -1, -1, 0) S.Clear MsgBox "Результат " & Res & ", графический тип объекта " & L.Elements.Item(Key).GraphType End If End SubPython:
import zulu def Macro_Selection_ConvertToSymbols(): # Берем активный слой карты, его группу и габариты L = zulu.App.ActiveMapDoc.Layers.Active S = L.Selection R = L.GetBoundsRectangle() if L.Symbols.Count == 0: print("В библиотеке слоя нет символов") return # Ломаная за краем данных слоя d = (R.Xmax - R.Xmin) / 10 PL = zulu.PolyLine() PL.AddPoint(R.Xmax + d, R.Ymin) PL.AddPoint(R.Xmax + 2 * d, R.Ymin) key = L.AddPolyLine(PL, zulu.ElemStyle(), -1, -1) S.Clear() S.AddElem(key) # Первый символ библиотеки слоя St = zulu.ElemStyle() St.SymbolID = L.Symbols.GetIdByIndex(0) St.SymbolSize = 100 res = S.ConvertToSymbols(St, -1, -1, 0) S.Clear() print("Результат", res, ", графический тип объекта", L.Elements.Item(key).GraphType)