SASGIS - SAS.Планета
View Issue Details
0003116SAS.Планета[All Projects] Хотелкаpublic23-07-2016 20:0625-07-2016 07:48
DJ VK 
 
normalfeaturehave not tried
confirmedopen 
Windows7Ultimate
160707 
27xxxx 
0003116: Разворачивание петли полигона
Еще одна полезная функция при создании полигонов. Пользователь внезапно обнаруживает, что модифицированный участок полигона нарисован в обратном порядке и полигон ошибочно пересекает сам себя. Он включает режим разворота петли (новой кнопкой), указывает мышью две точки, ограничивающие неверный участок и указывает какой участок надо развернуть (по часовой стрелке или против от первой точки).Жмем ок. Все точки на указанном участке между двумя выбранными меняют свой порядок.
метки, полигон
related to 0001735resolved zed Смена направления трека 
related to 0003115confirmed  Изменение порядка следования точек полигона 
Issue History
23-07-2016 20:06DJ VKNew Issue
23-07-2016 20:10DJ VKTag Attached: полигон
23-07-2016 20:32DJ VKNote Added: 0017556
23-07-2016 20:37DJ VKNote Edited: 0017556bug_revision_view_page.php?bugnote_id=17556#r7042
24-07-2016 20:17vdemidovStatusnew => confirmed
24-07-2016 20:17vdemidovProduct Version.Nightly => 160707
24-07-2016 20:17vdemidovTarget Version.Nightly => 27xxxx
24-07-2016 20:17vdemidovTag Attached: метки
24-07-2016 20:17vdemidovRelationship addedrelated to 0001735
24-07-2016 20:18vdemidovRelationship addedrelated to 0003115
25-07-2016 07:48zedSummaryРазворачивание петли полигона. => Разворачивание петли полигона

Notes
(0017556)
DJ VK   
23-07-2016 20:32   
(edited on: 23-07-2016 20:37)
Как задать петлю.
1)Например(!) пользователь включает режим разворота и тащит первую точку перед петлей (пересечением) на следующую после петли. При этом не перемещается первая точка, а от нее рисуется вспомогательная линия до мыши.
Если мышь была отпущена убеждаемся что она на другой точке.
Если между первой (M) и последней (N) точкой участка не меньше 2х точек (N > M+2) проверяем отрезки (M, M+1) и (N, N-1) - если они пересекаются разворачиваем точки M+1 .... N-1.
В случае отсутствия пересечения смотрим отрезки (M, M-1) и (N, N + 1) - Если они пересекаются разворачиваем все точки на отрезке (N+1,..,последняя, первая, .., M-1)
Esc и отжатие кнопки отключает режим разворота.
2)Можно сделать более сложное управление. Например пользователь указывает не 2 точки, а точку пересечения двух отрезков утапливая мышку(OnMouseDown) и направление перемещая и отпуская (Сравниваем координаты в OnMouseUp)
3)Любые Ваши предложения... )

Для режима разворота также можно поменять курсор на стрелку и петлю рядом с ней.