![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
День добрый!
Мне надоело в разных вариантах реализовывать приведение координат из одной системы в другую и я решил воспользоваться стандартным функционалом Java: AffineTransform. Сначала запутался как преобразовывать, но разобрался. А вот потом налетел по крупному.
Все бы ничего, но в моем случае пользовательские координаты меняются от 0 до 1. А толщина линии оказалась в 1 пользовательских координат! То есть вместо диагонали квадрата я получил почти закрашенный квадрат! Осталось чуть-чуть не закрашенного места в двух углах. Теперь вопрос. Как преобразовать координаты и при этом иметь линию по прежнему в 1 пиксель? Можно конечно посчитать как изменилась единица отсчета, но если пользовательские координаты будут сильно разными по осям? тогда вертикальные линии будут толще/тоньше горизонтальных? -------------------- Mirkes |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Вообще то нашел решение, но оно мне сильно не нравится. Вместо преобразования координат в Graphics я создал отдельное преобразование координат которым потом обработал то, что было в пользовательских координатах и результат уже отрисовал. Но если рисовать нужно что-то сложное придется каждый раз все преобразовывать в Shape, преобразовывать координаты и потом рисовать.
Может есть более простой и естественный способ?
И опять мордой об забор ![]() Это сообщение отредактировал(а) Mirkes - 9.12.2013, 16:43 -------------------- Mirkes |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Интересно, отсутствие какой либо реакции означает:
1. Никто не пробовал рисовать после Affine transform 2. У всех все работает и такого эффекта не возникает 3. Решение давно известно и не хочется тратить время на очевидное Укажите хотя бы почему нет никакой реакции ![]() -------------------- Mirkes |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
У AffineTransform есть же собственный createTransformedShape, который Shape принимает.
|
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Спасибо! Действительно я обшарил все со стороны Shape но не увидел метода у AffineTransform Однако вопрос с толщиной линии для меня так и не понятен. Как выполнить преобразование координат а потом рисовать нормальной толщиной? Или преобразования координат надо применять к рисуемым объектам а не к панели, на которой рисуют? Я посмотрел примеры на сайте оракла - результат тот же. Они применяют преобразования к панели и тольщина линий меняется. К сожалению примера как рисовать линией в один пиксел на преобразованной панели я не нашел. Может кто-нибудь подскажет хотя бы куда смотреть? -------------------- Mirkes |
|||
|
||||
Amp |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Да пересчитывай руками все сам. Больше возни, но в перспективе меньше проблем.
|
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Проблему то я решил, но хочется без наворотов обойтись ![]() Рассмотрим такой пример. Я произвел шкалирование scale(20,10). После этого я установил толщину линии в 0.1. При этом вертикальная линия будет в два раза толще горизонтальной. А вот отслеживать разность толщин линий в зависимости от направления - это уже головняк серьезный. -------------------- Mirkes |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Я хочу уточнить вопрос:
Правильно ли я понимаю, что если я произведу аффинные преобразования Graphics2D, то рисовать в нем нормально я уже не смогу? Я провел физически эксперимент и получил ожидаемый эффект: при неравном шкалировании по осям в измененном Graphics2D я никогда не смогу получить горизонтальные, вертикальные и наклонные линии одной толщины. Текст программы приложен, он очень короткий и думаю понятный. Буду благодарен за ответ, даже из одного слова. Я все же надеюсь, что это я чего-то недопонял и возможность рисовать нормально все же существует. Заранее спасибо.
-------------------- Mirkes |
|||
|
||||
kamre |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
В Qt имеется вот такое свойство у кисти:
Давно в Java ничего не рисовать не приходилось, но может быть что-то аналогичное имеется и в ней. |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Спасибо, попробую поискать. -------------------- Mirkes |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |