ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/bsdf2klems.c
(Generate patch)

Comparing ray/src/cv/bsdf2klems.c (file contents):
Revision 2.12 by greg, Thu Nov 21 20:09:06 2013 UTC vs.
Revision 2.16 by greg, Wed Oct 1 23:32:42 2014 UTC

# Line 27 | Line 27 | static const char      *kbasis = "LBNL/Klems Full";
27   static int              npsamps = 256;
28                                  /* limit on number of RBF lobes */
29   static int              lobe_lim = 15000;
30 +                                /* progress bar length */
31 + static int              do_prog = 79;
32  
33 +
34 + /* Start new progress bar */
35 + #define prog_start(s)   if (do_prog) fprintf(stderr, "%s: %s...\n", progname, s); else
36 +
37 + /* Draw progress bar of the appropriate length */
38 + static void
39 + prog_show(double frac)
40 + {
41 +        char    pbar[256];
42 +        int     nchars;
43 +
44 +        if (do_prog <= 1) return;
45 +        if (do_prog > sizeof(pbar)-2)
46 +                do_prog = sizeof(pbar)-2;
47 +        if (frac < 0) frac = 0;
48 +        else if (frac > 1) frac = 1;
49 +        nchars = do_prog*frac + .5;
50 +        pbar[0] = '\r';
51 +        memset(pbar+1, '*', nchars);
52 +        memset(pbar+1+nchars, '-', do_prog-nchars);
53 +        pbar[do_prog+1] = '\0';
54 +        fputs(pbar, stderr);
55 + }
56 +
57 + /* Finish progress bar */
58 + static void
59 + prog_done(void)
60 + {
61 +        int     n = do_prog;
62 +
63 +        if (n <= 1) return;
64 +        fputc('\r', stderr);
65 +        while (n--)
66 +                fputc(' ', stderr);
67 +        fputc('\r', stderr);
68 + }
69 +
70   /* Return angle basis corresponding to the given name */
71 < ANGLE_BASIS *
71 > static ANGLE_BASIS *
72   get_basis(const char *bn)
73   {
74          int     n = nabases;
# Line 297 | Line 336 | eval_function(char *funame)
336                  printf("\t%.3e\n", sum/npsamps);
337              }
338              putchar('\n');
339 +            prog_show((j+1.)/abp->nangles);
340          }
341          data_epilogue();                        /* finish output */
342 +        prog_done();
343   }
344  
345   /* Interpolate and output a radial basis function BSDF representation */
# Line 335 | Line 376 | eval_rbf(void)
376  
377                      sum += eval_rbfrep(rbf, vout);
378                  }
379 <                fo_getvec(vout, j+.5, abp);     /* use centered secant */
339 <                bsdfarr[j*abp->nangles + i] = sum / (npsamps*vout[2]);
379 >                bsdfarr[j*abp->nangles + i] = sum / (double)npsamps;
380              }
381              if (rbf != NULL)
382                  free(rbf);
383 +            prog_show((i+1.)/abp->nangles);
384          }
385          n = 0;                                  /* write out our matrix */
386          for (j = 0; j < abp->nangles; j++) {
# Line 348 | Line 389 | eval_rbf(void)
389              putchar('\n');
390          }
391          data_epilogue();                        /* finish output */
392 +        prog_done();
393   }
394  
395   /* Read in BSDF and interpolate as Klems matrix representation */
# Line 393 | Line 435 | main(int argc, char *argv[])
435                  case 'l':
436                          lobe_lim = atoi(argv[++i]);
437                          break;
438 +                case 'p':
439 +                        do_prog = atoi(argv[i]+2);
440 +                        break;
441                  default:
442                          goto userr;
443                  }
# Line 401 | Line 446 | main(int argc, char *argv[])
446                          fprintf(stderr,
447          "%s: need single function with 6 arguments: bsdf(ix,iy,iz,ox,oy,oz)\n",
448                                          progname);
449 <                        fprintf(stderr, "\tor 3 arguments using Dx,Dy,Dz: bsdf(ix,iy,iz)\n",
405 <                                        progname);
449 >                        fprintf(stderr, "\tor 3 arguments using Dx,Dy,Dz: bsdf(ix,iy,iz)\n");
450                          goto userr;
451                  }
452                  ++eclock;
# Line 411 | Line 455 | main(int argc, char *argv[])
455                  if (dofwd) {
456                          input_orient = -1;
457                          output_orient = -1;
458 <                        eval_function(argv[i]);         /* outside reflectance */
458 >                        prog_start("Evaluating outside reflectance");
459 >                        eval_function(argv[i]);
460                          output_orient = 1;
461 <                        eval_function(argv[i]);         /* outside -> inside */
461 >                        prog_start("Evaluating outside->inside transmission");
462 >                        eval_function(argv[i]);
463                  }
464                  if (dobwd) {
465                          input_orient = 1;
466                          output_orient = 1;
467 <                        eval_function(argv[i]);         /* inside reflectance */
467 >                        prog_start("Evaluating inside reflectance");
468 >                        eval_function(argv[i]);
469                          output_orient = -1;
470 <                        eval_function(argv[i]);         /* inside -> outside */
470 >                        prog_start("Evaluating inside->outside transmission");
471 >                        eval_function(argv[i]);
472                  }
473                  xml_epilogue();                 /* finish XML output & exit */
474                  return(0);
# Line 436 | Line 484 | main(int argc, char *argv[])
484          if (i < argc) {                         /* open input files if given */
485                  int     nbsdf = 0;
486                  for ( ; i < argc; i++) {        /* interpolate each component */
487 +                        char    pbuf[256];
488                          FILE    *fpin = fopen(argv[i], "rb");
489                          if (fpin == NULL) {
490                                  fprintf(stderr, "%s: cannot open BSDF interpolant '%s'\n",
# Line 449 | Line 498 | main(int argc, char *argv[])
498                                  xml_header(argc, argv);
499                                  xml_prologue(NULL);
500                          }
501 +                        sprintf(pbuf, "Interpolating component '%s'", argv[i]);
502 +                        prog_start(pbuf);
503                          eval_rbf();
504                  }
505                  xml_epilogue();                 /* finish XML output & exit */
# Line 459 | Line 510 | main(int argc, char *argv[])
510                  return(1);
511          xml_header(argc, argv);                 /* start XML output */
512          xml_prologue(NULL);
513 +        prog_start("Interpolating from standard input");
514          eval_rbf();                             /* resample dist. */
515          xml_epilogue();                         /* finish XML output & exit */
516          return(0);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines