Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Рисование в JavaFX 2.0 / 18 сообщений из 18, страница 1 из 1
01.05.2012, 00:44:05
    #37777878
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Есть задача в программе наглядно (графически) отобразить введённые значения (размеры, углы). На той же форме, где и вводятся значения.

Посоветуйте контейнер для рисования в JavaFX
1. Чтобы я мог рисовать примитивы пропорциональные размерам контейнера. (для этого мне кажется надо знать его размеры.. имхо)) )
2. Чтобы нарисованные в нём полилинии (и пр. мои примитивы) не вылазили за границы контейнера. (на Pane'е (и StackPane'е) есть такой глюк)
3. Чтобы изображение масштабировалось при изменении размера контейнера. Либо чтобы я самостоятельно мог бы поймать это событие и смасштабировать рисунок.

Ещё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку . Посоветуйте как это оптимальней сделать. Штриховки уже описал программно, но могу сделать растры. Проблема: не получается нарисованные полилинии ограничить гем. фигурой.
...
Рейтинг: 0 / 0
02.05.2012, 10:19:28
    #37778658
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mk,
- скорее всего надо делать руками.
- что значит изменение размеров контейнера? Лучше приведи скрин расположения элементов ГУИ.
В общем случае, т.к. тебе нужен масштаб и "не вылазило", то лови все события и на команду отрисовки вписывай НОВЫЙ размер рисунка в НОВОЕ место.
Код: java
1.
Draw(СистемаКоординат, ОбъектРисования, ПанельКудаРисуют)
...
Рейтинг: 0 / 0
02.05.2012, 10:20:59
    #37778660
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mkЕщё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку .
В JavaFX не знаю. В Win32API есть кисть со штриховкой и объект Регион
...
Рейтинг: 0 / 0
02.05.2012, 23:34:59
    #37779727
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Petro123avp.mkЕщё нужно внутри полигона (обычно параллелограмма) нарисовать штриховку .
В JavaFX не знаю. В Win32API есть кисть со штриховкой и объект Регион
В AWT тоже есть подобная функциональность в Prism пока не нашёл..
По мотивам этой статьи. (TexturePaint)
http://today.java.net/pub/a/today/2009/07/30/javafx-custom-paints.html
Переписал часть кода с чуднóго языка на Java. C учётом некоторых особенностей API JavaFX 2.
Но в самом конце меня ждал неприятный сюрприз. Как я понял в связи с переходом с AWT на Prism код абсолютно бесполезен.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
import java.awt.Graphics2D;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.net.URL;
import javafx.scene.Group;
import javafx.scene.shape.Ellipse;
import javax.swing.ImageIcon;

public class Esquisse extends Group {
    public Esquisse() {
        Ellipse ellipse = new Ellipse(150d, 100d);
        ellipse.setStroke(javafx.scene.paint.Color.BLACK);
        ellipse.setFill(new javafx.scene.paint.Paint() {
            double x = 10d, y = 10d, width = 10d, height = 10d;
            //не разбирался что это за цифры, от фонаря поставил 10

            @Override
            public Object impl_getPlatformPaint() {
                URL resource = getClass().getClassLoader().getResource("pict.png");
                ImageIcon image = new ImageIcon(resource);
//                System.out.println(image.getIconWidth());
//                System.out.println(image.getIconHeight());

                BufferedImage bi = new BufferedImage(image.getIconWidth(),
                        image.getIconHeight(),
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D g = bi.createGraphics();
                g.drawImage(image.getImage(), 0, 0, null);
                g.dispose();

                double _width = (width == 0) ? image.getIconWidth() : width;
                double _height = (height == 0) ? image.getIconHeight() : height;

                Rectangle2D.Double anchor = new Rectangle2D.Double(x, y, _width, _height);
                TexturePaint texturePaint = new java.awt.TexturePaint(bi, anchor);
//                Вот тут-то и поломана совместимость!
//                return texturePaint;
//                Поэтому заместо texturePaint вывожу красную заливку
                return com.sun.prism.paint.Color.RED;
            }
        });

        getChildren().add(ellipse);
    }
}

java.awt.TexturePaint cannot be cast to com.sun.prism.paint.Paint

В пакете com.sun.prism.paint нашёл интересный класс ImagePattern.
Но он уже успел стать depricated притом настолько, что приложение с его использованием даже не компилируется..
Esquisse.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Унаследоваться от com.sun.prism.paint.Paint и что-нибудь там начудить нельзя т.к. его конструктор не имеет модификатора public.


Пробовал такой хренью заниматься, без толку.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public Object impl_getPlatformPaint() {
    com.sun.prism.paint.Color cl = new com.sun.prism.paint.Color(30,30,30,127);
    int ln = 100;
    byte[] ar = new byte[ln * 5];
    for (int i = 0; i < ar.length; ++i) {
        ar[i] = 127;
    }
    cl.putRgbaPreBytes(ar, ln);

//    Такой тоже)
//    cl.putBgraPreBytes(ByteBuffer.wrap(ar));
    return cl;
}
...
Рейтинг: 0 / 0
03.05.2012, 09:55:02
    #37779938
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mk,
а чё ты в рядом ветку про JavaFX не запостишь?
Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
...
Рейтинг: 0 / 0
03.05.2012, 09:56:30
    #37779943
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
import javafx.scene.Group;
import javafx.scene.control.Label;

public class Esquisse extends Group {
    public Esquisse() {
        Label r = new Label();
        r.setMinSize(150, 200);
        r.setRotate(30d);
        r.setStyle("-fx-background-image: url(" + '"' + "texture.png" + '"' + "); -fx-background-repeat: repeat repeat; -fx-background-position: left top; -fx-padding: 8px;");
        getChildren().add(r);
    }
}


Единственное что хоть как-то работает.
Как сделать также с фигурой посложнее. Или как хотябы обрезать Label чтобы он стал параллелограммом.

Разбаньте пожалуйста 1024. Я только у него пока видел приложения jfx. Может подскажет что-нибудь)
...
Рейтинг: 0 / 0
03.05.2012, 10:25:14
    #37779980
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Petro123Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
Мне не принципиально чтобы это был растр. Я их сначала векторными решил сделать. Всё ещё пока от этой мысли не отказался.
...
Рейтинг: 0 / 0
03.05.2012, 10:57:37
    #37780046
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mkPetro123Там было одно обсуждение про растровый АПИ в сабже. И все сошлись, что его нет там ((
Мне не принципиально чтобы это был растр. Я их сначала векторными решил сделать. Всё ещё пока от этой мысли не отказался.
Профессиональный движёк (я делал на Delphi) делается не на компонентах визуальных \ панелях \ фреймах.
А в виде класса Коордиинат, Рисовального, и т.д.
Т.е. если говорить о векторном движке, то там есть класс точка, полигон, текст и т.д.
Класса параллелограмм нету.
Тогда рисовать можно на чём угодно. Брать Canvas\HDC\Printers.Canvas и т.д.
-----
Это если руками и "как полагается".
Т.е. если в JavaFX есть векторный API например, Canvas.LineTo(0,0,100,50). То нет проблем.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
03.05.2012, 11:28:00
    #37780099
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Petro123,
Я рад конечно что я не сам с собой разговариваю. Но нельзя ли больше конкретики в советах и с рабочими кодом на jfx 2. Домыслы и возможности gdi(+) мало интересны..

Хотя увидив слово HDC сразу вспомнилась OpenGL.. Может ей воспользуюсь.

JavaFX нет класса (графического) Точка, нет класса Canvas. Есть класс полилиния, полигон и много ещё которыми можно нарисовать параллелограмм. Про параллелограмм я написал для того что бы показать что у меня пока не такая сложная задача как закраска области нарисованной QuadCurve'ом. Но это пока..
...
Рейтинг: 0 / 0
03.05.2012, 11:41:38
    #37780123
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mk,
ну, может ещё это поможет (правда растр)
12283117
В остальном, я сказал - практики в той теме про JavaFX.
Удачи!
...
Рейтинг: 0 / 0
03.05.2012, 11:47:07
    #37780129
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mkPetro123,
Я рад конечно что я не сам с собой разговариваю. Но нельзя ли больше конкретики в советах и с рабочими кодом на jfx 2. Домыслы и возможности gdi(+) мало интересны..

Это его обычный стиль общения :)

http://docs.oracle.com/javafx/2/api/javafx/scene/paint/Paint.html - посмотрите, возможно это что вам нужно (сделать свою реализацию аналогично Color, Gradient и т.п.).
...
Рейтинг: 0 / 0
03.05.2012, 12:22:28
    #37780208
kamre
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
В JavaFX сцене пока нет Canvas, но что-то на эту тему уже обсуждают .
...
Рейтинг: 0 / 0
03.05.2012, 12:28:00
    #37780220
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
Leonidv http://docs.oracle.com/javafx/2/api/javafx/scene/paint/Paint.html - посмотрите, возможно это что вам нужно (сделать свою реализацию аналогично Color, Gradient и т.п.).
В четвёртом посте я какраз и реализовывал класс (абстрактный) javafx.scene.paint.Paint, который в свою очередь должен реализовать метод impl_getPlatformPaint() который в свою очередь должен возвращать экземпляр com.sun.prism.paint.Paint. (хотя возможно что-то ещё... Не зря же у него стоит тип Object.....)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
ellipse.setFill(
        new javafx.scene.paint.Paint() {
            @Override
            public Object impl_getPlatformPaint() {
		//тут был бесполезный код
                return com.sun.prism.paint.Color.RED;
            }
        }
);
...
Рейтинг: 0 / 0
03.05.2012, 12:28:45
    #37780227
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
kamreВ JavaFX сцене пока нет Canvas
оригинально :)
Даже в HTML5 его ввели.
...
Рейтинг: 0 / 0
03.05.2012, 13:02:38
    #37780335
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mk,

Посмотрите, что возвращают gradient'ы.
...
Рейтинг: 0 / 0
03.05.2012, 13:11:20
    #37780363
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
LeonidvПосмотрите, что возвращают gradient'ы.
Как сие понять?

Классы LinearGradient и RadialGradient раширяют класс Paint, если вы об этом.
...
Рейтинг: 0 / 0
03.05.2012, 14:06:56
    #37780470
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
avp.mkLeonidvПосмотрите, что возвращают gradient'ы.
Как сие понять?

Классы LinearGradient и RadialGradient раширяют класс Paint, если вы об этом.
Я так понял, что вы не можете понять, что вернуть тут:

public Object impl_getPlatformPaint() {

Проще всего залесть в исходники и посмотреть, что возвращают тут классы, отвечающие за градиентный вывод.
...
Рейтинг: 0 / 0
03.05.2012, 14:19:10
    #37780502
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рисование в JavaFX 2.0
LeonidvЯ так понял, что вы не можете понять, что вернуть тут:
public Object impl_getPlatformPaint()
Предоставленый мной код - рабочий.

LeonidvПроще всего залесть в исходники и посмотреть, что возвращают тут классы, отвечающие за градиентный вывод.
Да, пожалуй. Только у меня нет исходных кодов этих классов.
Не подскажите где их взять?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Рисование в JavaFX 2.0 / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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