;***
;##############################################################################
;#Function  name   : ql_get_cut                                               #
;#LEVEL            :                                                          #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : get profile from curr image                              #
;#Creation date    : December 1993                                            #
;#Update date      : 10-03-94	E.PETIT		-90 case                      #
;#                 : 08-09-94	E.PETIT		optional average after cut    #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    : Called by Event Handler                                  #
;#                                                                            #
;#Arguments        : box_x : x coordinates of rectangular area                #
;#                 : box_y : y coordinates of rectangular area                #
;#                 : profile: output profile data                             #
;#                 : err   : 0 if ok                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_get_cut  , box_x , box_y , prf , err
  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON cutim_com
  COMMON const_com
  COMMON curr_data_i_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0
  Xri    = FINDGEN (cut_h)
  Yri    = FINDGEN (cut_h)

  Xmi    = FINDGEN (cut_l)
  Ymi    = FINDGEN (cut_l)

  ;============================================================================
  ;                       Processing 
  ;============================================================================
  
  WIDGET_CONTROL, /HOURGLASS 

  ; Ref coordinates
  ; ---------------
  IF (cut_a NE 0) THEN BEGIN
    ar     = TAN ( (PI/2.0) + (PI*cut_a/180.0) )
    br     = box_y(0) - ar*box_x(0)
    delta  = SIN (PI*cut_a/180.0)
  
    Xri    = box_x(0) + delta * Xri   
    Yri    = ar*Xri + br
  ENDIF ELSE BEGIN
    delta  = 1

    Xri(*) = box_x(0)  
    Yri    = box_y(0) - Yri
  ENDELSE

  ; Get lines
  ; ---------
  adi   = TAN (PI*cut_a/180.0)
  delta = COS (PI*cut_a/180.0)

  FOR j=0, cut_h-1 DO BEGIN
    Xmi    = FINDGEN (cut_l)
    Ymi    = FINDGEN (cut_l)

    IF ((cut_a NE 90.0) AND (cut_a NE -90.0)) THEN BEGIN
      bdi    = Yri(j) - Xri(j)*adi  
      Xmi    = Xri(j) + delta*Xmi   
      Ymi    = adi*Xmi + bdi   
    ENDIF  ELSE BEGIN
      IF (cut_a EQ 90.0) THEN BEGIN
        Xmi(*) = Xri(j)
        Ymi    = box_y(0)+Ymi
      ENDIF ELSE BEGIN
        Xmi(*) = Xri(j)
        Ymi    = box_y(0)-Ymi
      ENDELSE
    ENDELSE
    prf =  prf + FLOAT(curr_data_i( ROUND(Xmi), ROUND(Ymi)))
  ENDFOR
  IF (avg_flag EQ 1) THEN prf = prf/FLOAT(cut_h)	; Optinal average
END

