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

Comparing ray/src/cv/ies2rad.c (file contents):
Revision 2.17 by gregl, Mon Nov 10 10:13:58 1997 UTC vs.
Revision 2.18 by greg, Sat Feb 22 02:07:23 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1996 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Convert IES luminaire data to Radiance description
6   *
7   *      07Apr90         Greg Ward
8 + *
9 + *  Fixed correction factor for flat sources 29Oct2001 GW
10   */
11  
12   #include <stdio.h>
# Line 125 | Line 124 | int    gargc;                          /* global argc (minus filenames) */
124   char    **gargv;                        /* global argv */
125  
126   extern char     *strcpy(), *strcat(), *stradd(), *tailtrunc(), *filetrunc(),
127 <                *filename(), *libname(), *fullname(), *malloc(),
129 <                *getword(), *atos();
127 >                *filename(), *libname(), *fullnam(), *getword(), *atos();
128   extern float    *matchlamp();
129   extern time_t   fdate();
130  
# Line 327 | Line 325 | int    sep;
325  
326  
327   char *
328 < fullname(path, fname, suffix)           /* return full path name */
328 > fullnam(path, fname, suffix)            /* return full path name */
329   char    *path, *fname, *suffix;
330   {
331          if (prefdir != NULL && abspath(prefdir))
# Line 474 | Line 472 | char   *inpname, *outname;
472          }
473          if (out2stdout)
474                  outfp = stdout;
475 <        else if ((outfp = fopen(fullname(buf,outname,T_RAD), "w")) == NULL) {
475 >        else if ((outfp = fopen(fullnam(buf,outname,T_RAD), "w")) == NULL) {
476                  perror(buf);
477                  fclose(inpfp);
478                  return(-1);
# Line 540 | Line 538 | char   *inpname, *outname;
538   readerr:
539          fclose(inpfp);
540          fclose(outfp);
541 <        unlink(fullname(buf,outname,T_RAD));
541 >        unlink(fullnam(buf,outname,T_RAD));
542          return(-1);
543   }
544  
# Line 572 | Line 570 | char   *dir, *tltspec, *dfltname, *tltid;
570                  tailtrunc(strcpy(tltname,filename(tltspec)));
571          }
572          if (datin != NULL) {
573 <                if ((datout = fopen(fullname(buf,tltname,T_TLT),"w")) == NULL) {
573 >                if ((datout = fopen(fullnam(buf,tltname,T_TLT),"w")) == NULL) {
574                          perror(buf);
575                          if (datin != in)
576                                  fclose(datin);
# Line 584 | Line 582 | char   *dir, *tltspec, *dfltname, *tltid;
582                          fclose(datout);
583                          if (datin != in)
584                                  fclose(datin);
585 <                        unlink(fullname(buf,tltname,T_TLT));
585 >                        unlink(fullnam(buf,tltname,T_TLT));
586                          return(-1);
587                  }
588                  fclose(datout);
# Line 629 | Line 627 | char   *mod, *name;
627          double  bounds[2][2];
628          int     nangles[2], pmtype, unitype;
629          double  d1;
630 +        int     doupper, dolower, dosides;
631  
632          if (!isint(getword(in)) || !isflt(getword(in)) || !scnflt(in,&mult)
633                          || !scnint(in,&nangles[0]) || !scnint(in,&nangles[1])
# Line 653 | Line 652 | char   *mod, *name;
652                  fprintf(stderr, "dosource: illegal source dimensions");
653                  return(-1);
654          }
655 <        if ((datout = fopen(fullname(buf,name,T_DST), "w")) == NULL) {
655 >        if ((datout = fopen(fullnam(buf,name,T_DST), "w")) == NULL) {
656                  perror(buf);
657                  return(-1);
658          }
659          if (cvdata(in, datout, 2, nangles, 1./WHTEFFICACY, bounds) != 0) {
660                  fprintf(stderr, "dosource: bad distribution data\n");
661                  fclose(datout);
662 <                unlink(fullname(buf,name,T_DST));
662 >                unlink(fullnam(buf,name,T_DST));
663                  return(-1);
664          }
665          fclose(datout);
# Line 676 | Line 675 | char   *mod, *name;
675                  fprintf(out, "7 ");
676          else
677                  fprintf(out, "5 ");
678 +        dolower = (bounds[0][0] < 90.);
679 +        doupper = (bounds[0][1] > 90.);
680 +        dosides = (doupper & dolower && sinf->h > MINDIM);
681          fprintf(out, "%s %s source.cal ",
682                          sinf->type==SPHERE ? "corr" :
683 +                        !dosides ? "flatcorr" :
684                          sinf->type==DISK ? "cylcorr" : "boxcorr",
685                          libname(buf,name,T_DST));
686          if (pmtype == PM_B) {
# Line 686 | Line 689 | char   *mod, *name;
689                  else
690                          fprintf(out, "srcB_horiz ");
691                  fprintf(out, "srcB_vert ");
692 <        } else {
692 >        } else /* pmtype == PM_A */ {
693                  if (nangles[1] >= 2) {
694                          d1 = bounds[1][1] - bounds[1][0];
695                          if (d1 <= 90.+FTINY)
696                                  fprintf(out, "src_phi4 ");
697 <                        else if (d1 <= 180.+FTINY)
698 <                                fprintf(out, "src_phi2 ");
699 <                        else
697 >                        else if (d1 <= 180.+FTINY) {
698 >                                if (FEQ(bounds[1][0],90.))
699 >                                        fprintf(out, "src_phi2+90 ");
700 >                                else
701 >                                        fprintf(out, "src_phi2 ");
702 >                        } else
703                                  fprintf(out, "src_phi ");
704                          fprintf(out, "src_theta ");
705                          if (FEQ(bounds[1][0],90.) && FEQ(bounds[1][1],270.))
# Line 701 | Line 707 | char   *mod, *name;
707                  } else
708                          fprintf(out, "src_theta ");
709          }
710 <        if (sinf->type == SPHERE)
710 >        if (!dosides || sinf->type == SPHERE)
711                  fprintf(out, "\n0\n1 %g\n", sinf->mult/sinf->area);
712          else if (sinf->type == DISK)
713                  fprintf(out, "\n0\n3 %g %g %g\n", sinf->mult,
714 <                                sinf->l, sinf->h);
714 >                                sinf->w, sinf->h);
715          else
716                  fprintf(out, "\n0\n4 %g %g %g %g\n", sinf->mult,
717                                  sinf->l, sinf->w, sinf->h);
718          if (putsource(sinf, out, id, filename(name),
719 <                        bounds[0][0]<90., bounds[0][1]>90.) != 0)
719 >                        dolower, doupper, dosides) != 0)
720                  return(-1);
721          return(0);
722   }
723  
724  
725 < putsource(shp, fp, mod, name, dolower, doupper)         /* put out source */
725 > putsource(shp, fp, mod, name, dolower, doupper, dosides) /* put out source */
726   SRCINFO *shp;
727   FILE    *fp;
728   char    *mod, *name;
729   int     dolower, doupper;
730   {
725        int     dosides = doupper && dolower && shp->h > MINDIM;
731          char    lname[MAXWORD];
732          
733          strcat(strcpy(lname, name), "_light");
# Line 950 | Line 955 | double mult, lim[][2];
955                                  putc('\n', out);
956                          }
957                  }
958 <                free((char *)pt[i]);
958 >                free((void *)pt[i]);
959          }
960          for (i = 0; i < total; i++) {
961                  if (i%4 == 0)
# Line 1038 | Line 1043 | FILE   *outfp;                 /* close output file upon return */
1043          if (instantiate) {              /* instantiate octree */
1044                  strcpy(cp, "| oconv - > ");
1045                  cp += 12;
1046 <                fullname(cp,outname,T_OCT);
1046 >                fullnam(cp,outname,T_OCT);
1047                  if (fdate(inpname) > fdate(outname) &&
1048                                  system(buf)) {          /* create octree */
1049                          fclose(outfp);
# Line 1062 | Line 1067 | FILE   *outfp;                 /* close output file upon return */
1067                          fclose(outfp);
1068                          strcpy(cp, ">> ");      /* append works for DOS? */
1069                          cp += 3;
1070 <                        fullname(cp,outname,T_RAD);
1070 >                        fullnam(cp,outname,T_RAD);
1071                  }
1072                  if (system(buf))
1073                          return(-1);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines