Метод назначает слою, систему координат, описанную в другом слое.
Visual Basic:
Function TakeCRS(SrcLayer As Layer) As Long
SrcLayer - слой с исходной системой координат
Следует отметить, что происходит именно назначение для существующих данных системы координат. Никакого преобразования данных из текущей системы координат во вновь заданную не происходит.
Метод возвращает 0 при успехе и -1, если слой-источник не передан (Nothing). Слой, переданный сам себе, тоже дает 0 и ничего не меняет. Это то же самое, что взять систему методом GetCRS у одного слоя и отдать ее методом SetCRS другому.
Координаты объектов при этом не пересчитываются, а только читаются в единицах новой системы: расстояние, которое было записано в сантиметрах плана, после взятия географической системы показывается в градусах.
Пример берет систему координат у соседнего слоя карты и возвращает слою прежнюю.
Visual Basic:
Sub Layer_TakeCRS 'Берем карту и её активный слой Set M = Zulu.ActiveMapDoc Set L = M.Layers.Active Set Was = L.GetCRS S = "Левый край слоя: " & L.GetBoundsRectangle.Xmin 'Ищем на карте другой слой и берем его систему координат For i = 1 To M.Layers.Count Set Src = M.Layers.Item(i) If Src.Name <> L.Name Then S = S & vbCrLf & "берем систему у слоя: " & Src.UserName S = S & vbCrLf & "TakeCRS: " & L.TakeCRS(Src) S = S & vbCrLf & "тот же край теперь: " & L.GetBoundsRectangle.Xmin Exit For End If Next 'Возвращаем слою его систему L.SetCRS Was S = S & vbCrLf & "после возврата: " & L.GetBoundsRectangle.Xmin MsgBox S End SubPython:
import zulu def Macro_Layer_TakeCRS(): # Берем карту и её активный слой M = zulu.App.ActiveMapDoc L = M.Layers.Active was = L.GetCRS() print("Левый край слоя:", L.GetBoundsRectangle().Xmin) # Ищем на карте другой слой и берем его систему координат for i in range(1, M.Layers.Count + 1): src = M.Layers.Item(i) if src.Name != L.Name: print("берем систему у слоя:", src.UserName) print("TakeCRS:", L.TakeCRS(src)) print("тот же край теперь:", L.GetBoundsRectangle().Xmin) break # Возвращаем слою его систему L.SetCRS(was) print("после возврата:", L.GetBoundsRectangle().Xmin)