如何将转换应用于 JavaFX 中的形状?
How to apply a transformation to a shape in JavaFX?
我想对形状应用变换,使用方法 setRotate(Double value)
我可以旋转形状。现在,我怎样才能再次应用转换?如何获取变换后的点坐标?
Polygon p = new Polygon(0,0,0,100,50,50);
p.getPoints(); // output before : 0,0,0,100,50,50
p.setRotate(90);
p.setRotate(90); //not applied
p.getPoints(); // output after: 0,0,0,100,50,50
变换前的三角形:
变换后的三角形:
如果您只想进行旋转,只需将值相加即可。 rotate
是 "absolute" 旋转,而不是相对旋转。如果你想连接不同的转换,我建议使用 Transform
s 并将它们添加到节点的 transform
s 列表中。
至于查找坐标:您可能对父节点中的坐标感兴趣。您可以使用 Node.localToParent
:
从本地坐标获取这些信息
@Override
public void start(Stage stage) throws IOException {
Polygon p = new Polygon(0,0,0,100,50,50);
p.getPoints(); // output before : 0,0,0,100,50,50
p.getPoints(); // output after: 0,0,0,100,50,50
StackPane root = new StackPane(p);
Scene scene = new Scene(root, 500.0, 400.0);
scene.setOnMouseClicked(evt -> {
// add rotation and determine resulting position of (0, 0)
Rotate r = new Rotate(90, (0+0+50) / 3d, (0+100+50) / 3d);
p.getTransforms().add(r);
System.out.println("(0, 0) is now at " + p.localToParent(0, 0));
});
stage.setScene(scene);
stage.show();
}
我想对形状应用变换,使用方法 setRotate(Double value)
我可以旋转形状。现在,我怎样才能再次应用转换?如何获取变换后的点坐标?
Polygon p = new Polygon(0,0,0,100,50,50);
p.getPoints(); // output before : 0,0,0,100,50,50
p.setRotate(90);
p.setRotate(90); //not applied
p.getPoints(); // output after: 0,0,0,100,50,50
变换前的三角形:
变换后的三角形:
如果您只想进行旋转,只需将值相加即可。 rotate
是 "absolute" 旋转,而不是相对旋转。如果你想连接不同的转换,我建议使用 Transform
s 并将它们添加到节点的 transform
s 列表中。
至于查找坐标:您可能对父节点中的坐标感兴趣。您可以使用 Node.localToParent
:
@Override
public void start(Stage stage) throws IOException {
Polygon p = new Polygon(0,0,0,100,50,50);
p.getPoints(); // output before : 0,0,0,100,50,50
p.getPoints(); // output after: 0,0,0,100,50,50
StackPane root = new StackPane(p);
Scene scene = new Scene(root, 500.0, 400.0);
scene.setOnMouseClicked(evt -> {
// add rotation and determine resulting position of (0, 0)
Rotate r = new Rotate(90, (0+0+50) / 3d, (0+100+50) / 3d);
p.getTransforms().add(r);
System.out.println("(0, 0) is now at " + p.localToParent(0, 0));
});
stage.setScene(scene);
stage.show();
}