The R Project SVN R

Rev

Rev 6415 | Rev 6994 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6415 Rev 6516
Line 759... Line 759...
759
SEXP do_image(SEXP call, SEXP op, SEXP args, SEXP env)
759
SEXP do_image(SEXP call, SEXP op, SEXP args, SEXP env)
760
{
760
{
761
    SEXP oargs, sx, sy, sz, szlim, sc;
761
    SEXP oargs, sx, sy, sz, szlim, sc;
762
    double *x, *y, *z;
762
    double *x, *y, *z;
763
    unsigned *c;
763
    unsigned *c;
764
    double xlow, xhigh, ylow, yhigh, zmin = 0., zmax = 0.;
764
    double xlow, zmin = 0., zmax = 0.;
765
    int i, j, nx, ny, nz, ic, nc, colsave, xpdsave;
765
    int i, j, nx, ny, nz, ic, nc, colsave, xpdsave;
766
    DevDesc *dd = CurrentDevice();
766
    DevDesc *dd = CurrentDevice();
767
 
767
 
768
    GCheckState(dd);
768
    GCheckState(dd);
769
 
769
 
Line 831... Line 831...
831
    /* override par("xpd") and force clipping to plot region */
831
    /* override par("xpd") and force clipping to plot region */
832
    dd->gp.xpd = 0;
832
    dd->gp.xpd = 0;
833
 
833
 
834
    GMode(1, dd);
834
    GMode(1, dd);
835
 
835
 
836
    for (i = 0; i < nx; i++) {
836
    for (i = 0; i < nx - 1 ; i++) {
837
	if (i == 0)
-
 
838
	    xlow = x[0];
-
 
839
	else
-
 
840
	    xlow = 0.5 * (x[i] + x[i-1]);
-
 
841
	if (i == nx-1)
-
 
842
	    xhigh = x[i];
-
 
843
	else
-
 
844
	    xhigh = 0.5 * (x[i] + x[i+1]);
-
 
845
 
-
 
846
	for (j = 0; j < ny; j++) {
837
	for (j = 0; j < ny - 1; j++) {
847
	    if (R_FINITE(z[i + j * nx])) {
838
	    if (R_FINITE(z[i + j * (nx - 1)])) {
848
		ic = floor((nc - 1) * (z[i + j * nx]-zmin)/(zmax - zmin) + 0.5);
839
		ic = floor((nc - 1) * (z[i + j * (nx-1)]-zmin)/(zmax - zmin) + 0.5);
849
		if (ic >= 0 && ic < nc) {
-
 
850
		    if (j == 0)
-
 
851
			ylow = y[0];
-
 
852
		    else
-
 
853
			ylow = 0.5 * (y[j] + y[j - 1]);
-
 
854
		    if (j == ny - 1)
-
 
855
			yhigh = y[j];
-
 
856
		    else
-
 
857
			yhigh = 0.5 * (y[j] + y[j + 1]);
-
 
858
		    GRect(xlow, ylow, xhigh, yhigh,
-
 
859
			  USER, c[ic], NA_INTEGER, dd);
840
		GRect(x[i], y[j], x[i+1], y[j+1], USER, c[ic], NA_INTEGER, dd);
860
		}
-
 
861
	    }
841
	    }
862
	}
842
	}
863
    }
843
    }
864
    GMode(0, dd);
844
    GMode(0, dd);
865
    dd->gp.col = colsave;
845
    dd->gp.col = colsave;