コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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
                );
        }
コード例 #4
0
        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
コード例 #5
0
        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);
            }
        }
コード例 #6
0
 public ParallelLightSource(ShadowScientrace.ShadowLightSource shadowObject) : base(shadowObject)
 {
 }