CreateConcaveHull method (Selection)

Строит вогнутую оболочку объектов группы и возвращает ее контуром.

Применяется к:

Selection

Синтаксис:

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 Sub

Python:

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)