0
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.shape.ArcType;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Arc;
import javafx.scene.paint.Color;
import javafx.scene.control.Button;
import javafx.scene.Group;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.animation.PathTransition;
import javafx.util.Duration;
import javafx.scene.shape.Ellipse;

public class MovingFourFans extends Application
{
    private Button btPause = new Button("Pause");
    private Button btResume = new Button("Resume");
    private Button btReverse = new Button("Reverse");
    private Circle fanPanel;
    private Ellipse fanPath;
    private Arc fan1;
    private Arc fan2;
    private Arc fan3;
    private Arc fan4;
    private BorderPane uiContainer;
    private HBox buttonContainer;
    private PathTransition pt = new PathTransition();


@Override
public void start(Stage primaryStage)
{
    BorderPane pane = new BorderPane();
    Scene scene = new Scene(pane, 400, 500);

    buttonContainer = new HBox(btPause, btResume, btReverse);
    buttonContainer.setAlignment(Pos.CENTER);
    Group group = new Group();

    pane.setCenter(group);
    pane.setBottom(buttonContainer);

    // include a path transition with a circle inside instead

    fanPanel = new Circle(Math.min(pane.getWidth(), pane.getHeight()) / 4);
    fanPanel.setFill(Color.WHITE);
    fanPanel.setStroke(Color.BLACK);

    fanPath = new Ellipse(fanPanel.getRadius() / 100, fanPanel.getRadius() / 100);
    fanPath.setVisible(true);
    fanPath.setFill(Color.WHITE);
    fanPath.setStroke(Color.BLACK);

    fan1 = new Arc();
    fan1.setType(ArcType.ROUND);
    fan1.setRadiusX(fanPanel.getRadius() - 10);
    fan1.setRadiusY(fanPanel.getRadius() - 10);
    fan1.setStartAngle(80);
    fan1.setLength(-10);
    fan1.setFill(Color.RED);



    group.getChildren().addAll(fanPanel, fanPath, fan1);

    pt.setPath(fanPath);
    pt.setNode(fan1);
    pt.setCycleCount(Timeline.INDEFINITE);
    pt.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
    pt.setDuration(Duration.seconds(3));
    pt.setAutoReverse(false);
    pt.play();

    btPause.setOnAction(e -> pt.pause());
    btResume.setOnAction(e -> pt.play());


    primaryStage.setTitle("Control Moving Fan");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args)
{
    Application.launch(args);
}

}

I'm having a problem trying to create an animation of a fan with four wings with Javafx. I know how to make the buttons work but for the animation every time I start it, the fans moving along the circle path that I created with its middle section not the tip of the section. Because of this the animation doesn't look correct. Does anyone know a fix to this or what method I can use to create the correct animation for this? In this code I only made one wing for test and there are 3 wings left. The screenshot for what I currently have is below. enter image description here

swittuth
  • 77
  • 2
  • 5
  • 2
    Perhaps review this example of[rotating around a pivot](https://stackoverflow.com/questions/28652149/rotatetransition-around-a-pivot), assuming that is what you are actually trying to accomplish. – jewelsea Dec 05 '21 at 22:10
  • If you don’t want all of your shapes to be centered on each other, give them center coordinates, not just radii and angles. – VGR Dec 06 '21 at 00:27

0 Answers0