public CustomTracesLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject) { foreach (Scientrace.Trace aTrace in (List <Scientrace.Trace>)shadowObject.getObject("traces_list")) { aTrace.lightsource = this; this.addTrace(aTrace); } }
public LightSource(ShadowScientrace.ShadowLightSource aShadowLightSource) { this.setObjectEnvironment(aShadowLightSource.env); this.minimum_intensity_fraction = aShadowLightSource.getDouble("minimum_intensity_fraction", this.minimum_intensity_fraction); this.addTraceModifiers((IEnumerable <Scientrace.UniformTraceModifier>)aShadowLightSource.getObject("trace_modifiers", true)); //AND it was put back like a normal ShadowClass object... //this.spectrum = aShadowLightSource.spectrum; this.spectrum = (Scientrace.LightSpectrum)aShadowLightSource.getObject("spectrum", !this.mandatory_spectrum); if (spectrum == null) { Console.WriteLine("WARNING: No spectrum given."); } this.efficiency_characteristics = (Scientrace.OpticalEfficiencyCharacteristics)aShadowLightSource.getObject("efficiency_characteristics"); this.weighted_intensity = (double)(aShadowLightSource.getNDouble("weighted_intensity") ?? this.spectrum.total_intensity); }
public SpiralLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject) { int ray_count = (int)shadowObject.getObject("ray_count"); double loops = shadowObject.getDouble("loops", -1); if (loops == -1) { loops = 1.0154 * Math.Pow(Math.PI * 2 * (1 - Math.Sqrt(((double)ray_count - 1) / (double)ray_count)), -0.5); Console.WriteLine("Number of loops for " + ray_count + " beams set to: {" + loops.ToString("#,0.000") + "}."); } this.paramInit( (Scientrace.Location)shadowObject.getObject("location"), //center (Scientrace.UnitVector)shadowObject.getObject("direction"), //direction, (Scientrace.Plane)shadowObject.getObject("spiral_plane"), //plane, ray_count, //linecount, (double)shadowObject.getObject("radius"), //radius, loops, //loops, (double)shadowObject.getObject("distance") //distance, //(Scientrace.LightSpectrum)shadowObject.getObject("spectrum")//spectrum ); }
public ParallelRandomSquareLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject) { int?random_seed = shadowObject.getNInt("random_seed"); Scientrace.Location location = shadowObject.getLocation("location"); //corner Scientrace.UnitVector direction = shadowObject.getUnitVector("direction"); int ray_count = shadowObject.getInt("ray_count"); //linecount, this.distance = shadowObject.getDouble("distance", 0); //distance, //This line has been moved to the LightSource parent shadowconstructor //Scientrace.LightSpectrum spectrum = (Scientrace.LightSpectrum)shadowObject.getObject("spectrum"); //spectrum Scientrace.Vector width = shadowObject.getVector("width"); //urange, Scientrace.Vector height = shadowObject.getVector("height"); //vrange, Random randNum; if (random_seed == null || random_seed == -1) { randNum = new Random(); } else { randNum = new Random((int)random_seed); } for (int iline = 0; iline < ray_count; iline++) { Scientrace.Line line = new Scientrace.Line(location + (width * randNum.NextDouble() + (height * randNum.NextDouble())).toLocation(), direction); // THIS IS BEING DONE BY THE PARENT LIGHTSOURCE CLASS ALREADY: line.startingpoint = line.startingpoint - (direction.toLocation()*distance); Scientrace.Trace newtrace = new Scientrace.Trace(spectrum.wl(iline), this, line, env, spectrum.it(iline), spectrum.it(iline)); newtrace.traceid = "RS" + (random_seed == null?"r":random_seed.ToString()) + "-" + iline; this.addTrace(newtrace); } //end for } //end void oldParamInit
public RandomCircleLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject) { int?random_seed = shadowObject.getNInt("random_seed"); Scientrace.Location location = shadowObject.getLocation("location"); //corner Scientrace.UnitVector direction = shadowObject.getUnitVector("direction"); Scientrace.UnitVector normal = shadowObject.getUnitVector("normal"); // if normal is not defined, use the beam direction as the surface normal. if (normal == null) { normal = direction; } int ray_count = shadowObject.getInt("ray_count"); //linecount, this.distance = shadowObject.getDouble("distance", 0); //distance, //This line has been moved to the LightSource parent shadowconstructor //Scientrace.LightSpectrum spectrum = (Scientrace.LightSpectrum)shadowObject.getObject("spectrum"); //spectrum double radius = shadowObject.getDouble("radius"); //urange, Random randNum; if (random_seed == null || random_seed == -1) { randNum = new Random(); } else { randNum = new Random((int)random_seed); } Scientrace.Plane plane = Scientrace.Plane.newPlaneOrthogonalTo(location, normal); Scientrace.UnitVector urange, vrange; double r1, r2; urange = plane.u.toUnitVector(); vrange = plane.v.toUnitVector(); Scientrace.Line line; for (int iline = 0; iline < ray_count; iline++) { r1 = 1 - randNum.NextDouble() * 2; r2 = 1 - randNum.NextDouble() * 2; if (Math.Pow(r1, 2) + Math.Pow(r2, 2) < 1) { line = new Scientrace.Line(location + ((urange * r1 * radius) + (vrange * r2 * radius)).toLocation(), direction); // THIS IS BEING DONE BY THE PARENT LIGHTSOURCE CLASS ALREADY: line.startingpoint = line.startingpoint - (direction.toLocation()*distance); } else { iline--; continue; } double wavelength = spectrum.wl(iline); double intensity = spectrum.it(iline); Scientrace.Trace newtrace = new Scientrace.Trace(wavelength, this, line, env, intensity, intensity); newtrace.traceid = "RS" + (random_seed == null?"r":random_seed.ToString()) + "-" + iline; this.addTrace(newtrace); } }
public ParallelLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject) { }