Аналитика

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

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




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Как это сделать
СообщениеДобавлено: 02 апр 2013 13:50 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Alexander писал(а):
Все отрогонально все параллельно.Точки могут быть с любой стороны.Только прямоугольник(квадрат).

Смотрите пример скрипта viewtopic.php?p=15462&f=1#15462. Правда здесь для упрощения принято, что точки могут быть только сверху и слева. Скрипт можно дополнить анализом положения точек, чтобы допустить их расположение с любой стороны. Если не справитесь, я помогу.

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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как это сделать
СообщениеДобавлено: 04 апр 2013 07:33 
Эксперт
Эксперт

Зарегистрирован:
12 фев 2011 20:11
Сообщения: 72
Redvan писал(а):
Скрипт можно дополнить анализом положения точек, чтобы допустить их расположение с любой стороны. Если не справитесь, я помогу.

Спасибо!Все отлично!С анализом положения точек уже не справился!


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как это сделать
СообщениеДобавлено: 06 апр 2013 08:11 
Эксперт
Эксперт

Зарегистрирован:
12 фев 2011 20:11
Сообщения: 72
Redvan писал(а):
Смотрите пример скрипта viewtopic.php?p=15462&f=1#15462

В прилагаемом примере у меня все работает, создаю свои задачки - не работает.


Вложения:
333.dmf [178.98 Кб]
Скачиваний: 600
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как это сделать
СообщениеДобавлено: 06 апр 2013 15:31 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
Alexander писал(а):
В прилагаемом примере у меня все работает, создаю свои задачки - не работает.
От, підшаманив трохи. Працює незалежно від десяткового розділювача. Біда була втому, що в коді розумілось: ліва сторона прямокутника має Y менше 1 000 000, у Вас більше. Тоді в скрипті, припустим $Left=10 000 000, тоді все працює "на ура"
Код:
$C=@Map.SelCount
@If $C<>3 @Break Нужно пометить прямоугольник и 2 точки, к которым требуется переместить прямоугольник
;
;получаем индексы прямоугольника и 2-х точек
$N=1
$Rect=0
$Pnt1=0
$Pnt2=0
%Start1
$C=@Map.Object[$N].Count
@If ($C=5) and ($Rect=0) then $Rect=$N
@If ($C=1) and ($Pnt1=0) then $Pnt1=$N
@If ($C=1) and ($Pnt2=0) and ($Pnt1<>$N) then $Pnt2=$N
$N=@Map.NextSelected $N
@If $N>0 @Goto %Start1
@If ($Rect=0) or ($Pnt1=0) or ($Pnt2=0) then @Break Среди помеченных не найдены прямоугольник либо точки
;
$Separator=@DecimalSeparator
;находим верхнюю и левую границы прямоугольника
;в карте не должно быть отрицательных координат!
$Top=0
$Left=10000000
$N=1
%Start2
$P=@Map.Object[$Rect].Point[$N]
$X=@StringPart 1 $P
@If $Separator=, then $X=@Calc Replace("$X",",",".",1)
$X=@DequoteText $X
$Y=@StringPart 2 $P
@If $Separator=, then $Y=@Calc Replace("$Y",",",".",1)
$Y=@DequoteText $Y
@If $X>$Top then $Top=$X
@If $Y<$Left then $Left=$Y
$N=$N+1
@If $N<5 @Goto %Start2
;
;определяем какая точка выше
$P1=@Map.Object[$Pnt1].Point[1]
$X1=@StringPart 1 $P1
@If $Separator=, then $X1=@Calc Replace("$X1",",",".",1)
$X1=@DequoteText $X1
;
$Y1=@StringPart 2 $P1
@If $Separator=, then $Y1=@Calc Replace("$Y1",",",".",1)
$Y1=@DequoteText $Y1
$P2=@Map.Object[$Pnt2].Point[1]
$X2=@StringPart 1 $P2
@If $Separator=, then $X2=@Calc Replace("$X2",",",".",1)
$X2=@DequoteText $X2
$Y2=@StringPart 2 $P2
@If $Separator=, then $Y2=@Calc Replace("$Y2",",",".",1)
$Y2=@DequoteText $Y2
;
;находим векторы перемещения прямоугольника по X и по Y
;если первая точка выше
@If $X1>=$X2 then $VX=$X1-$Top
@If $X1>=$X2 then $VY=$Left-$Y2
;если вторая точка выше
@If $X1<$X2 then $VX=$X2-$Top
@If $X1<$X2 then $VY=$Left-$Y1
;
;перемещаем прямоугольник
@Map.Undo.StartOperationGroup
$N=1
%Start3
$P=@Map.Object[$Rect].Point[$N]
$X=@StringPart 1 $P
@If $Separator=, then $X=@Calc Replace("$X",",",".",1)
$X=@DequoteText $X
$Y=@StringPart 2 $P
@If $Separator=, then $Y=@Calc Replace("$Y",",",".",1)
$Y=@DequoteText $Y
$Z=@StringPart 3 $P
$X=$X+$VX
@If $Separator=, then $X=@Calc Replace("$X",".",",",1)
$X=@DequoteText $X
$Y=$Y-$VY
@If $Separator=, then $Y=@Calc Replace("$Y",".",",",1)
$Y=@DequoteText $Y
@Map.Object[$Rect].Point[$N] $X $Y $Z
$N=$N+1
@If $N<=5 @Goto %Start3
@Map.RefreshObject $Rect
@Window.Refresh


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как это сделать
СообщениеДобавлено: 06 апр 2013 18:20 
Эксперт
Эксперт

Зарегистрирован:
12 фев 2011 20:11
Сообщения: 72
Спасибо! Обкатаем!


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 197


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

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