@@ -137,3 +137,39 @@ def generate_unique_ids(min: int, max: int, n: int, trials: int = 20) -> np.arra
137137    if  len (np .unique (ids )) !=  len (ids ):
138138        raise  ValueError (f"Can not generate { n } { min }   f"and { max } { trials }  )
139139    return  ids 
140+ 
141+ 
142+ def  get_auto_lims (probe , margin = 40 ):
143+     positions  =  probe .contact_positions 
144+     planar_contour  =  probe .probe_planar_contour 
145+ 
146+     xlims  =  np .min (positions [:, 0 ]), np .max (positions [:, 0 ])
147+     ylims  =  np .min (positions [:, 1 ]), np .max (positions [:, 1 ])
148+     zlims  =  None 
149+ 
150+     if  probe .ndim  ==  3 :
151+         zlims  =  np .min (positions [:, 2 ]), np .max (positions [:, 2 ])
152+ 
153+     if  planar_contour  is  not None :
154+         xlims2  =  np .min (planar_contour [:, 0 ]), np .max (planar_contour [:, 0 ])
155+         xlims  =  min (xlims [0 ], xlims2 [0 ]), max (xlims [1 ], xlims2 [1 ])
156+ 
157+         ylims2  =  np .min (planar_contour [:, 1 ]), np .max (planar_contour [:, 1 ])
158+         ylims  =  min (ylims [0 ], ylims2 [0 ]), max (ylims [1 ], ylims2 [1 ])
159+ 
160+         if  probe .ndim  ==  3 :
161+             zlims2  =  np .min (planar_contour [:, 2 ]), np .max (planar_contour [:, 2 ])
162+             zlims  =  min (zlims [0 ], zlims2 [0 ]), max (zlims [1 ], zlims2 [1 ])
163+ 
164+     xlims  =  xlims [0 ] -  margin , xlims [1 ] +  margin 
165+     ylims  =  ylims [0 ] -  margin , ylims [1 ] +  margin 
166+ 
167+     if  probe .ndim  ==  3 :
168+         zlims  =  zlims [0 ] -  margin , zlims [1 ] +  margin 
169+ 
170+         # to keep equal aspect in 3d 
171+         # all axes have the same limits 
172+         lims  =  min (xlims [0 ], ylims [0 ], zlims [0 ]), max (xlims [1 ], ylims [1 ], zlims [1 ])
173+         xlims , ylims , zlims  =  lims , lims , lims 
174+ 
175+     return  xlims , ylims , zlims 
0 commit comments