#include "coxplot.h"
/*****************************************************************************
This software is copyrighted and owned by the Medical College of Wisconsin.
See the file README.Copyright for details.
******************************************************************************/
/*------------------------------------------------------------------------
Routine to render a memplot into a PostScript file.
(Also see the file ps_plot.c.)
--------------------------------------------------------------------------*/
#ifdef PSIZE
#undef PSIZE
#endif
#define PSIZE 4096
void memplot_to_postscript( char * fname , MEM_plotdata * mp )
{
int ii , nline ;
float old_thick , old_color , new_color , new_thick ;
int x1,y1 , x2,y2 ;
int skip ;
/*-- sanity checks --*/
if( fname == NULL || fname[0] == '\0' || mp == NULL ) return ;
nline = MEMPLOT_NLINE(mp) ; if( nline < 1 ) return ;
/*-- open the output file --*/
if( ! ps_openpl(fname) ) return ;
ps_space( 0,0,PSIZE,PSIZE ) ;
old_color = -1.0 ;
old_thick = -THCODE_INVALID ;
/*-- loop over lines, scale and plot --*/
for( ii=0 ; ii < nline ; ii++ ){
skip = 0 ;
/* check if need to change color or thickness of line */
new_color = MEMPLOT_COL(mp,ii) ;
if( new_color != old_color ){
float rr=COL_TO_RRR(new_color) ,
gg=COL_TO_GGG(new_color) , bb=COL_TO_BBB(new_color) ;
ps_setrgb( rr , gg , bb ) ;
old_color = new_color ;
}
new_thick = MEMPLOT_TH(mp,ii) ;
if( new_thick < 0.0 ){ /* 21 Mar 2001: negative thickness codes */
int thc = (int)(-new_thick) ;
switch( thc ){
case THCODE_RECT:{ /* rectangle */
x1 = 0.499 + PSIZE * (1.0 - MEMPLOT_Y1(mp,ii)) ;
x2 = 0.499 + PSIZE * (1.0 - MEMPLOT_Y2(mp,ii)) ;
y1 = 0.499 + PSIZE * MEMPLOT_X1(mp,ii) ;
y2 = 0.499 + PSIZE * MEMPLOT_X2(mp,ii) ;
ps_rect( x1,y1 , x2,y2 ) ;
skip = 1 ;
}
break ;
case THCODE_CIRC:{ /* circle */
x1 = 0.499 + PSIZE * (1.0 - MEMPLOT_Y1(mp,ii)) ;
y1 = 0.499 + PSIZE * MEMPLOT_X1(mp,ii) ;
x2 = 0.499 + PSIZE * MEMPLOT_X2(mp,ii) ;
ps_circle( x1,y1 , x2 ) ;
skip = 1 ;
}
break ;
}
} else if( new_thick != old_thick ){ /* old code to change line thickness */
float th = PSIZE * new_thick ;
if( th <= 0.0 ) th = 1.0 ;
ps_setwidth( th ) ;
old_thick = new_thick ;
}
if( !skip ){
/* scale coords (also see zzphph.f) */
x1 = 0.499 + PSIZE * (1.0 - MEMPLOT_Y1(mp,ii)) ;
x2 = 0.499 + PSIZE * (1.0 - MEMPLOT_Y2(mp,ii)) ;
y1 = 0.499 + PSIZE * MEMPLOT_X1(mp,ii) ;
y2 = 0.499 + PSIZE * MEMPLOT_X2(mp,ii) ;
ps_line( x1,y1 , x2,y2 ) ;
}
}
/*-- done --*/
ps_closepl() ;
return ;
}
syntax highlighted by Code2HTML, v. 0.9.1