 |
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
domn2
Зарегистрирован: 17.04.2013 Сообщения: 2
|
Добавлено: Ср 17 Апр 2013 22:41 Заголовок сообщения: Как избавиться от шлейфа при рисовании контура? |
|
|
Добрый вечер!
Повесил на событие MouseMove отрисовку временного контура:
при перемещении мыши конец контура (прямого отрезка) перемещается за ней.
Код: | contour[0].SetVertex(1, x, y, 0);
painter.PaintContour(mySurface, contour, ''); |
Но не знаю, как избавиться от "шлейфа". Дело в том, что при движении мыши каждый раз рисуется новый отрезок, а старые отрезки при этом остаются на экране. Мне же нужно, чтобы всегда был виден только один отрезок.
Нашёл один способ:
Код: | FIngeoApp.MainWindow.MapWindow.Invalidate; |
Но тогда будет перерисовываться всё, поэтому этот вариант не походит. Есть ли какой-нибудь другой способ удалять "старые" контуры с экрана или нужно каким-то образом очищать всю поверхность рисования? |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Чт 18 Апр 2013 07:17 Заголовок сообщения: Re: Как избавиться от шлейфа при рисовании контура? |
|
|
domn2 писал(а): |
Нашёл один способ:
Код: | FIngeoApp.MainWindow.MapWindow.Invalidate; |
Но тогда будет перерисовываться всё, поэтому этот вариант не походит. Есть ли какой-нибудь другой способ удалять "старые" контуры с экрана или нужно каким-то образом очищать всю поверхность рисования? |
В версии 4.6 (которая сейчас на бета тестировании) всё перерисовываться и моргать не будет.
Найденный вами способ - правильный и рекомендованный в версиях 4.6 и выше.
Можно чуть-чуть оптимизировать, если вызывать не Invalidate, а InvalidateRect, в котором указывать прямоугольник, включающий габариты старой линии и новой.
В старых версиях можно применять режим инвертирования при рисовании линии. Для этого в параметрах окантовки Pen.Mode надо задавать inpmXor. Если одну и ту же линию нарисовать два раза, она сотрется.
Но я рекомендую использовать Invalidate. Программная логика упрощается, и в 4.6 визуально приятнее. Кроме того, процесс действий пользователя можно сопровождать богатыми декорациями, не стесняя себя ограничениями инверсных линий. _________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
domn2
Зарегистрирован: 17.04.2013 Сообщения: 2
|
Добавлено: Чт 18 Апр 2013 12:39 Заголовок сообщения: |
|
|
Большое спасибо за ответ!
Попробовал через режим отрисовки — всё работает. Только одно уточнение: надо ставить inpmNotXor. |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|