Учебники

JavaFX — 2D Shapes

В предыдущей главе мы рассмотрели базовое приложение JavaFX, где мы узнали, как создать пустое окно и как нарисовать линию на плоскости XY JavaFX. В дополнение к линии мы также можем нарисовать несколько других 2D фигур.

2D Shape

В общем, 2D-фигура — это геометрическая фигура, которую можно нарисовать на плоскости XY, в том числе Линия, Прямоугольник, Круг и т. Д.

Используя библиотеку JavaFX, вы можете нарисовать —

  • Предопределенные формы, такие как линия, прямоугольник, круг, эллипс, многоугольник, полилиния, кубическая кривая, четырехугольная кривая, дуга.

  • Элементы контура, такие как Элемент контура MoveTO, Линия, Горизонтальная линия, Вертикальная линия, Кубическая кривая, Квадратичная кривая, Дуга.

  • В дополнение к этому вы также можете нарисовать 2D-фигуру, анализируя SVG-путь.

Предопределенные формы, такие как линия, прямоугольник, круг, эллипс, многоугольник, полилиния, кубическая кривая, четырехугольная кривая, дуга.

Элементы контура, такие как Элемент контура MoveTO, Линия, Горизонтальная линия, Вертикальная линия, Кубическая кривая, Квадратичная кривая, Дуга.

В дополнение к этому вы также можете нарисовать 2D-фигуру, анализируя SVG-путь.

Каждая из вышеупомянутых 2D фигур представлена ​​классом, и все эти классы принадлежат пакету javafx.scene.shape . Класс с именем Shape является базовым классом всех двумерных фигур в JavaFX.

Создание 2D фигуры

Чтобы создать диаграмму, вам нужно —

  • Определите соответствующий класс требуемой формы.
  • Установите свойства формы.
  • Добавьте объект формы в группу.

Создание соответствующего класса

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

Например, если вы хотите создать строку, вам нужно создать экземпляр класса Line следующим образом:

Line line = new Line();

Установка свойств фигуры

После создания экземпляра класса вам необходимо установить свойства фигуры с помощью методов установки.

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

//Setting the Properties of the Line 
line.setStartX(150.0f); 
line.setStartY(140.0f);         
line.setEndX(450.0f); 
line.setEndY(140.0f);

Добавление объекта Shape в группу

Наконец, вам нужно добавить объект формы в группу, передав его в качестве параметра конструктора, как показано ниже.

//Creating a Group object  
Group root = new Group(line);

В следующей таблице приведен список различных фигур (классов), предоставляемых JavaFX.

S.No Форма и описание
1 Линия

Линия — это геометрическая структура, соединяющая две точки. Класс Line пакета javafx.scene.shape представляет линию в плоскости XY.

2 Прямоугольник

В общем, прямоугольник — это четырехсторонний многоугольник, который имеет две пары параллельных и параллельных сторон со всеми внутренними углами в качестве прямых углов. В JavaFX Rectangle представлен классом с именем Rectangle . Этот класс принадлежит пакету javafx.scene.shape .

3 Прямоугольник с закругленными углами

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

4 Круг

Круг — это линия, образующая замкнутый контур, каждая точка которого находится на фиксированном расстоянии от центральной точки. В JavaFX круг представлен классом с именем Circle . Этот класс принадлежит пакету javafx.scene.shape .

5 Эллипс

Эллипс определяется двумя точками, каждая из которых называется фокусом. Если взять какую-либо точку на эллипсе, сумма расстояний до точек фокусировки будет постоянной. Размер эллипса определяется суммой этих двух расстояний.

В JavaFX эллипс представлен классом с именем Ellipse . Этот класс принадлежит пакету javafx.scene.shape .

6 многоугольник

Замкнутая форма, образованная рядом копланарных отрезков, соединенных друг с другом. В JavaFX полигон представлен классом с именем Polygon . Этот класс принадлежит пакету javafx.scene.shape .

7 Ломаная

Полилиния это тот же многоугольник, за исключением того, что полилиния не закрыта в конце. Или непрерывная линия, состоящая из одного или нескольких отрезков. В JavaFX Polyline представлен классом с именем Polygon . Этот класс принадлежит пакету javafx.scene.shape .

8 Кубическая кривая

Кубическая кривая — это параметрическая кривая Безье, в плоскости XY — кривая степени 3. В JavaFX кубическая кривая представлена ​​классом с именем CubicCurve . Этот класс принадлежит пакету javafx.scene.shape .

9 QuadCurve

Квадратичная кривая — это параметрическая кривая Безье, в плоскости XY — кривая степени 2. В JavaFX QuadCurve представлен классом с именем QuadCurve. Этот класс принадлежит пакету javafx.scene.shape .

10 дуга

Дуга является частью кривой. В JavaFX дуга представлена ​​классом с именем Arc . Этот класс принадлежит пакету — javafx.scene.shape .

Типы Арк

В дополнение к этому мы можем нарисовать три типа дуги Open, Chord, Round .

11 SVGPath

В JavaFX мы можем создавать изображения, анализируя пути SVG. Такие фигуры представлены классом с именем SVGPath . Этот класс принадлежит пакету javafx.scene.shape . Этот класс имеет свойство с именем content типа String. Это представляет строку в кодировке SVG Path, из которой должно быть получено изображение. ,

Линия — это геометрическая структура, соединяющая две точки. Класс Line пакета javafx.scene.shape представляет линию в плоскости XY.

В общем, прямоугольник — это четырехсторонний многоугольник, который имеет две пары параллельных и параллельных сторон со всеми внутренними углами в качестве прямых углов. В JavaFX Rectangle представлен классом с именем Rectangle . Этот класс принадлежит пакету javafx.scene.shape .

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

Круг — это линия, образующая замкнутый контур, каждая точка которого находится на фиксированном расстоянии от центральной точки. В JavaFX круг представлен классом с именем Circle . Этот класс принадлежит пакету javafx.scene.shape .

Эллипс определяется двумя точками, каждая из которых называется фокусом. Если взять какую-либо точку на эллипсе, сумма расстояний до точек фокусировки будет постоянной. Размер эллипса определяется суммой этих двух расстояний.

В JavaFX эллипс представлен классом с именем Ellipse . Этот класс принадлежит пакету javafx.scene.shape .

Замкнутая форма, образованная рядом копланарных отрезков, соединенных друг с другом. В JavaFX полигон представлен классом с именем Polygon . Этот класс принадлежит пакету javafx.scene.shape .

Полилиния это тот же многоугольник, за исключением того, что полилиния не закрыта в конце. Или непрерывная линия, состоящая из одного или нескольких отрезков. В JavaFX Polyline представлен классом с именем Polygon . Этот класс принадлежит пакету javafx.scene.shape .

Кубическая кривая — это параметрическая кривая Безье, в плоскости XY — кривая степени 3. В JavaFX кубическая кривая представлена ​​классом с именем CubicCurve . Этот класс принадлежит пакету javafx.scene.shape .

Квадратичная кривая — это параметрическая кривая Безье, в плоскости XY — кривая степени 2. В JavaFX QuadCurve представлен классом с именем QuadCurve. Этот класс принадлежит пакету javafx.scene.shape .

Дуга является частью кривой. В JavaFX дуга представлена ​​классом с именем Arc . Этот класс принадлежит пакету — javafx.scene.shape .

В дополнение к этому мы можем нарисовать три типа дуги Open, Chord, Round .

В JavaFX мы можем создавать изображения, анализируя пути SVG. Такие фигуры представлены классом с именем SVGPath . Этот класс принадлежит пакету javafx.scene.shape . Этот класс имеет свойство с именем content типа String. Это представляет строку в кодировке SVG Path, из которой должно быть получено изображение. ,

Рисование большего количества фигур через класс Path

В предыдущем разделе мы увидели, как рисовать некоторые простые предопределенные фигуры, создавая экземпляры классов и устанавливая соответствующие параметры.

Но только этих предопределенных форм недостаточно для создания более сложных форм, кроме примитивов, предоставляемых пакетом javafx.shape .

Например, если вы хотите нарисовать графический элемент, как показано на следующей диаграмме, вы не можете полагаться на эти простые формы.

Путь Класс

Путь Класс

Для рисования таких сложных структур JavaFX предоставляет класс с именем Path . Этот класс представляет геометрический контур формы.

Он прикреплен к наблюдаемому списку, который содержит различные элементы пути, такие как moveTo, LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo.

При создании экземпляра этот класс создает путь на основе заданных элементов пути.

Вы можете передать элементы пути этому классу при его создании следующим образом:

Path myshape = new Path(pathElement1, pathElement2, pathElement3);

Или вы можете получить наблюдаемый список и добавить все элементы пути, используя метод addAll () следующим образом:

Path myshape = new Path(); 
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3); 

Вы также можете добавлять элементы по отдельности, используя метод add () как —

Path myshape = new Path(); 
myshape.getElements().add(pathElement1);

Элемент перехода к пути

Элемент Path MoveTo используется для перемещения текущей позиции пути в указанную точку. Обычно используется для установки начальной точки фигуры, нарисованной с использованием элементов контура.

Он представлен классом LineTo из пакета javafx.scene.shape . Он имеет 2 свойства двойного типа, а именно —

  • X — координата x точки, в которую должна быть проведена линия из текущей позиции.

  • Y — координата y точки, в которую должна быть проведена линия из текущей позиции.

X — координата x точки, в которую должна быть проведена линия из текущей позиции.

Y — координата y точки, в которую должна быть проведена линия из текущей позиции.

Вы можете создать элемент move to path, создав экземпляр класса MoveTo и передав координаты x, y новой точки следующим образом:

MoveTo moveTo = new MoveTo(x, y);

Если вы не передадите никакие значения в конструктор, то новая точка будет установлена ​​на (0,0).

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

setX(value); 
setY(value); 

Пример — рисование сложного пути

В этом примере мы покажем, как нарисовать следующую фигуру, используя классы Path, MoveTo и Line .

Сложный путь

Сохраните этот код в файле с именем ComplexShape.java .

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.shape.LineTo; 
import javafx.scene.shape.MoveTo; 
import javafx.scene.shape.Path; 
         
public class ComplexShape extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Creating a Path 
      Path path = new Path(); 
       
      //Moving to the starting point 
      MoveTo moveTo = new MoveTo(108, 71); 
        
      //Creating 1st line 
      LineTo line1 = new LineTo(321, 161);  
       
      //Creating 2nd line 
      LineTo line2 = new LineTo(126,232);       
       
      //Creating 3rd line 
      LineTo line3 = new LineTo(232,52);  
       
      //Creating 4th line 
      LineTo line4 = new LineTo(269, 250);   
       
      //Creating 4th line 
      LineTo line5 = new LineTo(108, 71);  
       
      //Adding all the elements to the path 
      path.getElements().add(moveTo); 
      path.getElements().addAll(line1, line2, line3, line4, line5);        
         
      //Creating a Group object  
      Group root = new Group(path); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing an arc through a path");
      
      //Adding scene to the stage 
      stage.setScene(scene);
      
      //Displaying the contents of the stage 
      stage.show();         
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}       

Скомпилируйте и выполните сохраненный файл Java из командной строки, используя следующие команды.

javac ComplexShape.java 
java ComplexShape

При выполнении вышеупомянутая программа генерирует окно JavaFX, отображающее дугу, которая рисуется из текущей позиции в указанную точку, как показано ниже.

Рисование Дуги через Путь

Ниже приведены различные элементы пути (классы), предоставляемые JavaFX. Эти классы существуют в пакете javafx.shape . Все эти классы наследуют класс PathElement .

S.No Форма и описание
1 LineTo

Линия элемента пути используется для рисования прямой линии в точке в указанных координатах из текущей позиции. Он представлен классом с именем LineTo . Этот класс принадлежит пакету javafx.scene.shape .

2 HlineTo

Элемент пути HLineTo используется для рисования горизонтальной линии к точке в указанных координатах из текущей позиции. Он представлен классом с именем HLineTo . Этот класс принадлежит пакету javafx.scene.shape .

3 VLineTo

Вертикальная линия элемента контура используется для рисования вертикальной линии в точке в указанных координатах из текущей позиции. Он представлен классом с именем VLineTo . Этот класс принадлежит пакету javafx.scene.shape .

4 QuadCurveTo

Квадратичная кривая элемента пути используется для рисования квадратичной кривой в точке в указанных координатах из текущей позиции. Он представлен классом с именем QuadraticCurveTo . Этот класс принадлежит пакету javafx.scene.shape .

5 CubicCurveTo

Кубическая кривая элемента пути используется для рисования кубической кривой в точке с заданными координатами из текущей позиции. Он представлен классом с именем CubicCurveTo . Этот класс принадлежит пакету javafx.scene.shape .

6 аркто

Элемент пути Дуга используется для рисования дуги в точке в указанных координатах из текущей позиции. Он представлен классом с именем ArcTo . Этот класс принадлежит пакету javafx.scene.shape .

Линия элемента пути используется для рисования прямой линии в точке в указанных координатах из текущей позиции. Он представлен классом с именем LineTo . Этот класс принадлежит пакету javafx.scene.shape .

Элемент пути HLineTo используется для рисования горизонтальной линии к точке в указанных координатах из текущей позиции. Он представлен классом с именем HLineTo . Этот класс принадлежит пакету javafx.scene.shape .

Вертикальная линия элемента контура используется для рисования вертикальной линии в точке в указанных координатах из текущей позиции. Он представлен классом с именем VLineTo . Этот класс принадлежит пакету javafx.scene.shape .

Квадратичная кривая элемента пути используется для рисования квадратичной кривой в точке в указанных координатах из текущей позиции. Он представлен классом с именем QuadraticCurveTo . Этот класс принадлежит пакету javafx.scene.shape .

Кубическая кривая элемента пути используется для рисования кубической кривой в точке с заданными координатами из текущей позиции. Он представлен классом с именем CubicCurveTo . Этот класс принадлежит пакету javafx.scene.shape .

Элемент пути Дуга используется для рисования дуги в точке в указанных координатах из текущей позиции. Он представлен классом с именем ArcTo . Этот класс принадлежит пакету javafx.scene.shape .

Свойства 2D-объектов

Для всех 2-мерных объектов вы можете установить различные свойства, такие как заливка, обводка, StrokeType и т. Д. В следующем разделе рассматриваются различные свойства 2D-объектов.

Операции с 2D-объектами

Если мы добавим более одной фигуры в группу, первая фигура будет перекрыта второй, как показано ниже.

Операции над 2D-объектами

Помимо преобразований (вращение, масштабирование, преобразование и т. Д.), Переходов (анимаций) вы также можете выполнять три операции над 2D-объектами, а именно — Объединение, Вычитание и Пересечение .

Эта операция принимает две или более фигур в качестве входных данных и возвращает занимаемую ими площадь.

Эта операция принимает две или более фигур в качестве входных данных и возвращает область пересечения между ними.

Эта операция принимает две или более фигур в качестве входных данных. Затем он возвращает область первой фигуры, исключая область, перекрытую второй.