美文网首页
Matlab 与 Zemax混合编程

Matlab 与 Zemax混合编程

作者: Kerwin_H | 来源:发表于2021-10-08 15:24 被阅读0次
    function [ r ] = MATLABStandaloneApplication1( args )
    
    if ~exist('args', 'var')
        disp('no args')
        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.*;
    
    TheSystem = TheApplication.PrimarySystem;
    
    % Add your custom code here...
    disp("test...")
    
    % Single Ray Trace
    TheAnalyses = TheSystem.Analyses;
    newWin = TheAnalyses.New_Analysis(ZOSAPI.Analysis.AnalysisIDM.RayTrace);
    newWin_Settings = newWin.GetSettings();
    newWin_Settings.Hx = 0;
    newWin_Settings.Hy = 0.56;
    newWin_Settings.Px = 0;
    newWin_Settings.Py = 0;
    newWin_Settings.Wavelength.SetWavelengthNumber(2);
    newWin_Settings.Field.UseAllFields();
    newWin_Settings.Type = ZOSAPI.Analysis.Settings.Aberrations.RayTraceType.DirectionCosines;
    newWin.ApplyAndWaitForCompletion();
    % Get and Save the results
    newWin_Results = newWin.GetResults();
    newWin_Results.GetTextFile('c:\temp\output_file.txt');
    r=[0,0];
    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\pc\Documents\Zemax\ZOS-API\Libraries\ZOSAPI_NetHelper.dll';
    % This is the path to OpticStudio
    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 = MException('zosapi:HandleError', 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
    

    相关文章

      网友评论

          本文标题:Matlab 与 Zemax混合编程

          本文链接:https://www.haomeiwen.com/subject/midxoltx.html