Здравствуйте! Просьба помочь с написанием макроса.
Пытаюсь с помощью LayerTransform масштабировать и перенести в нужные координаты растровый слой. Но растр почему-то смещается намного ниже необходимого места. Причем если трансформировать слой с клавиатуры и вводить те же самые аргументы слой становится в нужные координаты.
В чём может быть причина этого? Код и картинка ниже.
Скрытый текст |
---|
[CODE]Set out = Zulu.OpenOutputChannel("Сообщения") out.Clear Set Map = Zulu.ActiveMapDoc
'Получаем активный слой (растр) Set L = MAP.Layers.Active
Set Plan = MAP.Layers.GetItemByUserName("План_сущ_пол")
'Текущие объекты, по которым проверяется масштаб Set a1 = PLAN.Elements.Item(1148).GetBoundsRectangle(0) Set a2 = PLAN.Elements.Item(531).GetBoundsRectangle(0) 'Правильное расстояние между объектами a1_a2 = ((a2.Xmax - a1.Xmin) ^ 2 + ((a2.Ymax - a1.Ymin))^2)^(1/2)
'Объекты на растре Set b1 = PLAN.Elements.Item(3084).GetBoundsRectangle(0) Set b2 = PLAN.Elements.Item(3085).GetBoundsRectangle(0)
'Границы растра Set M = L.GetBoundsRectangle
'Правильное расстояние между объектами b1_b2 = ((b1.Xmin - b2.Xmax)^2 + (b1.Ymin - b2.Ymax)^2) ^(1/2)
X = b1.Xmin ' Текущая координата X Y = b1.Ymin ' Текущая координата Y
Kx = a1_a2/b1_b2 ' коэффициент искажения масштаба по X Ky = Kx ' коэффициент искажения масштаба по Y Xc = (M.Xmin + M.Xmax) / 2 'координаты точки поворота Yc = (M.Ymin + M.Ymax) / 2 'координаты точки поворота Fi = 0 'угол поворота Xs = a1.Xmin - (Xc + Kx * (X - Xc) * Cos(Fi) - Ky * (Y - Yc) * Sin(Fi)) 'смещение по X Ys = a1.Ymin - (Yc + Kx * (X - Xc) * Sin(Fi) + Ky * (Y - Yc) * Cos(Fi)) 'смещение по Y
OUT.Put cstr(X) + Chr(10) + cstr(Y) + Chr(10) + cstr(Xs) + Chr(10) + cstr(Ys) + Chr(10) + cstr(Kx) + Chr(10) + cstr(Ky) + Chr(10) + cstr(Xc) + Chr(10) + cstr(Yc) + Chr(10)
TRANS.LayerTransform L.Name, Kx, Ky, Fi, Xc, Yc, Xs, Ys MAP.Layers.Remove L MAP.AddLayer L.Name [/CODE] |
Скрытый текст |
---|
[IMG WIDTH=366 HEIGHT=505]https://cdn1.savepice.ru/uploads/2020/4/8/a49f93772b4963d1e5d492d094f389d9-full.png[/IMG] |