void Tri::genFile (Curve *cur, double *x, double *y){ register int i; Geometry *g; Point p1, p2, a; double *z, *w, *eta, xoff, yoff; int fac; fac = cur->face; p1.x = vert[vnum(fac,0)].x; p1.y = vert[vnum(fac,0)].y; p2.x = vert[vnum(fac,1)].x; p2.y = vert[vnum(fac,1)].y; getzw(qa,&z,&w,'a'); eta = dvector (0, qa); if ((g = lookupGeom (cur->info.file.name)) == (Geometry *) NULL) g = loadGeom (cur->info.file.name); /* If the current edge has an offset, apply it now */ xoff = cur->info.file.xoffset; yoff = cur->info.file.yoffset; if (xoff != 0.0 || yoff != 0.0) { dsadd (g->npts, xoff, g->x, 1, g->x, 1); dsadd (g->npts, yoff, g->y, 1, g->y, 1); if (option("verbose") > 1) printf ("shifting current geometry by (%g,%g)\n", xoff, yoff); } /* get the end points which are assumed to lie on the curve */ /* set up search direction in normal to element point -- This assumes that vertices already lie on spline */ a.x = p1.x - (p2.y - p1.y); a.y = p1.y + (p2.x - p1.x); eta[0] = searchGeom (a, p1, g); a.x = p2.x - (p2.y - p1.y); a.y = p2.y + (p2.x - p1.x); eta[qa-1] = searchGeom (a, p2, g); /* Now generate the points where we'll evaluate the geometry */ for (i = 1; i < qa-1; i++) eta [i] = eta[0] + 0.5 * (eta[qa-1] - eta[0]) * (z[i] + 1.); for (i = 0; i < qa; i++) { x[i] = splint (g->npts, eta[i], g->arclen, g->x, g->sx); y[i] = splint (g->npts, eta[i], g->arclen, g->y, g->sy); } g->pos = 0; /* reset the geometry */ if (xoff != 0.) dvsub (g->npts, g->x, 1, &xoff, 0, g->x, 1); if (yoff != 0.) dvsub (g->npts, g->y, 1, &yoff, 0, g->y, 1); free (eta); /* free the workspace */ return; }
Scene::Scene(string filename) { cout << "Reading scene from " << filename << " ..." << endl; cout << " " << endl; char* fname = (char*)filename.c_str(); fp_in.open(fname); if (!fp_in.is_open()) { cout << "Error reading from file - aborting!" << endl; throw; } while (fp_in.good()) { string line; utilityCore::safeGetline(fp_in, line); if (!line.empty()) { vector<string> tokens = utilityCore::tokenizeString(line); if (strcmp(tokens[0].c_str(), "MATERIAL") == 0) { loadMaterial(tokens[1]); cout << " " << endl; } else if (strcmp(tokens[0].c_str(), "OBJECT") == 0) { loadGeom(tokens[1]); cout << " " << endl; } else if (strcmp(tokens[0].c_str(), "CAMERA") == 0) { loadCamera(); cout << " " << endl; } } } }