package automatvgi.drawing;

import java.awt.Graphics;


import automatvgi.Projection;
import automatvgi.components.LoopComponent;
import automatvgi.drawing.tools.DrawShape;
import automatvgi.tools.Point;
import automatvgi.tools.Vector;


public class DrawLoop {
	public double alpha=0.5;
	
	public void drawLoop(LoopComponent lc, Graphics g, Projection j){
		Point p=lc.getState().getCenter();
		int a=j.getAbs(p),b=j.getOrd(p),c,d;
		double rp=lc.getState().getDraw().getRadius();
		double t;Point r=null;
		for(t=0; t<1;t+=.01){
			Vector v=new Vector(alpha*20*rp*t*(1-t),alpha*30*rp*t*(1-t)*(.5-t));
			v.rot(-lc.getDirection().angle());
			r=p.addTo(v);
			c=j.getAbs(r);
			d=j.getOrd(r);
			if((new Vector(p,r)).norm()>rp)
				DrawShape.drawLine(g,a,b,c,d,j.mmToPix(1),lc.getLineColor().getColor());
			else if (t>.5) break;
			a=c;b=d;
		}
		if(r!=null){
			t+=.01;
			Vector tv=new Vector(alpha*20*rp*t*(1-t),alpha*30*rp*t*(1-t)*(.5-t));
			tv.rot(-lc.getDirection().angle());
			Point sr=p.addTo(tv);
			Vector v=new Vector(r,sr);
			v.scal(.8*rp/v.norm());
			g.setColor(lc.getLineColor().getColor());
			DrawShape.drawArrow(g, r, v, j);
		}
		if(lc.getLabel()!=null){
			Vector tv=new Vector(alpha*6*rp,0);
			tv.rot(-lc.getDirection().angle());
			r=p.addTo(tv);
			g.setColor(lc.getLabelColor().getColor());
			DrawLabel.draw(lc.getLabel(), j.getAbs(r), j.getOrd(r), g, j);
		}
	}
}
