Аналитика 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 Пытался писать и %Library.ReplaceDot и %Library.ReplaceComma, разницы нет. Такие функции конечно лучше, чем менять системный разделитель.$CurrObj=@Map.NextSelected $FirstPoint=@Map.Object[$CurrObj].Point[1] @Dialog.Message $FirstPoint Что я делаю не так? Кстати, на такой код: Код: %Library.ReplaceComma тоже не действует, складывает строки, а не значения. Работает только в таком виде:$x1=100,0 $x2=100,0 $x3=$x1+$x2 @Dialog.Message $x3 Код: %Library.ReplaсеComma и опять же %Library.ReplaceХ роли не сыграли.
$x1=100.0 $x2=100.0 $x3=$x1+$x2 @Dialog.Message $x3 |
Автор: | 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/ |