PRO SETPLOT, DEVICE, COPY=COPY, INTERPOLATE=INTERPOLATE ; ON_ERROR,1 COMMON PLOTFILE,NAMES,SAVE ; ; Check the number of parameters. ; IF N_PARAMS(0) EQ 0 THEN BEGIN PRINT,'*** SETPLOT must be called with one parameter:' PRINT,' DEVICE' RETURN ENDIF ; ; Disable any SETSCALE settings. ; SETSCALE ; ; Define the structure. ; STORE_INTO_SV, SV ; ; Check to see if the common block variables have been initialized. ; IF N_ELEMENTS(NAMES) EQ 0 THEN ADD_DEVICE,!D.NAME,SV ; ; Get the number of the current plot device. ; I_DEVICE = WHERE(NAMES EQ !D.NAME, N_FOUND) IF N_FOUND EQ 0 THEN BEGIN ADD_DEVICE,!D.NAME,SV I_DEVICE = WHERE(NAMES EQ !D.NAME) ENDIF I_DEVICE = I_DEVICE(0) ; ; If the device is being changed, then store the current system variables. ; IF STRUPCASE(DEVICE) NE !D.NAME THEN BEGIN SAVE(I_DEVICE) = SV ; ; Get the current maximum number of colors. ; N_COLORS = !D.TABLE_SIZE ; ; Change the plotting device. ; SET_PLOT, DEVICE, COPY=KEYWORD_SET(COPY), $ INTERPOLATE=KEYWORD_SET(INTERPOLATE) ; ; If copy was set, then set the top color to be equal to the maximum number of ; colors. ; IF KEYWORD_SET(COPY) AND NOT KEYWORD_SET(INTERPOLATE) $ THEN BEGIN TOP = N_COLORS - 1 SETFLAG,TOP=TOP IF !P.COLOR GT TOP THEN !P.COLOR = TOP ENDIF ; ; Get the number of the new plotting device. ; I_DEVICE = WHERE(NAMES EQ !D.NAME,N_FOUND) IF N_FOUND EQ 0 THEN BEGIN STORE_INTO_SV, SV ADD_DEVICE,!D.NAME,SV I_DEVICE = WHERE(NAMES EQ !D.NAME) ENDIF I_DEVICE = I_DEVICE(0) ENDIF ; ; Restore the system variables from the saved arrays. This is done even if ; the plotting device is not changed. By using SETPLOT on the device one is ; already set to, one can reinitialize the system variables. ; SV = SAVE(I_DEVICE) !P.CHARSIZE = SV.CHARSIZE !P.FONT = SV.FONT !P.COLOR = SV.COLOR !P.BACKGROUND = SV.BACKGROUND !P.REGION = SV.REGION !P.CLIP = SV.CLIP !P.POSITION = SV.POSITION !P.THICK = SV.THICK !P.CHARTHICK = SV.CHARTHICK !P.NOERASE = SV.NOERASE !X.TYPE = SV.XTYPE !X.CRANGE = SV.XCRANGE !X.S = SV.XS !X.MARGIN = SV.XMARGIN !X.WINDOW = SV.XWINDOW !X.REGION = SV.XREGION !X.THICK = SV.XTHICK !Y.TYPE = SV.YTYPE !Y.CRANGE = SV.YCRANGE !Y.S = SV.YS !Y.MARGIN = SV.YMARGIN !Y.WINDOW = SV.YWINDOW !Y.REGION = SV.YREGION !Y.THICK = SV.YTHICK !Z.TYPE = SV.ZTYPE !Z.CRANGE = SV.ZCRANGE !Z.S = SV.ZS !Z.MARGIN = SV.ZMARGIN !Z.WINDOW = SV.ZWINDOW !Z.REGION = SV.ZREGION !Z.THICK = SV.ZTHICK !ASPECT = SV.ASPECT !BCOLOR = SV.BCOLOR ; RETURN END