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 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.