Из слоя удаляются символьные объекты группы, соединенные с двумя участками, если они удовлетворяют условиям, заданным объектом ExcludeSymbolsParams. Участки объединяются в один объект.
Visual Basic:
Function ExcludeSymbolsEx(iParams As ExcludeSymbolsParams) As Long
iParams - объект с параметрами операции.
В отличие от ExcludeSymbols, обрабатываются только символы тех типов и режимов, которые добавлены методом AddTypeMode. Пока не добавлено ни одного типа и режима, метод не выполняет никаких действий.
Дополнительно можно потребовать совпадения значений полей семантической базы (AddEqualityCheckField) и суммирования значений полей у объединяемых участков (AddSumValuesField).
Метод возвращает число выполненных объединений. Если объединять нечего — повторный вызов на том же слое или вызов без единого добавленного типа — возвращается 0.
Visual Basic:
Sub Selection_ExcludeSymbolsEx 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Готовим параметры операции Set P = CreateObject("ZuluLib.ExcludeSymbolsParams") 'Добавляем все символьные типы слоя со всеми их режимами Set OTs = L.ObjectTypes For i = 0 To OTs.Count - 1 Set T = OTs.GetItemByIndex(i) 'GraphicType = 1 - символьный тип If T.GraphicType = 1 Then 'нумерация режимов начинается с единицы For m = 1 To T.Modes.Count - 1 P.AddTypeMode T.Id, m, 1 Next End If Next 'Выделяем все объекты слоя и выполняем операцию Set S = L.Selection S.SelectAll n = L.ElementKeys.Count S.ExcludeSymbolsEx P MsgBox "Объектов было: " & n & vbCrLf & "стало: " & L.ElementKeys.Count End SubPython:
import zulu def Macro_Selection_ExcludeSymbolsEx(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Готовим параметры операции P = zulu.ExcludeSymbolsParams() # Добавляем все символьные типы слоя со всеми их режимами OTs = L.ObjectTypes for i in range(OTs.Count): T = OTs.GetItemByIndex(i) # GraphicType = 1 - символьный тип if T.GraphicType == 1: # нумерация режимов начинается с единицы for m in range(1, T.Modes.Count): P.AddTypeMode(T.Id, m, 1) # Выделяем все объекты слоя и выполняем операцию S = L.Selection S.SelectAll() n = L.ElementKeys.Count S.ExcludeSymbolsEx(P) print("Объектов было:", n, "стало:", L.ElementKeys.Count)