Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DrawCircle (GraphicsContext gc) with Canvas in Javafx

I have to do some projet to draw regular polygon with Canvas in JavaFX, and I have doubt how to design a circle with canvas using GraphicsContext

I have this point class containing the two axes (x, y)

public class Point2D {

         private float mX;
         private float mY;

         public Point2D () {
            this (0,0);
         }

         public Point2D (float x, float y) {
             mX = x;
             mY = y;
         }

        public float getX() {
           return mX;
          }

       public float getY() {
          return mY;
  }
}

And I have this circle Class and I have doubt to made the method public void drawCircle(GraphicsContext gc)

public class Circle{

    private Point2D mCenter;
    private Color color;
    private float mRadius;

public Circle (Point2D center, Color color, float radius ) {
         this.mCenter = center;
         this.color = color;
         this.mRadius = radius;
     }

public void drawCircle(GraphicsContext gc) { // My Doubt is here
        Canvas canvas = new Canvas();
        gc = canvas .getGraphicsContext2D();
        gc.setFill(Color.WHITE);
        gc.setStroke(Color.BLACK);

    } 
}

In Main JavaFX

public class PaintGeometricoFX extends Application {

private BorderPane root;

 @Override
    public void start(Stage primaryStage) {

         Point2D p = new Point2D(0, 0);
         Float radius = 4.0f;

         Circle circle = new Circle(p.getX(), p.getY(),Color.BLACK,radius)

         Canvas canvas = new Canvas();
         GraphicsContext gc = imagem.getGraphicsContext2D();

         circle.drawCircle(gc);

          root.setCenter(canvas);


        Scene scene = new Scene(root, 1152, 800);

        primaryStage.setTitle("PAINT");
        primaryStage.setResizable(false);
        primaryStage.setScene(scene);
        primaryStage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}
like image 646
DSanches Avatar asked Dec 26 '22 08:12

DSanches


2 Answers

Stroking:

getGraphicsContext2D().strokeOval(center.x-radius, center.y-radius, radius * 2, radius * 2);

Filling:

getGraphicsContext2D().fillOval(center.x-radius, center.y-radius, radius * 2, radius * 2);

Note the 3rd and 4th parameters are diameters not radii. I had a discrepancy between ScalaFx and the correct ScalaJs output. But I checked the JavaFx documentation and it works the same:

fillOval

public void fillOval(double x,
                     double y,
                     double w,
                     double h)

Fills an oval using the current fill paint.

This method will be affected by any of the global common or fill attributes as specified in the Rendering Attributes Table.

Parameters:
    x - the X coordinate of the upper left bound of the oval.
    y - the Y coordinate of the upper left bound of the oval.
    w - the width at the center of the oval.
    h - the height at the center of the oval. 
like image 162
Rich Oliver Avatar answered Dec 28 '22 06:12

Rich Oliver


Stroking:

getGraphicsContext2D().strokeOval(center.x-radius, center.y-radius, radius, radius);

Filling:

getGraphicsContext2D().fillOval(center.x-radius, center.y-radius, radius, radius);
like image 35
tomsontom Avatar answered Dec 28 '22 05:12

tomsontom