Filter löschen
Filter löschen

I am new to use MATLAB ZOS-API and struggling to execute this file.

40 Ansichten (letzte 30 Tage)
Navaneeth
Navaneeth am 28 Mai 2024
Bearbeitet: Navaneeth am 28 Mai 2024
I am trying to carry non-sequential raytracing on a system of mine, I tried using a predefined script that works very well on an existing system but when I replace this with my system I am facing some errors. I am not able to resolve them and don't know why this is happening.
Here is my code and error,
function [ r ] = MATLABStandalone_NSC_ray_trace( 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.*;
% creates a new API directory
apiPath = System.String.Concat(TheApplication.SamplesDir, '\API\Matlab');
if (exist(char(apiPath)) == 0) mkdir(char(apiPath)); end;
% Set up primary optical system
TheSystem = TheApplication.PrimarySystem;
sampleDir = TheApplication.SamplesDir;
%! [e02s01_m]
% Open file
testFile = System.String.Concat(sampleDir, '"D:\Practice\Zemax Practice\Beam_expander-NONSEQ.zos"');
TheSystem.LoadFile(testFile, false);
%! [e02s01_m]
%! [e02s02_m]
% Create ray trace
NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace();
NSCRayTrace.SplitNSCRays = false;
NSCRayTrace.ScatterNSCRays = false;
NSCRayTrace.UsePolarization = false;
NSCRayTrace.IgnoreErrors = true;
NSCRayTrace.SaveRays = false;
%NSCRayTrace.ClearDetectors(0);
% Run ray trace
NSCRayTrace.RunAndWaitForCompletion();
NSCRayTrace.Close();
%! [e02s02_m]
% Non-sequential component editor
TheNCE = TheSystem.NCE;
%! [e02s03_m]
% Get detector data
data = NET.createArray('System.Double', TheNCE.GetDetectorSize(6));
TheNCE.GetAllDetectorData(6, 1, TheNCE.GetDetectorSize(6), data);
[~, rows, cols] = TheNCE.GetDetectorDimensions(6);
% rotates and flips image to reflect ZOS orientation
detectorData = flipud(rot90(reshape(data.double, rows, cols)));
%! [e02s03_m]
% Plot
close all;
figure('position', [50, 150, 700, 600])
surf(detectorData);
axis([1 100 1 100]);
shading flat;
xlabel('Column #');
ylabel('Row #');
title('Incoherent Illuminance [lm/cm^2]');
colorbar;
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'));
% Create the initial connection class
TheConnection = ZOSAPI.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
This is the error I am getting,
Beam_expander_NSC_raytrace
Found OpticStudio at:c:\program files\ansys zemax opticstudio 2023 r2.00
Unrecognized field name "RunAndWaitForCompletion".
Error in Beam_expander_NSC_raytrace>BeginApplication (line 55)
NSCRayTrace.RunAndWaitForCompletion();
Error in Beam_expander_NSC_raytrace (line 16)
r = BeginApplication(TheApplication, args);
I know lot of people doesn't have access to Zemax (If you have zemax I am attaching the .zos file), and any help in any regards is much appreciated.
Thank you and regards,
Navaneeth

Antworten (0)

Produkte


Version

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by