Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mri_coxplot.c File Reference

#include "mrilib.h"
#include "coxplot.h"

Go to the source code of this file.


Functions

void set_memplot_RGB_box (int xbot, int ybot, int xtop, int ytop)
void memplot_to_RGB_sef (MRI_IMAGE *im, MEM_plotdata *mp, int start, int end, int freee)

Variables

int box_xbot = 0
int box_xtop = 0
int box_ybot = 0
int box_ytop = 0

Function Documentation

void memplot_to_RGB_sef MRI_IMAGE   im,
MEM_plotdata   mp,
int    start,
int    end,
int    freee
 

Actually do the rendering of a memplot into an RGB image.

  • Plotting will start with line start and go to end-1.
  • If end <= start, will do from start to the last one in the plot.
  • To do all lines, set start=end=0.
  • "freee" controls whether the aspect ratio will be free to vary (!= 0), or will be fixed (==0).
  • 18 Sep 2001: adapted from X11 routines in coxplot/plot_x11.c
  • 23 Mar 2002: actually tested for the first time ----------------------------------------------------------------------------

Definition at line 41 of file mri_coxplot.c.

References MEM_plotdata::aspect, box_xbot, box_xtop, box_ybot, box_ytop, COL_TO_BBB, COL_TO_GGG, COL_TO_RRR, ENTRY, MRI_IMAGE::kind, MEMPLOT_COL, MEMPLOT_NLINE, MEMPLOT_TH, MEMPLOT_X1, MEMPLOT_X2, MEMPLOT_Y1, MEMPLOT_Y2, mp, mri_draw_opacity(), mri_drawfilledrectangle(), mri_drawline(), MRI_IMAGE::nx, MRI_IMAGE::ny, set_memplot_RGB_box(), skip, x2, y1, and ZO_TO_TFS.

Referenced by ISQ_save_jpeg(), ISQ_saver_CB(), and PLOT_matrix_gray().

00043 {
00044    byte rrr=0,ggg=0,bbb=0 ;
00045    int ii , nline , same ;
00046    float old_thick , old_color , new_color , new_thick ;
00047    float scal,xscal,yscal , xoff,yoff ;
00048    int x1,y1 , x2,y2 ;
00049    int skip ;
00050 
00051 ENTRY("memplot_to_RGB_sef") ;
00052 
00053    /*--- check for madness ---*/
00054 
00055    if( im == NULL || im->kind != MRI_rgb || mp == NULL ) EXRETURN ;
00056 
00057    if( start < 0 ) start = 0 ;
00058 
00059    nline = MEMPLOT_NLINE(mp) ;
00060    if( nline < 1 || start >= nline ) EXRETURN ;
00061 
00062    if( end <= start || end > nline ) end = nline ;
00063 
00064    /*--- compute scaling from memplot objective
00065          coordinates to RGB window coordinates  ---*/
00066 
00067    if( box_xbot >= box_xtop || box_ybot >= box_ytop ){
00068 
00069       xscal = im->nx / mp->aspect ; /* aspect = x-axis objective size */
00070       yscal = im->ny / 1.0 ;        /* 1.0    = y-axis objective size */
00071       xoff  = yoff = 0.499 ;
00072 
00073    } else {  /* scale to a given sub-box in the window */
00074 
00075       xscal = box_xtop - box_xbot ;
00076       yscal = box_ytop - box_ybot ;
00077       xoff  = box_xbot + 0.499    ;
00078       yoff  = box_ybot + 0.499    ;
00079    }
00080 
00081    if( !freee ){                           /* no aspect freedom ==> */
00082       if( yscal < xscal ) xscal = yscal ;  /* use smaller scaling   */
00083       else                yscal = xscal ;
00084    }
00085    scal = sqrt(fabs(xscal*yscal)) ;
00086 
00087    old_color = -1.0 ;            /* these don't occur naturally */
00088    old_thick = -THCODE_INVALID ;
00089 
00090    /*--- loop over lines, scale and plot ---*/
00091 
00092    mri_draw_opacity( 1.0 ) ;
00093 
00094    for( ii=start ; ii < end ; ii++ ){
00095 
00096       skip = 0 ;
00097 
00098       /* check if need to change color or thickness of line */
00099 
00100       new_color = MEMPLOT_COL(mp,ii) ;
00101       if( new_color != old_color ){
00102          float rr=COL_TO_RRR(new_color) ,
00103                gg=COL_TO_GGG(new_color) , bb=COL_TO_BBB(new_color) ;
00104 
00105 #if 0
00106 fprintf(stderr,"Changing color to %f %f %f\n",rr,gg,bb) ;
00107 #endif
00108 
00109          rrr = ZO_TO_TFS(rr) ; ggg = ZO_TO_TFS(gg) ; bbb = ZO_TO_TFS(bb) ;
00110          old_color = new_color ;
00111       }
00112 
00113       new_thick = MEMPLOT_TH(mp,ii) ;
00114       if( new_thick < 0.0 ){               /* special negative thickness codes */
00115          int thc = (int)(-new_thick) ;
00116          switch( thc ){
00117             case THCODE_RECT:{        /* rectangle */
00118                int xb,yb , xt,yt ;
00119                int w,h ;
00120                x1 = rint( xoff + xscal * MEMPLOT_X1(mp,ii)         ) ;
00121                x2 = rint( xoff + xscal * MEMPLOT_X2(mp,ii)         ) ;
00122                y1 = rint( yoff + yscal * (1.0 - MEMPLOT_Y1(mp,ii)) ) ;
00123                y2 = rint( yoff + yscal * (1.0 - MEMPLOT_Y2(mp,ii)) ) ;
00124                if( x1 < x2 ){ xb=x1; xt=x2; } else { xb=x2; xt=x1; }
00125                if( y1 < y2 ){ yb=y1; yt=y2; } else { yb=y2; yt=y1; }
00126                w = xt-xb+1 ; h = yt-yb+1 ;
00127                mri_drawfilledrectangle( im , xb,yb , w,h , rrr,ggg,bbb ) ;
00128                skip = 1 ;
00129             }
00130             break ;
00131 
00132             case THCODE_OPAC:{        /* opacity [22 Jul 2004] */
00133                mri_draw_opacity( MEMPLOT_X1(mp,ii) ) ;
00134                skip = 1 ;
00135             }
00136             break ;
00137          }
00138 
00139       } else if( new_thick != old_thick ){ /* normal case: change line thickness */
00140 
00141          old_thick = new_thick ;  /* thickness not used at this time */
00142 
00143       }
00144 
00145       /* scale coords to ints (also see zzphph.f) */
00146 
00147       if( !skip ){
00148         x1 = (int)( xoff + xscal * MEMPLOT_X1(mp,ii)         ) ;
00149         x2 = (int)( xoff + xscal * MEMPLOT_X2(mp,ii)         ) ;
00150         y1 = (int)( yoff + yscal * (1.0 - MEMPLOT_Y1(mp,ii)) ) ;
00151         y2 = (int)( yoff + yscal * (1.0 - MEMPLOT_Y2(mp,ii)) ) ;
00152 
00153         /* draw it */
00154 
00155         mri_drawline( im , x1,y1 , x2,y2 , rrr,ggg,bbb ) ;
00156       }
00157    }
00158 
00159    set_memplot_RGB_box(0,0,0,0) ; /* clear box */
00160    EXRETURN ;
00161 }

void set_memplot_RGB_box int    xbot,
int    ybot,
int    xtop,
int    ytop
 

Definition at line 20 of file mri_coxplot.c.

References box_xbot, box_xtop, box_ybot, and box_ytop.

Referenced by memplot_to_RGB_sef().

00021 {
00022    if( xbot < xtop && ybot < ytop ){
00023      box_xbot = xbot ; box_ybot = ybot ;
00024      box_xtop = xtop ; box_ytop = ytop ;
00025    } else {
00026      box_xbot = box_ybot = box_xtop = box_ytop = 0 ;
00027    }
00028 }

Variable Documentation

int box_xbot = 0 [static]
 

Set a sub-box within a window into which the next RGB plot should be scaled. (0,0,0,0) args means use the whole window. After each drawing (memplot_to_RGB_sef), will be reset to the whole window anyway. ----------------------------------------------------------------------------

Definition at line 17 of file mri_coxplot.c.

Referenced by memplot_to_RGB_sef(), and set_memplot_RGB_box().

int box_xtop = 0 [static]
 

Set a sub-box within a window into which the next RGB plot should be scaled. (0,0,0,0) args means use the whole window. After each drawing (memplot_to_RGB_sef), will be reset to the whole window anyway. ----------------------------------------------------------------------------

Definition at line 17 of file mri_coxplot.c.

Referenced by memplot_to_RGB_sef(), and set_memplot_RGB_box().

int box_ybot = 0 [static]
 

Set a sub-box within a window into which the next RGB plot should be scaled. (0,0,0,0) args means use the whole window. After each drawing (memplot_to_RGB_sef), will be reset to the whole window anyway. ----------------------------------------------------------------------------

Definition at line 18 of file mri_coxplot.c.

Referenced by memplot_to_RGB_sef(), and set_memplot_RGB_box().

int box_ytop = 0 [static]
 

Set a sub-box within a window into which the next RGB plot should be scaled. (0,0,0,0) args means use the whole window. After each drawing (memplot_to_RGB_sef), will be reset to the whole window anyway. ----------------------------------------------------------------------------

Definition at line 18 of file mri_coxplot.c.

Referenced by memplot_to_RGB_sef(), and set_memplot_RGB_box().

 

Powered by Plone

This site conforms to the following standards: