Аналитика
http://www.geosystema.net/forum/

Сложение и вычитание координат
http://www.geosystema.net/forum/viewtopic.php?f=1&t=19476
Страница 1 из 1

Автор:  nullbyte [ 30 авг 2014 10:04 ]
Заголовок сообщения:  Сложение и вычитание координат

Доброго времени суток!
Пытаюсь написать скрипт:
Код:
; Получаем исходные данные
$SourceObject=@Map.NextSelected
$PointsCount=@Map.Object[$SourceObject].Count
; Стандартные значения
$BorderLayerID=100001
$BorderHeigth=100,0
$BorderWidth=100,0
$CurrentPoint=1
; Создаем слой для рамки
@Map.Layers.Add $BorderLayerID 1 Секущая рамка
; Цикл по всем точкам объекта
%PointCycle
; Получаем координаты исходной точки
$CurrX=@Map.Object[$SourceObject].Point[$CurrentPoint].X
$CurrY=@Map.Object[$SourceObject].Point[$CurrentPoint].Y
; Прибавляем нужные значения
$x1=$CurrX+$BorderHeigth
$y1=$CurrY
$x2=$CurrX
$y2=$CurrY+$BorderWidth
$x3=$CurrX-$BorderHeigth
$y3=$CurrY
$x4=$CurrX
$y4=$CurrY-$BorderWidth
; Создаем рамку вокруг точки
$CutBorder=@Map.AddObject 0|0|ID$BorderLayerID|5|0 x1 y1 0|0 x2 y2 0|0 x3 y3 0|0 x4 y4 0|0 x1 y1 0
; Выделяем и разворачиваем
@Map.SelectObject $CutBorder
@Map.Selected.Rotate 45
; Превращаем в рамку карты
@Map.FrameSelected
; Сохраняем в графический файл
@Map.SaveToTIF 300 24 МЗ_$CurrentPoint.jpg
; Удалить рамку
@Map.DeleteObject $CutBorder
$CurrentPoint=$CurrentPoint+1
@If $CurrentPoint<$PointsCount then @Goto %PointCycle

Что он должен делать (пример): есть полигон, содержит 4 точки. Выделяю его, нажимаю кнопку скрипта > Вокруг каждой точки полигона, по очереди создается рамка (тоже полигон из 4 точек), разворачивается на 45 гр. > рамка превращается в рамку карты (желтую) > сохраняется в виде картинки с задаными параметрами.
Проблема в том, что выражение
Код:
$x1=$CurrX+$BorderHeigth
не складывает координаты (например, $x1=100,0+100,0=>$x1=200,0), а превращается в строку ($x1=100,0+100,0=>$x1=100,0+100,0). Естественно, потом при создании объекта ошибка:
Изображение
Пожалуйста, помогите, кто знает! :?

Автор:  Dmitry_Zolotar [ 01 сен 2014 13:25 ]
Заголовок сообщения:  Re: Сложение и вычитание координат

Проблема в знаке-разделителе целой и дробной части. Варианты решения:
1. Сменить системный разделитель с запятой на точку.
2. Использовать замену символов, перед арифметическими операциями, см. функции %Library.ReplaceDot и %Library.ReplaceComma из дистрибутива.

Автор:  nullbyte [ 01 сен 2014 14:16 ]
Заголовок сообщения:  Re: Сложение и вычитание координат

Dmitry_Zolotar писал(а):
см. функции %Library.ReplaceDot и %Library.ReplaceComma из дистрибутива.
Если можно, подробнее о применении этих функций? Например, при таком коде, они не дают результат (координаты выводятся с запятой):
Код:
%Library.ReplaceDot
$CurrObj=@Map.NextSelected
$FirstPoint=@Map.Object[$CurrObj].Point[1]
@Dialog.Message $FirstPoint
Пытался писать и %Library.ReplaceDot и %Library.ReplaceComma, разницы нет. Такие функции конечно лучше, чем менять системный разделитель.
Что я делаю не так?
Кстати, на такой код:
Код:
%Library.ReplaceComma
$x1=100,0
$x2=100,0
$x3=$x1+$x2
@Dialog.Message $x3
тоже не действует, складывает строки, а не значения. Работает только в таком виде:
Код:
%Library.ReplaсеComma
$x1=100.0
$x2=100.0
$x3=$x1+$x2
@Dialog.Message $x3
и опять же %Library.ReplaceХ роли не сыграли.

Автор:  Dmitry_Zolotar [ 01 сен 2014 16:33 ]
Заголовок сообщения:  Re: Сложение и вычитание координат

$x1=100,0
$x2=100,0
$x1=%Library.ReplaceComma $x1
$x2=%Library.ReplaceComma $x2
$x3=$x1+$x2
@Dialog.Message $x3

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/