ZEMAX | 了解 ZOS-API 的主要接口——MATLAB

本文對 ZOS-API 的主要接口 (Interfaces) 進行了介紹。它遵循編程(Programming)選項卡>關(guān)于 ZOS-API(About the ZOS-API) 下的幫助文件(Help File)中描述的內(nèi)容。幫助文件中對每個接口都有對應(yīng)的介紹,建議您閱讀這些內(nèi)容。本文將著重介紹其中重要的部分,您將有機會對照練習(xí)。本文是對應(yīng)于 MATLAB 編寫的。

簡介

ZOS-API 是被作為 接口的層次結(jié)構(gòu)建立的。通過這些 接口可以訪問 OpticStudio 的不同功能。本文將介紹其中一些主要的部分。

IZOSAPI_Application TheApplication 定義

TheApplication 是一個變量,它是 IZOSAPI_Application 接口的實例。

正如 幫助文件中定義的那樣, TheApplication(或者你選擇其他任意方式調(diào)用這個變量)可以訪問 ZOS (Zemax OpticStudio)已提供的所有地址。接下來,讓我們來了解一下 TheApplication。

如何使用TheApplication

使用Matlab連接到OpticStudio交互擴展,請點擊“ 編程 ( Programming )> Matlab> 交互擴展 ( Interactive Extension ) ”以生成模板代碼。在這段代碼中,app = TheConconnection.ConnectAsExtension(實例)用于連接OpticStudio 中的已有實例。

要使用Matlab連接到 OpticStudio 獨立應(yīng)用程序 (Standalone Application ),單擊“ 編程 ( Programming )> Matlab> 獨立應(yīng)用程序”生成模板代碼。在這段代碼中,app = TheConnection.CreateNewApplication()用于在“headless”模式下啟動OpticStudio 的新實例。請注意,雖然 OpticStudio 窗口是不可見的,但它仍然需要有效的許可證才能使用。

如下為一些實用的命令:

關(guān)閉應(yīng)用程序:
TheApplication.CloseApplication();
檢查您的授權(quán)版本:
TheApplication.LicenseStatus;
檢查您的授權(quán)模式:
TheApplication.Mode;
將 OpticStudio 的語言切換為英語:TheApplication.Preferences.General.Language=ZOSAPI.Preferences.LanguageType.English;
獲取示例文件夾 (Sample Files folder)的完整路徑:
sampleDir = TheApplication.SamplesDir

IOpticalSystem PrimarySystem 定義

幫助文件中的定義為: PrimarySystem 屬性提供了對當(dāng)前加載的. zmx文件的訪問權(quán)限,并提供了若干操作和數(shù)據(jù)訪問權(quán)限。
TheSystem = TheApplication.PrimarySystem;
如何使用PrimarySystem

TheSystem 提供對編輯器的訪問權(quán)限:.LDE 用于 鏡頭數(shù)據(jù)編輯器 (Lens Data Editor ),.MCE 用于 多重結(jié)構(gòu)編輯器 (Multi Configuration Editor ),.MFE 用于 評價函數(shù)編輯器 (Merit Function Editor ),.TDE 用于 公差數(shù)據(jù)編輯器 (Tolerance Data Editor ),.NCE 用于 非序列編輯器 (Non-Seqential Editor )。還可以使用 .Analysis 對分析進行訪問和使用 .Tools 對工具進行訪問。

一些關(guān)于 TheSystem 進行的實用操作如下所示:

轉(zhuǎn)換至非序列模式(Non-sequential Mode):
TheSystem.MakeNonSequential();
轉(zhuǎn)換至序列模式(Sequential Mode):
TheSystem.MakeSequential();
下載.ZMX文件:
testFile = System.String.Concat(sampleDir, '\Sequential\Objectives\Double Gauss 28 degree field.zmx');TheSystem.LoadFile(testFile, false);
保存已存在的系統(tǒng)(.ZMX):
TheSystem.Save();
將當(dāng)前系統(tǒng)保存為一個新的文件:
TheSystem.SaveAs(copyFile);
創(chuàng)建新的(默認(rèn)的)鏡頭數(shù)據(jù)文件(LENS.ZMX):
TheSystem.New(false);
關(guān)閉當(dāng)前已打開的系統(tǒng)且不保存:
TheSystem.Close(false);

ISystemData SystemData 定義

在 幫助文件中的定義為: TheSystemData 包含系統(tǒng)所有的基本數(shù)據(jù),可以對系統(tǒng)選項( System Explorer) 進行設(shè)置。
TheSystemData = TheSystem.SystemData;
如何使用TheSystemData

TheSystemData 可以對孔徑 (Aperture ) 、視場 (Fields) 、波長 (Wavelengths) 、環(huán)境 (Environment) 、光線瞄準(zhǔn) (RayAiming) 、非序列數(shù)據(jù) (NonSequentialData) 、偏振 (Polarization) 等特性 進行訪問。

如下為一些可改變 TheSystemData 中設(shè)置的實用操作:

更改下拉菜單中的設(shè)置:OpticStudio 下拉菜單中的設(shè)置只能獲取預(yù)設(shè)值的列表。在 ZOS-API 中,這些列表以枚舉的形式公開。例如,要將系統(tǒng)孔徑類型更改為入瞳直徑(Entrance Pupil Diameter),請選擇 EntrancePupilDiameter 作為枚舉類型,它是 ZemaxApertureType 的一種。

TheSystemData.Aperture.ApertureType=ZOSAPI.SystemData.ZemaxApertureType.EntrancePupilDiameter;

更改數(shù)值設(shè)置:
TheSystemData.Aperture.ApertureValue=20;

更改字符設(shè)置:
sysTitleNotes = TheSystem.SystemData.TitleNotes;

設(shè)置膜層文件并重新載入:
sysFiles = TheSystem.SystemData.Files; sysFiles.CoatingFile = 'COATING.DAT';TheSystem.SystemData.Files.ReloadFiles();

添加標(biāo)題:
sysTitleNotes.Title = 'Add here the title';

勾選或不勾選復(fù)選框。True 代表著勾選這個選項,F(xiàn)alse代表不勾選:TheSystemData.Aperture.AFocalImageSpace = true;
如下為一些可改變視場和波長的實用選項:
訪問視場:
sysField = TheSystem.SystemData.Fields;

訪問波長:
sysWave= TheSystem.SystemData.Wavelengths;

添加新的視場
X=0,Y=5.0,視場權(quán)重為1.0:NewField_2 = sysField.AddField(0,5.0,1.0);

添加新的波長0.6328mm,權(quán)重為1.0:
NewWave_2 = sysWave.AddWavelength(0.6328,1.0);

將視場1 的值改為X=1,Y=2.0,視場權(quán)重為0.5:
field1 = sysField.GetField(1); field1.X = 1.0; field1.Y = 2.0; field1.Weight = 0.5;
將波長1改為0.55mm:TheSystemData.Wavelengths.GetWavelength(1).Wavelength = 0.55;
設(shè)置波長1 為主波長:TheSystemData.Wavelengths.GetWavelength(1).MakePrimary();
將視場類型 (Field Type) 改為物高 (Object Height):sysField.SetFieldType(ZOSAPI.SystemData.FieldType.ObjectHeight);
將歸一化 (Normalization) 改為徑向(Radial):
sysField.Normalization= ZOSAPI.SystemData.FieldNormalizationType.Radial;
使用視場向?qū)?(Field Wizard) 從0到10添加3個等效的Y視場:sysField.ApplyFieldWizard(ZOSAPI.SystemData.FieldPattern.EqualAreaY,3,10,0,0,1,true,false);
最后三個參數(shù) (1,true, false)表示:從第1行開始,分別檢查覆蓋 (Overwrite) 是否選中和使用拾取 (Use pickups) 是否取消選中。
使用正交算法 (Quadrature) 從0.486mm到0.656mm范圍內(nèi)定義6個波長:TheSystemData.Wavelengths.GaussianQuadrature(0.486,0.656,ZOSAPI.SystemData.QuadratureSteps.S6);
使用預(yù)置 (Preset) 選項定義波長:TheSystemData.Wavelengths.SelectWavelengthPreset(ZOSAPI.SystemData.WavelengthPreset.FdC_Visible);
讀取視場的數(shù)目:
num_fields=TheSystem.SystemData.Fields.NumberOfFields;

分析定義

幫助文件中的定義為:the Analyses 包含訪問 OpticStudio 中分析功能的所有信息的權(quán)限。

TheAnalyses = ThePrimarySystem.Analyses;
如何使用 TheAnalyses
TheAnalyses 可以訪問所有的分析選項。
如下為一些運行分析選項卡的實用命令:
執(zhí)行一次分析:
TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM AnalysisType)
例如,執(zhí)行一次光線光扇圖分析:
TheRayFan = TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.RayFan);
一些分析選項可以用它們自身的功能打開:
TheRayFan = TheSystem.Analyses.New_RayFan();

檢查分析選項是否已有正在應(yīng)用的設(shè)置:
TheRayFan.HasAnalysisSpecificSettings;
獲取設(shè)置:
TheRayFan_Settings = TheRayFan.GetSettings();
更改已經(jīng)應(yīng)用的設(shè)置。例如,更改光線數(shù)目:
TheRayFan_Settings.NumberOfRays = 100;
改變波長:
TheRayFan_Settings.Wavelength.SetWavelengthNumber(0);
使用 ModifySettings 更改還未應(yīng)用的設(shè)置:
analysisSettings.SaveTo(cfgFile);
analysisSettings.ModifySettings(cfgFile, 'SHA_ROTX', '90');
analysisSettings.LoadFrom(cfgFile);
System.IO.File.Delete(cfgFile);
應(yīng)用設(shè)置:
TheRayFan.ApplyAndWaitForCompletion();
獲取結(jié)果:
TheRayFan_Results = TheRayFan.GetResults();
讀取結(jié)果:得到的結(jié)果取決于已執(zhí)行的分析。
例如:示例代碼23使用 DataSeries 讀取光線光扇圖 (Ray Fan) 的分析結(jié)果。
for field = 1:max_num_field
x = ray_results.DataSeries(field * 2 - 1).XData.Data.double;
y = ray_results.DataSeries(field * 2 - 1).YData.Data.double;
end;

編輯器定義

編輯器是一組用于輸入鏡頭數(shù)據(jù)、物體數(shù)據(jù)、操作數(shù)數(shù)據(jù)的電子表格。這些編輯器包括 鏡頭數(shù)據(jù)編輯器 (LDE) 、非序列元件編輯器 (NCE) 、評價函數(shù)編輯器 (MFE) 、多重結(jié)構(gòu)編輯器 (MCE) 、公差數(shù)據(jù)編輯器 (TDE) 。

TheLDE = TheSystem.LDE;
如何使用編輯器

各編輯器之間的功能類似。LDE 中是關(guān)于 表面 (Surface)的信息,NCE 中是關(guān)于 物體 (Objects)的信息,MFE、MCE 和 TDE 中是關(guān)于 操作數(shù) ( Operands )的信息,MCE 中是關(guān)于 多重結(jié)構(gòu) ( Configurations )的信息。

以下是 TheLDE一些最常見的功能:

添加新表面:
TheLDE.AddSurface();
在特定的表面序號前插入新表面:
TheLDE.InsertNewSurfaceAt(1);
刪除一個或多個指定序號的表面:
TheLDE.RemoveSurfacesAt(1,3);
將指定數(shù)量的表面從一個位置復(fù)制粘貼到另一個位置:TheLDE.CopySurfaces(1,3,3);
第一個參數(shù)是要復(fù)制的第一個表面,第二個參數(shù)是要復(fù)制的表面數(shù)目,最后一個參數(shù)是要粘貼到的表面序號。
訪問特定的表面:
TheLDE.GetSurfaceAt(1);
更改表面類型:surf1_type=surf1.GetSurfaceTypeSettings(ZOSAPI.Editors.LDE.SurfaceType.EvenAspheric); surf1.ChangeType(surf1_type);
獲取或設(shè)置半徑(Radius)、厚度(Thickness)、半口徑(SemiDiameter)、延伸區(qū)(ChipZone), 圓錐系數(shù)(Conic)、熱膨脹系數(shù)(TCE)、標(biāo)注(Comment)、材料(Material)、膜層(Coating)的值:
surf1.Comment= 'Add comment here';
添加求解(Solve):
solve_MarginalRayHeight= surf1.ThicknessCell.CreateSolveType(ZOSAPI.Editors.SolveType.MarginalRayHeight);
solve_MarginalRayHeight.PupilZone=0.5;
surf1.ThicknessCell.SetSolveData(solve_MarginalRayHeight);
surf1.RadiusCell.MakeSolveVariable();
改變參數(shù)的值:
par2= surf1.GetSurfaceCell(ZOSAPI.Editors.LDE.SurfaceColumn.Par2); par2.DoubleValue= 0.0005;
將孔徑屬性改為圓形孔徑(Circular Aperture):
aperdata=surf1.ApertureData;
circular_aper=aperdata.CreateApertureTypeSettings(ZOSAPI.Editors.LDE.SurfaceApertureTypes.CircularAperture);
circular_aper.MaximumRadius=0.5;
aperdata.ChangeApertureTypeSettings(circular_aper);
訪問編輯器工具欄的工具:
RunTool_ConvertLocalToGlobalCoordinates(int, int, int)

IOpticalSystemTools ThePrimarySystem.Tools 定義

在 幫助文件中的定義:每個光學(xué)系統(tǒng)提供對 系統(tǒng)工具 ( System Tools)的訪問權(quán)限。在指定的光學(xué)系統(tǒng)中,用戶一次只能運行一個工具。

TheSystem.Tools
如何使用Tools
所有工具之間的語句相似。若要運行 工具 (Tool),請打開工具,定義設(shè)置,然后運行它。

testFile = System.String.Concat(sampleDir, '\Sequential\Objectives\Cooke 40 degree field.zar');
testFolder = System.String.Concat(sampleDir, '\test\');
loadZAR=TheSystem.Tools.OpenRestoreZAR();
loadZAR.SetFileName(testFile);
loadZAR.SetOutputFolder(testFolder);
loadZAR.SetFilesAllOverwrite();
loadZAR.RunAndWaitForCompletion();
loadZAR.Close();
如下為TheSystem.Tools.中常用的一些工具:

創(chuàng)建存檔文件(Create Archive):createZAR=TheSystem.Tools.OpenCreateZAR();
將當(dāng)前透鏡數(shù)據(jù)輸出為 CAD 文件:
ToolExportCAD = TheSystem.Tools.OpenExportCAD();
將文件轉(zhuǎn)換為非序列文件:
convertNSmode = TheSystem.Tools.OpenConvertToNSCGroup();
執(zhí)行快速聚焦( Quick Focus):
quickFocus = TheSystem.Tools.OpenQuickFocus();
移除所有變量:
TheSystem.Tools.RemoveAllVariables();
執(zhí)行一次局部優(yōu)化:
LocalOpt = TheSystem.Tools.OpenLocalOptimization();
運行一次批量光線追跡(Batch ray trace):
raytrace = TheSystem.Tools.OpenBatchRayTrace();
打開公差分析 (Tolerancing):
tol = TheSystem.Tools.OpenTolerancing();
計算評價函數(shù) (Merit Function):MFcalculator=TheSystem.Tools.OpenMeritFunctionCalculator();
計算光斑半徑 (Spot Radius):
SpotCalculator= TheSystem.Tools.OpenRMSSpotRadiusCalculator();
在表面3 處插入鏡頭庫中的鏡頭:Lenscat=TheSystem.Tools.OpenLensCatalogs();
如下為 TheSystem.Tools 中非序列模式下可用的最常用的工具:
執(zhí)行光線追跡(RayTrace):
NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace();
從光線數(shù)據(jù)庫(RayDataBase) 中讀取數(shù)據(jù):
OpenRayDatabaseReader()。
下期我們將會為大家介紹《在 MATLAB 中使用 ZOS-API 批量處理光線追跡數(shù)據(jù)》