public void fill_ellipse_arr(PlaEllipse[] p_ellipse_arr,Graphics p_g,Color p_color,double p_translucency_factor){
  if (p_color == null)   return;
  if (p_ellipse_arr.length <= 0)   return;
  GeneralPath draw_path=new GeneralPath(GeneralPath.WIND_EVEN_ODD);
  for (  PlaEllipse curr_ellipse : p_ellipse_arr) {
    Point2D center=coordinate_transform.board_to_screen(curr_ellipse.center);
    double bigger_radius=coordinate_transform.board_to_screen(curr_ellipse.bigger_radius);
    if (!point_near_rectangle(center.getX(),center.getY(),(Rectangle)p_g.getClip(),bigger_radius)) {
      continue;
    }
    double smaller_radius=coordinate_transform.board_to_screen(curr_ellipse.smaller_radius);
    Ellipse2D draw_ellipse=new Ellipse2D.Double(center.getX() - bigger_radius,center.getY() - smaller_radius,2 * bigger_radius,2 * smaller_radius);
    double rotation=coordinate_transform.board_to_screen_angle(curr_ellipse.rotation);
    AffineTransform affine_transform=new AffineTransform();
    affine_transform.rotate(rotation,center.getX(),center.getY());
    Shape rotated_ellipse=affine_transform.createTransformedShape(draw_ellipse);
    draw_path.append(rotated_ellipse,false);
  }
  Graphics2D g2=(Graphics2D)p_g;
  g2.setColor(p_color);
  set_translucency(g2,p_translucency_factor);
  g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
  g2.fill(draw_path);
}

public void fill_ellipse_arr ( PlaEllipse [ ] p_ellipse_arr , Graphics p_g , Color p_color , double p_translucency_factor ) { if ( p_color == null ) return ; if ( p_ellipse_arr . length <= 0 ) return ; GeneralPath draw_path = new GeneralPath ( GeneralPath . WIND_EVEN_ODD ) ; for ( PlaEllipse curr_ellipse : p_ellipse_arr ) { Point2D center = coordinate_transform . board_to_screen ( curr_ellipse . center ) ; double bigger_radius = coordinate_transform . board_to_screen ( curr_ellipse . bigger_radius ) ; if ( ! point_near_rectangle ( center . getX ( ) , center . getY ( ) , ( Rectangle ) p_g . getClip ( ) , bigger_radius ) ) { continue ; } double smaller_radius = coordinate_transform . board_to_screen ( curr_ellipse . smaller_radius ) ; Ellipse2D draw_ellipse = new Ellipse2D . Double ( center . getX ( ) - bigger_radius , center . getY ( ) - smaller_radius , 2 * bigger_radius , 2 * smaller_radius ) ; double rotation = coordinate_transform . board_to_screen_angle ( curr_ellipse . rotation ) ; AffineTransform affine_transform = new AffineTransform ( ) ; affine_transform . rotate ( rotation , center . getX ( ) , center . getY ( ) ) ; Shape rotated_ellipse = affine_transform . createTransformedShape ( draw_ellipse ) ; draw_path . append ( rotated_ellipse , false ) ; } Graphics2D g2 = ( Graphics2D ) p_g ; g2 . setColor ( p_color ) ; set_translucency ( g2 , p_translucency_factor ) ; g2 . setRenderingHint ( RenderingHints . KEY_ANTIALIASING , RenderingHints . VALUE_ANTIALIAS_ON ) ; g2 . fill ( draw_path ) ; }
draws the interiour of an array of ellipses . ellipses contained in an other ellipse are treated as holes .
