FUNCTION qImage_cw_MinMax, state, fnc_val, nostate=nostate, to_byte=to_byte ;+ ; NAME: ; qImage_cw_MinMax ; PURPOSE: ; Scale an array of function values to a given range ; CATEGORY: ; Compound widget qImage_cw ; CALLING SEQUENCE: ; Result = qImage_cw_MinMax(state, fnc_val) ; INPUTS: ; state array[1]; type: structure ; qImage_cw state structure ; fnc_val array; type: any ; OUTPUTS: ; Results array; type; same as fnc_val ; function values scaled to given range ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; InitVar ; SIDE EFFECT: ; If 'FixZ' is on but the values of zmin and zmax are the same then 'FixZ' is assumed off. ; PROCEDURE: ; If the 'FixZ' option is off then the minimum and maximum used are the minimum and ; maximum of the fnc_val array. If 'FixZ' is on the the values from the qTool widget ; are used. ; The returned array is ; (fnc_val < zmax) > zmin ; or (if log scale is used, as indicated by the state.wid_tool widget) ; (alog10((fnc_val-zmin+1) > 1)) < alog10(zmax-zmin+1) ; STATE INFO USED: ; widget_control, state.wid_tool, get_uvalue=tool_state, /no_copy ; STATE INFO MODIFIED: ; (none) ; MODIFICATION HISTORY: ; FEB-2000, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- InitVar, nostate, /key InitVar, to_byte, /key CASE nostate OF 0: BEGIN widget_control, state.wid_tool, get_uvalue=tool_state, /no_copy set = tool_state.send.fixz zlog = tool_state.send.zlog zmin = tool_state.send.zmin zmax = tool_state.send.zmax widget_control, state.wid_tool, set_uvalue=tool_state, /no_copy CASE set OF 0: zmin = min(fnc_val, max=zmax, /nan) 1: IF zmax LE zmin THEN zmin = min(fnc_val, max=zmax, /nan) ENDCASE END 1: BEGIN set = round(state[0]) CASE set OF 0: zmin = min(fnc_val, max=zmax, /nan) 1: BEGIN zmin = state[2] zmax = state[3] IF zmax LE zmin THEN zmin = min(fnc_val, max=zmax, /nan) END ENDCASE zlog = round(state[1]) END ENDCASE IF IsType(fnc_val, /generic_float) THEN BEGIN tmp = where(1-finite(fnc_val)) IF tmp[0] NE -1 THEN fnc_val[tmp] = 0 ENDIF CASE zlog OF 0: BEGIN fnc_val = (fnc_val < zmax) > zmin IF to_byte THEN fnc_val = bytscl(fnc_val, min=zmin, max=zmax) END 1: BEGIN fnc_val = (alog10((fnc_val-zmin+1) > 1)) < alog10(zmax-zmin+1) IF to_byte THEN fnc_val = bytscl(fnc_val, min=0, max=alog10(zmax-zmin+1)) END ENDCASE RETURN, fnc_val & END