![]() |
Модераторы: gambit, Kefir, Partizan |
![]() ![]() ![]() |
|
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Есть canvas, содержащий некоторое количество Shapes.Line. Я изменяю ScaleTransform для него, соответственно увеличивается все изображение пропорционально, а мне желательно не увеличивать толщину линий ( тоесть до увеличения толщина была скажем 5 пикселей, и чтоб после такой же осталась )?
Возможно есть удобное решение, если нет то с удовольствием выслушаю какие-нибудь идеи. Спасибо Это сообщение отредактировал(а) fantast - 12.10.2009, 11:49 --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Нужно масштабировать не канву, а геометрию - тогда толщина линий не изменяется.
или
Это сообщение отредактировал(а) math64 - 12.10.2009, 12:27 |
||||
|
|||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Есть идея - в лоб.
Получить список линий можно примерно так: canvas.Children.OfType<Shapes.Line>() и в цикле foreach для каждой из линий применять ScaleTransform(1.0/х,1.0/у) так, чтобы скомпенсировать ScaleTransform(х,у) канваса. |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Нет, так толщина линий всё равно изменится. Если уж использовать foreach, то только для того чтобы умножить координаты точек на x,y, не примеменяя ScaleTransform.
|
|||
|
||||
fantast |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
насколько я понял как раз таки ширина останеться тойже, но еще и изменяться размеры линии - масштабирование будет произведено и над шириной и над расположением линии. Такчто это отпадает
Думаю, что измениться, по крайней мере если изменять RenderTransform. Ты это предположил или был практический опыт? У меня нет счас доступа к тому коду, поэтому проверить смогу только вечером, но если честно не думаю что ты прав --------------------
Эпитафия: Он старался. Неизвестный |
||||
|
|||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
||||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Как я понимаю, теоретически если применить scale в x2 в RenderTransform для Line которая имеет координаты {10, 12} - {15, -2} c толщиной в 2, то линия будет отображаться как {20,24} - {30, -4} c толщиной 4. Я правильно понимаю, если нет - то как правильно, если да - то изменяться координаты линии, которые в моем случае не должны меняться, а должна меняться только ширина
--------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
Anyone |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Я изначально не правильно понял вопрос, потому согласен с
Не понимаю в чем еще проблема.
Ну попробуй несколько вариантов, а потом напиши что из этого получилось. Можно еще раз уточнить? Масштабирование линии должно изменять только ее толщину, а координаты должны остаться на месте? Тогда почему бы не масштабировать ее только по одной координате? |
||||
|
|||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Такое масштабирование нужно, чтобы не писать лишнего кода. Вот фрагмент адорнера, подписывающий ширину элемента, толщина линий не масштабируется:
|
|||
|
||||
Anyone |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Этот фрагмент случайно не с файла SizeChrome.xaml? ![]() Почему не масштабируется? При масштабировании канваса у меня масштабируется? Или я что-то не правильно понимаю? Это сообщение отредактировал(а) Anyone - 12.10.2009, 16:07 |
|||
|
||||
fantast |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 10.12.2006 Где: минск, столица на шей Родины Репутация: нет Всего: 2 |
Наоборот, масштабирование должно менять ее координаты, а ширину не затрагивать --------------------
Эпитафия: Он старался. Неизвестный |
|||
|
||||
exBlender |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.10.2009 Репутация: 9 Всего: 9 |
А зачем вообще мучиться с линиями? Я адорнеры делал бордерами, а вместо канваса, имхо, почти всегда катит грид, за очень редкими исключениями...
--------------------
HTML и CSS забыв как страшный сон, хвалу я заммэлу пою и фирме Майкрософт. |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 2 Всего: 72 |
Бордер при масштабировании тоже меняет толщину, чтобы ширина не менялась нужно изменять свойства Width и Height. Кроме того, бордеров диагональную линую не нарисуешь - разве что поворачивать его. А с помощью Path можно нарисовать что угодно, поместить его на грид и задать Strech="Fill" или Strech="Uniform" и Margin, если нужно - не вижу никаких сложностей. fantast'у вряд ли нужны адорнеры - я просто привёл пример применения.
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |