pro spd_ui_draw_object::getZRange,dataptrs,zaxisSettings,range=range,scaling=scaling,fail=fail,fixed=fixed,forceauto=forceauto
compile_opt idl2,hidden
fail = 1
zAxissettings->getProperty,fixed=fixed,maxRange=maxRange,minRange=minRange,scaling=scaling
if keyword_set(forceauto) then begin
fixed = 0
endif
if fixed then begin
if maxRange lt 0 && scaling ne 0 then begin
self.statusbar->update,'Error: Negative fixed range with logarithmic Z axis, autoscaling instead.'
self.historywin->update,'Error: Negative fixed range with logarithmic Z axis, autoscaling instead.'
fixed = 0
endif else if minRange lt 0 && scaling ne 0 then begin
self.statusbar->update,'Error: Negative fixed range with logarithmic Z axis, autoscaling instead.'
self.historywin->update,'Error: Negative fixed range with logarithmic Z axis, autoscaling instead.'
fixed = 0
endif else if minRange gt maxRange then begin
self.statusbar->update,'Error: min fixed z-range greater than max fixed z-range, autoscaling instead.'
self.historywin->update,'Error: min fixed z-range greater than max fixed z-range, autoscaling instead.'
fixed = 0
endif
endif
if fixed then begin
if scaling eq 1 then begin
range = alog10([minRange,maxRange])
endif else if scaling eq 2 then begin
range = alog([minRange,maxRange])
endif else begin
range = [minRange,maxRange]
endelse
if scaling ne 0 && (minRange eq 0 || maxRange eq 0) then begin
self.statusbar->update,'Warning: Adjusting Fixed 0 value on logarithmic Z-axis to data minimum.'
self.historywin->update,'Warning: Adjusting Fixed 0 value on logarithmic Z-axis to data minimum.'
self->getZrange,dataptrs,zAxisSettings,range=autorange,/forceauto
if minRange eq 0 then begin
range[0] = autorange[0]
endif
if maxRange eq 0 then begin
range[1] = autorange[1]
endif
endif
endif else begin
minRange = !VALUES.D_NAN
maxRange = !VALUES.D_NAN
for i = 0, n_elements(dataptrs)-1 do begin
if ptr_valid(dataptrs[i]) then begin
if scaling eq 1 || scaling eq 2 then begin
idx = where(*dataptrs[i] gt 0,c1)
idx = where(*dataptrs[i] eq 0,c2)
if c1 eq 0 && c2 eq 0 then begin
endif else if c1 eq 0 then begin
if ~finite(minRange) && ~finite(maxRange) then begin
minRange = -!VALUES.D_INFINITY
maxRange = -!VALUES.D_INFINITY
endif
endif else if scaling eq 1 then begin
minRange = min([min(alog10(*dataptrs[i]),/nan),minRange],/nan)
maxRange = max([max(alog10(*dataptrs[i]),/nan),maxRange],/nan)
endif else begin
minRange = min([min(alog(*dataptrs[i]),/nan),minRange],/nan)
maxRange = max([max(alog(*dataptrs[i]),/nan),maxRange],/nan)
endelse
endif else begin
minRange = min([min(*dataptrs[i],/nan),minRange],/nan)
maxRange = max([max(*dataptrs[i],/nan),maxRange],/nan)
endelse
endif
endfor
range=[minRange,maxRange]
endelse
range = double(range)
fail = 0
return
end