Форум: "Media";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
ВнизРисование на рисунке. Найти похожие ветки
← →
Sergo1 (2003-08-05 15:56) [0]Как сделать правильно:
есть рисунок (кусочек карты), который используется в качестве холста (canvas), на котором хочется сделать некоторое изображение (нанести окружности, отрезки и т.д.). В процессе рисования, например, у окружности, есть размеры, заданные по умолчанию (радиус окружности), но пользователь может изменять эти размеры (увеличивать, уменьшать). Хочется измененное сразу отображать, чтобы было видно как, что и насколько изменилось, и как теперь выглядит. При этом окружности, линии и прочее нарисованное сверху канвы может пересекаться (если бы это было на без подложенного холста, можно было бы при изменении радиуса окружности просто прорисовывать цветом фона окружность старого радиуса, а потом рисовать окружность нового изененного радиуса).
Как правильно реализовать рисование изменений я не знаю, но есть идеи:
1. Все рисуемое на канве заносить в базу данных, матрицу или запоминать еще как-нибудь.
При изменениях рисовать на чистом холсте все заново (окружности, отрезки и т.д.) с учетом внесенных изменений (рисовать окружность уже нового радиуса).
2. Запоминать, например, квадратный кусок изображения до рисования окружности (этот квадрат должен содержать внутри себя окружность), если радиус изменился, то вставляем из памяти квадрат (как будто и не рисовали окружность) , запоминаем квадрат, но уже измененных размеров и рисуем окружность с измененным радиусом.
(Полагаю, что этот метод не очень удобен, поскольку прийдется запоминать куски изображения для каждогй нарисованной окружности) или, если запоминать только один кусочек изображения, то возникнут неудобства при возвращении к изменению радиуса окружности через какое-то время.
3. Можно было бы окружность старого радиуса прорисовать прозрачным цветом (т.е. стереть, по-сути), но я не нашел как это сделать.
Если кто-то знает как делаются подобные вещи, подскажите, пожалуйста.
← →
iXuSs (2003-08-05 16:26) [1]Вариант 1 ИМХО самый верный - иметь список всех объектов на карте с их параметрами.
← →
BOA_KAA (2003-08-05 16:42) [2]В процессе изменений, пока пользователь не выбрал диаметр или что там еще нужно просто нужно установить
Pen.Mode:=pmNotXor;
Повторная прорисовка уничтожает то, что было нарисовано ранее. Проще говоря, нарисуешь окружность, потом повторно и она исчезнет
← →
iXuSs (2003-08-05 17:19) [3]2 BOA_KAA:
А как же тогда узнать, есть ли вообще в этой области какие-то фигуры, если они принадлежать канве?
← →
Fenik (2003-08-05 18:17) [4]1
← →
pasha676 (2003-08-06 10:20) [5]Самое простое решение - xor (см. BOA_KAA)
Самое сложное решение - иерархические списки нарисованных объектов+векторный редактор со слоями и с прозрачностью
Промежуточных вариантов примерно столько, сколько вариантов ТЗ можно придумать.
Самый прстой ессесно способ не самый крутой по возможностьям.
> Можно было бы окружность старого радиуса прорисовать прозрачным
> цветом (т.е. стереть, по-сути), но я не нашел как это сделать.
>
Самый простой способ. (см.1) Рисуешь окружность с пен модом на xor. Если надо стиреть - рисуешь там же окружность с той же байдой. Недостаток - цвет окружности (сам увидишь), достоинство - простота реализации. Однозначно надо использовать при подгонке отрисовки. Т.е. начал рисовать окружность чел - она меняет радиус и все такое затираетпреведущее-рисует новое. Закончил - отрисовал окружность нужным цветом.
Самый сложный. Окружности назначается слой и этот слой выводиться поверх основного с прозрачностью фона. Стирание и откат - сам понимаешь - проще не придумашь.
← →
BOA_KAA (2003-08-06 16:15) [6]> iXuSs (05.08.03 17:19)
> 2 BOA_KAA:
> А как же тогда узнать, есть ли вообще в этой области какие-то
> фигуры, если они принадлежать канве?
Интересный вопрос! Если сам рисуешь, то не знаешь???
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.12.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c