Viewing contents of file '../idllib/jhuapls1r/usr/ctint.pro'
;-------------------------------------------------------------
;+
; NAME:
;       CTINT
; PURPOSE:
;       Interpolate between two color table entries.
; CATEGORY:
; CALLING SEQUENCE:
;       ctint, r, g, b, i1, i2, [mode]
; INPUTS:
;       i1, i2 = start and end index for interpolation.  in
;       mode = interpolation mode (def=1).               in
;         Color interpolation mode
;       0 = Copy.  Copy color i1 to i1:i2 range.
;       1 = R,G,B.  Interp each color independently.
;       2 = H,S,V straight.  Through less sat. hues (grays).
;       3 = H,S,V curved. Through sat. in-between hues.
;       4 = Reverse.  Reverse colors in i1:i2 range.
;       5 = Ramp value from i1 down to 0 at i2.
; KEYWORD PARAMETERS:
; OUTPUTS:
;       r,g,b = color table, red, green, blue.           in out
; COMMON BLOCKS:
; NOTES:
;       Note: Modifies the color table.
; MODIFICATION HISTORY:
;       R. Sterner, 6 Sep, 1990
;       R. Sterner, 18 Oct, 1993 --- Added Copy and Reverse.
;       R. Sterner, 21 Oct, 1993 --- Added Ramp mode.
;
; Copyright (C) 1990, Johns Hopkins University/Applied Physics Laboratory
; This software may be used, copied, or redistributed as long as it is not
; sold and this copyright notice is reproduced on each copy made.  This
; routine is provided as is without any express or implied warranties
; whatsoever.  Other limitations apply as described in the file disclaimer.txt.
;-
;-------------------------------------------------------------
 
	pro ctint, r, g, b, i1, i2, mode, help=hlp
 
	if (n_params(0) lt 5) or keyword_set(hlp) then begin
	  print,' Interpolate between two color table entries.'
	  print,' ctint, r, g, b, i1, i2, [mode]'
	  print,'   r,g,b = color table, red, green, blue.           in out'
	  print,'   i1, i2 = start and end index for interpolation.  in'
	  print,'   mode = interpolation mode (def=1).               in'
	  print,'     Color interpolation mode'
	  print,'	0 = Copy.  Copy color i1 to i1:i2 range.'
	  print,'	1 = R,G,B.  Interp each color independently.'
	  print,'	2 = H,S,V straight.  Through less sat. hues (grays).'
	  print,'	3 = H,S,V curved. Through sat. in-between hues.'
	  print,'	4 = Reverse.  Reverse colors in i1:i2 range.'
	  print,'	5 = Ramp value from i1 down to 0 at i2.'
	  print,' Note: Modifies the color table.'
	  return
	endif
 
	if n_params(0) lt 6 then mode = 1
 
	;-----------  Interpolate  --------------
	lo = i1<i2
	hi = i1>i2
	n = hi - lo + 1
 
	;-------  Ramp mode  ------------
	if mode eq 5 then begin
	  rgb_to_hsv, r, g, b, hh, ss, vv
	  wt = maken(0., 1., n)
	  if i2 gt i1 then wt = reverse(wt)
	  vv(lo) = vv(lo:hi)*wt
	  hsv_to_rgb,hh,ss,vv,r,g,b
	endif
	;-------  Reverse  --------------------
	if mode eq 4 then begin
	  r(lo) = reverse(r(lo:hi))
	  g(lo) = reverse(g(lo:hi))
	  b(lo) = reverse(b(lo:hi))
	endif
	;-------  H,S,V curved mode  ----------
	if mode eq 3 then begin	
	  rgb_to_hsv, r, g, b, hh, ss, vv
	  t1 = maken(hh(lo),hh(hi),n)  & hh(lo) = t1
	  t2 = maken(ss(lo),ss(hi),n)  & ss(lo) = t2<1.
	  t3 = maken(vv(lo),vv(hi),n)  & vv(lo) = t3<1.
	  hsv_to_rgb,hh,ss,vv,r,g,b
	endif
	;-------  H,S,V straight  --------
	if mode eq 2 then begin
	  rgb_to_hsv, r, g, b, hh, ss, vv
	  polrec, ss(lo), hh(lo)/!radeg, xxlo, yylo
	  polrec, ss(hi), hh(hi)/!radeg, xxhi, yyhi
	  xx = maken(xxlo, xxhi, n)  & yy = maken(yylo, yyhi, n)
	  recpol, xx, yy, ssi, hhi  & hhi = hhi*!radeg
	  vvi = maken(vv(lo), vv(hi), n)
 	  ss(lo) = ssi<1.  & hh(lo) = hhi  & vv(lo) = vvi<1.
	  hsv_to_rgb,hh,ss,vv,r,g,b
	endif
	;-------  R,G,B mode  -----------
	if mode eq 1 then begin
	  t1 = maken(fix(r(lo)),fix(r(hi)),n)  & r(lo) = t1
	  t2 = maken(fix(g(lo)),fix(g(hi)),n)  & g(lo) = t2
	  t3 = maken(fix(b(lo)),fix(b(hi)),n)  & b(lo) = t3
	endif
	;-------  Copy  ------------------
	if mode eq 0 then begin
	  r(lo:hi) = r(i1)
	  g(lo:hi) = g(i1)
	  b(lo:hi) = b(i1)
	endif
 
	tvlct, r, g, b				; Load new color table.
 
	return
 
	end