import java.awt.*;

class DrawCanvas extends Canvas{
	Antenna ant;
	Rectangle r;
	private static final Color bgcolor = new Color(236,236,221);
	
	DrawCanvas(Antenna ant){
		super();
		this.ant=ant;
		setBackground(bgcolor);
	}
        
	public void paint(Graphics g){
                
            Graphics2D g2d = (Graphics2D)g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

            double distancia, escala;
            int i, numpointsA, numpointsB;
            int x1, y1, x2, y2, x3, y3;
            r = getBounds();
            
            g.setColor(Color.white);
            g.fill3DRect(0,0,r.width-1,r.height-1,true);
            g.setColor(Color.black);	
            
            escala=r.width*0.7f;
            distancia=ant.distancia * escala;

            //Left Transmission Line Wires
            g.drawLine((int)((r.width-distancia)*0.5), (int)(r.height*0.88),(int)((r.width-distancia)*0.5-10),(int)(r.height*0.88));
            g.drawLine((int)((r.width-distancia)*0.5), (int)(r.height*0.92),(int)((r.width-distancia)*0.5-10),(int)(r.height*0.92));
            //g.setColor(Color.white);		
            g.drawLine((int)((r.width-distancia)*0.5), (int)(r.height*0.88)-1,(int)((r.width-distancia)*0.5-10),(int)(r.height*0.88)-1);
            g.drawLine((int)((r.width-distancia)*0.5), (int)(r.height*0.92)-1,(int)((r.width-distancia)*0.5-10),(int)(r.height*0.92)-1);


            //Left Dipole Wires
            //g.setColor(Color.red);
            g.setColor(new Color(0,230,0));
            g.drawLine((int)((r.width-distancia)*0.5),(int)(r.height*0.88),(int)((r.width-distancia)*0.5),(int)(r.height*0.82));
            g.drawLine((int)((r.width-distancia)*0.5),(int)(r.height*0.92),(int)((r.width-distancia)*0.5),(int)(r.height*0.98));

            //g.setColor(Color.white);		
            g.drawLine((int)((r.width-distancia)*0.5-1),(int)(r.height*0.88),(int)((r.width-distancia)*0.5-1),(int)(r.height*0.82));
            g.drawLine((int)((r.width-distancia)*0.5-1),(int)(r.height*0.92),(int)((r.width-distancia)*0.5-1),(int)(r.height*0.98));

            //Right Transmission Line Wires
            g.setColor(Color.black);
            g.drawLine((int)((r.width+distancia)*0.5), (int)(r.height*0.88),(int)((r.width+distancia)*0.5+10),(int)(r.height*0.88));
            g.drawLine((int)((r.width+distancia)*0.5), (int)(r.height*0.92),(int)((r.width+distancia)*0.5+10),(int)(r.height*0.92));

            g.drawLine((int)((r.width+distancia)*0.5), (int)(r.height*0.88)-1,(int)((r.width+distancia)*0.5+10),(int)(r.height*0.88)-1);
            g.drawLine((int)((r.width+distancia)*0.5), (int)(r.height*0.92)-1,(int)((r.width+distancia)*0.5+10),(int)(r.height*0.92)-1);

            //axis
            g.setColor(Color.blue);
            g.drawLine(ant.s15,(int)(r.height*0.80)-ant.s3,(r.width-ant.s15),(int)(r.height*0.80)-ant.s3);
            // center
            g.setColor(Color.magenta);
            g.drawLine((int)(r.width*0.5),(int)(r.height*0.80-ant.s8),(int)(r.width*0.5),(int)(r.height*0.80+ant.s2));
            
            g.setColor(Color.blue);
            // -0.5 wavelength
            g.drawLine(ant.s44,(int)(r.height*0.80-ant.s8),ant.s44,(int)(r.height*0.80+ant.s2));
            // +0.5 wavelength
            g.drawLine(r.width-ant.s46,(int)(r.height*0.80-ant.s8),r.width-ant.s46,(int)(r.height*0.80+ant.s2));
            // -0.25 wavelength
            g.drawLine((int)(r.width*0.25+ant.s22),(int)(r.height*0.80-ant.s8),(int)(r.width*0.25+ant.s22),(int)(r.height*0.80+ant.s2));
            // +0.25 wavelength
            g.drawLine((int)(r.width*0.75-ant.s23),(int)(r.height*0.80-ant.s8),(int)(r.width*0.75-ant.s23),(int)(r.height*0.80+ant.s2));


            //Right Dipole Wires
            //g.setColor(new Color(0,230,0)); //(Color.green);	
            g.setColor(Color.red);
            g.drawLine((int)((r.width+distancia)*0.5),(int)(r.height*0.88),(int)((r.width+distancia)*0.5),(int)(r.height*0.82));
            g.drawLine((int)((r.width+distancia)*0.5),(int)(r.height*0.92),(int)((r.width+distancia)*0.5),(int)(r.height*0.98));

            //g.setColor(Color.white);		
            g.drawLine((int)((r.width+distancia)*0.5-1),(int)(r.height*0.88),(int)((r.width+distancia)*0.5-1),(int)(r.height*0.82));
            g.drawLine((int)((r.width+distancia)*0.5-1),(int)(r.height*0.92),(int)((r.width+distancia)*0.5-1),(int)(r.height*0.98));


            numpointsB=(int)(r.height*0.30*ant.dipolelengthB/(ant.dipolelengthmaxB));

            //g.setColor(new Color(0,230,0));
            g.setColor(Color.red);

            if(ant.dipolelengthB>=0.026){
              for(i=-numpointsB;i<numpointsB;i++){
                    y2=(int)(r.height*(0.35)+i);
                    y1=y2-1;
                    x2=(int)(r.width*0.75+50*ant.scalingB*Math.sin(Math.PI*ant.dipolelengthB
                                                   -2.0*Math.PI*Math.abs(i+1)*ant.dipolelengthB/(2.0*numpointsB)));
                    x1=(int)(r.width*0.75+50*ant.scalingB*Math.sin(Math.PI*ant.dipolelengthB
                                                   -2.0*Math.PI*Math.abs(i)*ant.dipolelengthB/(2.0*numpointsB)));
                    g.drawLine(x1, y1, x2, y2);
              }
            }
            else{
                    x1=(int)(r.width*0.75);
                    x2=x1+50;
                    y1=(int)(r.height*0.35);
                    y2=y1;
                    g.drawLine(x1,y1,x2,y2);
            }
            
            //draw the axis
            g.setColor(Color.black);		
            y2=(int)(r.height*(0.35)+numpointsB);
            y1=(int)(r.height*(0.35)-numpointsB);
            x2=(int)(r.width*0.75);
            x1=(int)(r.width*0.75);
            g.drawLine(x1,y1,x2,y2);
            g.setColor(Color.black);
            
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            MaestroG.subscripter("Current B","","",g,ant.font12,x2-ant.s20,y2+ant.s15);
            
            numpointsA=(int)(r.height*0.30*ant.dipolelengthA/(ant.dipolelengthmaxA));
            
            //g.setColor(Color.red);
            g.setColor(new Color(0,230,0)); //(Color.green);
            if(ant.dipolelengthA>=0.026){
                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)));
                    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)));
                    g.drawLine(x1, y1, x2, y2);
                }
            }
            else{
                x1=(int)(r.width*0.25);
                x2=x1+ant.s50;
                y1=(int)(r.height*0.35);
                y2=y1;
                g.drawLine(x1,y1,x2,y2);
            }
            
            //draw the axis
            g.setColor(Color.black);		
            y2=(int)(r.height*(0.35)+numpointsA);
            y1=(int)(r.height*(0.35)-numpointsA);
            x2=(int)(r.width*0.25);
            x1=(int)(r.width*0.25);
            g.drawLine(x1,y1,x2,y2);
            g.setColor(Color.black);
            
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            
        MaestroG.subscripter("Current A","","",g,ant.font12,x2-ant.s20,y2+ant.s15);
	}
        
	public void redraw(){
            repaint();
	}
}
