Возвращает коллекцию ElementKeys ключей объектов слоя, удовлетворивших заданным критериям пересечения с указанным контуром.
Visual Basic:
Function IntersectByContour(Contour As Contour, Crit As eCrossCriteria, Reserved As Long) As ElementKeys
Contour - контур для пересечения с объектами слоя.
Crit - критерий пересечения может принимать значения из набора eCrossCriteria.
Reserved - значение зарезервировано, должно быть нулём.
Критерии разбирают объекты слоя относительно контура: 1 отбирает лежащие внутри целиком, 2 - задетые частично, 4 - и те и другие; 8 - оставшиеся целиком снаружи, 16 - все, что хоть чем-то снаружи. Значение 1024 дает тот же набор, что и 4, а 32, 64, 128 и 256 - пустой набор.
Тот же разбор для нескольких контуров сразу дает метод IntersectByPolyContour, а для круговой области - IntersectByRadius.
Visual Basic:
Sub Layer_IntersectByContour 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set R = L.GetBoundsRectangle 'Контур на левую нижнюю четверть слоя Set C = CreateObject("ZuluLib.Contour") C.AddPoint R.Xmin, R.Ymin C.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymin C.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2 C.AddPoint R.Xmin, (R.Ymin + R.Ymax) / 2 S = "Всего объектов: " & L.ElementKeys.Count S = S & vbCrLf & "целиком внутри: " & L.IntersectByContour(C, 1, 0).Count S = S & vbCrLf & "задеты частично: " & L.IntersectByContour(C, 2, 0).Count S = S & vbCrLf & "целиком снаружи: " & L.IntersectByContour(C, 8, 0).Count MsgBox S End SubPython:
import zulu def Macro_Layer_IntersectByContour(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active R = L.GetBoundsRectangle() # Контур на левую нижнюю четверть слоя c = zulu.Contour() c.AddPoint(R.Xmin, R.Ymin) c.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymin) c.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2) c.AddPoint(R.Xmin, (R.Ymin + R.Ymax) / 2) print("Всего объектов:", L.ElementKeys.Count) print("целиком внутри:", L.IntersectByContour(c, 1, 0).Count) print("задеты частично:", L.IntersectByContour(c, 2, 0).Count) print("целиком снаружи:", L.IntersectByContour(c, 8, 0).Count)