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()); } }
/* * 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); }
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()); } }
/* 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()); } }
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()); } }
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()); } }