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

Comparing ray/src/cv/mgf2rad.c (file contents):
Revision 2.17 by greg, Mon May 1 17:05:22 1995 UTC vs.
Revision 2.24 by gwlarson, Wed Jun 9 14:06:00 1999 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1994 Regents of the University of California */
1 > /* Copyright (c) 1996 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 23 | Line 23 | double glowdist = FHUGE;               /* glow test distance */
23  
24   double  emult = 1.;                     /* emitter multiplier */
25  
26 < FILE    *matfp = stdout;                /* material output file */
26 > FILE    *matfp;                         /* material output file */
27  
28   int     r_comment(), r_cone(), r_cyl(), r_face(), r_ies(), r_ring(), r_sph();
29   char    *material(), *object(), *addarg();
# Line 33 | Line 33 | main(argc, argv)               /* convert files to stdout */
33   int     argc;
34   char    *argv[];
35   {
36 <        int     i, rv;
36 >        int     i;
37 >
38 >        matfp = stdout;
39 >                                /* print out parser version */
40 >        printf("## Translated from MGF Version %d.%d\n", MG_VMAJOR, MG_VMINOR);
41                                  /* initialize dispatch table */
42          mg_ehand[MG_E_COMMENT] = r_comment;     /* we pass comments */
43          mg_ehand[MG_E_COLOR] = c_hcolor;        /* they get color */
# Line 92 | Line 96 | char   *argv[];
96          }
97          putchar('\n');
98          if (i == argc) {                /* convert stdin */
99 <                if ((rv = mg_load(NULL)) != MG_OK)
99 >                if (mg_load(NULL) != MG_OK)
100                          exit(1);
101 +                if (mg_nunknown)
102 +                        printf("## %s: %u unknown entities\n",
103 +                                        argv[0], mg_nunknown);
104          } else                          /* convert each file */
105                  for ( ; i < argc; i++) {
106                          printf("## %s %s ##############################\n",
107                                          argv[0], argv[i]);
108 <                        if ((rv = mg_load(argv[i])) != MG_OK)
108 >                        if (mg_load(argv[i]) != MG_OK)
109                                  exit(1);
110 +                        if (mg_nunknown) {
111 +                                printf("## %s %s: %u unknown entities\n",
112 +                                                argv[0], argv[i], mg_nunknown);
113 +                                mg_nunknown = 0;
114 +                        }
115                  }
116          exit(0);
117   userr:
# Line 297 | Line 309 | char   **av;
309          if ((mat = material()) == NULL) /* get material */
310                  return(MG_EBADMAT);
311          if (ac <= 5) {                          /* check for smoothing */
312 +                C_VERTEX        *cva[5];
313                  for (i = 1; i < ac; i++) {
314 <                        if ((cv = c_getvert(av[i])) == NULL)
314 >                        if ((cva[i-1] = c_getvert(av[i])) == NULL)
315                                  return(MG_EUNDEF);
316 <                        if (is0vect(cv->n))
316 >                        if (is0vect(cva[i-1]->n))
317                                  break;
318                  }
319 <                if (i == ac) {                  /* break into triangles */
320 <                        do_tri(mat, av[1], av[2], av[3]);
319 >                if (i == ac) {
320 >                        i = flat_tri(cva[0]->p, cva[1]->p, cva[2]->p,
321 >                                        cva[0]->n, cva[1]->n, cva[2]->n);
322 >                        if (i < 0)
323 >                                return(MG_OK);  /* degenerate (error?) */
324 >                }
325 >                if (!i) {                       /* smoothed triangles */
326 >                        do_tri(mat, cva[0], cva[1], cva[2]);
327                          if (ac == 5)
328 <                                do_tri(mat, av[3], av[4], av[1]);
328 >                                do_tri(mat, cva[2], cva[3], cva[0]);
329                          return(MG_OK);
330                  }
331          }
# Line 338 | Line 357 | char   **av;
357          if (ac < 2)
358                  return(MG_EARGC);
359                                          /* construct output file name */
360 <        if ((op = strrchr(av[1], '/')) == NULL)
360 >        if ((op = strrchr(av[1], '/')) != NULL)
361 >                op++;
362 >        else
363                  op = av[1];
364          (void)strcpy(fname, op);
365          if ((op = strrchr(fname, '.')) == NULL)
# Line 386 | Line 407 | char   **av;
407   }
408  
409  
410 < do_tri(mat, vn1, vn2, vn3)              /* put out smoothed triangle */
411 < char    *mat, *vn1, *vn2, *vn3;
410 > do_tri(mat, cv1, cv2, cv3)              /* put out smoothed triangle */
411 > char    *mat;
412 > C_VERTEX        *cv1, *cv2, *cv3;
413   {
414          static int      ntris;
415          BARYCCM bvecs;
416          FLOAT   bcoor[3][3];
417 <        C_VERTEX        *cv1, *cv2, *cv3;
417 >        C_VERTEX        *cvt;
418          FVECT   v1, v2, v3;
419          FVECT   n1, n2, n3;
420          register int    i;
421 <                        /* the following is repeat code, so assume it's OK */
422 <        cv2 = c_getvert(vn2);
423 <        if (invert) {
424 <                cv3 = c_getvert(vn1);
425 <                cv1 = c_getvert(vn3);
404 <        } else {
405 <                cv1 = c_getvert(vn1);
406 <                cv3 = c_getvert(vn3);
421 >
422 >        if (invert) {                   /* swap vertex order if inverted */
423 >                cvt = cv1;
424 >                cv1 = cv3;
425 >                cv3 = cvt;
426          }
427          xf_xfmpoint(v1, cv1->p);
428          xf_xfmpoint(v2, cv2->p);
# Line 529 | Line 548 | material()                     /* get (and print) current material */
548                  return(mname);
549          }
550                                          /* check for plastic */
551 <        if (c_cmaterial->rs < .1 && (c_cmaterial->rs < .01 ||
533 <                                        c_isgrey(&c_cmaterial->rs_c))) {
551 >        if (c_cmaterial->rs < .1) {
552                  cvtcolor(radrgb, &c_cmaterial->rd_c,
553                                          c_cmaterial->rd/(1.-c_cmaterial->rs));
554                  fprintf(matfp, "\nvoid plastic %s\n0\n0\n", mname);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines