--- ray/src/util/rmatrix.c 2018/04/09 21:30:07 2.26 +++ ray/src/util/rmatrix.c 2018/10/19 00:21:31 2.30 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rmatrix.c,v 2.26 2018/04/09 21:30:07 greg Exp $"; +static const char RCSid[] = "$Id: rmatrix.c,v 2.30 2018/10/19 00:21:31 greg Exp $"; #endif /* * General matrix operations. @@ -81,7 +81,7 @@ static int get_dminfo(char *s, void *p) { RMATRIX *ip = (RMATRIX *)p; - char fmt[64]; + char fmt[MAXFMTLEN]; int i; if (headidval(fmt, s)) @@ -290,12 +290,15 @@ loaderr: /* should report error? */ static int rmx_write_ascii(const RMATRIX *rm, FILE *fp) { + const char *fmt = (rm->dtype == DTfloat) ? " %.7e" : + (rm->dtype == DTrgbe) | (rm->dtype == DTxyze) ? " %.3e" : + " %.15e" ; int i, j, k; for (i = 0; i < rm->nrows; i++) { for (j = 0; j < rm->ncols; j++) { for (k = 0; k < rm->ncomp; k++) - fprintf(fp, " %.15e", rmx_lval(rm,i,j,k)); + fprintf(fp, fmt, rmx_lval(rm,i,j,k)); fputc('\t', fp); } fputc('\n', fp); @@ -338,17 +341,17 @@ rmx_write_double(const RMATRIX *rm, FILE *fp) static int rmx_write_rgbe(const RMATRIX *rm, FILE *fp) { - COLOR *scan = (COLOR *)malloc(sizeof(COLOR)*rm->ncols); + COLR *scan = (COLR *)malloc(sizeof(COLR)*rm->ncols); int i, j; if (scan == NULL) return(0); for (i = 0; i < rm->nrows; i++) { for (j = rm->ncols; j--; ) - setcolor(scan[j], rmx_lval(rm,i,j,0), + setcolr(scan[j], rmx_lval(rm,i,j,0), rmx_lval(rm,i,j,1), rmx_lval(rm,i,j,2) ); - if (fwritescan(scan, rm->ncols, fp) < 0) { + if (fwritecolrs(scan, rm->ncols, fp) < 0) { free(scan); return(0); } @@ -611,6 +614,8 @@ rmx_scale(RMATRIX *rm, const double sf[]) for (k = rm->ncomp; k--; ) rmx_lval(rm,i,j,k) *= sf[k]; + if (rm->info) + rmx_addinfo(rm, "Applied scalar\n"); return(1); } @@ -626,6 +631,13 @@ rmx_transform(const RMATRIX *msrc, int n, const double dnew = rmx_alloc(msrc->nrows, msrc->ncols, n); if (dnew == NULL) return(NULL); + if (msrc->info) { + char buf[128]; + sprintf(buf, "Applied %dx%d matrix transform\n", + dnew->ncomp, msrc->ncomp); + rmx_addinfo(dnew, msrc->info); + rmx_addinfo(dnew, buf); + } dnew->dtype = msrc->dtype; for (i = dnew->nrows; i--; ) for (j = dnew->ncols; j--; )