18.07.2010
GraphicsGale v1.71
В этом легко убедиться использую любой профилировщик, например jetBrance 5 GraphicsGale v1.71 посмотрев исходные коды, например, используя Reflector 6 . Итак, вначале создается объект MapDrawingVisual, который является GraphicsGale v1.71 объекта DrawingVisual и имеет ссылку на бизнес объект GraphicsGale v1.71, для выполнения процедуры GraphicsGale v1.71 проверка попадания . Затем получается стиль для отрисовки объекта, создается геометрия и производится сама отрисовка. private void CreateDrawing MapElement GraphicsGale v1.71, bool closed GraphicsGale v1.71 drawingVisual new MapDrawingVisual ; GraphicsGale v1.71. MapObject; DrawingContext GraphicsGale v1.71 drawingVisual. GetStyle element ; Geometry geometry CreateBaseGeometry element, closed ; drawingContext. Close ; GraphicsGale v1.71 drawingVisual ; private void AddDrawingVisual DrawingVisual drawingVisual ObjectChildrenList. Add drawingVisual ; Рисование простых графических примитивов осуществляется с помощью класса StreamGeometry, который обеспечивает максимальную производительность. Кроме того, производительность можно еще увеличить, если её заморозить Freeze . у нас объекты карты не предназначены для модификации. private static Geometry CreateGeometry Point points, bool closed, bool freeze Geometry geometry new StreamGeometry ; GraphicsGale v1.71 StreamGeometryContext ctx StreamGeometry GraphicsGale v1.71 . PolyLineTo points, true, false ; Freeze the geometry make it unmodifiable for additional performance GraphicsGale v1.71. Freeze ; return geometry; Кисти, перья, текст, перемещение объектов и прочие вопросы оптимизацииВ силу специфики приложения приходится выполнять отрисовку объектов разных типов: дома, реки, Graphic Workshop Professional v2.0.70a дороги и прочее. К сожалению, простейшее решение, приходящее на ум в этом случае, а именно использование одного объекта кисти для одного типа объекта, вызывает значительное замедление работы системы. И нам опять пришлось заниматься поисками оптимального способа создания кистей и перьев GraphicsGale v1.71 улучшения производительности. Создание новой кисти непосредственно перед использованием также GraphicsGale v1.71 привело к значительному улучшению производительности. Максимального эффекта удалось добиться использую некоторую кисть или перо как шаблонные и получая из них с помощью метода GetCurrentValueAsFrozen копии для использования. public GeometryStyle Clone return new GeometryStyle Brush Brush Brush. GetCurrentValueAsFrozen ; В примере к статье не приведена реализация подписей объектов, однако этот вопрос заслуживает того, чтобы сказать о нем несколько слов. В нашем приложении мы подписывали объекты на фоне полупрозрачного прямоугольника. Однако логичное решение использовать ширину и высоту объекта FormattedText для отрисовки прямоугольника, а затем отрисовки текста выше него не оптимально. Чтобы этого избежать, нужно сначала выполнить отрисовку текста, отрисовку прямоугольника, а затем добавить полученные объекты DrawingVisual в коллекцию визуальных объектов в нужном порядке. Перемещиние карты с помощью мыши является довольно простой задачей и фактически состоит в правильном вычислении параметров для класса TranslateTransform выполняющего GraphicsGale v1.71 объектов. Используя транформации можно создать ряд довольно замысловатых эффектов, например изменениу угла обзора, вращение карты и прочее, однако производительность оставляет желать лучшего. Кроме того было обнаружено очень сильное падение прозводительности при отрисовке линий. совершенно необходимо выполнять отрисовку таких картографических объектов как дороги, реки, границы регионов и прочее. Поиски решения данной поблемы не увенчались сколь каким нибудь успехом, единственным найденным способом хоть как то ускорить отрисовку явилась рекомендация использовать только целые числа для задания толщины пера. Еще одним непонятным фактом является то, что при отключении антиалисинга поизводительность значительно снижается. Aliased ;Я надеюсь, что найдутся читатели, которые смогут объяснить такое поведение системы, а также способы повышения прозводительности. При создании приложений WPF полезно скачать инструменты для профилирования производительности, например WPF Perforator 7 , а также ознакомиться с рекомендациями Micrsoft, которые можно найти в MSDN. Проверка попадания курсораПроверка попадания курсора Hit testing в описываемом случае является очень простой задачей, и реализуется буквально в несколько строк.
Graphics Converter Pro v6.36.60220 Graphisoft ArchiCAD v11 International Final Graphics Converter Pro v6.40.60505 Graphic Workshop Professional v2.0.76a
|