Возвращает набор ключей, составляющий кратчайший путь с участием указанных точек (waypoints).
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