Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Соединение 2х линий не идеальное


Автор: Anyone 18.10.2009, 12:36
В моем графическом редакторе объекты канваса имеют выводы в виде линий, через которые они соединяются линиями связей. Но проблема в том, что при опрежеленных положениях объекта, линии связи  имеют не четкие границы, иногда толщина больше чем заданных 2 пикселя и в местах соедиений выводов с линиями зачастую просматривается разница в толщине. Везде где только можно я выставил SnapsToDevicePixels="True".
Линии связи биндятся к центру коннектора вывода, и  если это значение округливать до целого, то проблема не решается. Выводы находятся в ячейках грида с выравниванием по центру по вертикали.
Линия связи имеет такой шаблон:
Код

                        <Path x:Name="ConnectionPath"
                              IsHitTestVisible="True"
                              StrokeThickness="2"
                              Stroke="{Binding LineBrush}"
                              StrokeDashArray="{Binding StrokeDashArray}"
                              StrokeDashCap="Square"
                              SnapsToDevicePixels="True"
                              Data="{Binding PathGeometry}">
                        </Path>

Как можно решить проблему?

Автор: rooks 19.10.2009, 09:57
Скриншот бы не помешал

Автор: Anyone 19.10.2009, 10:36
Скриншет сделан при увеличении масштаба, при масштабе 100% еще терпимо.
Красным показаны проблемные участки.

Автор: math64 19.10.2009, 11:43
По-видимому неправильно вычисляются координаты промежуточных точек. Запиши PathGeometry в файл (можно с помощью XamlWriter сохранить ConnectionPath) и проверь.

Автор: Anyone 19.10.2009, 12:59
Цитата(math64 @  19.10.2009,  11:43 Найти цитируемый пост)
По-видимому неправильно вычисляются координаты промежуточных точек.

С этим все ОК.
Сохранил в строку с помощью XamlWriter'а и увидел то, что там должно быть.

Автор: rooks 21.10.2009, 15:08
Это все хваленые пикcели типа double. Не уверен что можно окончательно победить, но можно попробовать поиграться с http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.edgemode.aspx. Или попытаться округлять координаты в Path, где это можно.

Автор: Anyone 21.10.2009, 16:21
rooks,
Выставил RenderOptions.EdgeMode="Aliased" для выводов и линии связи. Стало значительно лучше, границы четкие. Но при определенных значениях масштаба линия иногда не совсем совпадает с выводом, ну тут уже врядли что-то поделаешь, это погрешности вычисления координат.
Спасибо за ответ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)