Возвращает интерфейс IReliefLayer для работы со слоем рельефа.
Visual Basic:
Property ReliefLayer As IReliefLayer
read-only
Свойство возвращается всегда, независимо от того, является ли слой слоем рельефа или нет. Если слой не является слоем рельефа, то методы возвращаемого интерфейса не будут выполнять со слоем никаких действий.
Отличить один случай от другого удобно по отметке: у слоя, который рельефом не является, GetZ возвращает -1000000 - признак «данных нет». То же значение приходит и у настоящего слоя рельефа, если точка лежит вне триангуляции.
Для серии запросов отметок объект переводят в быстрый режим методами QuickAccessStart и QuickAccessStop.
Третьим параметром GetZ идет система координат точки. В VBScript вместо нее можно передать Nothing - тогда координаты считаются заданными в системе слоя. В python пустое значение не принимается («bad argument type»), поэтому систему берут у самого слоя методом GetCRS; ответ получается тот же.
Visual Basic:
Sub Layer_ReliefLayer 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active Set R = L.GetBoundsRectangle Set RL = L.ReliefLayer 'Спрашиваем отметку в середине слоя X = (R.Xmin + R.Xmax) / 2 Y = (R.Ymin + R.Ymax) / 2 Z = RL.GetZ(X, Y, Nothing) If Z = -1000000 Then MsgBox "Слой " & L.UserName & " отметок в этой точке не дает" Else MsgBox "Отметка в середине слоя: " & Z End If End SubPython:
import zulu def Macro_Layer_ReliefLayer(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active R = L.GetBoundsRectangle() rl = L.ReliefLayer # Спрашиваем отметку в середине слоя x = (R.Xmin + R.Xmax) / 2 y = (R.Ymin + R.Ymax) / 2 # систему координат берем у слоя: пустое значение python не принимает z = rl.GetZ(x, y, L.GetCRS()) if z == -1000000: print("Слой", L.UserName, "отметок в этой точке не дает") else: print("Отметка в середине слоя:", z)