    

 ## On this page

  

 

 # Example 06 - Matlab 

 Last update: 16.07.2025 

# <a class="anchor" id="ex06_s4"></a>Matlab

function [ r ] = MATLABStandalone_nsc_phase( args )

 

if ~exist('args', 'var')

 args = [];

end

 

% Initialize the OpticStudio connection

TheApplication = InitConnection();

if isempty(TheApplication)

 % failed to initialize a connection

 r = [];

else

 try

 r = BeginApplication(TheApplication, args);

 CleanupConnection(TheApplication);

 catch err

 CleanupConnection(TheApplication);

 rethrow(err);

 end

end

end

 

 

function [r] = BeginApplication(TheApplication, args)

 

import [ZOSAPI](namespace_z_o_s_a_p_i.xhtml).*;

 

 % creates a new API directory

 apiPath = System.String.Concat(TheApplication.SamplesDir, '\API\Matlab');

 if (exist(char(apiPath)) == 0) mkdir(char(apiPath)); end;

 

 %! [e06s01_m]

 % Create new non-sequential file

 TheSystem = TheApplication.CreateNewSystem([ZOSAPI](namespace_z_o_s_a_p_i.xhtml).SystemType.NonSequential);

 TheNCE = TheSystem.NCE;

 %! [e06s01_m]

 

 %! [e06s02_m]

 % inserts objects and changes type

 TheNCE.InsertNewObjectAt(2);

 o1 = TheNCE.GetObjectAt(1);

 o2 = TheNCE.GetObjectAt(2);

 o1.ChangeType(o1.GetObjectTypeSettings([ZOSAPI](namespace_z_o_s_a_p_i.xhtml).Editors.NCE.ObjectType.SourcePoint));

 o2.ChangeType(o2.GetObjectTypeSettings([ZOSAPI](namespace_z_o_s_a_p_i.xhtml).Editors.NCE.ObjectType.DetectorRectangle));

 %! [e06s02_m]

 

 %! [e06s03_m]

 % modify object's cell values in the NCE

 o1.ObjectData.NumberOfAnalysisRays = 1e6;

 o1.ObjectData.NumberOfLayoutRays = 10;

 o1.ObjectData.ConeAngle = 2.5;

 

 o2.ZPosition = 1;

 o2.ObjectData.XHalfWidth = 0.1;

 o2.ObjectData.YHalfWidth = 0.1;

 o2.ObjectData.NumberXPixels = 100;

 o2.ObjectData.NumberYPixels = 100;

 %! [e06s03_m]

 

 %! [e06s04_m]

 % Setup and run the ray trace

 NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace();

 NSCRayTrace.SplitNSCRays = false;

 NSCRayTrace.ScatterNSCRays = true;

 NSCRayTrace.UsePolarization = false;

 NSCRayTrace.IgnoreErrors = true;

 NSCRayTrace.SaveRays = false;

 NSCRayTrace.ClearDetectors(0);

 

 NSCRayTrace.RunAndWaitForCompletion();

 NSCRayTrace.Close();

 %! [e06s04_m]

 

 % sets up plot

 close all;

 figure('OuterPosition',[0, 250, 1200, 500])

 subplot(1, 2, 1);

 axis('square');

 colormap jet;

 det = 2;

 

 %! [e06s05_m]

 % extracts the irradiance data from detector

 irradiance = flipud(TheSystem.NCE.GetAllDetectorDataSafe(det, 1).double);

 imagesc(irradiance);

 %! [e06s05_m]

 

 % irradiance plot formatting

 colorbar;

 title('Incoherent Irradiance');

 set(gca, 'XTick', '');

 set(gca, 'YTick', '');

 

 subplot(1, 2, 2);

 

 %! [e06s06_m]

 % Calculates phase data from Er &amp; Ei

 real = TheSystem.NCE.GetAllCoherentDataSafe(det, [ZOSAPI](namespace_z_o_s_a_p_i.xhtml).Editors.NCE.DetectorDataType.Real).double;

 imag = TheSystem.NCE.GetAllCoherentDataSafe(det ,[ZOSAPI](namespace_z_o_s_a_p_i.xhtml).Editors.NCE.DetectorDataType.Imaginary).double;

 phase = flipud(atan2(imag , real) * 180 / pi);

 imagesc(phase)

 %! [e06s06_m]

 

 % phase plot formatting

 colorbar;

 title('Phase');

 set(gca, 'XTick', '');

 set(gca, 'YTick', '');

 

 TheSystem.SaveAs(System.String.Concat(TheApplication.SamplesDir, '\API\Matlab\e06_nsc_phase.zos'));

 

 

 r = [];

end

 

function app = InitConnection()

 

import System.Reflection.*;

 

% Find the installed version of OpticStudio.

zemaxData = winqueryreg('HKEY_CURRENT_USER', 'Software\Zemax', 'ZemaxRoot');

NetHelper = strcat(zemaxData, '\ZOS-API\Libraries\ZOSAPI_NetHelper.dll');

% Note -- uncomment the following line to use a custom NetHelper path

% NetHelper = 'C:\Users\Documents\Zemax\ZOS-API\Libraries\ZOSAPI_NetHelper.dll';

NET.addAssembly(NetHelper);

 

success = ZOSAPI_NetHelper.ZOSAPI_Initializer.Initialize();

% Note -- uncomment the following line to use a custom initialization path

% success = ZOSAPI_NetHelper.ZOSAPI_Initializer.Initialize('C:\Program Files\OpticStudio\');

if success == 1

 LogMessage(strcat('Found OpticStudio at: ', char(ZOSAPI_NetHelper.ZOSAPI_Initializer.GetZemaxDirectory())));

else

 app = [];

 return;

end

 

% Now load the ZOS-API assemblies

NET.addAssembly(AssemblyName('ZOSAPI_Interfaces'));

NET.addAssembly(AssemblyName('[ZOSAPI](namespace_z_o_s_a_p_i.xhtml)'));

 

% Create the initial connection class

TheConnection = [ZOSAPI](namespace_z_o_s_a_p_i.xhtml).ZOSAPI_Connection();

 

% Attempt to create a Standalone connection

 

% NOTE - if this fails with a message like 'Unable to load one or more of

% the requested types', it is usually caused by try to connect to a 32-bit

% version of OpticStudio from a 64-bit version of MATLAB (or vice-versa).

% This is an issue with how MATLAB interfaces with .NET, and the only

% current workaround is to use 32- or 64-bit versions of both applications.

app = TheConnection.CreateNewApplication();

if isempty(app)

 HandleError('An unknown connection error occurred!');

end

if ~app.IsValidLicenseForAPI

 HandleError('License check failed!');

 app = [];

end

 

end

 

function LogMessage(msg)

disp(msg);

end

 

function HandleError(error)

ME = MXException(error);

throw(ME);

end

 

function CleanupConnection(TheApplication)

% Note - this will close down the connection.

 

% If you want to keep the application open, you should skip this step

% and store the instance somewhere instead.

TheApplication.CloseApplication();

end

 

 

[ZOSAPI](namespace_z_o_s_a_p_i.xhtml)

The ZOSAPI namespace contains classes for initially connecting to zemax. See also ZOSAPI_Connection,...

**Definition:** IAS_FieldCurvatureAndDistortion.cs:5