Преобразует примитивы в типовые объекты.
Visual Basic:
Function ConvertPrimitiveToType(Elems, TypeID, ModeNum) As Boolean
Elems - переменная типа VARIANT, содержащий набор ключей объектов, подлежащих преобразованию. Множество ключей может быть задано коллекцией ElementKeys или массивом VT_ARRAY. Одиночный объект может быть задан просто числом (VT_I4)
TypeID - ID типа, в который преобразуется примитив.
ModeNum - номер режима, в который преобразуется примитив.
Преобразованию подлежат примитивы, графический тип которых совпадает с графическим типом указанного типового объекта.
Массив ключей должен состоять из целых чисел (VT_ARRAY | VT_I4). Массив значений Variant, который строит функция Array в VBScript, метод не принимает и возвращает False; из VBScript ключи передаются коллекцией ElementKeys или по одному.
Метод возвращает False, если тип или номер режима не существуют. Результат True не означает, что преобразован хотя бы один объект: примитивы другого графического типа, уже типовые объекты и несуществующие ключи пропускаются без ошибки.
Visual Basic:
Sub Layer_ConvertPrimitiveToType 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Тип и режим берем у первой типовой линии слоя Set En = L.EnumElements En.MoveFirst Do While Not En.IsEOF If En.GraphType = 0 Then Exit Do En.MoveNext Loop If En.IsEOF Then MsgBox "В слое нет типовых линий" Exit Sub End If TypeID = En.TypeID ModeNum = En.ModeId 'Добавляем правее слоя простую линию и преобразуем ее в типовую Set R = L.GetBoundsRectangle 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) If L.ConvertPrimitiveToType(Key, TypeID, ModeNum) Then MsgBox "Линия " & Key & " стала типовой: тип " & L.Elements.Item(Key).TypeID End If End SubPython:
import zulu def Macro_Layer_ConvertPrimitiveToType(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Тип и режим берем у первой типовой линии слоя En = L.EnumElements() En.MoveFirst() while not En.IsEOF() and En.GraphType != 0: En.MoveNext() if En.IsEOF(): print("В слое нет типовых линий") return type_id, mode_num = En.TypeID, En.ModeId # Добавляем правее слоя простую линию и преобразуем ее в типовую R = L.GetBoundsRectangle() 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) if L.ConvertPrimitiveToType(key, type_id, mode_num): print("Линия", key, "стала типовой: тип", L.Elements.Item(key).TypeId)