import java.awt.*;

public class RadarCanvas extends Canvas{
	private Image im;
	private Graphics buf;

	Rectangle r;
	Antenna ant;
	public int thick_plot = 2;
	private static final Color bgcolor = new Color(216,216,191);
	boolean is_theta_plane;
	
        
        RadarCanvas(Antenna ant, boolean is_theta_plane){
		super();
		this.ant=ant;
		this.is_theta_plane=is_theta_plane;
	}
        
	public void drawCanvas(Graphics g){
		Graphics2D g2d = (Graphics2D)g;
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            
            int i;
            double theta, theta2, phi, phi2;
            
            double geom;
            
            r=getBounds();	
            g.setColor(Color.lightGray);
            //g.setColor(bgcolor);
            g.fill3DRect(0,0,r.width-1,r.height-1,true);
            
            g.setColor(Color.white);
            //draw concentric circles
            g.drawOval((int)(r.width*0.4),(int)(r.width*0.4),(int)(r.width*0.20),(int)(r.width*0.20));
            g.drawOval((int)(r.width*0.3),(int)(r.width*0.3),(int)(r.width*0.40),(int)(r.width*0.40));
            g.drawOval((int)(r.width*0.2),(int)(r.width*0.2),(int)(r.width*0.60),(int)(r.width*0.60));
            g.drawOval((int)(r.width*0.1),(int)(r.width*0.1),(int)(r.width*0.80),(int)(r.width*0.80));
            
            //draw radial lines
            g.drawLine((int)(r.width*0.1),(int)(r.width*0.5),(int)(r.width*0.9),(int)(r.width*0.5));
            g.drawLine((int)(r.width*0.5),(int)(r.width*0.1),(int)(r.width*0.5),(int)(r.width*0.9));
            g.drawLine( (int)(r.width*(0.5+0.4*(0.866))), (int)(r.width*(0.5+0.4*(0.5))), 
                        (int)(r.width*(0.5-0.4*(0.866))), (int)(r.width*(0.5-0.4*(0.5))));
            g.drawLine( (int)(r.width*(0.5-0.4*(0.866))), (int)(r.width*(0.5+0.4*(0.5))), 
                        (int)(r.width*(0.5+0.4*(0.866))), (int)(r.width*(0.5-0.4*(0.5))));
            g.drawLine( (int)(r.width*(0.5+0.4*(0.5))), (int)(r.width*(0.5+0.4*(0.866))), 
                        (int)(r.width*(0.5-0.4*(0.5))), (int)(r.width*(0.5-0.4*(0.866))));
            g.drawLine( (int)(r.width*(0.5-0.4*(0.5))), (int)(r.width*(0.5+0.4*(0.866))), 
                        (int)(r.width*(0.5+0.4*(0.5))), (int)(r.width*(0.5-0.4*(0.866))));
            
            //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
            
            if(this.is_theta_plane==true){
                g.setColor(Color.black);
		g.setFont(new Font("Serif",Font.PLAIN,ant.font16));
		g.drawString("\u03c6 = "+(int)(ant.phicontrol.phi)+"\u00ba",ant.s15,r.height - ant.s30);
                
                g.setColor(Color.black);
                g.setFont(new Font("SanSerif",Font.PLAIN,ant.font11));
                
                g.drawString("0\u00ba",(int)(r.width*(0.5-0.4*(0.029))),(int)(r.width*(0.5+0.42*(-1.00))));
                g.drawString("30\u00ba",(int)(r.width*(0.5+0.41*(0.500))),(int)(r.width*(0.5+0.42*(-0.866))));
                g.drawString("30\u00ba",(int)(r.width*(0.5-0.46*(0.500))),(int)(r.width*(0.5+0.42*(-0.866))));
                g.drawString("60\u00ba",(int)(r.width*(0.5+0.41*(0.886))),(int)(r.width*(0.5+0.44*(-0.48))));
                g.drawString("60\u00ba",(int)(3+r.width*(0.5-0.41*(0.98))),(int)(r.width*(0.5+0.44*(-0.48))));
                g.drawString("90\u00ba",(int)(r.width*(0.5+0.42*(1.000))),(int)(r.width*(0.5+0.30*(0.05))));
                g.drawString("90\u00ba",(int)(3+r.width*(0.5-0.45*(1.02))),(int)(r.width*(0.5+0.30*(0.05))));
                g.drawString("120\u00ba",(int)(r.width*(0.5+0.42*(0.866))),(int)(r.width*(0.5+0.47*(0.50))));
                g.drawString("120\u00ba",(int)(3+r.width*(0.5-0.46*(0.92))),(int)(r.width*(0.5+0.48*(0.50))));
                g.drawString("150\u00ba",(int)(r.width*(0.5+0.42*(0.450))),(int)(r.width*(0.5+0.47*(0.83))));
                g.drawString("150\u00ba",(int)(r.width*(0.5-0.47*(0.550))),(int)(r.width*(0.5+0.47*(0.83))));
                g.drawString("180\u00ba",(int)(r.width*(0.5-0.42*(0.070))),(int)(r.width*(0.5+0.44*(1.00))));
                
                // THETA LABEL
                g.setColor(Color.black);
                g.setFont(new Font("Serif",Font.PLAIN,ant.font24));
                g.drawString("\u03b8",ant.s30,ant.s30);
            }
            else{g.setColor(Color.black);
                // THETA LABEL
                g.setFont(new Font("Serif",Font.PLAIN,ant.font16));
                g.drawString("\u03b8 = 90 \u00ba",ant.s15,r.height - ant.s30);
                
                // PHI LABEL
                g.setColor(Color.black);
                g.setFont(new Font("Serif",Font.PLAIN,ant.font24));
                g.drawString("\u03c6",ant.s30,ant.s30);
                g.setColor(Color.blue);
                g.setFont(new Font("SanSerif",Font.PLAIN,ant.font11));
                g.setColor(Color.black);
                g.drawString("180\u00ba",(int)(r.width*(0.5-0.4*(0.059))),(int)(r.width*(0.5+0.42*(-1.00))));
                g.drawString("150\u00ba",(int)(r.width*(0.5+0.40*(0.500))),(int)(r.width*(0.5+0.42*(-0.866))));
                g.drawString("210\u00ba",(int)(r.width*(0.5-0.49*(0.502))),(int)(r.width*(0.5+0.42*(-0.866))));
                g.drawString("120\u00ba",(int)(r.width*(0.5+0.42*(0.866))),(int)(r.width*(0.5+0.44*(-0.48))));
                g.drawString("240\u00ba",(int)(r.width*(0.5-0.41*(1.0))),(int)(r.width*(0.5+0.44*(-0.48))));
                g.drawString("90\u00ba",(int)(r.width*(0.5+0.42*(1.000))),(int)(r.width*(0.5+0.30*(0.05))));
                g.drawString("270\u00ba",(int)(3+r.width*(0.5-0.46*(1.05))),(int)(r.width*(0.5+0.30*(0.05))));
                g.drawString("60\u00ba",(int)(r.width*(0.5+0.42*(0.866))),(int)(r.width*(0.5+0.47*(0.50))));
                g.drawString("300\u00ba",(int)(3+r.width*(0.5-0.46*(0.92))),(int)(r.width*(0.5+0.48*(0.50))));
                g.drawString("30\u00ba",(int)(r.width*(0.5+0.45*(0.450))),(int)(r.width*(0.5+0.47*(0.83))));
                g.drawString("330\u00ba",(int)(r.width*(0.5-0.47*(0.550))),(int)(r.width*(0.5+0.47*(0.83))));
                g.drawString("0\u00ba",(int)(r.width*(0.5-0.10*(0.070))),(int)(r.width*(0.5+0.44*(1.00))));
            }
            if(this.is_theta_plane==true){//This is the theta plane
		//draw two dipole antennae 
            }
            else{//This is phi plane
		// Draw cross-section line 
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

                // Draw Arc on bezel and related cross-section line 
                MaestroG.drawArcThick(g, r.width*0.1, r.width*0.1, r.width*0.8, r.width*0.8, -90, ant.phicontrol.phi, ant.s2, Color.gray);
                //MaestroG.drawArcThick(g, r.width*0.1, r.width*0.1, r.width*0.8, r.width*0.8, -90, ant.phicontrol.phi, ant.s2, Color.yellow);

                g.setColor(Color.yellow);
                // cross-section with continuous line
                MaestroG.drawLineThick2(g,((r.width/2.0)*(1.0+0.82*Math.cos((ant.phicontrol.phi-90)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0-0.82*Math.sin((ant.phicontrol.phi-90)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0-0.8*Math.cos((ant.phicontrol.phi-90)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0+0.8*Math.sin((ant.phicontrol.phi-90)*Math.PI/180.0))),ant.s1, Color.yellow);

                // same with dashed line       
                //MaestroG.drawLineThickDash(g,((r.width/2.0)*(1.0+0.82*Math.cos((ant.phicontrol.phi-90)*Math.PI/180.0))),
                //	     ((r.width/2.0)*(1.0-0.82*Math.sin((ant.phicontrol.phi-90)*Math.PI/180.0))),
                //	     ((r.width/2.0)*(1.0-0.8*Math.cos((ant.phicontrol.phi-90)*Math.PI/180.0))),
                //	     ((r.width/2.0)*(1.0+0.8*Math.sin((ant.phicontrol.phi-90)*Math.PI/180.0))),ant.s3,ant.s5, Color.yellow);

                // Draw Antennas - view from top
                // Left dipole
                //g.setColor(Color.red);
                g.setColor(Color.green);
                
                MaestroG.fillCircle((int)(6*r.width/20), (int)(r.width/2.0), ant.s10, g);
                g.setColor(Color.black);
                MaestroG.drawCircle((int)(6*r.width/20), (int)(r.width/2.0), ant.s10, g);

                // Right dipole
                //g.setColor(Color.green);
                g.setColor(Color.red);
                
                MaestroG.fillCircle((int)(14*r.width/20), (int)(r.width/2.0), ant.s10, g);
                g.setColor(Color.black);
                MaestroG.drawCircle((int)(14*r.width/20), (int)(r.width/2.0), ant.s10, g);

                //Draw view-angle arrow
                g.setColor(Color.black);
                MaestroG.drawLineThick2(g, ((r.width/2.0)*(1.0+0.68*Math.cos((ant.phicontrol.phi-180.0)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0-0.68*Math.sin((ant.phicontrol.phi-180.0)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0+0.82*Math.cos((ant.phicontrol.phi-180.0)*Math.PI/180.0))),
                         ((r.width/2.0)*(1.0-0.82*Math.sin((ant.phicontrol.phi-180.0)*Math.PI/180.0))), ant.s1, Color.black
                );

                g.setColor(Color.yellow);

                Polygon s = new Polygon();
                    s.addPoint((int)((r.width/2.0)*(1.0+0.63*Math.cos((ant.phicontrol.phi-180.0)*Math.PI/180.0))),
                         (int)((r.width/2.0)*(1.0-0.63*Math.sin((ant.phicontrol.phi-180.0)*Math.PI/180.0))));
                    s.addPoint((int)((r.width/2.0)*(1.0+0.72*Math.cos((ant.phicontrol.phi-184.0)*Math.PI/180.0))),
                         (int)((r.width/2.0)*(1.0-0.72*Math.sin((ant.phicontrol.phi-184.0)*Math.PI/180.0))));
                    s.addPoint((int)((r.width/2.0)*(1.0+0.72*Math.cos((ant.phicontrol.phi-176.0)*Math.PI/180.0))),
                         (int)((r.width/2.0)*(1.0-0.72*Math.sin((ant.phicontrol.phi-176.0)*Math.PI/180.0))));

                g.fillPolygon(s);
                g.setColor(Color.black);
                g.drawPolygon(s);
		}
                                
                // NOW DRAW THE RADIATION DIAGRAM
            g.setColor(Color.blue);
            
            // LABELS
            if(this.is_theta_plane==true){//This is the theta plane
                if(ant.rcons.c1.getState() == true){
                    g.setColor(Color.black);
                    MaestroG.subscripter2bis("Electric Field","  E","","",g,ant.font13,2*r.width/3,ant.s20);
                }
                else if(ant.rcons.c3.getState() == true){
                    g.setColor(Color.black);
                    MaestroG.subscripter2bis("Power Density","  S","av","",g,ant.font13,2*r.width/3,ant.s20);
                }
            }
            else{//This is phi plane
                if(ant.rcons.c1.getState() == true){
                    g.setColor(Color.black);
                    MaestroG.subscripter2bis("Electric Field","  E","","",g,ant.font13,2*r.width/3,ant.s20);
                }
                else if(ant.rcons.c3.getState() == true){
                    g.setColor(Color.black);
                    MaestroG.subscripter2bis("Power Density","  S","av","",g,ant.font13,2*r.width/3,ant.s20);
                }
            }
//==============================================================================
//==============================================================================

            if(this.is_theta_plane==true){
                //draw two dipole antennae 
		geom = (r.width*0.20*Math.cos((ant.phicontrol.phi-90.0)*Math.PI/180));
                //MaestroG.fillCircle((int)(7*r.width/20), (int)(r.width/2.0), ant.s10, g)
		  
                double red_bit = -0.025*Math.sin((ant.phicontrol.phi/2)*Math.PI/180);
                double green_bit = - Math.abs(0.025*Math.cos((ant.phicontrol.phi/2)*Math.PI/180));
                double dip = 0.12;
		  
                //System.out.println(ant.phicontrol.phi+"    red_bit = "+red_bit+"     green_bit = "+green_bit);
                int mythick = ant.s5;
                int mythick_red = mythick - (int)(2.5*(Math.sin((ant.phicontrol.phi/2)*Math.PI/180)));
                int mythick_green = mythick - (int)(2.5*(1.0-Math.sin((ant.phicontrol.phi/2)*Math.PI/180)));
                
                
                if(ant.phicontrol.phi < 90.0 || ant.phicontrol.phi > 270.0){
                    //RED DIPOLE
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom),(int)(r.width*(0.5-dip-green_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5-0.01)),mythick_green,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom)-1,(int)(r.width*(0.5-dip-green_bit))-1,
                       (int)(r.width*(0.5)+geom)-1,(int)(r.width*(0.5-0.01))-1,mythick_green,Color.red);

                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom),(int)(r.width*(0.5+dip+green_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5+0.01)),mythick_green,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom)-1,(int)(r.width*(0.5+dip+green_bit))-1,
                       (int)(r.width*(0.5)+geom)-1,(int)(r.width*(0.5+0.01))-1,mythick_green,Color.red);
                }
                else{
                    //GREEN DIPOLE                
                   MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5-dip-red_bit)),
                       (int)(r.width*(0.5)-geom),(int)(r.width*(0.5-0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-dip-red_bit))-1,
                       (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-0.01))-1,mythick_red,Color.green);

                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5+dip+red_bit)),
                       (int)(r.width*(0.5)-geom),(int)(r.width*(0.5+0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+dip+red_bit))-1,
                       (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+0.01))-1,mythick_red,Color.green);
                }
                
		//Now draw radiation patterns
		g.setColor(Color.blue);
		
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                if(ant.rcons.c1.getState()==true){
                    for(i=0;i<360;i++){		
                        theta=(float)(2.0*Math.PI*i/360.0f-Math.PI/2.0);
                        theta2 = (float)(2.0*Math.PI*(i+1)/360.0f-Math.PI/2.0);
                        
                        MaestroG.drawLineThick(
                          g,(r.width*0.5) + (r.width*(0.4*ant.efield_mag[i]*Math.cos(theta))), 
                            (r.width*0.5) + (r.width*(0.4*ant.efield_mag[i]*Math.sin(theta))),
                            (r.width*0.5) + (r.width*(0.4*ant.efield_mag[i+1]*Math.cos(theta2))),
                            (r.width*0.5) + (r.width*(0.4*ant.efield_mag[i+1]*Math.sin(theta2))),thick_plot,Color.blue.darker());
                    }
		}
		
		if(ant.rcons.c3.getState()==true){
                    for(i=0;i<360;i++){		
                        theta=(float)(2.0*Math.PI*i/360.0f-Math.PI/2.0);
                        theta2=(float)(2.0*Math.PI*(i+1)/360.0f-Math.PI/2.0);

                        MaestroG.drawLineThick(
                          g,(r.width*0.5) + (r.width*(0.4*ant.power[i]*Math.cos(theta))), 
                            (r.width*0.5) + (r.width*(0.4*ant.power[i]*Math.sin(theta))),
                            (r.width*0.5) + (r.width*(0.4*ant.power[i+1]*Math.cos(theta2))),
                            (r.width*0.5) + (r.width*(0.4*ant.power[i+1]*Math.sin(theta2))),thick_plot,Color.magenta.darker());
                    }
		}
                
                
                
                //PERSPECTIVE LINE CONNECTING DIPOLES
                MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5-dip-red_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5-dip-green_bit)),1,new Color(150,150,150));
                MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5+dip+red_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5+dip+green_bit)),1,new Color(150,150,150));                
                //MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5)),
                //       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5)),1,new Color(0,0,0));
                
                if(ant.phicontrol.phi >= 90.0 && ant.phicontrol.phi <= 270.0){
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom),(int)(r.width*(0.5-dip-green_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5-0.01)),mythick_green,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom)-1,(int)(r.width*(0.5-dip-green_bit))-1,
                       (int)(r.width*(0.5)+geom)-1,(int)(r.width*(0.5-0.01))-1,mythick_green,Color.red);
                    
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom),(int)(r.width*(0.5+dip+green_bit)),
                       (int)(r.width*(0.5)+geom),(int)(r.width*(0.5+0.01)),mythick_green,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)+geom)-1,(int)(r.width*(0.5+dip+green_bit))-1,
                       (int)(r.width*(0.5)+geom)-1,(int)(r.width*(0.5+0.01))-1,mythick_green,Color.red);
                }
                else{
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5-dip-red_bit)),
                       (int)(r.width*(0.5)-geom),(int)(r.width*(0.5-0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-dip-red_bit))-1,
                       (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-0.01))-1,mythick_red,Color.green);
                    
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5+dip+red_bit)),
                       (int)(r.width*(0.5)-geom),(int)(r.width*(0.5+0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+dip+red_bit))-1,
                       (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+0.01))-1,mythick_red,Color.green);
                }
                
                /*
		if((ant.phicontrol.phi<4) || (ant.phicontrol.phi>=268+90)){//&&ant.phicontrol.phi<=272){
                    
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5-dip-red_bit)),
		           (int)(r.width*(0.5)-geom),(int)(r.width*(0.5-0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-dip-red_bit))-1,
		           (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5-0.01))-1,mythick_red,Color.green);
                  
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom),(int)(r.width*(0.5+dip+red_bit)),
		           (int)(r.width*(0.5)-geom),(int)(r.width*(0.5+0.01)),mythick_red,Color.black);
                    MaestroG.drawLineThick2(g,(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+dip+red_bit))-1,
		           (int)(r.width*(0.5)-geom)-1,(int)(r.width*(0.5+0.01))-1,mythick_red,Color.green);  
                    
			// drawing of antennae finished
		}
                */
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	    }
            else{
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		if(ant.rcons.c1.getState()==true){
                    for(i=0;i<360;i++){		
                        phi=(float)(2.0*Math.PI*i/360.0f);
                        phi2=(float)(2.0*Math.PI*(i+1)/360.0f);
                        MaestroG.drawLineThick(
                            g,(r.width*0.5) + (r.width*(0.4*ant.eefield_mag[i]*Math.cos(phi))),
                            (r.width*0.5) + (r.width*(0.4*ant.eefield_mag[i]*Math.sin(phi))),
                            (r.width*0.5) + (r.width*(0.4*ant.eefield_mag[i+1]*Math.cos(phi2))),
                            (r.width*0.5) + (r.width*(0.4*ant.eefield_mag[i+1]*Math.sin(phi2))),
                            thick_plot,Color.blue.darker());
                    }
		}
                
                if(ant.rcons.c3.getState()==true){
                    for(i=0;i<360;i++){		
                        phi=(float)(2.0*Math.PI*i/360.0f);
                        phi2=(float)(2.0*Math.PI*(i+1)/360.0f);

                        MaestroG.drawLineThick(
                            g,(r.width*0.5) + (r.width*(0.4*ant.ppower[i]*Math.cos(phi))),
                            (r.width*0.5) + (r.width*(0.4*ant.ppower[i]*Math.sin(phi))),
                            (r.width*0.5) + (r.width*(0.4*ant.ppower[i+1]*Math.cos(phi2))),
                            (r.width*0.5) + (r.width*(0.4*ant.ppower[i+1]*Math.sin(phi2))),thick_plot,Color.magenta.darker());
                    }
		}
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
	    }
	}
	
	public void paint(Graphics g){
	    if(im == null){
		im = createImage(getSize().width,getSize().height);
		buf = im.getGraphics();
		drawCanvas(buf);
	    }
	    else{
		drawCanvas(buf);
	    }
	    g.drawImage(im,0,0,null);
	    
	    //drawCanvas(g);
	}
    
	//Addition to reduce flicker new routine
	public void update(Graphics g){		// added to avoid clearing
	    paint(g);
	}


	
	public void redraw(){
                repaint();
        }
}//End of RadarCanvas
