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

Comparing ray/src/util/eplus_adduvf.c (file contents):
Revision 2.12 by greg, Fri Feb 21 13:17:45 2014 UTC vs.
Revision 2.16 by greg, Mon Mar 3 17:51:50 2014 UTC

# Line 176 | Line 176 | add_subsurf(IDF_OBJECT *param)
176   static IDF_FIELD *
177   get_vlist(IDF_OBJECT *param, const char *zname)
178   {
179 <        int             i = 0;
179 > #define itm_len         (sizeof(IDF_FIELD)+6)
180 >        static char             fld_buf[4*itm_len];
181 >        static char             *next_fbp = fld_buf;
182 >        int                     i;
183 >        IDF_FIELD               *res;
184                                                  /* check if subsurface */
185          if (!strcmp(param->pname, SUBSURF_PNAME)) {
186                  if (zname != NULL) {
# Line 185 | Line 189 | get_vlist(IDF_OBJECT *param, const char *zname)
189                          if (strcmp((*(ZONE *)lep->data).zname, zname))
190                                  return(NULL);
191                  }
192 <                return(idf_getfield(param, SS_VERT_FLD));
192 >                res = idf_getfield(param, SS_VERT_FLD);
193 >        } else {
194 >                i = 0;                          /* check for surface type */
195 >                while (strcmp(surf_type[i].pname, param->pname))
196 >                        if (surf_type[++i].pname == NULL)
197 >                                return(NULL);
198 >
199 >                if (zname != NULL) {            /* matches specified zone? */
200 >                        IDF_FIELD       *fptr = idf_getfield(param, surf_type[i].zone_fld);
201 >                        if (fptr == NULL || strcmp(fptr->val, zname))
202 >                                return(NULL);
203 >                }
204 >                res = idf_getfield(param, surf_type[i].vert_fld);
205          }
206 <                                                /* check for surface type */
207 <        while (strcmp(surf_type[i].pname, param->pname))
208 <                if (surf_type[++i].pname == NULL)
206 >        if (!res->val[0]) {                     /* hack for missing #vert */
207 >                IDF_FIELD       *fptr;
208 >                if (next_fbp >= fld_buf+sizeof(fld_buf))
209 >                        next_fbp = fld_buf;
210 >                i = 0;                          /* count vertices */
211 >                for (fptr = res->next; fptr != NULL; fptr = fptr->next)
212 >                        ++i;
213 >                if (i % 3)
214                          return(NULL);
215 <
216 <        if (zname != NULL) {                    /* matches specified zone? */
217 <                IDF_FIELD       *fptr = idf_getfield(param, surf_type[i].zone_fld);
218 <                if (fptr == NULL || strcmp(fptr->val, zname))
219 <                        return(NULL);
215 >                fptr = res->next;
216 >                res = (IDF_FIELD *)next_fbp; next_fbp += itm_len;
217 >                res->next = fptr;
218 >                res->rem = "";
219 >                sprintf(res->val, "%d", i/3);
220          }
221 <                                                /* return field for #verts */
222 <        return(idf_getfield(param, surf_type[i].vert_fld));
221 >        return(res);
222 > #undef itm_len
223   }
224  
225   /* Get/allocate surface polygon */
# Line 303 | Line 324 | static double
324   rad_subsurface(IDF_OBJECT *param, FILE *ofp)
325   {
326          const char      *sname = idf_getfield(param,NAME_FLD)->val;
327 <        SURFACE         *surf = get_surface(idf_getfield(param,SS_VERT_FLD));
327 >        SURFACE         *surf = get_surface(get_vlist(param, NULL));
328          double          area;
329          int             i;
330  
# Line 341 | Line 362 | start_rcontrib(SUBPROC *pd, ZONE *zp)
362          IDF_FIELD       *fptr;
363          int             i, j, n;
364                                                  /* start oconv command */
365 <        sprintf(cbuf, "oconv - > '%s'", temp_octree);
365 >        sprintf(cbuf, "oconv - > \"%s\"", temp_octree);
366          if ((ofp = popen(cbuf, "w")) == NULL) {
367                  fputs(progname, stderr);
368                  fputs(": cannot open oconv process\n", stderr);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines