import javafx.application.Application; import javafx.geometry.BoundingBox; import javafx.geometry.Insets; import javafx.geometry.Point2D; import javafx.geometry.Point3D; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Line; import javafx.scene.shape.Rectangle; import javafx.scene.shape.StrokeLineCap; import javafx.scene.transform.Affine; import javafx.scene.transform.Rotate; import javafx.scene.transform.Scale; import javafx.scene.transform.Shear; import javafx.scene.transform.Transform; import javafx.scene.transform.Translate; import javafx.stage.Stage; public class Transf extends Application { public static void main(String[] args) { Application.launch(args); } public void start(Stage stage) throws Exception { VBox root = new VBox(15.0); root.setAlignment(Pos.CENTER); root.setPadding(new Insets(20.0)); Button button = new Button("Методы класса Node"); Button button2 = new Button("Классы Transform и Affine"); Button button3 = new Button("Класс Translate. Смещение"); Button button4 = new Button("Класс Scale. Масштабирование"); Button button5 = new Button("Класс Rotate. Вращение"); Button button6 = new Button("Класс Shear. Сдвиг"); button.setOnAction(event -> { newWindow(); }); button2.setOnAction(event -> { newWindow2(); }); button3.setOnAction(event -> { newWindow3(); }); button4.setOnAction(event -> { newWindow4(); }); button5.setOnAction(event -> { newWindow5(); }); button6.setOnAction(event -> { newWindow6(); }); root.getChildren().addAll(button, button2, button3, button4, button5, button6); Scene scene = new Scene(root, 400.0, 300.0); stage.setTitle("Класс Transform"); stage.setScene(scene); stage.show(); } public void newWindow() { Stage window = new Stage(); Pane pane = new Pane(); Rectangle rect = new Rectangle(100.0, 100.0); rect.setFill(Color.RED); rect.setTranslateX(10.0); rect.setTranslateY(10.0); //rect.setTranslateZ(10.0); System.out.println(rect.getTranslateX()); System.out.println(rect.getTranslateY()); System.out.println(rect.getTranslateZ()); rect.relocate(10.0, 10.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.BLACK); rect2.setScaleX(2.0); rect2.setScaleY(2.0); //rect2.setScaleZ(2.0); System.out.println(rect2.getScaleX()); System.out.println(rect2.getScaleY()); System.out.println(rect2.getScaleZ()); rect2.relocate(200.0, 50.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.GREEN); rect3.setRotate(45.0); System.out.println(rect3.getRotate()); rect3.relocate(350.0, 50.0); Rectangle rect3_0 = new Rectangle(50.0, 50.0); rect3_0.setFill(Color.WHITE); rect3_0.relocate(350.0, 50.0); pane.getChildren().addAll(rect3_0); Rectangle rect3_2 = new Rectangle(50.0, 50.0); rect3_2.setFill(Color.GREEN); rect3_2.setRotationAxis(Rotate.X_AXIS); rect3_2.setRotate(45.0); rect3_2.relocate(350.0, 150.0); Rectangle rect3_3 = new Rectangle(50.0, 50.0); rect3_3.setFill(Color.GREEN); rect3_3.relocate(350.0, 250.0); Rotate rx = new Rotate(30.0, Rotate.X_AXIS); Rotate ry = new Rotate(50.0, Rotate.Y_AXIS); Rotate rz = new Rotate(30.0, Rotate.Z_AXIS); rect3_3.getTransforms().addAll(rx, ry, rz); Rectangle rect3_4 = new Rectangle(50.0, 50.0); rect3_4.setFill(Color.CHOCOLATE); rect3_4.relocate(400.0, 250.0); rect3_4.setRotationAxis(new Point3D(0.0, 1.0, 0.0)); rect3_4.setRotate(45.0); Rectangle rect4 = new Rectangle(100.0, 100.0); Shear sh = new Shear(); sh.setX(0.5); rect4.getTransforms().add(sh); rect4.relocate(50.0, 200.0); pane.getChildren().addAll(rect, rect2, rect3, rect3_2, rect3_3, rect3_4, rect4); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Transform"); window.show(); } public void newWindow2() { Stage window = new Stage(); Pane pane = new Pane(); Transform tr = new Rotate(45.0, 0.0, 0.0); System.out.println(tr.toString()); Affine m = new Affine(); /*m = new Affine(new double[]{ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 }, MatrixType.MT_3D_3x4, 0); m = new Affine(1.0, 0.0, 0.0, 1.0, 0.0, 0.0); m = new Affine(1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); m = new Affine(tr);*/ System.out.println(m.toString()); /*m.setMxx(1); m.setMxy(2); m.setMxz(3); m.setTx(4); m.setMyx(5); m.setMyy(6); m.setMyz(7); m.setTy(8); m.setMzx(9); m.setMzy(10); m.setMzz(11); m.setTz(12);*/ /*m.getMxx(); m.getMxy(); m.getMxz(); m.getTx(); m.getMyx(); m.getMyy(); m.getMyz(); m.getTy(); m.getMzx(); m.getMzy(); m.getMzz(); m.getTz();*/ System.out.println(m.toString()); System.out.println(m.transform(5.0, 10.0)); Affine m2 = new Affine(1.0, 0.0, 100.0, 0.0, 1.0, 100.0); System.out.println(m2.toString()); System.out.println(m2.transform(new Point2D(5.0, 10.0))); Affine m3 = Transform.affine(2.0, 0.0, 0.0, 2.0, 0.0, 0.0); /*m3 = Transform.affine(2.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0);*/ System.out.println(m3.toString()); System.out.println(m3.transform(5.0, 10.0, 0.0)); System.out.println(m3.transform(new Point3D(5.0, 10.0, 0.0))); System.out.println(m3.transform(new BoundingBox(5.0, 10.0, 100.0, 50.0))); Rectangle rect = new Rectangle(50.0, 50.0); rect.setFill(Color.RED); rect.getTransforms().add(m); rect.relocate(300.0, 100.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.GREEN); rect2.getTransforms().add(m2); rect2.relocate(0.0, 0.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.BLUE); rect3.getTransforms().add(m3); rect3.relocate(100.0, 200.0); pane.getChildren().addAll(rect, rect2, rect3); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Transform"); window.show(); } public void newWindow3() { Stage window = new Stage(); Pane pane = new Pane(); Translate tr = new Translate(); System.out.println(tr.toString()); Translate tr2 = new Translate(100.0, 50.0); System.out.println(tr2.toString()); Translate tr3 = new Translate(200.0, 100.0, 50.0); System.out.println(tr3.toString()); /*tr3.setX(1); tr3.setY(2); tr3.setZ(3); System.out.println(tr3.getX()); System.out.println(tr3.getY()); System.out.println(tr3.getZ());*/ Translate tr4 = Transform.translate(300.0, 150.0); System.out.println(tr4.toString()); Rectangle rect = new Rectangle(50.0, 50.0); rect.setFill(Color.RED); rect.getTransforms().add(tr); rect.relocate(0.0, 0.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.GREEN); rect2.getTransforms().add(tr2); rect2.relocate(0.0, 0.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.BLUE); rect3.getTransforms().add(tr3); rect3.relocate(0.0, 0.0); Rectangle rect4 = new Rectangle(50.0, 50.0); rect4.setFill(Color.BLACK); rect4.getTransforms().add(tr4); rect4.relocate(0.0, 0.0); pane.getChildren().addAll(rect, rect2, rect3, rect4); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Translate"); window.show(); } public void newWindow4() { Stage window = new Stage(); Pane pane = new Pane(); Scale tr = new Scale(); System.out.println(tr.toString()); Scale tr2 = new Scale(2.0, 2.0); System.out.println(tr2.toString()); Scale tr3 = new Scale(1.5, 2.0, 1.0); System.out.println(tr3.toString()); /*tr3.setX(1); tr3.setY(2); tr3.setZ(3); System.out.println(tr3.getX()); System.out.println(tr3.getY()); System.out.println(tr3.getZ()); tr3.setPivotX(1); tr3.setPivotY(2); tr3.setPivotZ(3); System.out.println(tr3.getPivotX()); System.out.println(tr3.getPivotY()); System.out.println(tr3.getPivotZ());*/ Scale tr4 = new Scale(2.0, 2.0, 0.0, 0.0); System.out.println(tr4.toString()); Scale tr5 = new Scale(2.0, 2.0, 1.0, 25.0, 25.0, 0.0); System.out.println(tr5.toString()); Scale tr6 = Transform.scale(2.0, 2.0); System.out.println(tr6.toString()); Scale tr7 = Transform.scale(2.0, 2.0, 50.0, 50.0); System.out.println(tr7.toString()); Rectangle rect = new Rectangle(50.0, 50.0); rect.setFill(Color.RED); rect.getTransforms().add(tr); rect.relocate(10.0, 10.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.GREEN); rect2.getTransforms().add(tr2); rect2.relocate(100.0, 10.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.BLUE); rect3.getTransforms().add(tr3); rect3.relocate(250.0, 10.0); Rectangle rect3_2 = new Rectangle(50.0, 50.0); rect3_2.setFill(Color.WHITE); rect3_2.setOpacity(0.5); rect3_2.relocate(250.0, 10.0); Rectangle rect4 = new Rectangle(50.0, 50.0); rect4.setFill(Color.BLACK); rect4.getTransforms().add(tr4); rect4.relocate(10.0, 150.0); Rectangle rect4_2 = new Rectangle(50.0, 50.0); rect4_2.setFill(Color.WHITE); rect4_2.setOpacity(0.5); rect4_2.relocate(10.0, 150.0); Rectangle rect5 = new Rectangle(50.0, 50.0); rect5.setFill(Color.BLACK); rect5.getTransforms().add(tr5); rect5.relocate(150.0, 150.0); Rectangle rect5_2 = new Rectangle(50.0, 50.0); rect5_2.setFill(Color.WHITE); rect5_2.setOpacity(0.5); rect5_2.relocate(150.0, 150.0); Rectangle rect6 = new Rectangle(50.0, 50.0); rect6.setFill(Color.BLACK); rect6.getTransforms().add(tr7); rect6.relocate(300.0, 200.0); Rectangle rect6_2 = new Rectangle(50.0, 50.0); rect6_2.setFill(Color.WHITE); rect6_2.setOpacity(0.5); rect6_2.relocate(300.0, 200.0); pane.getChildren().addAll(rect, rect2, rect3, rect3_2, rect4, rect4_2, rect5, rect5_2, rect6, rect6_2); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Scale"); window.show(); } public void newWindow5() { Stage window = new Stage(); Pane pane = new Pane(); Rotate tr = new Rotate(); System.out.println(tr.toString()); Rotate tr2 = new Rotate(45.0); System.out.println(tr2.toString()); Rotate tr3 = new Rotate(45.0, 25.0, 25.0); System.out.println(tr3.toString()); /*tr3.setAngle(1); tr3.setAxis(Rotate.Z_AXIS); System.out.println(tr3.getAngle()); System.out.println(tr3.getAxis());*/ /*tr3.setPivotX(1); tr3.setPivotY(2); tr3.setPivotZ(3); System.out.println(tr3.getPivotX()); System.out.println(tr3.getPivotY()); System.out.println(tr3.getPivotZ());*/ Rotate tr4 = new Rotate(45.0, 50.0, 50.0, 0.0); System.out.println(tr4.toString()); Rotate tr5 = new Rotate(45.0, Rotate.Z_AXIS); System.out.println(tr5.toString()); Rotate tr6 = new Rotate(45.0, 0.0, 0.0, 0.0, Rotate.Z_AXIS); System.out.println(tr6.toString()); Rotate tr7 = Transform.rotate(45.0, 0.0, 0.0); System.out.println(tr7.toString()); Rectangle rect = new Rectangle(50.0, 50.0); rect.setFill(Color.RED); rect.getTransforms().add(tr); rect.relocate(10.0, 10.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.BLACK); rect2.getTransforms().add(tr2); rect2.relocate(50.0, 150.0); Rectangle rect2_2 = new Rectangle(50.0, 50.0); rect2_2.setFill(Color.WHITE); rect2_2.setOpacity(0.8); rect2_2.relocate(50.0, 150.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.BLACK); rect3.getTransforms().add(tr3); rect3.relocate(200.0, 150.0); Rectangle rect3_2 = new Rectangle(50.0, 50.0); rect3_2.setFill(Color.WHITE); rect3_2.setOpacity(0.8); rect3_2.relocate(200.0, 150.0); Rectangle rect4 = new Rectangle(50.0, 50.0); rect4.setFill(Color.BLACK); rect4.getTransforms().add(tr4); rect4.relocate(350.0, 150.0); Rectangle rect4_2 = new Rectangle(50.0, 50.0); rect4_2.setFill(Color.WHITE); rect4_2.setOpacity(0.8); rect4_2.relocate(350.0, 150.0); Rectangle rect5 = new Rectangle(50.0, 50.0); rect5.setFill(Color.BLUE); rect5.getTransforms().add(tr5); rect5.relocate(150.0, 50.0); Rectangle rect6 = new Rectangle(50.0, 50.0); rect6.setFill(Color.GREEN); rect6.getTransforms().add(tr7); rect6.relocate(300.0, 50.0); Rectangle rect6_2 = new Rectangle(50.0, 50.0); rect6_2.setFill(Color.WHITE); rect6_2.setOpacity(0.8); rect6_2.relocate(300.0, 50.0); Line point1 = new Line(); point1.setStrokeLineCap(StrokeLineCap.ROUND); point1.setStrokeWidth(5.0); point1.setStroke(Color.RED); point1.relocate(50 - 2.5, 150.0 - 2.5); Line point2 = new Line(); point2.setStrokeLineCap(StrokeLineCap.ROUND); point2.setStrokeWidth(5.0); point2.setStroke(Color.RED); point2.relocate(200.0 + 25.0 - 2.5, 150.0 + 25.0 - 2.5); Line point3 = new Line(); point3.setStrokeLineCap(StrokeLineCap.ROUND); point3.setStrokeWidth(5.0); point3.setStroke(Color.RED); point3.relocate(350.0 + 50.0 - 2.5, 150.0 + 50.0 - 2.5); pane.getChildren().addAll(rect, rect2, rect2_2, rect3, rect3_2, rect4, rect4_2, rect5, rect6, rect6_2, point1, point2, point3); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Rotate"); window.show(); System.out.println(Rotate.X_AXIS); // Point3D [x = 1.0, y = 0.0, z = 0.0] System.out.println(Rotate.Y_AXIS); // Point3D [x = 0.0, y = 1.0, z = 0.0] System.out.println(Rotate.Z_AXIS); // Point3D [x = 0.0, y = 0.0, z = 1.0] } public void newWindow6() { Stage window = new Stage(); Pane pane = new Pane(); Shear tr = new Shear(); System.out.println(tr.toString()); Shear tr2 = new Shear(-0.5, 0); System.out.println(tr2.toString()); Shear tr3 = new Shear(0.5, 0, 25.0, 25.0); System.out.println(tr3.toString()); /*tr3.setX(1.0); tr3.setY(0.0); System.out.println(tr3.getX()); System.out.println(tr3.getY());*/ /*tr3.setPivotX(1); tr3.setPivotY(2); System.out.println(tr3.getPivotX()); System.out.println(tr3.getPivotY());*/ Shear tr4 = Transform.shear(0.0, 0.5); System.out.println(tr4.toString()); Shear tr5 = Transform.shear(0.0, -0.5, 25.0, 25.0); System.out.println(tr5.toString()); Rectangle rect = new Rectangle(50.0, 50.0); rect.setFill(Color.RED); rect.getTransforms().add(tr); rect.relocate(50.0, 50.0); Rectangle rect2 = new Rectangle(50.0, 50.0); rect2.setFill(Color.GREEN); rect2.getTransforms().add(tr2); rect2.relocate(200.0, 50.0); Rectangle rect2_2 = new Rectangle(50.0, 50.0); rect2_2.setFill(Color.WHITE); rect2_2.setOpacity(0.8); rect2_2.relocate(200.0, 50.0); Rectangle rect3 = new Rectangle(50.0, 50.0); rect3.setFill(Color.BLUE); rect3.getTransforms().add(tr3); rect3.relocate(300.0, 50.0); Rectangle rect3_2 = new Rectangle(50.0, 50.0); rect3_2.setFill(Color.WHITE); rect3_2.setOpacity(0.8); rect3_2.relocate(300.0, 50.0); Rectangle rect4 = new Rectangle(50.0, 50.0); rect4.setFill(Color.BLACK); rect4.getTransforms().add(tr4); rect4.relocate(50.0, 200.0); Rectangle rect4_2 = new Rectangle(50.0, 50.0); rect4_2.setFill(Color.WHITE); rect4_2.setOpacity(0.8); rect4_2.relocate(50.0, 200.0); Rectangle rect5 = new Rectangle(50.0, 50.0); rect5.setFill(Color.BLACK); rect5.getTransforms().add(tr5); rect5.relocate(200.0, 200.0); Rectangle rect5_2 = new Rectangle(50.0, 50.0); rect5_2.setFill(Color.WHITE); rect5_2.setOpacity(0.8); rect5_2.relocate(200.0, 200.0); Rectangle rect6 = new Rectangle(50.0, 50.0); rect6.setFill(Color.BLACK); rect6.getTransforms().add(new Shear(-1.0, 1.0)); rect6.relocate(350.0, 200.0); pane.getChildren().addAll(rect, rect2, rect2_2, rect3, rect3_2, rect4, rect4_2, rect5, rect5_2, rect6); Scene scene = new Scene(pane, 500, 400); window.setScene(scene); window.setTitle("Shear"); window.show(); } }