ModifyByType method (Selection)

Изменяет группу по типу и режиму объектов.

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

Selection

Синтаксис:

Visual Basic:

Sub ModifyByType(What As eModifySelection, TypeID As Long, nMode As Long)

What - способ изменения: 1 (eSelCreate) - группа создается заново, 2 (eSelAppend) - объекты добавляются, 3 (eSelExclude) - объекты исключаются.

TypeID - ID типа (ObjectType.Id), 0 или -1 (см. ниже).

nMode - номер режима или 0.

Описание:

Отбираются объекты слоя по сочетанию параметров:

  • ID типа и номер режима - объекты этого типа в этом режиме;

  • ID типа и nMode = 0 - объекты типа в любом режиме;

  • TypeID = 0 и номер режима - типовые объекты всех типов в режиме с этим номером;

  • TypeID = 0 и nMode = 0 - все объекты слоя, включая примитивы;

  • TypeID = -1 - объекты графического типа (GraphType) на единицу меньше nMode: 1 - типовые линии, 2 - типовые площадные объекты, 3 - типовые символы, 4 - символы-примитивы, 5 - линии-примитивы, 6 - площадные примитивы, 7 - тексты-примитивы; при nMode = 0 - все примитивы.

Если подходящих объектов нет (например, типа с таким ID в слое нет), группа не меняется и при What = 1 - в ней остаются прежние объекты. При других значениях What группа тоже не меняется.

Пример:

Пример выделяет в активном слое все объекты первого символьного типа, а затем добавляет к ним все примитивы слоя.

Visual Basic:

Sub Selection_ModifyByType
Const eSelCreate = 1
Const eSelAppend = 2
'Берем активный слой карты и его группу
Set L = Zulu.ActiveMapDoc.Layers.Active
Set S = L.Selection
'Ищем первый символьный тип (GraphicType = 1)
Set OTs = L.ObjectTypes
T = -1
For i = 0 To OTs.Count - 1
  If OTs.GetItemByIndex(i).GraphicType = 1 And T = -1 Then T = OTs.GetItemByIndex(i).Id
Next
If T = -1 Then
  MsgBox "В слое нет символьного типа"
Else
  'Все объекты типа в любом режиме
  S.ModifyByType eSelCreate, T, 0
  N = S.ElementKeys.Count
  'Добавляем все примитивы слоя
  S.ModifyByType eSelAppend, -1, 0
  MsgBox "Объектов типа " & T & ": " & N & vbCrLf & "вместе с примитивами: " & S.ElementKeys.Count
  S.Clear
End If
End Sub

Python:

import zulu

eSelCreate = 1
eSelAppend = 2

def Macro_Selection_ModifyByType():
    # Берем активный слой карты и его группу
    L = zulu.App.ActiveMapDoc.Layers.Active
    S = L.Selection
    # Ищем первый символьный тип (GraphicType = 1)
    OTs = L.ObjectTypes
    ids = [OTs.GetItemByIndex(i).Id for i in range(OTs.Count) if OTs.GetItemByIndex(i).GraphicType == 1]
    if not ids:
        print("В слое нет символьного типа")
        return
    # Все объекты типа в любом режиме
    S.ModifyByType(eSelCreate, ids[0], 0)
    n = S.ElementKeys.Count
    # Добавляем все примитивы слоя
    S.ModifyByType(eSelAppend, -1, 0)
    print("Объектов типа", ids[0], ":", n, ", вместе с примитивами:", S.ElementKeys.Count)
    S.Clear()