Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Infinite Borderless Canvas, Как сделать бесконечный холст 
:(
    Опции темы
User1302
Дата 23.9.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 17.11.2010

Репутация: нет
Всего: нет



Нужно сделать бесконечный холст Canvas.

Что имеется ввиду..

На холсте, например JComponent - обьекты, кот. себя отрисовывают с помощью переданной графики Graphics2D
По идее - интерфейс Renderer с методом paintRenderer(Graphics2D g);

Собственно таскать их по холсту, что значит менять координаты, где их рисовать - не проблема.
Не проблема также сделать перетаскивание всего холста и масштабирование с помощью AffineTransform.

Задача такова, что если компонент попадает в JViewPort, нужно автоматическое позиционирование скроллБаров в JViewPort.
То есть, при перетаскивании холста (AffineTrnsform.translate()), например, влево, задвинув при этом рисунок слева за границу родительского компонента,
должен появляться скроллбар, причем с нужной позицией ползунка - с правого края, или посередине примерно, если справа рисунок
также выходит за рамки родительского компонента.

То же самое должно происходить при перетаскивании не холста, а самого рисунка..

Первое что приходит в голову - поиграться с Translate, JviewPort.setViewPosition.
Задача, кажется, нетривиальна.
Также, предполагаемое мною решение не очень красивое и боюсь создавать велосипед...

Может, кто уже с подобным сталкивался?
В нете пока ничего не накопал
PM MAIL   Вверх
Skipy
Дата 23.9.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Вы сами-то поняли, что написали? Как соотносится бесконечный холст с позицией ползунка? Если есть ползунок с текущей позицией, то его можно подвинуть как к началу, так и к концу. То есть холст по определению имеет начало и конец в каждом измерении. При бесконечном холсте ползунок всегда должен быть строго в центре, так как расстояние до краев в обе стороны бесконечно.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
User1302
Дата 23.9.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 17.11.2010

Репутация: нет
Всего: нет



Бесконечный потому, что бесконечно (разумеется, в приемлемых пределах) можно перетаскивать рисунки в любую сторону.
При этом меняется только позиция ViewPort относительно рисунка с соответствующим размещением ползунком.
Ползунки автоматически располагаются таким образом, чтоб до рисунка можно было всегда добраться с помощью ползунков, куда бы его(рисунок) не потянул пользователь. Также, автоматически ползунки реагируют на перетаскивание самого холста с рисунком(операция translate(tx, ty)).

Получается, что preferredSize холста меняется в зависимости от изменения положения рисунка относительно видимой области.
Чем дальше мы затягиваем рисунок за границы видимой области холста(или перемещаем холст с рисунком), тем больше становится prefferedSize и, следовательно, тем меньше становятся ползунки и больше становятся области(полосочки), где можно передвигать эти самые ползунки, чтоб добраться до рисунка.

Чем ближе с помощью ползунков пользователь приближается к рисунку, тем меньше становится preferredSize холста, больше становятся ползунки и, когда рисунок опять оказывается перед пользователем (и полностью помещается в видимой области), ползунки пропадают вовсе.
При этом preferredSize холста по идее становится равным размеру рисунка, пропадает потребность в ползунках и они скрываются.

Выходит так, что на холсте можно рисовать в любом месте, а потом добраться туда с помощью ползунков.

За формулировку извините, если не совсем понятно.
Попытаюсь что-нибудь накропать и выложить код.

Спасибо!
PM MAIL   Вверх
kamre
Дата 1.10.2011, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.3.2006

Репутация: 2
Всего: 13



Цитата(Skipy @ 23.9.2011,  17:05)
Как соотносится бесконечный холст с позицией ползунка?

В теории, конечно, так и будет smile  А на практике обычно у всего рисунка есть bounding box и при перемещении viewport этот bounding box расширяется. Примерно так сделано в yEd, т.е. там динамически подстраиваются скроллбары.
PM MAIL   Вверх
User1302
Дата 12.10.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 17.11.2010

Репутация: нет
Всего: нет



Цитата

Примерно так сделано в yEd

Смотрел я yEd - то, что нужно.
Жаль, код закрытhttp://forum.vingrad.ru/html/emoticons/pack/search.gif
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.