;+ ; NAME: ; qImage_cw_Where ; PURPOSE: ; Processes mouse press and release messages from the draw widget ; for the right mouse button only. ; CATEGORY: ; sat/idl/widget/qimage_cw ; CALLING SEQUENCE: FUNCTION qImage_cw_Where, state, event ; INPUTS: ; state scalar, structure ; contains IDs for all pView widgets ; event scalar, structure ; event structure passed to pView_Event by XManager ; OUTPUTS: ; INCLUDE: @compile_opt.pro ; On error, return to caller @smei_roi_mask.pro ; CALLS: ; ArrayLocation, smei_property, MagnifyArray, qImage, IsType ; qImage_cw_Transform, smei_sky_field ; RESTRICTIONS: ; What happens if image offset is non-zero? ; PROCEDURE: ; STATE INFO USED: ; STATE INFO MODIFIED: ; MODIFICATION HISTORY: ; MAY-2003, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- set_image_value = 0 IF event.type EQ 0 THEN BEGIN ; Process only button press time = qimage_cw_property(state,/image_time) IF time[0] EQ '' THEN $ ; No time available RETURN, set_image_value is_sky = (where(time[1] EQ smei_sky_field(/map_types)))[0] NE -1 is_frm = (where(time[1] EQ ['m0','m1','m2'] ))[0] NE -1 CASE 1 OF is_frm: BEGIN widget_control, state.wid_image, get_uvalue=image, /no_copy p = image image_size = size(image, /dim) widget_control, state.wid_image, set_uvalue=image, /no_copy tmp = qImage_cw_Transform(state, fromscreen=[event.x,event.y],/toimage) tmp = round(tmp) tmp = (ArrayLocation(tmp,dim=state.img_offset+image_size, /onedim))[0] IF (where(*roi_col[0] EQ tmp))[0] NE -1 THEN BEGIN d = replicate(990,1,(size(p,/dim))[1]) p = [smei_property(p, /pedestal, /left ), d, $ smei_property(p, /dark , /left ), d, $ smei_property(p, /dark , /right), d, $ smei_property(p, /pedestal, /right) ] qimage, image=MagnifyArray(transpose(p), 4), group=event.handler ENDIF ELSE IF (where(*roi_sqr[0] EQ tmp))[0] NE -1 THEN BEGIN d = smei_property(p, /square, /left) d = replicate(990,1,(size(d,/dim))[1]) p = [smei_property(p, /square, /left),d, smei_property(p, /square, /right)] qimage, image=MagnifyArray(p, 4), group=event.handler ENDIF ELSE IF (where(*roi_pix[0] EQ tmp))[0] NE -1 THEN BEGIN p = smei_property(p, /center) qimage, image=MagnifyArray(p, 50), group=event.handler ENDIF ELSE BEGIN name = qimage_cw_property(state,/image_name) ccd = qImage_cw_Transform(state, fromscreen=[event.x,event.y],/toimage) cam = cvsmei(from_ccd=ccd, mode=time[1], /to_camera, camera=time[2]) qq = qimage_cw_property(state,/quaternion) sky = cvsmei(from_cam=cam, camera=time[2], /to_equatorial, /degrees, quaternion=qq) smei_frm_where, name, /exact, silent=2, show=2, points_radec=sky, /degrees ENDELSE END is_sky: BEGIN IF time[3] NE '' THEN BEGIN ; Map mode: hires,lores pix = qImage_cw_Transform(state, fromscreen=[event.x,event.y],/toimage) sky = cvsmei(from_map=pix,mode=time[3],/to_equatorial,/degrees,/silent,time=TimeSet(time[0])) print, ' X Y X(sky) Y(sky) RA(deg)Dec(deg) RA Dec' print, event.x,event.y,pix,sky,AngleUnits(from_degrees=sky,/to_almanac,/string), $ format='(2I5,2F9.3,2F8.3,2(1X,A))' print name = qimage_cw_property(state,/image_name,/no_extension) f = smei_sky_atlocation(name,from_map=pix,from_mode=time[3],/show,time=time) ; 'time' is returned by smei_sky_at_location IF IsTime(time) THEN BEGIN qq = smei_sgp4_quat(time) print FOR i=1,3 DO BEGIN cam = cvsmei(from_equatorial=sky,/degrees,/to_camera,camera=i,quaternion=qq,/silent) ccd = cvsmei(from_cam=cam,camera=i,/to_ccd,mode=0,/silent) IF finite(ccd[0]) THEN $ print, TimeGet(time,/ydoy),' cam=',i, $ ' vector=[' ,cam[0],',',cam[1],',',cam[2],']', $ ' ccd(m0)=[',ccd[0],',',ccd[1],']' , $ format='(A,A,I1,3(A,F6.3),A,2(A,F8.3),A)' ENDFOR ENDIF ENDIF END ELSE: ENDCASE ENDIF RETURN, set_image_value & END