forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   WPF (http://forum.boolean.name/showthread.php?t=20412)

RegIon 22.09.2016 17:29

WPF
 
Думаю стоит сделать ее подразделом, хотя пофиг.

Ребятушки, как адекватно отрисовать динамическую сетку WPF на Canvas?.

Сейчас каждый раз, когда происходит какая-то фигня с сеткой(скейл, перемещение) , приходится элементы удалять и перерисовывать (Canvas.Children.Add). В адекватных масштабах сие действие проходит нормально. Типо таких:



А вот если уменьшить сетку, то плохо:



UPD: в профайлере ничего не изменилось толком (*правда нагрузка более равномерной стала), по этому диспетчер задач.

Что посоветуете?
CacheMode включал. Картинка ухудшилась только.

Жека 23.09.2016 06:15

Ответ: WPF
 
Может лучше рисовать всё во WritableBitmap, и установить его как Source для Image, сам Image вставить в вёрстку на место канваса или внутрь канваса.

RegIon 23.09.2016 08:36

Ответ: WPF
 
Прям старый добрый Blitz напомнило.
Что-то мне подсказывает, что если рендрить тот же Path, то получиться то же самое, что и Cached у канвы.

johnk 23.11.2016 13:49

Ответ: WPF
 
Цитата:

Сообщение от RegIon (Сообщение 308756)
Ребятушки, как адекватно отрисовать динамическую сетку WPF на Canvas?

Любое добавление в Canvas.Children = перестроение лайаута = работа ЦПУ.
Используй ГПУ, для этого нужно простроить график единожды, дальше смещения и скейлинг делать через RenderTransform и Clip, если такое возможно в твоем кейсе.

RegIon 23.11.2016 15:02

Ответ: WPF
 
Цитата:

Сообщение от johnk (Сообщение 310290)
Любое добавление в Canvas.Children = перестроение лайаута = работа ЦПУ.
Используй ГПУ, для этого нужно простроить график единожды, дальше смещения и скейлинг делать через RenderTransform и Clip, если такое возможно в твоем кейсе.

Спасибо. Оказалось если Группировать объекты, а потом группу добавлять - то все происходит довольно быстро. Скеил у канвы с Траслейтом не работают в паре, это как-то объяснено в справке.

johnk 24.11.2016 13:21

Ответ: WPF
 
Цитата:

Сообщение от RegIon (Сообщение 310294)
Скеил у канвы с Траслейтом не работают в паре, это как-то объяснено в справке.

В паре оно все работает, просто сама канва - это панель с не совсем обычным позицинированием и рендером. Чтобы ей манипулировать нормально, её нужно вбросить во ViewBox.


Часовой пояс GMT +4, время: 14:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot