static errcode GetFCylinder(parsehandle * ph, SceneHandle scene) { apiflt rad; apivector ctr, axis; apivector pnt1, pnt2; void * tex; float a; errcode rc; rc = GetString(ph, "BASE"); rc |= GetVector(ph, &pnt1); rc |= GetString(ph, "APEX"); rc |= GetVector(ph, &pnt2); ctr=pnt1; axis.x=pnt2.x - pnt1.x; axis.y=pnt2.y - pnt1.y; axis.z=pnt2.z - pnt1.z; rc |= GetString(ph, "RAD"); fscanf(ph->ifp, "%f", &a); rad=a; rc |= GetTexture(ph, scene, &tex); rt_fcylinder(scene, tex, ctr, axis, rad); return rc; }
static errcode GetFCylinder(FILE * dfile) { apiflt rad; vector ctr, axis; vector pnt1, pnt2; void * tex; float a; errcode rc; rc = GetString(dfile, "BASE"); rc |= GetVector(dfile, &pnt1); rc |= GetString(dfile, "APEX"); rc |= GetVector(dfile, &pnt2); ctr=pnt1; axis.x=pnt2.x - pnt1.x; axis.y=pnt2.y - pnt1.y; axis.z=pnt2.z - pnt1.z; rc |= GetString(dfile, "RAD"); fscanf(dfile, "%f", &a); rad=a; rc |= GetTexture(dfile, &tex); rt_fcylinder(tex, ctr, axis, rad); return rc; }
int NFFGetCylCone(FILE *dfile, SceneHandle scene) { apivector pnt1, pnt2; apivector ctr, axis; float baserad, apexrad; NFFGetVector(dfile, &pnt1); fscanf(dfile, "%f", &baserad); NFFGetVector(dfile, &pnt2); fscanf(dfile, "%f", &apexrad); ctr=pnt1; axis.x=pnt2.x - pnt1.x; axis.y=pnt2.y - pnt1.y; axis.z=pnt2.z - pnt1.z; /* XXX should really be cone */ rt_fcylinder(scene, curtexture, ctr, axis, baserad); return NFFNOERR; }
void rt_polycylinder(void * tex, vector * points, int numpts, apiflt rad) { vector a; int i; if ((points == NULL) || (numpts == 0)) { return; } if (numpts > 0) { rt_sphere(tex, points[0], rad); if (numpts > 1) { for (i=1; i<numpts; i++) { a.x = points[i].x - points[i-1].x; a.y = points[i].y - points[i-1].y; a.z = points[i].z - points[i-1].z; rt_fcylinder(tex, points[i-1], a, rad); rt_sphere(tex, points[i], rad); } } } }
void rt_tri_cylinder(void * tex, vector ctr, vector axis, apiflt rad) { rt_fcylinder(tex, ctr, axis, rad); }