@@ -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 } unique ids between { min } " f"and { max } in { trials } 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