Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / AffineTransform Можно ли смасштабировать не весь холст? / 13 сообщений из 13, страница 1 из 1
25.08.2016, 11:34
    #39297665
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Приветствую, такой вопрос, можно ли смасштабировать не весь холст, в смысле, что часть изображения должна масштабироваться, а часть нет. Например, рисуем на холсте сетку, соответственно при масштабировании все фигуры увеличиваются(их линии утолщаются), а линии сетки должны оставаться в 1 пиксель. Как этого добиться или так не получится?
...
Рейтинг: 0 / 0
25.08.2016, 11:40
    #39297676
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Ну, если мне не изменяет склероз, то нужно взять VolatileImage (для пущщей производительности), отрисивать туда вашу фигуру и применить трансформацию. А затем уже результат отрисовать на холст.

Но зачем это делать самому при наличии JavaFX или хотя бы JGraphT мне не понятно.
...
Рейтинг: 0 / 0
25.08.2016, 11:48
    #39297687
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont know,
векторные изображения (толщина не масштабируется) делаются так:
- все фигуры и сетка в том числе в массиве
- устанавливаются масштаб или окно выводав объект Координаты.
- при отрисовке в методе Draw локальные координаты канвас в пикселях получаются
Код: java
1.
lokPoint = Koord.GetLokal(Фигура.Pnt(i))


Все фигуры и БД работают в глобальных.
...
Рейтинг: 0 / 0
25.08.2016, 11:50
    #39297691
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont know,
второй вариант - сетку рисовать отдельно каждый раз при выводе фигур.
...
Рейтинг: 0 / 0
25.08.2016, 14:35
    #39297910
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Blazkowicz,
Не умею я JavaFX, да и думаю что не принципиально это, что использовать, Swing или JavaFX, суть одна и та же.

Поясню ситуацию(по прошлой моей теме здесь)
Есть класс канвы, на которой я рисую(просто унаследованный от JPanel). Так же есть класс(класс документа), унаследованный от абстрактного класса, содержащего метод draw(). Соответственно в методе paintComponent() я пытаюсь рисовать всё это своё хозяйство.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g); 
        Graphics2D g2d = (Graphics2D) g;
        
        setBackground(new Color(225, 225, 225));
        
        if(drawable != null) {

            g2d.translate(drawOrigin, drawOrigin);
            
            //Dimension d = drawable.getSize();
            //g2d.setColor(Color.GRAY);
            //g2d.drawRect(0, 0, (int)Math.round(d.width*scaleFactor), (int)Math.round(d.height*scaleFactor));
            drawable.draw(g2d, scaleFactor);
        }
}



и метод рисования в моём классе. Здесь я пытаюсь нарисовать свой "документ"
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@Override
    public void draw(Graphics g, double scaleFactor) {
        Graphics2D g2d = (Graphics2D) g;
        
        
        g2d.scale(scaleFactor, scaleFactor);
        //size.setSize((int)Math.round(size.width * scaleFactor), 
        //             (int)Math.round(size.height * scaleFactor));
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, size.width, size.height);
        //g2d.setColor(Color.GRAY);
        //g2d.drawRect(0, 0, size.width, size.height);
        
        
        g2d.dispose();
    }


Теперь загвоздка: например, раз рисуем документ, нужно нарисовать рамку вокруг него. Хорошо, рисуем, но если рисовать его в методе draw(), то при масштабировании, будет масштабироваться и толщина рамки, что мне не нужно, она должна всегда быть тонкой. Если рисовать её в paintComponent, то рамка рисуется как-то не корректно, с одной стороны линия есть, с другой нет. Тоже самое, подозреваю, будет и с сеткой.
...
Рейтинг: 0 / 0
25.08.2016, 14:43
    #39297919
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont knowSwing или JavaFX, суть одна и та же.
Вообще нет. JavaFX работает сразу с вектором, и подобные проблемы там решаются на много проще. При этом очевидно что ваша задача заточена под вектор.
...
Рейтинг: 0 / 0
25.08.2016, 14:53
    #39297934
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Blazkowicz,
+1
I dont know,
вы писали что лупу сделать раз плюнуть?
Код: java
1.
g2d.scale(scaleFactor, scaleFactor);


в растровом виде выше это просто.
А в вектре требуются пересчёты координат.
.....
Сетка у вас независима от объектов рисования?
Значит рисуя её последней она будет верная. только не масштабируйте её.
...
Рейтинг: 0 / 0
25.08.2016, 15:00
    #39297945
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont knowнапример, раз рисуем документ,
делай все сообщения со скринами. Это графика, а не музыка и литература.
...
Рейтинг: 0 / 0
25.08.2016, 15:25
    #39297985
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Petro123,

Даже не знаю как ответить. В целом сетка не зависима от того что нарисовано на холсте. Размер ячейки задаётся общим размером, например 1мм и переводится в пиксели, далее уже масштабируется, когда крутим колёсиком мыши. Так же к цзлам сетки привязан курсор, т.е при движении курсора, нарисованный курсор прыгает только по узлам этой сетки.

Вот пара скриншотов:
1. если рисовать рамку документа в самом методе отрисовки документа(в методе draw())


2. Если рисовать извне(из метода paintComponent холста), в целом вроде нормально, как-то кривовато


Думается мне, что те вещи, которые не должны масштабироваться, лучше рисовать извне, т.е в методе paintComponent()

P.S. чтобы было удобнее, добавил код проекта во вложение, потому что не знаю, какие участки кода кода захочется народу посмотреть :)
...
Рейтинг: 0 / 0
25.08.2016, 15:35
    #39297996
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont know2. Если рисовать извне(из метода paintComponent холста), в целом вроде нормально, как-то кривовато
пока IMHO всё нормально. Это рамка 3D ))))
Ещё больше толщину + цвет серый + сетка и запости сюда.
...
Рейтинг: 0 / 0
25.08.2016, 15:46
    #39298014
I dont know
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
Petro123,
Не, так не по фен-шую, белый квадратик всё равно обрамить тоненькой рамочкой надо, чтобы красивше было )
...
Рейтинг: 0 / 0
25.08.2016, 15:57
    #39298030
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont knowPetro123,
Не, так не по фен-шую, белый квадратик всё равно обрамить тоненькой рамочкой надо, чтобы красивше было )
AFAIK если на 1 пиксель, то там в самой операционке траблы были. Насколько помню.
Второй вариант - поставь цвет красный и нарисуй рамку ПОСЛЕ ...последней.
Ждём.
...
Рейтинг: 0 / 0
25.08.2016, 15:59
    #39298034
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AffineTransform Можно ли смасштабировать не весь холст?
I dont know,
внутри документа что нить нарисуй для теста. А то не видно принцип масштабирования.
Что это растр а не вектор.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / AffineTransform Можно ли смасштабировать не весь холст? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]