import java.awt.*;
import java.awt.event.*;


class DrawCanvas extends Canvas implements MouseListener{
	Antenna ant;
	Rectangle r;
	
	protected Image im;
	protected Graphics buf;
	private Color bgcolor = new Color(236,236,221);
	private Font labfont0;
	private Font labfont;
	private Font labfontS;
	private Font labfont2;
        private Font labfont4;
	private Font labfont3;
        private Font labfontIT;
        private Font labfontITB;
	private int x[], y[];
	private Font symbfont;
	private Font symbfont2;

	private boolean IsFocusOn, IsTopoOn;
	
	public DrawCanvas(Antenna ant){
		super();
		this.ant=ant;
		setBackground(bgcolor);
		IsFocusOn = false;
		IsTopoOn = false;
		
		x = new int[5];
		y = new int[5];

		//Listeners
		this.addMouseListener(this);
	}
	
	public void paint(Graphics g){
	    if(im == null){
		im = createImage(getSize().width,getSize().height);
		buf = im.getGraphics();
		drawGraph(buf);
	    }
	    drawGraph(buf);
	    g.drawImage(im,0,0,null);
	}

	//Addition to reduce flicker new routine
	public void update(Graphics g){		// added to avoid clearing
		paint(g);
	}

	public void drawGraph(Graphics g){	
	
            labfont0 = new Font("SanSerif",Font.PLAIN,ant.font9);
            labfont = new Font("SanSerif",Font.PLAIN,ant.font10);
            labfontS = new Font("Serif",Font.PLAIN,ant.font11);
            labfont2 = new Font("SanSerif",Font.PLAIN,ant.font11);
            labfont4 = new Font("Serif",Font.PLAIN,ant.font14);
            labfont3 = new Font("SanSerif",Font.PLAIN,ant.font12);
            labfontIT = new Font("Serif",Font.ITALIC,ant.font14);

            labfontITB = new Font("Serif",Font.ITALIC + Font.BOLD,ant.font16);

            symbfont= new Font("Serif",Font.PLAIN,ant.font12);
            symbfont2= new Font("Serif",Font.PLAIN,ant.font14);

            double distancia, escala;
            int i, numpointsA, numpointsB, array_length, idistancia;
            int x1, y1, x2, y2, x3, y3;

            r = getBounds();
            g.setColor(Color.white);
            g.fill3DRect(0,0,r.width-1,r.height-1,true);

            Graphics2D g2d = (Graphics2D)g;
            	
            if(IsFocusOn){
		
		g.setColor(Color.black);	
		escala=r.width*0.07;
		if(ant.number_dipoles < 21){
		    distancia=(r.width - ant.s20)/20;
		    array_length = (int)( distancia * ant.number_dipoles);	
		}
		else{
		    distancia=(r.width - ant.s20)/ant.number_dipoles_max;
		    array_length = (int)( distancia * ant.number_dipoles);	
		}
		
		int shift = ant.s15;
		int shift2 = ant.s20;
		
                for(i=0;i<ant.number_dipoles;i++){
                    //Left Dipole Wires
                    idistancia = ((r.width/2 - array_length/2)+(i+1)*(int)(distancia))-ant.s6;

                    if(i==0){
                        g.setColor(Color.red);
                        g.drawLine(idistancia,(int)(r.height*0.88)-shift,idistancia,(int)(r.height*0.82)-shift);
                        g.drawLine(idistancia,(int)(r.height*0.92)-shift,idistancia,(int)(r.height*0.98)-shift);

                        g.drawLine(idistancia-1,(int)(r.height*0.88)-shift,idistancia-1,(int)(r.height*0.82)-shift);
                        g.drawLine(idistancia-1,(int)(r.height*0.92)-shift,idistancia-1,(int)(r.height*0.98)-shift);
                    }
                    else if(i==(ant.number_dipoles-1)){
                        g.setColor(Color.green);
                        g.drawLine(idistancia,(int)(r.height*0.88)-shift,idistancia,(int)(r.height*0.82)-shift);
                        g.drawLine(idistancia,(int)(r.height*0.92)-shift,idistancia,(int)(r.height*0.98)-shift);

                        g.drawLine(idistancia+1,(int)(r.height*0.88)-shift,idistancia+1,(int)(r.height*0.82)-shift);
                        g.drawLine(idistancia+1,(int)(r.height*0.92)-shift,idistancia+1,(int)(r.height*0.98)-shift);
                    }	
                    else{
                        g.setColor(Color.gray);
                        g.drawLine(idistancia,(int)(r.height*0.88)-shift,idistancia,(int)(r.height*0.82)-shift);
                        g.drawLine(idistancia,(int)(r.height*0.92)-shift,idistancia,(int)(r.height*0.98)-shift);
                    }
                    g.setColor(Color.black);
                    g.setFont(labfont0);

                        if(i==0 || i == (ant.number_dipoles-1)){
                            if(i == (ant.number_dipoles-1) && i > 8){
                                g.drawString(""+(i),idistancia-ant.s4,(int)(r.height*0.92)+ant.s14);
                            }
                            else if(i == (ant.number_dipoles-1) && i <= 8 && i!=0){
                                g.drawString(""+(i),idistancia-ant.s1,(int)(r.height*0.92)+ant.s14);
                            }
                            else if(i == 0){
                                g.drawString(""+(i),idistancia-ant.s2,(int)(r.height*0.92)+ant.s14);
                            }
                        }
                }
		int x1a = ((r.width/2 - array_length/2)) - ant.s8 + (int)(distancia);
		int x2a = ((r.width/2 + array_length/2)) - ant.s4;
		int ya = ((int)(r.height*0.88)+(int)(r.height*0.92))/2-shift;
		int yb = (int)(r.height*0.82)-shift2;
		
		// draw the axis
		g.setColor(Color.black);
		g.drawLine(x1a,ya,x2a,ya);
		
		g.setColor(Color.blue);
		if(ant.number_dipoles < 4){
		    if(ant.number_dipoles == 2){
			g.drawLine(x1a+ant.s1,yb,x2a-ant.s1,yb);
			g.drawLine(x1a+ant.s1,yb+ant.s3,x1a+ant.s1,yb-ant.s3);
			g.drawLine(x2a,yb+ant.s3,x2a,yb-ant.s3);
		
			//MaestroG.drawArrow(x1a-ant.s8,yb,7,g);
			//MaestroG.drawArrow(x2a+ant.s9,yb,8,g);
                        
                        MaestroG.drawArrowScaled(x1a-ant.s8, yb, 3, ant.sfactor, g);
                        MaestroG.drawArrowScaled(x2a+ant.s9, yb, 4, ant.sfactor, g);
                        
			g.setFont(labfontS);
			g.drawString("d",(x1a+x2a)/2-ant.s2,yb-ant.s3);
		    }
		    if(ant.number_dipoles == 3){
			g.drawLine(x1a+ant.s1,yb,x2a-ant.s1,yb);
			g.drawLine(x1a+ant.s1,yb+ant.s3,x1a+ant.s1,yb-ant.s3);
			g.drawLine(x2a,yb+ant.s3,x2a,yb-ant.s3);
		
			//MaestroG.drawArrow(x1a-ant.s8,yb,7,g);
			//MaestroG.drawArrow(x2a+ant.s9,yb,8,g);
			
                        MaestroG.drawArrowScaled(x1a-ant.s8, yb, 3, ant.sfactor, g);
                        MaestroG.drawArrowScaled(x2a+ant.s9, yb, 4, ant.sfactor, g);
                        
                        g.setFont(labfontS);
			g.drawString("2 d",(x1a+x2a)/2-ant.s6,yb-ant.s3);
		    }
		}
		else{
		    g.drawLine(x1a+ant.s1,yb,x2a-ant.s1,yb);
		    g.drawLine(x1a+ant.s1,yb+ant.s3,x1a+ant.s1,yb-ant.s3);
		    g.drawLine(x2a,yb+ant.s3,x2a,yb-ant.s3);
		
		    //MaestroG.drawArrow(x1a+ant.s10,yb,8,g);
		    //MaestroG.drawArrow(x2a-ant.s9,yb,7,g);
		    
                    MaestroG.drawArrowScaled(x1a-ant.s8, yb, 3, ant.sfactor, g);
                    MaestroG.drawArrowScaled(x2a+ant.s9, yb, 4, ant.sfactor, g);
                        
                    g.setFont(labfontS);
		    g.drawString(""+(ant.number_dipoles - 1)+" d",(x1a+x2a)/2-ant.s6,yb-ant.s3);
		}
		
		g.setColor(Color.black);
		
		numpointsA=(int)(r.height*0.30*ant.dipolelengthA/(ant.dipolelengthmaxA));

		g.setColor(Color.blue);
		int cshift = 5;
		
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		
                if(ant.dipolelengthA>=0.05){
		  for(i=-numpointsA;i<numpointsA;i++){
			y2=(int)(r.height*(0.35)+i);
			y1=y2-1;
			x2=(int)(r.width*0.25+50*ant.scalingA*Math.sin(Math.PI*ant.dipolelengthA 
                                                       -2.0*Math.PI*Math.abs(i+1)*ant.dipolelengthA/(2.0*numpointsA)))- cshift;
			x1=(int)(r.width*0.25+50*ant.scalingA*Math.sin(Math.PI*ant.dipolelengthA 
  						       -2.0*Math.PI*Math.abs(i)*ant.dipolelengthA/(2.0*numpointsA)))- cshift;
		  	g.drawLine(x1, y1, x2, y2);
		  }
		}
		else{
			x1=(int)(r.width*0.25) - cshift ;
			x2=x1+ant.s50 - cshift;
			y1=(int)(r.height*0.35);
			y2=y1;
			g.drawLine(x1,y1,x2,y2);
		}
                
                //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                
		//draw the axis
		g.setColor(Color.black);		
		y2=(int)(r.height*(0.35)+numpointsA);
		y1=(int)(r.height*(0.35)-numpointsA-2);
		x2=(int)(r.width*0.25) - cshift;
		x1=(int)(r.width*0.10) - cshift;
		g.drawLine(x2,y1,x2,y2);
		
		g.setColor(Color.red.darker());	
                g.setFont(labfontITB);
		g.drawString("l",(int)(r.width*0.25+ant.s50)+ant.s8,(y1+y2)/2+ant.s4);
		g.drawLine((int)(r.width*0.25+ant.s50),y1,(int)(r.width*0.25+ant.s50),y2);
		g.drawLine((int)(r.width*0.25+ant.s50)-ant.s3,y1,(int)(r.width*0.25+ant.s50)+ant.s3,y1);
		g.drawLine((int)(r.width*0.25+ant.s50)-ant.s3,y2,(int)(r.width*0.25+ant.s50)+ant.s3,y2);
		if(ant.dipolelengthA >= 0.5){
		    //MaestroG.drawArrow((int)(r.width*0.25+ant.s50),y1+ant.s9,5,g);
		    //MaestroG.drawArrow((int)(r.width*0.25+ant.s50),y2-ant.s9,6,g);
                    MaestroG.drawArrowScaled((int)(r.width*0.25+ant.s50),y1+ant.s9, 1, ant.sfactor, g);
                    MaestroG.drawArrowScaled((int)(r.width*0.25+ant.s50),y2-ant.s9, 2, ant.sfactor, g);
                        
		}
		else{
		    //MaestroG.drawArrow((int)(r.width*0.25+ant.s50),y1-ant.s9,6,g);
		    //MaestroG.drawArrow((int)(r.width*0.25+ant.s50),y2+ant.s9,5,g);
                    MaestroG.drawArrowScaled((int)(r.width*0.25+ant.s50),y1-ant.s9, 2, ant.sfactor, g);
                    MaestroG.drawArrowScaled((int)(r.width*0.25+ant.s50),y2+ant.s9, 1, ant.sfactor, g);
                    
		}
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.black);
		//g.setColor(Color.white);
		g.setFont(labfont);
		g.drawString("Dipole",x1-ant.s10,y1+ant.s2);
		g.drawString("current",x1-ant.s10,y1+ant.s12);
		
		g.setFont(labfont2);
		x1 = (int)(r.width*0.55);
		y1 = ant.s30;
		int dy = ant.s12;
		int dyy = ant.s16;
		
		g.setColor(Color.red);
		g.drawString("Assumptions",x1,y1);
		y1+=dyy;
		g.setColor(Color.blue);
		g.drawString("-  Far Field",x1,y1);
		y1+=dyy;
		g.drawString("-  Identical Dipoles",x1,y1);
		y1+=dyy;
		g.drawString("-  Uniform spacing d",x1,y1);
		y1+=dyy;
		g.drawString("-  Uniform incremental",x1,y1);
		y1+=dy;
		g.drawString("    phase delay between",x1,y1);
		y1+=dy;
		g.drawString("    dipoles",x1,y1);
		
		if(IsTopoOn){
		    g.setFont(labfont);
		    g.setColor(new Color(150,0,0));
		    g.drawString("Click to show coordinates",(int)(r.width/2),ant.s12);
		    g.drawLine((int)(r.width/2),ant.s16,(int)(r.width-ant.s10),ant.s16);
		}
		
	    }
	    else{		
		
		//set the arrays
		x[0] = getSize().width/2-ant.s30;
		x[1] = x[0] - ant.s7;
		x[2] = getSize().width-ant.s50;
		
		y[0] = getSize().height-ant.s20;
		y[1] = getSize().height/2;

		String lambda, rho, psi, deg;
		g.setFont(symbfont2);
		g.getFontMetrics();
		lambda="\u03bb";
		rho ="\u03c1";
		psi ="\u03c8";
		deg="\u00ba";
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.black);
		
		//MaestroG.subscripterS("I","i"," =",g,ant.font15,x[0]+ant.s10,ant.s50);
                //MaestroG.subscripterS("  I","1"," exp[ - j ( i \u03b4 ) ]",g,ant.font15,x[0]+ant.s35,ant.s50);
                
                MaestroG.subsubS("I","i"," = I","0"," exp[ j ( i \u03b4 ) ]",g,ant.font15,x[0]+ant.s10,ant.s50);
                
		int xCenter = x[0];
		int yCenter = y[1];
		int Radius = ant.s15;
		int beginAngle = 28;
		int Angle = 62;
		int raio = 2*Radius;
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.cyan);
		g.fillArc(xCenter-Radius,yCenter-Radius,raio,raio,beginAngle,Angle);
		g.setColor(Color.black);
		g.drawArc(xCenter-Radius,yCenter-Radius,raio,raio,beginAngle,Angle);
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                
                g.setColor(Color.blue);
		g.setFont(new Font("Serif",Font.PLAIN,ant.font15));
		g.drawString("\u03b8",x[0]+ant.s5,y[1]-ant.s16);
		g.setFont(new Font("SanSerif",Font.PLAIN,ant.font12));
		g.setColor(Color.black);
		
		//Arc for phi
		xCenter = x[0];
                yCenter = y[1];
		Radius = ant.s15;
		beginAngle = 225;
		Angle = 87;
		raio = 2*Radius;
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setColor(Color.yellow);
		g.fillArc(xCenter-Radius,yCenter-Radius,raio,raio,beginAngle,Angle);
		g.setColor(Color.black);
		g.drawArc(xCenter-Radius,yCenter-Radius,raio,raio,beginAngle,Angle);
		//g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
                
                g.setColor(Color.blue);
		g.setFont(new Font("Serif",Font.PLAIN,ant.font15));
		g.drawString("\u03c6",x[0]-ant.s14,y[1]+ant.s25);
		g.setFont(new Font("SanSerif",Font.PLAIN,ant.font12));
		
		//dipoles
		int mythick = ant.s4; 
                int xshift = ant.s20;
		
                // top - dipole 2
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]-ant.s5,x[0]+xshift,y[1]-ant.s35,mythick,Color.lightGray);
                // bottom - dipole 2
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]+ant.s5,x[0]+xshift,y[1]+ant.s35,mythick,Color.lightGray);
                //==============================================================
		xshift = ant.s40;
		// top - dipole 3
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]-ant.s5,x[0]+xshift,y[1]-ant.s35,mythick,Color.lightGray);
                // bottom - dipole 3
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]+ant.s5,x[0]+xshift,y[1]+ant.s35,mythick,Color.lightGray);
                //==============================================================
		xshift = ant.s60;
		// top - dipole i
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]-ant.s5,x[0]+xshift,y[1]-ant.s35,mythick,Color.lightGray);
                // bottom - dipole i
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]+ant.s5,x[0]+xshift,y[1]+ant.s35,mythick,Color.lightGray);
                //==============================================================
		xshift = ant.s80;
		// top - dipole N-1
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]-ant.s5,x[0]+xshift,y[1]-ant.s35,mythick,Color.lightGray);
                // bottom - dipole N-1
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]+ant.s5,x[0]+xshift,y[1]+ant.s35,mythick,Color.lightGray);
                //==============================================================
		xshift = ant.s100;
                // top - dipole N
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]-ant.s5,x[0]+xshift,y[1]-ant.s35,mythick,Color.red);
                // bottom - dipole N
                MaestroG.drawLineThick2(g,x[0]+xshift,y[1]+ant.s5,x[0]+xshift,y[1]+ant.s35,mythick,Color.red);
                //==============================================================
		g.setColor(Color.black);
		g.drawLine(x[0]+ant.s8+xshift,y[1]-ant.s2,x[0]+ant.s8+xshift,y[1]-ant.s15);
		//MaestroG.drawArrow(x[0]+ant.s8+xshift,y[1]-ant.s15,5,g);
                MaestroG.drawArrowScaled(x[0]+ant.s8+xshift,y[1]-ant.s15, 1, ant.sfactor, g);
                
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		MaestroG.subscripterS("I","N-1","",g,ant.font12,x[0]+ant.s15+xshift,y[1]-ant.s10);
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		MaestroG.subscripterS("I","0","",g,ant.font12,x[0]-ant.s21,y[1]-ant.s10);
		
		//draw axes 
		g.setColor(Color.black);
		g.drawLine(x[0],ant.s20,x[0],y[1]+ant.s25); 
		//MaestroG.drawArrow(x[0],ant.s20,5,g);
                MaestroG.drawArrowScaled(x[0],ant.s20, 1, ant.sfactor, g);
                
		g.setColor(new Color(210,210,210));
		g.drawLine(x[0],y[1],x[0],y[1]+ant.s15);
		g.setColor(Color.black);
                g.setFont(new Font("SanSerif",Font.BOLD,ant.font12));
		g.drawString("z",x[0]-ant.s12,ant.s20);
		
		g.drawLine(x[1]-ant.s15,y[1],x[2]+ant.s30,y[1]);
		//MaestroG.drawArrow(x[2]+ant.s30,y[1],7,g);
                MaestroG.drawArrowScaled(x[2]+ant.s30,y[1], 3, ant.sfactor, g);
		g.drawString("y",x[2]+ant.s30,y[1]+ant.s16);
		
		int tip = ant.s87;
		g.drawLine(x[0],y[1],x[0]-tip,y[1]+tip);
		g.drawString("x",x[0]-(tip-ant.s12),y[1]+tip);
		//draw oblique arrow head
                //MaestroG.drawArrow(x[0]-tip+ant.s5,y[1]+tip-ant.s5,10,g);
                MaestroG.drawArrowScaled(x[0]-tip+ant.s5,y[1]+tip-ant.s5, 6, ant.sfactor, g);
		
		Polygon p = new Polygon();
		p.addPoint(x[0]-tip,y[1]+tip);
		p.addPoint(x[0]-(tip-ant.s2),y[1]+(tip-ant.s6));
		p.addPoint(x[0]-(tip-ant.s6),y[1]+(tip-ant.s2));
		//g.drawPolygon(p);
		//g.fillPolygon(p);
	    
		g.setColor(Color.black);
		//radial line to point P
		g.drawLine(x[0],y[1],x[0]+ant.s50,y[1]-ant.s30);
		g.setColor(Color.blue);
		//label R
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		MaestroG.subscripter2("R","","",g,ant.font13,x[0]+ant.s25,y[1]-ant.s22);
		//line down to x-y plane
		g.drawLine(x[0]+ant.s50,y[1]-ant.s30,x[0]+ant.s50,y[1]+ant.s70);
		//lines to x- and y-axis
		g.setColor(Color.gray);
		g.drawLine(x[0]+ant.s50,y[1]+ant.s70,x[0]-ant.s70,y[1]+ant.s70);
		g.drawLine(x[0]+ant.s50,y[1]+ant.s70,x[0]+ant.s120,y[1]);
						
		g.setColor(Color.black);
		g.drawLine(x[0]+ant.s50,y[1]+ant.s70,x[0],y[1]);
		
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		//point P
		g.setColor(Color.green);
		g.fillOval(x[0]+ant.s48,y[1]-ant.s32,ant.s5,ant.s5);
		g.setColor(Color.black);
		g.drawOval(x[0]+ant.s48,y[1]-ant.s32,ant.s5,ant.s5);
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_OFF);
		//==============================================================
                //Left Dipole (red) - painted later
		//part of dipole under angle (shows orange)
		//Color orange1 = new Color(255,175,0);
		//g.setColor(orange1);
                
                Color orange1 = new Color(175,200,0);
		g.setColor(orange1);
		
		// top - dipole 1
                MaestroG.drawLineThick2(g,x[0],y[1]-ant.s5,x[0],y[1]-ant.s35,mythick,Color.green.darker());
                // bottom - dipole 1
                MaestroG.drawLineThick2(g,x[0],y[1]+ant.s5,x[0],y[1]+ant.s14,mythick,orange1); //part under orange angle
                MaestroG.drawLineThick2(g,x[0],y[1]+ant.s16,x[0],y[1]+ant.s35,mythick,Color.green.darker()); // rest of bottom monopole
                
                g.setColor(Color.black);
		//g.drawLine(x[0]+1,y[1]-ant.s5,x[0]+1,y[1]-ant.s35);
		//g.drawLine(x[0]+1,y[1]+ant.s5,x[0]+1,y[1]+ant.s35);
		//==============================================================
                // Current arrow
                g.drawLine(x[0]-ant.s7,y[1]-ant.s2,x[0]-ant.s7,y[1]-ant.s15);
		//MaestroG.drawArrow(x[0]-ant.s7,y[1]-ant.s15,5,g);
                MaestroG.drawArrowScaled(x[0]-ant.s7,y[1]-ant.s15, 1, ant.sfactor, g);
		
                g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
		g.setFont(labfont4);
		g.setColor(Color.black);
		g.drawString("0",x[0]-ant.s2,y[1]+ant.s49);
		g.drawString("1",x[0]+ant.s18,y[1]+ant.s49);
		g.drawString("i",x[0]+ant.s58,y[1]+ant.s49);
		
		g.setColor(Color.black);
		g.drawString("N-1",x[0]+ant.s96,y[1]+ant.s49);
		
		g.setColor(new Color(150,0,0));
		g.setFont(new Font("SanSerif",Font.BOLD,ant.font14));
		
		if((ant.fase == 0.0 || ant.fase == 2.0*Math.PI) && ant.distancia == 0.5){g.drawString("Broadside Pattern",ant.s50,ant.s200+ant.s40);}
		else if((ant.fase == Math.PI || ant.fase == -Math.PI) && ant.distancia == 0.5){g.drawString("Endfire Pattern",ant.s50,ant.s200+ant.s40);}
		else if((ant.fase == 0.5*Math.PI || ant.fase == -0.5*Math.PI) && ant.distancia == 0.25){g.drawString("Cardioid Pattern",ant.s50,ant.s200+ant.s40);}
		else if((ant.fase == 0.0 || ant.fase == 2.0*Math.PI) && ant.distancia == 1.0){g.drawString("Combined Broadside-Endfire Pattern",ant.s30,ant.s200+ant.s40);}
		else{}
		
		if(IsTopoOn){
		    g.setFont(labfont);
		    g.setColor(new Color(150,0,0));
		    g.drawString("Click to show details",(int)(r.width/2),ant.s12);
		    g.drawLine((int)(r.width/2),ant.s16,(int)(r.width-ant.s33),ant.s16);
		}
	    }
		
	}
	public void redraw(){
		repaint();
	}
	
	public void mouseClicked(MouseEvent evt){
	    if(IsFocusOn){
		IsFocusOn = false;
		repaint();
	    }
	
	    else{
		IsFocusOn = true;
		repaint();
	    }
    
	}
    
	public void mouseEntered(MouseEvent evt){
	    IsTopoOn = true;
	    repaint();
	}
	public void mouseExited(MouseEvent evt){
	    IsTopoOn = false;
	    repaint();
	}
	public void mousePressed(MouseEvent evt){}
	public void mouseReleased(MouseEvent evt){}

}
