Ejemplo n.º 1
0
        public FresnelLens(ShadowScientrace.ShadowObject3d lensShadowObject)
            : base(lensShadowObject)
        {
            ShadowScientrace.ShadowObject3d ringTemplateSO3D = new ShadowScientrace.ShadowObject3d(lensShadowObject);
            ringTemplateSO3D.materialprops = (Scientrace.MaterialProperties)ringTemplateSO3D.getObject("lens_material");

            if (ringTemplateSO3D.hasArgument("FocalVector")) {

            }

            //Setting Sphere Radius (if not provided) from Focal Length
            if (ringTemplateSO3D.hasArgument("focal_length") && !ringTemplateSO3D.hasArgument("lens_sphere_radius")) {
            double focal_length = (double)ringTemplateSO3D.getObject("focal_length");

            double sphere_radius = FresnelLens.getRadius(focal_length, ringTemplateSO3D.materialprops.refractiveindex(600E-9),
                                        ringTemplateSO3D.getNBool("double_convex"));
            ringTemplateSO3D.arguments["lens_sphere_radius"] = sphere_radius;
            }

            //Setting Sphere Radius (if not provided) from Focal Length
            if (ringTemplateSO3D.hasArgument("lens_radius")
                && ringTemplateSO3D.hasArgument("lens_sphere_radius")
                &&!ringTemplateSO3D.hasArgument("lens_sphere_radians_max")) {
            double lens_radius = (double)ringTemplateSO3D.getObject("lens_radius");
            double sphere_radius  = (double)ringTemplateSO3D.getObject("lens_sphere_radius");

            // VarRings can have larger radii. Will throw an error upon calculating the ring sphere radius later on if necessary.
            if ((ringTemplateSO3D.factory_id != "VarRings") && (sphere_radius < lens_radius))
                throw new ArgumentOutOfRangeException("Cannot create a lens with radius "+lens_radius+" from sphere with radius: "+sphere_radius+
                    " possibly constructed from focal length: "+ringTemplateSO3D.printArgument("focal_length")+"{"+ringTemplateSO3D.factory_id);

            double lens_sphere_radians_max = Math.Asin(lens_radius/sphere_radius);
            //Console.WriteLine("sphere radius: "+sphere_radius+"  lens radius: "+lens_radius);
            ringTemplateSO3D.arguments["lens_sphere_radians_min"] = 0.0;
            ringTemplateSO3D.arguments["lens_sphere_radians_max"] = lens_sphere_radians_max;
            }

            switch (ringTemplateSO3D.factory_id) {
            case "EqualHeightRings":
                this.shadowFac_SphereRadius_and_EqualHeightRings(ringTemplateSO3D);
                break;
            case "EqualWidthRings":
                this.shadowFac_SphereRadius_and_EqualWidthRings(ringTemplateSO3D);
                break;
            case "VarRings":
                this.shadowFac_VariusRadii_and_EqualWidthRings(ringTemplateSO3D);
                break;
            case "EqualAngleRings":
                this.shadowFac_SphereRadius_and_EqualAngleRings(ringTemplateSO3D);
                break;
            default:
                throw new ArgumentOutOfRangeException("Factory id {"+ringTemplateSO3D.factory_id+"} not found for "+ringTemplateSO3D.typeString());
            }
        }
Ejemplo n.º 2
0
/*
 *      public FresnelLensRing(Object3dCollection parent, MaterialProperties mprops,
 *                      Scientrace.Location lens_sphere_location, double lens_sphere_radius,
 *                      double lens_sphere_radians_min, double lens_sphere_radians_max,
 *                      Scientrace.UnitVector orientation_from_sphere_center) : base (parent, mprops) {
 *              this.paramInit(lens_sphere_location, lens_sphere_radius, lens_sphere_radians_min, lens_sphere_radians_max, orientation_from_sphere_center);
 *              }
 *
 *      /// <summary>
 *      /// Factory method that creates a new FresnelLensRing based on the properties of another FresnelLensRing
 *      /// but mirrored about the flat plane (flatBottomBorder).
 *      /// </summary>
 *      /// <returns>
 *      /// The new FresnelLensRing
 *      /// </returns>
 *      /// <param name='aFresnelLensRing'>
 *      /// A FresnelLensRing to base the (copied) properties upon.
 *      /// </param>
 *      public static FresnelLensRing newOppositeDirectionRing(FresnelLensRing aFresnelLensRing) {
 *              Object3dCollection parent = aFresnelLensRing.parent;
 *              MaterialProperties mprops = aFresnelLensRing.materialproperties;
 *              Scientrace.Location lens_sphere_location = aFresnelLensRing.sphereLoc + (aFresnelLensRing.orientation*aFresnelLensRing.getDistanceToPlanoCenter()*2);
 *              double lens_sphere_radius = aFresnelLensRing.sphereRadius;
 *              double lens_sphere_radians_min = aFresnelLensRing.radiansMin;
 *              double lens_sphere_radians_max = aFresnelLensRing.radiansMax;
 *              Scientrace.UnitVector orientation_from_sphere_center = aFresnelLensRing.orientation.negative();
 *              return new FresnelLensRing(parent, mprops, lens_sphere_location, lens_sphere_radius, lens_sphere_radians_min, lens_sphere_radians_max, orientation_from_sphere_center);
 *              } */

        public FresnelLensRing(ShadowScientrace.ShadowObject3d shadowObject) : base(shadowObject)
        {
            switch (shadowObject.factory_id)
            {
            case "SphereCenterAndRadians": this.shadowFac_SphereCenter_And_Radians(shadowObject);
                break;

            case "PlanoCenterAndRadians": this.shadowFac_PlanoCenter_And_Radians(shadowObject);
                break;

            default:
                throw new ArgumentOutOfRangeException("Factory method {" + shadowObject.factory_id + "} not found for " + shadowObject.typeString());
            }

            //General stuff:
            this.x3dCurvedSegments = shadowObject.getInt("draw_3d_segment_linecount", this.x3dCurvedSegments);
        }
Ejemplo n.º 3
0
        public FresnelLens(ShadowScientrace.ShadowObject3d lensShadowObject) : base(lensShadowObject)
        {
            ShadowScientrace.ShadowObject3d ringTemplateSO3D = new ShadowScientrace.ShadowObject3d(lensShadowObject);
            ringTemplateSO3D.materialprops = (Scientrace.MaterialProperties)ringTemplateSO3D.getObject("lens_material");


            if (ringTemplateSO3D.hasArgument("FocalVector"))
            {
            }


            //Setting Sphere Radius (if not provided) from Focal Length
            if (ringTemplateSO3D.hasArgument("focal_length") && !ringTemplateSO3D.hasArgument("lens_sphere_radius"))
            {
                double focal_length = (double)ringTemplateSO3D.getObject("focal_length");

                double sphere_radius = FresnelLens.getRadius(focal_length, ringTemplateSO3D.materialprops.refractiveindex(600E-9),
                                                             ringTemplateSO3D.getNBool("double_convex"));
                ringTemplateSO3D.arguments["lens_sphere_radius"] = sphere_radius;
            }

            //Setting Sphere Radius (if not provided) from Focal Length
            if (ringTemplateSO3D.hasArgument("lens_radius") &&
                ringTemplateSO3D.hasArgument("lens_sphere_radius") &&
                !ringTemplateSO3D.hasArgument("lens_sphere_radians_max"))
            {
                double lens_radius   = (double)ringTemplateSO3D.getObject("lens_radius");
                double sphere_radius = (double)ringTemplateSO3D.getObject("lens_sphere_radius");

                // VarRings can have larger radii. Will throw an error upon calculating the ring sphere radius later on if necessary.
                if ((ringTemplateSO3D.factory_id != "VarRings") && (sphere_radius < lens_radius))
                {
                    throw new ArgumentOutOfRangeException("Cannot create a lens with radius " + lens_radius + " from sphere with radius: " + sphere_radius +
                                                          " possibly constructed from focal length: " + ringTemplateSO3D.printArgument("focal_length") + "{" + ringTemplateSO3D.factory_id);
                }

                double lens_sphere_radians_max = Math.Asin(lens_radius / sphere_radius);
                //Console.WriteLine("sphere radius: "+sphere_radius+"  lens radius: "+lens_radius);
                ringTemplateSO3D.arguments["lens_sphere_radians_min"] = 0.0;
                ringTemplateSO3D.arguments["lens_sphere_radians_max"] = lens_sphere_radians_max;
            }

            switch (ringTemplateSO3D.factory_id)
            {
            case "EqualHeightRings":
                this.shadowFac_SphereRadius_and_EqualHeightRings(ringTemplateSO3D);
                break;

            case "EqualWidthRings":
                this.shadowFac_SphereRadius_and_EqualWidthRings(ringTemplateSO3D);
                break;

            case "VarRings":
                this.shadowFac_VariusRadii_and_EqualWidthRings(ringTemplateSO3D);
                break;

            case "EqualAngleRings":
                this.shadowFac_SphereRadius_and_EqualAngleRings(ringTemplateSO3D);
                break;

            default:
                throw new ArgumentOutOfRangeException("Factory id {" + ringTemplateSO3D.factory_id + "} not found for " + ringTemplateSO3D.typeString());
            }
        }
Ejemplo n.º 4
0
        /* ShadowClass constructor */
        public TriangularPrism(ShadowScientrace.ShadowObject3d shadowObject) : base(shadowObject)
        {
            switch (shadowObject.factory_id ?? "WidthHeightAndLength")     // ?? provides a "default method" when null
            {
            case "WidthHeightAndLength":
                this.shadowFac_Width_Height_And_Length(shadowObject);
                break;

            default:
                throw new ArgumentOutOfRangeException("Factory id {" + shadowObject.factory_id + "} not found for " + shadowObject.typeString());
            }
        }
Ejemplo n.º 5
0
        public Rectangle(ShadowScientrace.ShadowObject3d shadowObject) : base(shadowObject)
        {
            switch (shadowObject.factory_id)
            {
            case "Loc_width_height":
                this.shadowFac_Loc_width_height(shadowObject);
                break;

            case "Center_and_Sidelength":
                this.shadowFac_Center_and_Sidelength(shadowObject);
                break;

            default:
                throw new ArgumentOutOfRangeException("Factory id {" + shadowObject.factory_id + "} not found for " + shadowObject.typeString());
            }
        }
Ejemplo n.º 6
0
        public DoubleConvexLens(ShadowScientrace.ShadowObject3d shadowObject) : base(shadowObject)
        {
            switch (shadowObject.factory_id)
            {
            case "TwoRadii_and_Diameter": this.shadowFac_TwoRadii_and_Diameter(shadowObject);
                break;

            case "TwoRadii_and_Locations": this.shadowFac_TwoRadii_and_Locations(shadowObject);
                break;

            case "FocalLength_and_Diameter": this.shadowFac_FocalLength_and_Diameter(shadowObject);
                break;

            default:
                throw new ArgumentOutOfRangeException("Factory method {" + shadowObject.factory_id + "} not found for " + shadowObject.typeString());
            }
        }