【发布时间】:2020-04-27 21:43:25
【问题描述】:
例如,我有这个Path
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class DivideShape extends javafx.application.Application {
@Override
public void start(Stage primaryStage) {
var path = new Path(new MoveTo(200, 380), new LineTo(0, 300),
new ArcTo(300, 300, 0, 300, 0, false, true), new LineTo(380,
200), new ArcTo(180, 180, 0, 200, 380, false, false));
path.setFill(Color.BLUE);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(new Scene(new Pane(path)));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
而且我想把它分成5份(和分割披萨完全一样)
这可以使用Line 来完成。
但是,这样看起来像 5 个对象,但实际上它仍然是 1 个对象。
是否可以将对象分成5个Paths,这样我就不必一个一个地创建它们了,好吗?
谢谢
更新:
当然,当我修改启动方法时。
@Override
public void start(Stage primaryStage) {
var pane = new Pane();
var moveTo = new MoveTo(200, 380);
var lineTo = new LineTo(0, 300);
var arc_big = 300;
var arc_small = 180;
for (var deg = 198; deg <= 270; deg += 18) {
var path = new Path(moveTo, lineTo);
lineTo = new LineTo(300 + arc_big * Math.cos(Math.toRadians(deg)), 300 + arc_big * Math.sin(Math.toRadians(deg)));
path.getElements().add(new ArcTo(arc_big, arc_big, 0, lineTo.getX(), lineTo.getY(), false, true));
var move = new MoveTo(380 + arc_small * Math.cos(Math.toRadians(deg)), 380 + arc_small * Math.sin(Math.toRadians(deg)));
path.getElements().addAll(new LineTo(move.getX(), move.getY()),
new ArcTo(arc_small, arc_small, 0, moveTo.getX(), moveTo.getY(), false, false));
moveTo = move;
path.setFill(Color.color(Math.random(), Math.random(), Math.random()));
pane.getChildren().add(path);
}
primaryStage.setTitle("Hello World!");
primaryStage.setScene(new Scene(pane));
primaryStage.show();
}
所以我会创建五个独立的Paths,但是代码太复杂了。这就是为什么我想知道它是否可以划分(1个对象到5个对象),好吗?
【问题讨论】: