Solved

Bulk Assignment of Pick-ups

  • 2 March 2021
  • 3 replies
  • 277 views

  • Anonymous
  • 0 replies

Hi,


 


I have a system consisting of 50 identical elements. I would now like to make elements 2-49 picj-up tilts, displacements and surface errors based on element 1. Any way I can do this without going in and setting each surface individually? 50 elements x 6 parametars = 300 entries.


I realize i could start again and paste surfaces - just wondering if there was a way to command the pick-up state without rebuilding the entire assembly.

icon

Best answer by David.Nguyen 3 March 2021, 10:52

View original

3 replies

Userlevel 7
Badge +3

Hi Dave,


So you have the one element and you are multipassing it 50 times yes? See How to tolerance for tilts and decenters of a double pass system for details on how to do this.


If you want to tolerance surface form error, decide first if you'll use TIRR or TEZI. If you are using TIRR, make the surfaces Irregular surfaces and put pickups on the irregularity of the second pass to lock them to the first. If TEZI, make the surfaces Zernikes, and then put the pickups on the second pass.


I'd suggest you set up a single double-pass system as described, and test it. Then write a macro to create the subsequent 24 double passes. Test it to make sure that the errors accumulate correctly: try building some monte-carlo files to be sure it's working right.


- Mark 

Userlevel 7
Badge +2

Hi David,


Whenever there's a task that is simple, and needs to be repeated, I think about ZPL Macros. ZPL Macros are usually good at automating simple adjustment to the system.


Here is an example if you'd like to apply a Pick-Up Solve to all Coordinate Breaks within a range:



# This example is to replicate pick-up solve on Tilt About X in coordinate break
# Reference surface number
reference_surface = 1
# Pick-up parameters
scale_factor = 1
offset = 0
column = 0 # Current column
# Range for pick-ups replication
start_surface = 2
end_surface = 10
# Loop over the range
FOR surface, start_surface, end_surface, 1
    # Test if surface is coordinate break
    dummy = SPRO(surface, 0)
    surface_type$ = $BUFFER()
    
    IF(surface_type$ $== 'COORDBRK')
        # Apply pick-up to coordinate breaks only
        SOLVETYPE surface, PP_3, reference_surface, scale_factor, offset, column
    ENDIF
NEXT
# Update editors
UPDATE EDITORS

Try using it on the dummy file I attach to this post. To install the ZPL Macro, copy the file MultiplePickups.ZPL to your \Documents\Zemax\Macros folder. Only Coordinate Break 1 has a Tilt About X of 5 degrees. The macro will identify coordinate breaks between surface 2-10, and apply a pick-up solve to surface 1 on each of them.


Look up the SOLVETYPE keyword in the Help File, the code PP_3 stands for Parameter 3 (Tilt About 😵.


Would anything like that work for you?


Take care,


David


 

Userlevel 4
Badge +2

We get this question quite often on support, and there is a keyboard shortcut to copy/paste pickups.


CTRL+ALT+C 


CTRL+ALT+V


I made a little video demo.

Reply