Изменяет группу по типу и режиму объектов.
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 SubPython:
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()