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

Comparing ray/src/gen/gensurf.c (file contents):
Revision 2.14 by greg, Tue Mar 23 15:18:09 2004 UTC vs.
Revision 2.22 by greg, Mon Dec 9 22:08:13 2013 UTC

# Line 16 | Line 16 | static const char RCSid[] = "$Id$";
16   */
17  
18   #include  "standard.h"
19 +
20 + #include  "paths.h"
21 + #include  "resolu.h"
22 + #include  "rterror.h"
23   #include  "calcomp.h"
24  
25   char  XNAME[] =         "X`SYS";                /* x function name */
# Line 30 | Line 34 | char  VNAME[] =        "valid";                /* valid vertex name */
34  
35   #define  pvect(p)       printf(vformat, (p)[0], (p)[1], (p)[2])
36  
37 < char  vformat[] = "%15.9g %15.9g %15.9g\n";
38 < char  tsargs[] = "4 surf_dx surf_dy surf_dz surf.cal\n";
37 > char  vformat[] = "%18.12g %18.12g %18.12g\n";
38 > char  tsargs[] = "4 surf_dx surf_dy surf_dz surf.cal";
39   char  texname[] = "Phong";
40  
41   int  smooth = 0;                /* apply smoothing? */
# Line 54 | Line 58 | double  l_hermite(), l_bezier(), l_bspline(), l_datava
58  
59   typedef struct {
60          int  valid;     /* point is valid (vertex number) */
61 +        int  nvalid;    /* normal is valid */
62          FVECT  p;       /* vertex position */
63          FVECT  n;       /* average normal */
64          RREAL  uv[2];   /* (u,v) position */
# Line 67 | Line 72 | void putsquare(POINT *p0, POINT *p1, POINT *p2, POINT
72   void comprow(double s, POINT *row, int siz);
73   void compnorms(POINT *r0, POINT *r1, POINT *r2, int siz);
74   int norminterp(FVECT resmat[4], POINT *p0, POINT *p1, POINT *p2, POINT *p3);
70 void printhead(int ac, char **av);
75  
76  
77   int
# Line 135 | Line 139 | char  *argv[];
139          }
140          row0++; row1++; row2++;
141                                                  /* print header */
142 <        printhead(argc, argv);
142 >        fputs("# ", stdout);
143 >        printargs(argc, argv, stdout);
144          eclock = 0;
145                                                  /* initialize */
146          comprow(-1.0/m, row0, n);
# Line 178 | Line 183 | char  *argv[];
183  
184   userror:
185          fprintf(stderr, "Usage: %s material name ", argv[0]);
186 <        fprintf(stderr, "x(s,t) y(s,t) z(s,t) m n [-s][-e expr][-f file]\n");
186 >        fprintf(stderr, "x(s,t) y(s,t) z(s,t) m n [-s][-o][-e expr][-f file]\n");
187          return 1;
188   }
189  
# Line 193 | Line 198 | loaddata(              /* load point data from file */
198   {
199          FILE  *fp;
200          char  word[64];
201 <        register int  size;
202 <        register RREAL  *dp;
201 >        int  size;
202 >        RREAL  *dp;
203  
204          datarec.flags = HASBORDER;              /* assume border values */
205          datarec.m = m+1;
# Line 225 | Line 230 | loaddata(              /* load point data from file */
230                  size--;
231          }
232          if (size == (m+n+1)*pointsize) {        /* no border after all */
233 <                dp = (RREAL *)realloc((void *)datarec.data,
233 >                dp = (RREAL *)realloc(datarec.data,
234                                  m*n*pointsize*sizeof(RREAL));
235                  if (dp != NULL)
236                          datarec.data = dp;
# Line 250 | Line 255 | l_dataval(                             /* return recorded data value */
255   )
256   {
257          double  u, v;
258 <        register int  i, j;
259 <        register RREAL  *dp;
258 >        int  i, j;
259 >        RREAL  *dp;
260          double  d00, d01, d10, d11;
261                                                  /* compute coordinates */
262          u = argument(1); v = argument(2);
# Line 289 | Line 294 | l_dataval(                             /* return recorded data value */
294  
295   void
296   putobjrow(                      /* output vertex row to .OBJ */
297 <        register POINT  *rp,
297 >        POINT  *rp,
298          int  n
299   )
300   {
301          static int      nverts = 0;
302 +        static int      nnorms = 0;
303  
304          for ( ; n-- >= 0; rp++) {
305                  if (!rp->valid)
306                          continue;
307                  fputs("v ", stdout);
308                  pvect(rp->p);
309 <                if (smooth && !ZEROVECT(rp->n))
309 >                if (smooth && !ZEROVECT(rp->n)) {
310                          printf("\tvn %.9g %.9g %.9g\n",
311                                          rp->n[0], rp->n[1], rp->n[2]);
312 +                        rp->nvalid = ++nnorms;
313 +                } else
314 +                        rp->nvalid = 0;
315                  printf("\tvt %.9g %.9g\n", rp->uv[0], rp->uv[1]);
316                  rp->valid = ++nverts;
317          }
# Line 340 | Line 349 | putsquare(             /* put out a square */
349          if (!(ok1 | ok2))
350                  return;
351          if (objout) {                   /* output .OBJ faces */
343                int     p0n=0, p1n=0, p2n=0, p3n=0;
344                if (smooth) {
345                        if (!ZEROVECT(p0->n))
346                                p0n = p0->valid;
347                        if (!ZEROVECT(p1->n))
348                                p1n = p1->valid;
349                        if (!ZEROVECT(p2->n))
350                                p2n = p2->valid;
351                        if (!ZEROVECT(p3->n))
352                                p3n = p3->valid;
353                }
352                  if (ok1 & ok2 && fdot(vc1,vc2) >= 1.0-FTINY*FTINY) {
353                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d\n",
354 <                                        p0->valid, p0->valid, p0n,
355 <                                        p1->valid, p1->valid, p1n,
356 <                                        p3->valid, p3->valid, p3n,
357 <                                        p2->valid, p2->valid, p2n);
354 >                                        p0->valid, p0->valid, p0->nvalid,
355 >                                        p1->valid, p1->valid, p1->nvalid,
356 >                                        p3->valid, p3->valid, p3->nvalid,
357 >                                        p2->valid, p2->valid, p2->nvalid);
358                          return;
359                  }
360                  if (ok1)
361                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n",
362 <                                        p0->valid, p0->valid, p0n,
363 <                                        p1->valid, p1->valid, p1n,
364 <                                        p2->valid, p2->valid, p2n);
362 >                                        p0->valid, p0->valid, p0->nvalid,
363 >                                        p1->valid, p1->valid, p1->nvalid,
364 >                                        p2->valid, p2->valid, p2->nvalid);
365                  if (ok2)
366                          printf("f %d/%d/%d %d/%d/%d %d/%d/%d\n",
367 <                                        p2->valid, p2->valid, p2n,
368 <                                        p1->valid, p1->valid, p1n,
369 <                                        p3->valid, p3->valid, p3n);
367 >                                        p2->valid, p2->valid, p2->nvalid,
368 >                                        p1->valid, p1->valid, p1->nvalid,
369 >                                        p3->valid, p3->valid, p3->nvalid);
370                  return;
371          }
372                                          /* compute normal interpolation */
# Line 378 | Line 376 | putsquare(             /* put out a square */
376          if (ok1 & ok2 && fdot(vc1,vc2) >= 1.0-FTINY*FTINY) {
377                  printf("\n%s ", modname);
378                  if (axis != -1) {
379 <                        printf("texfunc %s\n", texname);
382 <                        printf(tsargs);
379 >                        printf("texfunc %s\n%s\n", texname, tsargs);
380                          printf("0\n13\t%d\n", axis);
381                          pvect(norm[0]);
382                          pvect(norm[1]);
# Line 401 | Line 398 | putsquare(             /* put out a square */
398          if (ok1) {
399                  printf("\n%s ", modname);
400                  if (axis != -1) {
401 <                        printf("texfunc %s\n", texname);
405 <                        printf(tsargs);
401 >                        printf("texfunc %s\n%s\n", texname, tsargs);
402                          printf("0\n13\t%d\n", axis);
403                          pvect(norm[0]);
404                          pvect(norm[1]);
# Line 420 | Line 416 | putsquare(             /* put out a square */
416          if (ok2) {
417                  printf("\n%s ", modname);
418                  if (axis != -1) {
419 <                        printf("texfunc %s\n", texname);
424 <                        printf(tsargs);
419 >                        printf("texfunc %s\n%s\n", texname, tsargs);
420                          printf("0\n13\t%d\n", axis);
421                          pvect(norm[0]);
422                          pvect(norm[1]);
# Line 442 | Line 437 | putsquare(             /* put out a square */
437   void
438   comprow(                        /* compute row of values */
439          double  s,
440 <        register POINT  *row,
440 >        POINT  *row,
441          int  siz
442   )
443   {
444          double  st[2];
445          int  end;
446          int  checkvalid;
447 <        register int  i;
447 >        int  i;
448          
449          if (smooth) {
450                  i = -1;                 /* compute one past each end */
# Line 483 | Line 478 | comprow(                       /* compute row of values */
478  
479   void
480   compnorms(              /* compute row of averaged normals */
481 <        register POINT  *r0,
482 <        register POINT  *r1,
483 <        register POINT  *r2,
481 >        POINT  *r0,
482 >        POINT  *r1,
483 >        POINT  *r2,
484          int  siz
485   )
486   {
# Line 526 | Line 521 | compnorms(             /* compute row of averaged normals */
521  
522   int
523   norminterp(     /* compute normal interpolation */
524 <        register FVECT  resmat[4],
524 >        FVECT  resmat[4],
525          POINT  *p0,
526          POINT  *p1,
527          POINT  *p2,
# Line 536 | Line 531 | norminterp(    /* compute normal interpolation */
531   #define u  ((ax+1)%3)
532   #define v  ((ax+2)%3)
533  
534 <        register int  ax;
534 >        int  ax;
535          MAT4  eqnmat;
536          FVECT  v1;
537 <        register int  i, j;
537 >        int  i, j;
538  
539          if (!smooth)                    /* no interpolation if no smoothing */
540                  return(-1);
# Line 581 | Line 576 | norminterp(    /* compute normal interpolation */
576  
577   #undef u
578   #undef v
584 }
585
586
587 void
588 eputs(msg)
589 char  *msg;
590 {
591        fputs(msg, stderr);
592 }
593
594
595 void
596 wputs(msg)
597 char  *msg;
598 {
599        eputs(msg);
600 }
601
602
603 void
604 quit(code)
605 int  code;
606 {
607        exit(code);
608 }
609
610
611 void
612 printhead(              /* print command header */
613        register int  ac,
614        register char  **av
615 )
616 {
617        putchar('#');
618        while (ac--) {
619                putchar(' ');
620                fputs(*av++, stdout);
621        }
622        putchar('\n');
579   }
580  
581  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines