public RayTraceParameters(OpticalSystem system) { this._sequence = new List <Element>(); this._sequential_mode = true; this._intensity_mode = RayTracer.TraceIntensityMode.Simpletrace; this._propagation_mode = PropagationMode.RayPropagation; this._max_bounce = 50; this._unobstructed = false; this._lost_ray_length = 1000; foreach (Element e in system.elements()) { add(e); } _sequence.Sort((a, b) => { double z1 = a.get_position().z(); double z2 = b.get_position().z(); if (z1 > z2) { return(1); } else if (z1 < z2) { return(-1); } else { return(0); } }); this._default_distribution = new Distribution(Pattern.MeridionalDist, 10, 0.999); }
public AnalysisSpot(OpticalSystem system) : base(system) { _axes = new PlotAxes(); _axes.set_show_axes(false, PlotAxes.AxisMask.XY); _axes.set_label("Sagittal distance", PlotAxes.AxisMask.X); _axes.set_label("Tangential distance", PlotAxes.AxisMask.Y); _axes.set_unit("m", true, true, -3, PlotAxes.AxisMask.XY); }
public override void set_system(OpticalSystem system) { this._system = system; foreach (Element e in elements()) { e.set_system(system); } }
void draw_2d_fit(RendererViewport r, OpticalSystem system, bool keep_aspect) { Vector3Pair b = system.get_bounding_box(); r.set_window(Vector2Pair.from(b, 2, 1), keep_aspect); r.set_camera_direction(Vector3.vector3_100); r.set_camera_position(Vector3.vector3_0); r.set_feature_size(b.v1.y() - b.v0.y() / 20.0); }
public static void Main(string[] args) { OpticalSystem.Builder systemBuilder = new OpticalSystem.Builder(); Lens.Builder lensBuilder = new Lens.Builder() .position(Vector3Pair.position_000_001) .add_surface(1 / 0.031186861, 14.934638, 4.627804137, new Abbe(Abbe.AbbeFormula.AbbeVd, 1.607170, 59.5002, 0.0)) .add_surface(0, 14.934638, 5.417429465) .add_surface(1 / -0.014065441, 12.766446, 3.728230979, new Abbe(Abbe.AbbeFormula.AbbeVd, 1.575960, 41.2999, 0.0)) .add_surface(1 / 0.034678487, 11.918098, 4.417903733) .add_stop(12.066273, 2.288913925) .add_surface(0, 12.372318, 1.499288597, new Abbe(Abbe.AbbeFormula.AbbeVd, 1.526480, 51.4000, 0.0)) .add_surface(1 / 0.035104369, 14.642815, 7.996205852, new Abbe(Abbe.AbbeFormula.AbbeVd, 1.623770, 56.8998, 0.0)) .add_surface(1 / -0.021187519, 14.642815, 85.243965130); systemBuilder.add(lensBuilder); Image.Builder imagePlaneBuilder = new Image.Builder() .position(new Vector3Pair(new Vector3(0, 0, 125.596), Vector3.vector3_001)) .curve(Flat.flat) .shape(new Rectangle(5.0 * 2)); systemBuilder.add(imagePlaneBuilder); PointSource.Builder ps = new PointSource.Builder(PointSource.SourceInfinityMode.SourceAtInfinity, Vector3.vector3_001) .add_spectral_line(SpectralLine.d) .add_spectral_line(SpectralLine.C) .add_spectral_line(SpectralLine.F); systemBuilder.add(ps); RendererSvg renderer = new RendererSvg(800, 400); OpticalSystem system = systemBuilder.build(); Console.WriteLine(system.ToString()); SystemLayout2D systemLayout2D = new SystemLayout2D(); // draw 2d system layout // system.draw_2d_fit(renderer); // system.draw_2d(renderer); systemLayout2D.layout2d(renderer, system); // RayTraceParameters parameters = new RayTraceParameters(system); // // RayTracer rayTracer = new RayTracer(); // parameters.set_default_distribution ( // new Distribution(Pattern.MeridionalDist, 10, 0.999)); // // TODO set save generated state on point source // System.out.println(parameters.sequenceToString(new StringBuilder()).toString()); // // RayTraceResults result = rayTracer.trace(system, parameters); // RayTraceRenderer.draw_2d(renderer, result, false, null); // Console.WriteLine(renderer.write(new StringBuilder()).ToString()); }
public AnalysisPointImage(OpticalSystem system) { _system = system; _tracer = new RayTracer(); _processed_trace = false; _image = null; _intercepts = new List <TracedRay>(); _params = new RayTraceParameters(system); _params.set_default_distribution( new Distribution(Pattern.HexaPolarDist, 20, 0.999)); _params.get_default_distribution().set_uniform_pattern(); }
void draw_2d(RendererSvg r, OpticalSystem system) { // optical axis Vector3Pair b = system.get_bounding_box(); r.draw_segment(new Vector2Pair(new Vector2(b.v0.z(), 0.0), new Vector2(b.v1.z(), 0.0)), Rgb.rgb_gray); foreach (Element e in system.elements()) { draw_element_2d(r, e, null); } }
public OpticalSystem build() { generateIds(); Transform3Cache transform3Cache = setCoordinates(); List <Element> elements = buildElements(); OpticalSystem system = new OpticalSystem(elements, transform3Cache); foreach (Element e in system.elements()) { e.set_system(system); } return(system); }
public RayTraceResults trace(OpticalSystem system, RayTraceParameters parameters) { RayTraceResults result = new RayTraceResults(parameters); switch (parameters._intensity_mode) { case TraceIntensityMode.Simpletrace: if (!parameters._sequential_mode) { //trace_template<Simpletrace> (); throw new InvalidOperationException(); } else { trace_sequential(parameters._intensity_mode, parameters, result); } break; case TraceIntensityMode.Intensitytrace: // if (!parameters._sequential_mode) // trace_template<Intensitytrace> (); // else // trace_seq_template<Intensitytrace> (); throw new InvalidOperationException(); //break; case TraceIntensityMode.Polarizedtrace: // if (!parameters._sequential_mode) // trace_template<Polarizedtrace> (); // else // trace_seq_template<Polarizedtrace> (); throw new InvalidOperationException(); //break; } return(result); }
// public Transform3 get_local_transform () // { // assert (_system != null); // return _system.get_local_transform (this); // } public virtual void set_system(OpticalSystem system) { this._system = system; }
public void testBasics() { OpticalSystem.Builder sys = new OpticalSystem.Builder(); Group.Builder g1 = new Group.Builder().position(Vector3Pair.position_000_001); Group.Builder g21 = new Group.Builder().position(Vector3Pair.position_000_001); Group.Builder g22 = new Group.Builder().position(Vector3Pair.position_000_001); Surface.Builder s211 = new Surface.Builder().position(Vector3Pair.position_000_001) .curve(Flat.flat) .shape(Infinite.infinite); Surface.Builder s221 = new Surface.Builder().position(Vector3Pair.position_000_001) .curve(Flat.flat) .shape(Infinite.infinite); g22.add(s221); g1.add(g21); g1.add(g22); g21.add(s211); sys.add(g1); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(s211e.local_position().isEqual(Vector3.vector3_0, 1e-10)); Assert.IsTrue(system1.getPosition(s211e).isEqual(Vector3.vector3_0, 1e-10)); } g21.localPosition(new Vector3(1, 2, 3)); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(s211e.local_position().isEqual(Vector3.vector3_0, 1e-10)); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(1, 2, 3), 1e-10)); } g1.localPosition(new Vector3(3, 2, 1)); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(4, 4, 4), 1e-10)); } s211.localPosition(new Vector3(7, 7, 7)); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(11, 11, 11), 1e-10)); } { OpticalSystem system1 = sys.build(); system1 = sys.updatePosition(s211, new Vector3(9, 9, 9)); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(9, 9, 9), 1e-10)); Assert.IsTrue(s211e.local_position().isEqual(new Vector3(5, 5, 5), 1e-10)); } g21.rotate(0, 0, -90); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(-1, 9, 9), 1e-10)); } { OpticalSystem system1 = sys.build(); system1 = sys.updatePosition(s211, new Vector3(3, 4, 5)); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(s211e.local_position().isEqual(new Vector3(0, 1, 1), 1e-10)); } g1.rotate(0, 0, 90); { OpticalSystem system1 = sys.build(); Element s211e = system1.getGroup(0).getGroup(0).getSurface(0); Assert.IsTrue(system1.getPosition(s211e).isEqual(new Vector3(5, 2, 5), 1e-10)); } }
public void layout2d(RendererSvg r, OpticalSystem system) { draw_2d_fit(r, system); draw_2d(r, system); }
void draw_2d_fit(RendererSvg r, OpticalSystem system) { draw_2d_fit(r, system, true); }
static void Main(string[] args) { Args arguments = Args.parseArguments(args); if (arguments.filename == null) { Console.WriteLine("Usage: --specfile inputfile [--scenario num] [--skew] [--output layout|spot] [--dump-system]"); Environment.Exit(1); } OpticalBenchDataImporter.LensSpecifications specs = new OpticalBenchDataImporter.LensSpecifications(); specs.parse_file(arguments.filename); OpticalSystem.Builder systemBuilder = OpticalBenchDataImporter.buildSystem(specs, arguments.scenario); double angleOfView = OpticalBenchDataImporter.getAngleOfViewInRadians(specs, arguments.scenario); Vector3 direction = Vector3.vector3_001; if (arguments.skewRays) { // Construct unit vector at an angle // double z1 = cos (angleOfView); // double y1 = sin (angleOfView); // unit_vector = math::Vector3 (0, y1, z1); Matrix3 r = Matrix3.get_rotation_matrix(0, angleOfView); direction = r.times(direction); } PointSource.Builder ps = new PointSource.Builder(PointSource.SourceInfinityMode.SourceAtInfinity, direction) .add_spectral_line(SpectralLine.d) .add_spectral_line(SpectralLine.C) .add_spectral_line(SpectralLine.F); systemBuilder.add(ps); OpticalSystem system = systemBuilder.build(); if (arguments.dumpSystem) { Console.WriteLine(system); } if (arguments.outputType.Equals("layout")) { RendererSvg renderer = new RendererSvg(800, 400); // draw 2d system layout SystemLayout2D systemLayout2D = new SystemLayout2D(); systemLayout2D.layout2d(renderer, system); RayTraceParameters parameters = new RayTraceParameters(system); RayTracer rayTracer = new RayTracer(); parameters.set_default_distribution( new Distribution(Pattern.MeridionalDist, 10, 0.999)); // TODO set save generated state on point source if (arguments.dumpSystem) { Console.WriteLine(parameters.sequenceToString(new StringBuilder()).ToString()); } RayTraceResults result = rayTracer.trace(system, parameters); RayTraceRenderer.draw_2d(renderer, result, false, null); Console.WriteLine(renderer.write(new StringBuilder()).ToString()); } if (arguments.outputType.Equals("spot")) { RendererSvg renderer = new RendererSvg(300, 300, Rgb.rgb_black); renderer = new RendererSvg(300, 300, Rgb.rgb_black); AnalysisSpot spot = new AnalysisSpot(system); spot.draw_diagram(renderer, true); Console.WriteLine(renderer.write(new StringBuilder()).ToString()); } }
public override void set_system(OpticalSystem system) { base.set_system(system); _stop.set_system(system); }