Возвращает коллекцию ElementKeys ключей объектов слоя, удовлетворивших заданным критериям пересечения с объектом PolyContour.
Visual Basic:
Function IntersectByPolyContour(PolyContour As PolyContour, Crit As eCrossCriteria, Reserved As Long) As ElementKeys
PolyContour - поликонтур для пересечения с объектами слоя
Crit - критерий пересечения может принимать значения из набора eCrossCriteria.
Reserved - значение зарезервировано, должно быть нулём.
Критерии те же, что у метода IntersectByContour: поликонтур из одного контура отбирает те же объекты, что и сам этот контур.
Контуры набираются в поликонтур методом AddContour, так что одним вызовом можно отобрать объекты сразу по нескольким областям.
Visual Basic:
Sub Layer_IntersectByPolyContour 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set R = L.GetBoundsRectangle 'Поликонтур из двух четвертей слоя: левой нижней и правой верхней Set PC = CreateObject("ZuluLib.PolyContour") Set C1 = CreateObject("ZuluLib.Contour") C1.AddPoint R.Xmin, R.Ymin C1.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymin C1.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2 C1.AddPoint R.Xmin, (R.Ymin + R.Ymax) / 2 PC.AddContour C1 Set C2 = CreateObject("ZuluLib.Contour") C2.AddPoint (R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2 C2.AddPoint R.Xmax, (R.Ymin + R.Ymax) / 2 C2.AddPoint R.Xmax, R.Ymax C2.AddPoint (R.Xmin + R.Xmax) / 2, R.Ymax PC.AddContour C2 S = "Контуров в поликонтуре: " & PC.Count S = S & vbCrLf & "целиком внутри: " & L.IntersectByPolyContour(PC, 1, 0).Count S = S & vbCrLf & "целиком или частично: " & L.IntersectByPolyContour(PC, 4, 0).Count MsgBox S End SubPython:
import zulu def Macro_Layer_IntersectByPolyContour(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active R = L.GetBoundsRectangle() # Поликонтур из двух четвертей слоя: левой нижней и правой верхней pc = zulu.PolyContour() c1 = zulu.Contour() c1.AddPoint(R.Xmin, R.Ymin) c1.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymin) c1.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2) c1.AddPoint(R.Xmin, (R.Ymin + R.Ymax) / 2) pc.AddContour(c1) c2 = zulu.Contour() c2.AddPoint((R.Xmin + R.Xmax) / 2, (R.Ymin + R.Ymax) / 2) c2.AddPoint(R.Xmax, (R.Ymin + R.Ymax) / 2) c2.AddPoint(R.Xmax, R.Ymax) c2.AddPoint((R.Xmin + R.Xmax) / 2, R.Ymax) pc.AddContour(c2) print("Контуров в поликонтуре:", pc.Count) print("целиком внутри:", L.IntersectByPolyContour(pc, 1, 0).Count) print("целиком или частично:", L.IntersectByPolyContour(pc, 4, 0).Count)