GetShortWay method (Layer)

Возвращает набор ключей, составляющий кратчайший путь с участием указанных точек (waypoints).

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

Layer

Синтаксис:

Visual Basic:

Function GetShortWay(Waypoints) As ElementKeys

Waypoints - массив (safearray) ID точек, через которые должен проходить путь.

Описание:

Метод возвращает кратчайший путь, проходящий через указанные точки (waypoints). Точки задаются параметром Waypoints в виде массива (safearray) элементов типа long (VT_I4), содержащего ключи объектов слоя.

Готовый массив такого вида дает метод SaveToArray коллекции ElementKeys; массив, собранный в скрипте обычными средствами, метод не принимает и возвращает пустой набор. Ключи в коллекции идут по возрастанию, поэтому порядок точек в пути задается их значениями.

Точками должны быть узлы сети: путь возвращается цепочкой ключей от первой точки до последней, где чередуются узлы и участки, а сами точки входят в набор. Если пути нет, если точка всего одна или если вместо узла передан участок, набор пуст.

Подготовка сети методом NetWorkDataPrepare для работы метода не требуется.

В макросе на python метод неприменим: массива нужного вида там получить нечем - SaveToArray возвращает None, а список, кортеж, массив array.array и саму коллекцию ключей метод не принимает и тоже возвращает None. Путь между двумя узлами в этом случае дает дерево кратчайших путей: GetShortWayTree и метод GetWay возвращают ту же цепочку ключей.

Пример:

Visual Basic:

Sub Layer_GetShortWay
'Берем активный слой тепловой сети
Set L = Zulu.ActiveMapDoc.Layers.Active
'Точки пути набираем выделением: 2 и 15 - ключи узлов
L.Selection.Clear
L.Selection.AddElem 2
L.Selection.AddElem 15
'Массив нужного вида дает SaveToArray
Set Keys = L.GetShortWay(L.Selection.ElementKeys.SaveToArray)
S = "В пути объектов: " & Keys.Count
For i = 1 To Keys.Count
  S = S & vbCrLf & "ключ " & Keys.Item(i)
Next
MsgBox S
End Sub