JavaFX中的剪切变换是什么?


沿固定方向使物体形状倾斜的位移称为剪切变换。这也称为倾斜。

在JavaFX中,使用**javafx.scene.transform.Shear**类的对象,可以沿所需轴线倾斜节点。在内部,此类旋转指定的轴线,使得X和Y轴不再垂直。

此类包含四个属性:

  • **pivotX** 属性(double型),指定剪切枢轴点的x坐标。可以使用**setPivotX()**方法设置此属性的值。

  • **pivotY** 属性(double型),指定剪切枢轴点的y坐标。可以使用**setPivotY()**方法设置此属性的值。

  • **x** 属性(double型),指定剪切x。可以使用**setX()**方法设置此属性的值。

  • **y** 属性(double型),指定剪切y。可以使用**setY()**方法设置此属性的值。

JavaFX中的每个节点都包含一个可观察列表,用于保存要应用于节点的所有变换。可以使用**getTransforms()**方法获取此列表。

要倾斜节点:

  • 实例化**Shear**类。

  • 使用相应的setter方法设置剪切x(或剪切y)和枢轴点(可选)。

  • 使用**getTransforms()**方法从节点(要移动的节点)获取变换列表。

  • 将上面创建的剪切对象添加到列表中。

  • 将节点添加到场景中。

示例

下面的JavaFX示例演示了剪切变换。它包含一个二维几何形状和两个滑块,分别表示x和y倾斜值。如果移动滑块,则对象会沿选择的轴线倾斜。

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Shear;
import javafx.stage.Stage;
public class ShearExample extends Application {
   public void start(Stage stage) {
      //Creating a rectangle
      Rectangle rect = new Rectangle(300, 100, 75, 75);
      rect.setFill(Color.BLUEVIOLET);
      rect.setStrokeWidth(5.0);
      rect.setStroke(Color.BROWN);
      //Setting the slider for the horizontal translation
      Slider slider1 = new Slider(0, 2, 0);
      slider1.setShowTickLabels(true);
      slider1.setShowTickMarks(true);
      slider1.setMajorTickUnit(0.5);
      slider1.setBlockIncrement(0.3);
      //Creating shear transformation
      Shear shear = new Shear();
      //Setting the pivot points
      shear.setPivotX(200);
      shear.setPivotY(250);
      //Setting the dimensions for the shear
      slider1.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            shear.setX((double) newValue);
            shear.setY(0.0);
         }
      });
      //Setting the slider for the vertical translation
      Slider slider2 = new Slider(0, 1, 0);
      slider2.setShowTickLabels(true);
      slider2.setShowTickMarks(true);
      slider2.setMajorTickUnit(0.5);
      slider2.setBlockIncrement(0.3);
      //Creating the translation transformation
      slider2.valueProperty().addListener(new ChangeListener<Number>() {
         public void changed(ObservableValue <?extends Number>observable, Number oldValue, Number newValue){
            shear.setX(0.0);
            shear.setY((double) newValue);
         }
      });
      //Adding the transformation to the sphere
      rect.getTransforms().add(shear);
      //Creating the pane
      BorderPane pane = new BorderPane();
      pane.setLeft(new VBox(new Label("Shear along X-Axis"), slider1));
      pane.setRight(new VBox(new Label("Shear along Y-Axis"), slider2));
      pane.setCenter(rect);
      //Preparing the scene
      Scene scene = new Scene(pane, 600, 250);
      stage.setTitle("Shear Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

输出

更新于:2020年5月19日

223 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告