PathTransition_InclinedCircle2
  • Path path = arcOrbitPath(100,220, 50, 200, -60);
 
Code:

package javafxtemplate1;

import javafx.animation.PathTransition.OrientationType;
import javafx.animation.PathTransitionBuilder;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.ArcTo;
import javafx.scene.shape.Circle;
import javafx.scene.shape.ClosePath;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.PathBuilder;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.animation.PathTransition;
import javafx.util.Duration;
/**
*
* @author Manas9
*/
public class JavaFXTemplate1 extends Application {
//


@Override
public void start(Stage primaryStage) throws Exception {
final PathTransition pathTransition = new PathTransition();
primaryStage.show();
Group root = new Group();
primaryStage.setResizable(false);
primaryStage.setTitle("Orbit Elliptical 60");
primaryStage.setScene(new Scene(root, 450, 350));
//final Circle circle1 = new Circle(10,10,10);
final Circle circle1 = new Circle();
circle1.setCenterX(10);circle1.setCenterY(10);
circle1.setRadius(10.0f); circle1.setFill(Color.RED);
//
Rectangle rect2 = new Rectangle(0, 0, 20, 20);
rect2.setArcHeight(10);
rect2.setArcWidth(10);
rect2.setFill(Color.GREEN);
root.getChildren().addAll(circle1,rect2);
// centerX, centerY, radiusX,radiusY
//Path path = arcOrbitPath(350, 180, 150, 150, 0);
//left, down, radius, size, right 45
Path path = arcOrbitPath(100,220, 50, 200, -60);
root.getChildren().add(path);
pathTransition.setDuration(Duration.seconds(2));
pathTransition.setPath(path);
pathTransition.setNode(circle1);
pathTransition.setNode(rect2);//will mask circle1
pathTransition.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);
pathTransition.setCycleCount(Timeline.INDEFINITE);
pathTransition.setAutoReverse(true);// turn around

pathTransition.play();

}
private Path arcOrbitPath(double centerX, double centerY,
double radiusX, double radiusY, double rotate) {
ArcTo arcTo = new ArcTo();
arcTo.setX(centerX - radiusX + 1); // 360 degree swing
arcTo.setY(centerY - radiusY);
arcTo.setSweepFlag(false);
arcTo.setLargeArcFlag(true);
arcTo.setRadiusX(radiusX);
arcTo.setRadiusY(radiusY);
arcTo.setXAxisRotation(rotate);
final Path path =new Path();
path.getElements().addAll((new MoveTo(centerX - radiusX, centerY - radiusY)),
arcTo, new ClosePath());
path.setStroke(Color.DARKSEAGREEN);
// size and gap of the dashes
path.getStrokeDashArray().setAll(15d, 15d);
path.setStrokeWidth(5);
return path;
}
public static void main(String[] args) {
launch(args);

}


}

With Rectangle: