ConvertPrimitiveToType method (Layer)

Преобразует примитивы в типовые объекты.

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

Layer

Синтаксис:

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 Sub

Python:

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)