Строит вогнутую оболочку объектов группы и возвращает ее контуром.
Visual Basic:
Function CreateConcaveHull(EdgeLengthParameter As Double, flags As Long) As Contour
EdgeLengthParameter - параметр, задающий степень вогнутости.
flags - 0 - параметр относительный, 1 - параметр задает длину ребра в метрах.
Параметр EdgeLengthParameter определяет, какие длинные ребра можно исключать из оболочки: чем он меньше, тем глубже оболочка вдается в промежутки между объектами и тем больше в ней вершин.
При flags = 0 параметр задается от 0 до 1: 0 - наибольшая вогнутость без нарушения связности оболочки, 1 - выпуклая оболочка, та же, что строит CreateConvexHull. Значения больше 1 дают выпуклую оболочку, меньше 0 - то же, что 0.
При flags = 1 параметр задает наибольшую длину ребра оболочки в метрах: чем она больше, тем ближе оболочка к выпуклой.
Метод возвращает новый контур в координатах слоя; в слой он не добавляется (добавить его можно методом Layer.AddContour). У пустой группы и у группы из одного символа метод возвращает Nothing.
Пример выделяет все объекты активного слоя и сравнивает число вершин вогнутой и выпуклой оболочек.
Visual Basic:
Sub Selection_CreateConcaveHull 'Берем активный слой карты и его группу Set L = Zulu.ActiveMapDoc.Layers.Active Set S = L.Selection S.SelectAll 'Вогнутая оболочка с относительным параметром 0,5 Set Cc = S.CreateConcaveHull(0.5, 0) Set Cv = S.CreateConvexHull S.Clear If Cc Is Nothing Then MsgBox "Оболочку построить не по чему" Else MsgBox "Вершин в вогнутой оболочке: " & Cc.NumTops & vbCrLf & "в выпуклой: " & Cv.NumTops End If End SubPython:
import zulu def Macro_Selection_CreateConcaveHull(): # Берем активный слой карты и его группу L = zulu.App.ActiveMapDoc.Layers.Active S = L.Selection S.SelectAll() # Вогнутая оболочка с относительным параметром 0,5 Cc = S.CreateConcaveHull(0.5, 0) Cv = S.CreateConvexHull() S.Clear() if Cc is None: print("Оболочку построить не по чему") else: print("Вершин в вогнутой оболочке:", Cc.NumTops, ", в выпуклой:", Cv.NumTops)