Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 19 ноя 2017 16:06

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Сложение и вычитание координат
СообщениеДобавлено: 30 авг 2014 10:04 
Специалист
Специалист

Зарегистрирован:
09 июн 2013 11:51
Сообщения: 18
Доброго времени суток!
Пытаюсь написать скрипт:
Код:
; Получаем исходные данные
$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). Естественно, потом при создании объекта ошибка:
Изображение
Пожалуйста, помогите, кто знает! :?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложение и вычитание координат
СообщениеДобавлено: 01 сен 2014 13:25 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 1863
Откуда: Vinnitsa
Проблема в знаке-разделителе целой и дробной части. Варианты решения:
1. Сменить системный разделитель с запятой на точку.
2. Использовать замену символов, перед арифметическими операциями, см. функции %Library.ReplaceDot и %Library.ReplaceComma из дистрибутива.

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Сложение и вычитание координат
СообщениеДобавлено: 01 сен 2014 14:16 
Специалист
Специалист

Зарегистрирован:
09 июн 2013 11:51
Сообщения: 18
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Х роли не сыграли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сложение и вычитание координат
СообщениеДобавлено: 01 сен 2014 16:33 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 1863
Откуда: Vinnitsa
$x1=100,0
$x2=100,0
$x1=%Library.ReplaceComma $x1
$x2=%Library.ReplaceComma $x2
$x3=$x1+$x2
@Dialog.Message $x3

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB