![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
Здравствуйте. Задача такая
Моделируется некоторый тех процесс, результат моделирования должен отображаться в виде диаграммы в реальном времени. Диаграмма довольно сложная, поэтому рисование ее в основном потоке невозможно, а как нарисовать ее в фоновом потоке тоже не понятно. Как можно решить данную задачу в WPF? Возможен ли такой подход - в фоновом потоке создаем объект DrawingVisual, рисуем с помощью него диаграмму, а затем полученную "картинку" каким то образом через Dispetcher.Invoke рисуем на форме? |
|||
|
||||
under_sun |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: 1 Всего: 17 |
Что понимается под сложностью диаграммы? Если сложность расчетов, то расчеты проводи в другом потоке, а диаграмму рисуй уже по просчитанным точкам.
--------------------
TMTOWTDI |
|||
|
||||
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
Под сложностью понимается главным образом большое число элементов (квадратов) из которых состоит диаграмма
|
|||
|
||||
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
Видимо я использую WPF не по назначению.
Мне нужно визуализировать результат моделирования, а результат моделирования - массив[300, 300] (тепловое поле). Для каждой точки я рисую квадрат, цвет которого зависит от температуры в данной точке. Векторная графика мне не нужна, а вот высокая скорость желательна. Подскажите чем можно воспользоваться для моей задачи в WPF. |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Ну можете тогда рисовать в битмапе в отдельном потоке и по окончанию растровую картинку давать основному потоку. Но я что-то сомневаюсь, что 90000 квадратиков долго рисуются. Они могут долго прорисовываться (так как вы рисуете векторно), но сам процесс рисования по идее должен быстро проходить.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
Пример
Может быть я что-то не правильно делаю? А как прорисовывание ускорить, если дело в нем? Это сообщение отредактировал(а) mgukov - 11.4.2011, 11:04 |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Само прорисовывание никак, насколько я знаю (может кто-то и поделится, если знает как). Рисуйте в битмапе фоново (DrawingContext из битмапа получите), а потом передадите готовый рисунок для отображения.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
А в битмапе рисовать средствами System.Drawing? Или в WPF есть что нибудь для растровой графики?
|
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Нет, зачем. Все есть. Вот один из способов.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
under_sun |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 3.10.2007 Где: Ебург Репутация: 1 Всего: 17 |
Ради интереса попробовал у себя. Код drawingContext.Close() выполняется за 250-270 мс.
Код такой:
Конечно, может у тебя комп послабже, но все равно разница кажется слишком большой.
Тут все равно вызывается тот же drawingContext.Close(). --------------------
TMTOWTDI |
||||||
|
|||||||
mgukov |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 22.3.2009 Репутация: нет Всего: нет |
Возможно я погорячился, написав несколько секунд
Комп вроде нормальный, но в параллельном потоке еще сама модель работает, и все же скорость у меня получается не удовлетворительная, тоже самое с помощью OpenGL (Tao Framework) рисуется гораздо быстрей. Спасибо всем за помощь, понял что мне надо почитать литературу, поглубже разобраться с WPF |
|||
|
||||
-Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 13 Всего: 59 |
Ну я не спорю, пример был приведен для рисования в битмапе, чтобы если человеку надо, то он мог в отдельном потоке сделать это.
Вот к этим вопросам был приведен минипример. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |