Расширенная графика с GDI или GDI +

Я ищу несколько расширенных руководств или, возможно, приложений с открытым исходным кодом, написанных на C ++ или .NET, которые реализуют сложное векторное приложение, что-то вроде MS Visio или Autocad. Что мне нужно знать, так это то, как гуру таких приложений управляют рендерингом сложных объектов (> 1000 прямоугольников) при перемещении мыши, когда пользователь может перемещать сложный объект над другими сложными объектами. Я знаю про прорисовку XOR и прочее, но если вы проверите вышеперечисленные приложения, очевидно, что они не используют эту технику. Весь объект плавно перемещается поверх другого, а не только его отражение XOR. Кроме того, движущиеся объекты показывают некоторую дополнительную информацию при перемещении, например текущие координаты или что-то еще, поэтому это не статическое представление, сохраненное в растровом изображении.

Любые советы приветствуются.

Спасибо


person Eugen    schedule 20.12.2012    source источник
comment
Я обнаружил, что двойная буферизация очень эффективна для предотвращения мерцания и сглаживания изображений при рисовании.   -  person BlackBear    schedule 20.12.2012
comment
да, я знаю об этом, и это то, что я использую (BufferedGraphics и его братья), он работает нормально, но я вижу высокую загрузку процессора при перемещении мыши, и я бы хотел избежать этого.   -  person Eugen    schedule 20.12.2012


Ответы (1)


Многие графические приложения используют какое-то пространственное разбиение, чтобы сократить количество объектов, которые им необходимо смотреть на. Например, если вы перемещаете прямоугольник, приложение просматривает квадродерево и находит 2 или 3 другие объекты, ограничивающие рамки которых перекрывают движущийся прямоугольник. Затем необходимо выполнить полное обнаружение столкновений и обработку графики с 2 или 3 объектами вместо 1000.

person japreiss    schedule 20.12.2012
comment
да, это когда речь идет об очень огромных объектах в Autocad, в моем случае у меня сложная торговая диаграмма, и мне нужно нарисовать некоторые сложные фигуры с помощью мыши. Я почти уверен, что такие вещи не используются в MS Visio. Ищете приложения, которые имеют что-то подобное и исходный код доступен для проверки. - person Eugen; 20.12.2012
comment
вот видео о том, что я хочу сделать youtube.com/watch?v=hOkKf2Ixb -Q. Это приложение, в котором я тестирую. Он работает нормально, но когда я двигаю мышью и рисую все эти движущиеся объекты, он потребляет много ресурсов процессора. Это элемент управления, который у меня есть pastebin.com/SF7k6KjC, а вот рисунок pastebin.com/MQPGXm9u. Любые идеи приветствуются. При необходимости могу отправить все решение VS 2010. - person Eugen; 21.12.2012