Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno JavaFX - Jak jednoduše rozdělit shape?

Dobrý den,

Pomocí tohoto kódu vytvořím 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);
    }
}

[]

Ten potřebuji rozdělit na 5 částí (na 5 samostatných Path), tak jsem vytvořil 5 objektů, tvořící dohromady objekt výše.

@Override
public void start(Stage primaryStage) {
    var path2 = 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));*/
    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();
}

[]

Kód sice funguje, ale je příliš složitý. Navíc, i když jsem tento kód vytvořil, přesto jsem si po necelém měsíci nepamatoval, jak vlastně funguje.

Šlo by to, prosím Vás, nějak zjednodušit?

Děkuji

PS. Ještě mě napadla možnost to skutečně rozdělit na 5 částí, ale asi to nepůjde respektive nikde jsem nenašel zmínku o tom, že by něco takového bylo možné provést.

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny