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

Comparing ray/src/hd/rholo2.c (file contents):
Revision 3.4 by gregl, Mon Dec 1 16:34:36 1997 UTC vs.
Revision 3.13 by gwlarson, Mon Jul 6 18:17:20 1998 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1997 Silicon Graphics, Inc. */
1 > /* Copyright (c) 1998 Silicon Graphics, Inc. */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ SGI";
# Line 9 | Line 9 | static char SCCSid[] = "$SunId$ SGI";
9   */
10  
11   #include "rholo.h"
12 + #include "paths.h"
13   #include "random.h"
14  
15  
# Line 33 | Line 34 | register PACKET        *p;
34                  p->ra[i].r[1][0] = sl[2] * 256.;
35                  p->ra[i].r[1][1] = sl[3] * 256.;
36                  d = hdray(ro, rd, hdlist[p->hd], gc, p->ra[i].r);
37 +                if (!vdef(OBSTRUCTIONS))
38 +                        d *= frandom();                 /* random offset */
39                  if (p->offset != NULL) {
40 <                        VSUM(ro, ro, rd, d);            /* exterior only */
40 >                        VSUM(ro, ro, rd, d);            /* advance ray */
41                          p->offset[i] = d;
42                  }
43                  VCOPY(rod, ro);
# Line 61 | Line 64 | register float *rvl;
64                  rvl += 4;
65          }
66          p->nc += p->nr;
67 + }
68 +
69 +
70 + int
71 + done_rtrace()                   /* clean up and close rtrace calculation */
72 + {
73 +        int     status;
74 +                                        /* already closed? */
75 +        if (!nprocs)
76 +                return;
77 +                                        /* flush beam queue */
78 +        done_packets(flush_queue());
79 +                                        /* sync holodeck */
80 +        hdsync(NULL, 1);
81 +                                        /* close rtrace */
82 +        if ((status = end_rtrace()))
83 +                error(WARNING, "bad exit status from rtrace");
84 +        if (vdef(REPORT)) {             /* report time */
85 +                eputs("rtrace process closed\n");
86 +                report(0);
87 +        }
88 +        return(status);                 /* return status */
89 + }
90 +
91 +
92 + new_rtrace()                    /* restart rtrace calculation */
93 + {
94 +        char    combuf[128];
95 +
96 +        if (nprocs > 0)                 /* already running? */
97 +                return;
98 +        starttime = time(NULL);         /* reset start time and counts */
99 +        npacksdone = nraysdone = 0L;
100 +        if (vdef(TIME))                 /* reset end time */
101 +                endtime = starttime + vflt(TIME)*3600. + .5;
102 +        if (vdef(RIF)) {                /* rerun rad to update octree */
103 +                sprintf(combuf, "rad -v 0 -s -w %s", vval(RIF));
104 +                if (system(combuf))
105 +                        error(WARNING, "error running rad");
106 +        }
107 +        if (start_rtrace() < 1)         /* start rtrace */
108 +                error(WARNING, "cannot restart rtrace");
109 +        else if (vdef(REPORT)) {
110 +                eputs("rtrace process restarted\n");
111 +                report(0);
112 +        }
113 + }
114 +
115 +
116 + getradfile()                    /* run rad and get needed variables */
117 + {
118 +        static short    mvar[] = {OCTREE,EYESEP,-1};
119 +        static char     tf1[] = TEMPLATE;
120 +        char    tf2[64];
121 +        char    combuf[256];
122 +        char    *pippt;
123 +        register int    i;
124 +        register char   *cp;
125 +                                        /* check if rad file specified */
126 +        if (!vdef(RIF))
127 +                return(0);
128 +                                        /* create rad command */
129 +        mktemp(tf1);
130 +        sprintf(tf2, "%s.rif", tf1);
131 +        sprintf(combuf,
132 +                "rad -v 0 -s -e -w %s OPTFILE=%s | egrep '^[ \t]*(NOMATCH",
133 +                        vval(RIF), tf1);
134 +        cp = combuf;
135 +        while (*cp){
136 +                if (*cp == '|') pippt = cp;
137 +                cp++;
138 +        }                               /* match unset variables */
139 +        for (i = 0; mvar[i] >= 0; i++)
140 +                if (!vdef(mvar[i])) {
141 +                        *cp++ = '|';
142 +                        strcpy(cp, vnam(mvar[i]));
143 +                        while (*cp) cp++;
144 +                        pippt = NULL;
145 +                }
146 +        if (pippt != NULL)
147 +                strcpy(pippt, "> /dev/null");   /* nothing to match */
148 +        else
149 +                sprintf(cp, ")[ \t]*=' > %s", tf2);
150 + #ifdef DEBUG
151 +        wputs(combuf); wputs("\n");
152 + #endif
153 +        system(combuf);                         /* ignore exit code */
154 +        if (pippt == NULL) {
155 +                loadvars(tf2);                  /* load variables */
156 +                unlink(tf2);
157 +        }
158 +        rtargc += wordfile(rtargv+rtargc, tf1); /* get rtrace options */
159 +        unlink(tf1);                    /* clean up */
160 +        return(1);
161 + }
162 +
163 +
164 + report(t)                       /* report progress so far */
165 + time_t  t;
166 + {
167 +        static time_t   seconds2go = 1000000;
168 +
169 +        if (t == 0L)
170 +                t = time(NULL);
171 +        sprintf(errmsg, "%ld packets (%ld rays) done after %.2f hours\n",
172 +                        npacksdone, nraysdone, (t-starttime)/3600.);
173 +        eputs(errmsg);
174 +        if (seconds2go == 1000000)
175 +                seconds2go = vdef(REPORT) ? (long)(vflt(REPORT)*60. + .5) : 0L;
176 +        if (seconds2go)
177 +                reporttime = t + seconds2go;
178   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines