package seed.minerva.apps.mse;

import otherSupport.ColorMaps;
import oneLiners.OneLiners;
import algorithmrepository.Algorithms;
import seed.minerva.MinervaOpticsSettings;
import seed.minerva.aug.mse.AugFaroNov2013;
import seed.minerva.aug.mse.AugMSESystem;
import seed.minerva.aug.mse.AugMseFaroData;
import seed.minerva.optics.Util;
import seed.minerva.optics.drawing.VRMLDrawer;
import seed.minerva.optics.interfaces.NullInterface;
import seed.minerva.optics.optics.Box;
import seed.minerva.optics.surfaces.Cylinder;
import seed.minerva.optics.surfaces.Disc;
import seed.minerva.optics.surfaces.Triangle;
import seed.minerva.optics.types.Intersection;
import seed.minerva.optics.types.RaySegment;

public class MakeFARONov2013VRML {
	public static void main(String[] args) {
		AugFaroNov2013 faro = new AugFaroNov2013();
		
		String names[] = faro.getNames();
		
		VRMLDrawer vrmlOut = new VRMLDrawer("/work/ipp/augddd-models/faroNov2013.vrml", 0.005);
		vrmlOut.addVRML(AugMSESystem.vrmlScaleToAUGDDD);
		vrmlOut.setDrawPolarisationFrames(false);
		double w = 0.010;
		double uVecLen = 0.050;
		
		for(String name : names){
			double pos[] = faro.getPos(name);
			
			Box box = new Box(name, pos, w, w, w, null, NullInterface.ideal());
			vrmlOut.drawOptic(box);
			
			double uVec[] = faro.getUVec(name);
			if(uVec != null){
				RaySegment ray = new RaySegment();	
				ray.startPos = pos;
				ray.dir = uVec.clone();
				ray.length = uVecLen;
				ray.wavelength = 1;
				ray.endHit = new Intersection();
				ray.endHit.pos = Util.plus(pos, Util.mul(uVec, uVecLen));					
				ray.E0 = new double[][]{ { 1,0,0,0 } };
				ray.E1 = new double[][]{ { 1,0,0,0 } };
				ray.up = Util.createPerp(ray.dir);

				vrmlOut.drawRay(ray);	
			}
						
			double diam = faro.getDiameter(name);
			if(!Double.isNaN(diam) && uVec != null){				
				Disc disc = new Disc(name, pos, uVec, diam/2, NullInterface.ideal());
				vrmlOut.drawSurface(disc);
			}
		}
		
		
				
		vrmlOut.addVRML("}");
		vrmlOut.destroy();
	}
}
