ZEMAX | 了解 ZOS-API 的主要接口——MATLAB
本文對(duì) ZOS-API 的主要接口 (Interfaces) 進(jìn)行了介紹。它遵循編程(Programming)選項(xiàng)卡>關(guān)于 ZOS-API(About the ZOS-API) 下的幫助文件(Help File)中描述的內(nèi)容。幫助文件中對(duì)每個(gè)接口都有對(duì)應(yīng)的介紹,建議您閱讀這些內(nèi)容。本文將著重介紹其中重要的部分,您將有機(jī)會(huì)對(duì)照練習(xí)。本文是對(duì)應(yīng)于 MATLAB 編寫的。
簡(jiǎn)介
ZOS-API 是被作為 接口的層次結(jié)構(gòu)建立的。通過(guò)這些 接口可以訪問(wèn) OpticStudio 的不同功能。本文將介紹其中一些主要的部分。
IZOSAPI_Application TheApplication 定義
TheApplication 是一個(gè)變量,它是 IZOSAPI_Application 接口的實(shí)例。
正如 幫助文件中定義的那樣, TheApplication(或者你選擇其他任意方式調(diào)用這個(gè)變量)可以訪問(wèn) ZOS (Zemax OpticStudio)已提供的所有地址。接下來(lái),讓我們來(lái)了解一下 TheApplication。
如何使用TheApplication
使用Matlab連接到OpticStudio交互擴(kuò)展,請(qǐng)點(diǎn)擊“ 編程 ( Programming )> Matlab> 交互擴(kuò)展 ( Interactive Extension ) ”以生成模板代碼。在這段代碼中,app = TheConconnection.ConnectAsExtension(實(shí)例)用于連接OpticStudio 中的已有實(shí)例。
要使用Matlab連接到 OpticStudio 獨(dú)立應(yīng)用程序 (Standalone Application ),單擊“ 編程 ( Programming )> Matlab> 獨(dú)立應(yīng)用程序”生成模板代碼。在這段代碼中,app = TheConnection.CreateNewApplication()用于在“headless”模式下啟動(dòng)OpticStudio 的新實(shí)例。請(qǐng)注意,雖然 OpticStudio 窗口是不可見(jiàn)的,但它仍然需要有效的許可證才能使用。
如下為一些實(shí)用的命令:
關(guān)閉應(yīng)用程序:
TheApplication.CloseApplication();
檢查您的授權(quán)版本:
TheApplication.LicenseStatus;
檢查您的授權(quán)模式:
TheApplication.Mode;
將 OpticStudio 的語(yǔ)言切換為英語(yǔ):TheApplication.Preferences.General.Language=ZOSAPI.Preferences.LanguageType.English;
獲取示例文件夾 (Sample Files folder)的完整路徑:
sampleDir = TheApplication.SamplesDir
IOpticalSystem PrimarySystem 定義
幫助文件中的定義為: PrimarySystem 屬性提供了對(duì)當(dāng)前加載的. zmx文件的訪問(wèn)權(quán)限,并提供了若干操作和數(shù)據(jù)訪問(wèn)權(quán)限。
TheSystem = TheApplication.PrimarySystem;
如何使用PrimarySystem
TheSystem 提供對(duì)編輯器的訪問(wèn)權(quán)限:.LDE 用于 鏡頭數(shù)據(jù)編輯器 (Lens Data Editor ),.MCE 用于 多重結(jié)構(gòu)編輯器 (Multi Configuration Editor ),.MFE 用于 評(píng)價(jià)函數(shù)編輯器 (Merit Function Editor ),.TDE 用于 公差數(shù)據(jù)編輯器 (Tolerance Data Editor ),.NCE 用于 非序列編輯器 (Non-Seqential Editor )。還可以使用 .Analysis 對(duì)分析進(jìn)行訪問(wèn)和使用 .Tools 對(duì)工具進(jìn)行訪問(wèn)。
一些關(guān)于 TheSystem 進(jìn)行的實(shí)用操作如下所示:
轉(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)保存為一個(gè)新的文件:
TheSystem.SaveAs(copyFile);
創(chuàng)建新的(默認(rèn)的)鏡頭數(shù)據(jù)文件(LENS.ZMX):
TheSystem.New(false);
關(guān)閉當(dāng)前已打開(kāi)的系統(tǒng)且不保存:
TheSystem.Close(false);
ISystemData SystemData 定義
在 幫助文件中的定義為: TheSystemData 包含系統(tǒng)所有的基本數(shù)據(jù),可以對(duì)系統(tǒng)選項(xiàng)( System Explorer) 進(jìn)行設(shè)置。
TheSystemData = TheSystem.SystemData;
如何使用TheSystemData
TheSystemData 可以對(duì)孔徑 (Aperture ) 、視場(chǎng) (Fields) 、波長(zhǎng) (Wavelengths) 、環(huán)境 (Environment) 、光線瞄準(zhǔn) (RayAiming) 、非序列數(shù)據(jù) (NonSequentialData) 、偏振 (Polarization) 等特性 進(jìn)行訪問(wèn)。
如下為一些可改變 TheSystemData 中設(shè)置的實(shí)用操作:
更改下拉菜單中的設(shè)置:OpticStudio 下拉菜單中的設(shè)置只能獲取預(yù)設(shè)值的列表。在 ZOS-API 中,這些列表以枚舉的形式公開(kāi)。例如,要將系統(tǒng)孔徑類型更改為入瞳直徑(Entrance Pupil Diameter),請(qǐng)選擇 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 代表著勾選這個(gè)選項(xiàng),F(xiàn)alse代表不勾選:TheSystemData.Aperture.AFocalImageSpace = true;
如下為一些可改變視場(chǎng)和波長(zhǎng)的實(shí)用選項(xiàng):
訪問(wèn)視場(chǎng):
sysField = TheSystem.SystemData.Fields;
訪問(wèn)波長(zhǎng):
sysWave= TheSystem.SystemData.Wavelengths;
添加新的視場(chǎng)
X=0,Y=5.0,視場(chǎng)權(quán)重為1.0:NewField_2 = sysField.AddField(0,5.0,1.0);
添加新的波長(zhǎng)0.6328mm,權(quán)重為1.0:
NewWave_2 = sysWave.AddWavelength(0.6328,1.0);
將視場(chǎng)1 的值改為X=1,Y=2.0,視場(chǎng)權(quán)重為0.5:
field1 = sysField.GetField(1); field1.X = 1.0; field1.Y = 2.0; field1.Weight = 0.5;
將波長(zhǎng)1改為0.55mm:TheSystemData.Wavelengths.GetWavelength(1).Wavelength = 0.55;
設(shè)置波長(zhǎng)1 為主波長(zhǎng):TheSystemData.Wavelengths.GetWavelength(1).MakePrimary();
將視場(chǎng)類型 (Field Type) 改為物高 (Object Height):sysField.SetFieldType(ZOSAPI.SystemData.FieldType.ObjectHeight);
將歸一化 (Normalization) 改為徑向(Radial):
sysField.Normalization= ZOSAPI.SystemData.FieldNormalizationType.Radial;
使用視場(chǎng)向?qū)?(Field Wizard) 從0到10添加3個(gè)等效的Y視場(chǎng):sysField.ApplyFieldWizard(ZOSAPI.SystemData.FieldPattern.EqualAreaY,3,10,0,0,1,true,false);
最后三個(gè)參數(shù) (1,true, false)表示:從第1行開(kāi)始,分別檢查覆蓋 (Overwrite) 是否選中和使用拾取 (Use pickups) 是否取消選中。
使用正交算法 (Quadrature) 從0.486mm到0.656mm范圍內(nèi)定義6個(gè)波長(zhǎng):TheSystemData.Wavelengths.GaussianQuadrature(0.486,0.656,ZOSAPI.SystemData.QuadratureSteps.S6);
使用預(yù)置 (Preset) 選項(xiàng)定義波長(zhǎng):TheSystemData.Wavelengths.SelectWavelengthPreset(ZOSAPI.SystemData.WavelengthPreset.FdC_Visible);
讀取視場(chǎng)的數(shù)目:
num_fields=TheSystem.SystemData.Fields.NumberOfFields;
分析定義
幫助文件中的定義為:the Analyses 包含訪問(wèn) OpticStudio 中分析功能的所有信息的權(quán)限。
TheAnalyses = ThePrimarySystem.Analyses;
如何使用 TheAnalyses
TheAnalyses 可以訪問(wèn)所有的分析選項(xiàng)。
如下為一些運(yùn)行分析選項(xiàng)卡的實(shí)用命令:
執(zhí)行一次分析:
TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM AnalysisType)
例如,執(zhí)行一次光線光扇圖分析:
TheRayFan = TheSystem.Analyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.RayFan);
一些分析選項(xiàng)可以用它們自身的功能打開(kāi):
TheRayFan = TheSystem.Analyses.New_RayFan();
檢查分析選項(xiàng)是否已有正在應(yīng)用的設(shè)置:
TheRayFan.HasAnalysisSpecificSettings;
獲取設(shè)置:
TheRayFan_Settings = TheRayFan.GetSettings();
更改已經(jīng)應(yīng)用的設(shè)置。例如,更改光線數(shù)目:
TheRayFan_Settings.NumberOfRays = 100;
改變波長(zhǎng):
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) 、評(píng)價(jià)函數(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一些最常見(jiàn)的功能:
添加新表面:
TheLDE.AddSurface();
在特定的表面序號(hào)前插入新表面:
TheLDE.InsertNewSurfaceAt(1);
刪除一個(gè)或多個(gè)指定序號(hào)的表面:
TheLDE.RemoveSurfacesAt(1,3);
將指定數(shù)量的表面從一個(gè)位置復(fù)制粘貼到另一個(gè)位置:TheLDE.CopySurfaces(1,3,3);
第一個(gè)參數(shù)是要復(fù)制的第一個(gè)表面,第二個(gè)參數(shù)是要復(fù)制的表面數(shù)目,最后一個(gè)參數(shù)是要粘貼到的表面序號(hào)。
訪問(wèn)特定的表面:
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);
訪問(wèn)編輯器工具欄的工具:
RunTool_ConvertLocalToGlobalCoordinates(int, int, int)
IOpticalSystemTools ThePrimarySystem.Tools 定義
在 幫助文件中的定義:每個(gè)光學(xué)系統(tǒng)提供對(duì) 系統(tǒng)工具 ( System Tools)的訪問(wèn)權(quán)限。在指定的光學(xué)系統(tǒng)中,用戶一次只能運(yùn)行一個(gè)工具。
TheSystem.Tools
如何使用Tools
所有工具之間的語(yǔ)句相似。若要運(yùn)行 工具 (Tool),請(qǐng)打開(kāi)工具,定義設(shè)置,然后運(yùn)行它。
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í)行一次局部?jī)?yōu)化:
LocalOpt = TheSystem.Tools.OpenLocalOptimization();
運(yùn)行一次批量光線追跡(Batch ray trace):
raytrace = TheSystem.Tools.OpenBatchRayTrace();
打開(kāi)公差分析 (Tolerancing):
tol = TheSystem.Tools.OpenTolerancing();
計(jì)算評(píng)價(jià)函數(shù) (Merit Function):MFcalculator=TheSystem.Tools.OpenMeritFunctionCalculator();
計(jì)算光斑半徑 (Spot Radius):
SpotCalculator= TheSystem.Tools.OpenRMSSpotRadiusCalculator();
在表面3 處插入鏡頭庫(kù)中的鏡頭:Lenscat=TheSystem.Tools.OpenLensCatalogs();
如下為 TheSystem.Tools 中非序列模式下可用的最常用的工具:
執(zhí)行光線追跡(RayTrace):
NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace();
從光線數(shù)據(jù)庫(kù)(RayDataBase) 中讀取數(shù)據(jù):
OpenRayDatabaseReader()。
下期我們將會(huì)為大家介紹《在 MATLAB 中使用 ZOS-API 批量處理光線追跡數(shù)據(jù)》