Skip to main content

[ZOS-API] Can I run Standalone and Interactive Extension at the same time?

  • April 7, 2020
  • 1 reply
  • 231 views

Michael Cheng
Zemax Staff
Forum|alt.badge.img+2
Are you having any problem with trying to run two different modes in a ZOS-API code?
Here is some tricks for you!!

First, if you exactly need to run two mode in a code, remember that you can only have one "IZOSAPI_Application" at a time. You will need to close the previous application in one mode in order to open it.  In below, we provided a sample code.
 
import os
from win32com.client.gencache import EnsureDispatch
from win32com.client import gencache
if __name__ == "__main__":
    # Create Connection
    gencache.EnsureModule('{EA433010-2BAC-43C4-857C-7AEAC4A8CCE0}', 0, 1, 0)
    gencache.EnsureModule('{F66684D7-AAFE-4A62-9156-FF7A7853F764}', 0, 1, 0)
    TheConnection = EnsureDispatch("ZOSAPI.ZOSAPI_Connection")
    if TheConnection is None:
        raise PythonStandaloneApplication.ConnectionException("Unable to intialize COM connection to ZOSAPI")
    # Test for Extension
    TheExtApplication = TheConnection.ConnectAsExtension(0)
    if TheExtApplication is None:
        raise Exception("Unable to acquire TheExtApplication")
    if not TheExtApplication.IsValidLicenseForAPI:
        raise Exception("License is not valid for ZOSAPI use")
    TheExtSystem = TheExtApplication.PrimarySystem
    if TheExtSystem is None:
        raise Exception("Unable to acquire _TheIESystem")
    
    # Do something in Interactive Extension
    
    TheExtApplication.CloseApplication()
    # Test for Standalone
    TheStandApplication = TheConnection.CreateNewApplication()
    if TheStandApplication is None:
        raise PythonStandaloneApplication.InitializationException("Unable to acquire TheStandApplication")
    if TheStandApplication.IsValidLicenseForAPI == False:
        raise PythonStandaloneApplication.LicenseException("License is not valid for ZOSAPI use")
    TheStandSystem = TheStandApplication.PrimarySystem
    if TheStandSystem is None:
        raise PythonStandaloneApplication.SystemNotPresentException("Unable to acquire _TheSASystem")
    # Do something in Stand Alone


On the other hand, there is actually a potentially better solution depending on your purpose. That is, in ZOS-API, you are allowed to have multiple IOpticalSystem simultaneously. Just check the following methods!!

LoadNewSystem()
CreateNewSystem()
at IZOSAPI_Application

CopySystem()
at IOpticalSystem

Hope this is what you are looking for!
Thank you for reading!
Did this topic help you find an answer to your question?

1 reply

Forum|alt.badge.img+2
Thank you Michael!

Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings