Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
6-11680
ss300
2003-10-06 11:03
2003.12.04
Кодировка в отправляемом письме


4-11733
Andriy Tysh
2003-10-07 20:30
2003.12.04
Убрать заголовок окна


6-11664
Stas
2003-10-08 09:26
2003.12.04
Документация по TCP/IP


6-11645
Yurko
2003-10-09 17:30
2003.12.04
WNetEnumResource


4-11716
ZEE
2003-10-09 16:57
2003.12.04
деактивация окна





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский