マンダラを作成するJavaFXアプリケーションを作成しようとしています(幾何学的パターンの四角形、三角形、円を使って対称図形を作成しています)。私の計画は、ユーザーが1つの円弧上に図形を描けるようにすることでした。この円弧をコピーして回転させて曼荼羅を作成します。円内のJavaFXコンテンツを複製して回転させます
シングルアーク:
完了曼荼羅:
私は完成曼荼羅を作成する方法についてこだわっています。私はレイヤーを考えていましたが、どのようにキャンバスの非円弧領域を透明に設定するのですか?これを行うより良い方法はありますか?
これまでのコードは以下のとおりです。
@Override
public void start(Stage primaryStage)
{
final double WIDTH = 400; //constant for canvas size
final double HEIGHT = 400;
StackPane root = new StackPane();
Canvas canvas = new Canvas(WIDTH, HEIGHT);
root.getChildren().add(canvas);
Scene scene = new Scene(root, 400, 400);
primaryStage.setTitle("Mandala");
primaryStage.setScene(scene);
primaryStage.show();
GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
graphicsContext.beginPath();
graphicsContext.moveTo(event.getX(), event.getY());
graphicsContext.stroke();
}
});
canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
graphicsContext.lineTo(event.getX(), event.getY());
graphicsContext.stroke();
}
});
canvas.addEventHandler(MouseEvent.MOUSE_RELEASED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
}
});
int numSegments = 12;
int numdegrees = 360/numSegments;
int startAngle = 0;
// centreX, centreY, radiuisX (length of lines), radiusY, startAngle (0 is due east), numdegrees
Arc arc1 = new Arc(0, 0, 250, 250, startAngle, numdegrees);
arc1.setType(ArcType.ROUND);
arc1.setStroke(Color.BLACK);
arc1.setFill(null);
arc1.setStrokeWidth(1);
root.getChildren().add(arc1);
}
}
キャンバス描画プリミティブと、[Arc](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/shape/Arc.html)のようなシーングラフ描画プリミティブとを混在させるのはなぜですか? [arcTo](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html#arcTo-double-double-double-double-double- )? – jewelsea
私はこのことにとても新しいので、私は弧を描いた方法を見つけました! – Tortoise