Skip to main content
Question

C# template for user-defined surface dll

  • December 30, 2022
  • 4 replies
  • 355 views

Hans-Jürgen Feige

Hi All,

I am looking for a template to create a user-defined surface dll in c#.

Can someone provide me with this. I'm new to C# and UD surfaces.

Many Thanks!

Hans-Jürgen

 


[Mod note: moved to the DLL subforum] 

4 replies

Xianglei
  • Monochrome
  • 7 replies
  • December 31, 2022

Hi Hans-Jürgen,

Here is one example to change the surface type to User Defined and you can choose one of .DLL file in the surface property (e.g., us_anasp.dll here I used with index of 3).

Please let me know if you have any questions.

 

 // Add your custom code here...

            // creates a new API directory
            string strPath = System.IO.Path.Combine(TheApplication.SamplesDir, @"API\\CS4");
            System.IO.Directory.CreateDirectory(strPath);

            // Set up primary optical system
            string sampleDir = TheApplication.SamplesDir;
            string testFile = sampleDir + "\\API\\CS4\\e01_new_file_and_quickfocus.zos";

            // Make new file
            TheSystem.New(false);
            TheSystem.SaveAs(testFile);

            TheSystem.SystemData.MaterialCatalogs.AddCatalog("SCHOTT");

            // Aperture
            ISystemData TheSystemData = TheSystem.SystemData;
            TheSystemData.Aperture.ApertureValue = 40;

            // Fields
            IField Field_1 = TheSystemData.Fields.GetField(1);
            IField NewField_2 = TheSystemData.Fields.AddField(0, 5.0, 1.0);

            // Wavelength preset
            bool slPreset = TheSystemData.Wavelengths.SelectWavelengthPreset(WavelengthPreset.d_0p587);

            // Lens data 
            ILensDataEditor TheLDE = TheSystem.LDE;
            TheLDE.InsertNewSurfaceAt(2);
            TheLDE.InsertNewSurfaceAt(2);
            ILDERow Surface_1 = TheLDE.GetSurfaceAt(1);
            ILDERow Surface_2 = TheLDE.GetSurfaceAt(2);
            ILDERow Surface_3 = TheLDE.GetSurfaceAt(3);

            // Changes surface cells in LDE
            Surface_1.Thickness = 50.0;
            Surface_1.Comment = "Stop is free to move";
            Surface_2.Radius = 100.0;
            Surface_2.Thickness = 10.0;
            Surface_2.Comment = "front of lens";
            Surface_2.Material = "N-BK7";
            Surface_3.Comment = "rear of lens";

            // Changes surface type to User Defined
            ISurfaceTypeSettings SurfaceType_UD = TheLDE.GetSurfaceAt(2).GetSurfaceTypeSettings(SurfaceType.UserDefined);
            string[] aFiles =  SurfaceType_UD.GetFileNames();
            SurfaceType_UD.Filename = aFiles.GetValue(3).ToString();
            TheLDE.GetSurfaceAt(2).ChangeType(SurfaceType_UD);           

            // Solver
            ISolveData Solver = Surface_3.RadiusCell.CreateSolveType(SolveType.FNumber);
            Solver._S_FNumber.FNumber = 10;
            Surface_3.RadiusCell.SetSolveData(Solver);

            // QuickFocus
            IQuickFocus quickFocus = TheSystem.Tools.OpenQuickFocus();
            quickFocus.Criterion = QuickFocusCriterion.SpotSizeRadial;
            quickFocus.UseCentroid = true;
            quickFocus.RunAndWaitForCompletion();
            quickFocus.Close();

            // Save and close
            TheSystem.Save();
 

 


Hans-Jürgen Feige

Hi Xianglei,

thanks but what I am looking for, to create/built an user-defined surface DLL written in c#

BR


Flurin Herren
Fully Spectral
Forum|alt.badge.img+3
  • Fully Spectral
  • 62 replies
  • January 3, 2023

Hi @Hans-Jürgen Feige,

Unfortunately User-defined DLL`s can only be applied within a C or C++ environment. It might be quite difficult to adapt some sort of a converter from a scripting language such as C#. However, I will dig a bit into that, as we would also internally welcome to have some new language preferences in that sense.

I`ll keep you posted here.

Let me know if you have any other questions,


o.sonmez
Forum|alt.badge.img
  • Monochrome
  • 4 replies
  • January 20, 2023
Xianglei wrote:

Hi Hans-Jürgen,

Here is one example to change the surface type to User Defined and you can choose one of .DLL file in the surface property (e.g., us_anasp.dll here I used with index of 3).

Please let me know if you have any questions.

 

 // Add your custom code here...

            // creates a new API directory
            string strPath = System.IO.Path.Combine(TheApplication.SamplesDir, @"API\\CS4");
            System.IO.Directory.CreateDirectory(strPath);

            // Set up primary optical system
            string sampleDir = TheApplication.SamplesDir;
            string testFile = sampleDir + "\\API\\CS4\\e01_new_file_and_quickfocus.zos";

            // Make new file
            TheSystem.New(false);
            TheSystem.SaveAs(testFile);

            TheSystem.SystemData.MaterialCatalogs.AddCatalog("SCHOTT");

            // Aperture
            ISystemData TheSystemData = TheSystem.SystemData;
            TheSystemData.Aperture.ApertureValue = 40;

            // Fields
            IField Field_1 = TheSystemData.Fields.GetField(1);
            IField NewField_2 = TheSystemData.Fields.AddField(0, 5.0, 1.0);

            // Wavelength preset
            bool slPreset = TheSystemData.Wavelengths.SelectWavelengthPreset(WavelengthPreset.d_0p587);

            // Lens data 
            ILensDataEditor TheLDE = TheSystem.LDE;
            TheLDE.InsertNewSurfaceAt(2);
            TheLDE.InsertNewSurfaceAt(2);
            ILDERow Surface_1 = TheLDE.GetSurfaceAt(1);
            ILDERow Surface_2 = TheLDE.GetSurfaceAt(2);
            ILDERow Surface_3 = TheLDE.GetSurfaceAt(3);

            // Changes surface cells in LDE
            Surface_1.Thickness = 50.0;
            Surface_1.Comment = "Stop is free to move";
            Surface_2.Radius = 100.0;
            Surface_2.Thickness = 10.0;
            Surface_2.Comment = "front of lens";
            Surface_2.Material = "N-BK7";
            Surface_3.Comment = "rear of lens";

            // Changes surface type to User Defined
            ISurfaceTypeSettings SurfaceType_UD = TheLDE.GetSurfaceAt(2).GetSurfaceTypeSettings(SurfaceType.UserDefined);
            string[] aFiles =  SurfaceType_UD.GetFileNames();
            SurfaceType_UD.Filename = aFiles.GetValue(3).ToString();
            TheLDE.GetSurfaceAt(2).ChangeType(SurfaceType_UD);           

            // Solver
            ISolveData Solver = Surface_3.RadiusCell.CreateSolveType(SolveType.FNumber);
            Solver._S_FNumber.FNumber = 10;
            Surface_3.RadiusCell.SetSolveData(Solver);

            // QuickFocus
            IQuickFocus quickFocus = TheSystem.Tools.OpenQuickFocus();
            quickFocus.Criterion = QuickFocusCriterion.SpotSizeRadial;
            quickFocus.UseCentroid = true;
            quickFocus.RunAndWaitForCompletion();
            quickFocus.Close();

            // Save and close
            TheSystem.Save();
 

 

Hello 

 

https://www.onlinegdb.com/#

Hans-Jürgen Feige wrote:

Hi Xianglei,

thanks but what I am looking for, to create/built an user-defined surface DLL written in c#

BR

Hello Hans-Jürgen Feige

You can try this out, and see if it works; https://www.onlinegdb.com/# you can change the programming language using the options located at upside right 

 

alternatively, chatGPT is somewhat a solution which might be unavailable due to high demand.

 

 


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings