Ejemplo n.º 1
0
static void
createface(void)
{
  int i;

  facedl = glGenLists(1);
  face_first = FALSE;
  glNewList(facedl, GL_COMPILE);
  glRotatef(-90, 1, 0, 0);
  glBegin(GL_TRIANGLES);
  for (i = 0; i < numTriangles; i++) {
    createvertex(face[i][0], face[i][3]);
    createvertex(face[i][1], face[i][4]);
    createvertex(face[i][2], face[i][5]);
  }
  glEnd();
  glEndList();
}
Ejemplo n.º 2
0
edge_t *createedge (edgedata_t *edp, char *name) {
    edge_t *ememp, *ep;
    vertex_t *v0p, *v1p;

    ememp = ep = NULL;
    if (!(ememp = vmalloc (evm, sizeof (edge_t))))
        goto abortcreateedge;
    ememp->tlid = edp->tlid;
    if (!(ep = dtinsert (edgedict, ememp)))
        goto abortcreateedge;
    if (ep != ememp) {
        SUwarning (2, "createedge", "duplicate edge %d", edp->tlid);
        if (!edp->onesided || !ep->onesided) {
            SUwarning (
                1, "createedge", "cannot handle two-sided duplicate edge %d",
                edp->tlid
            );
            return ep;
        }
        ep->onesided = 0;
        if (ep->statel == 0) {
            if (edp->statel != 0) {
                ep->zipl = edp->zipl;
                ep->npanxxlocl = edp->npanxxlocl;
                ep->statel = edp->statel;
                ep->countyl = edp->countyl;
                ep->ctbnal = edp->ctbnal;
                ep->blkl = edp->blkl;
                ep->blksl = edp->blksl;
            } else {
                ep->zipl = edp->zipr;
                ep->npanxxlocl = edp->npanxxlocr;
                ep->statel = edp->stater;
                ep->countyl = edp->countyr;
                ep->ctbnal = edp->ctbnar;
                ep->blkl = edp->blkr;
                ep->blksl = edp->blksr;
            }
        } else {
            if (edp->statel != 0) {
                ep->zipr = edp->zipl;
                ep->npanxxlocr = edp->npanxxlocl;
                ep->stater = edp->statel;
                ep->countyr = edp->countyl;
                ep->ctbnar = edp->ctbnal;
                ep->blkr = edp->blkl;
                ep->blksr = edp->blksl;
            } else {
                ep->zipr = edp->zipr;
                ep->npanxxlocr = edp->npanxxlocr;
                ep->stater = edp->stater;
                ep->countyr = edp->countyr;
                ep->ctbnar = edp->ctbnar;
                ep->blkr = edp->blkr;
                ep->blksr = edp->blksr;
            }
        }
        return ep;
    }
    ep->onesided = edp->onesided;
    ep->v0p = ep->v1p = NULL;
    if (!(ep->sp = createstring (name)))
        goto abortcreateedge;
    ep->cfccid = edp->cfccid;
    ep->zipl = edp->zipl, ep->zipr = edp->zipr;
    ep->npanxxlocl = edp->npanxxlocl, ep->npanxxlocr = edp->npanxxlocr;
    ep->statel = edp->statel, ep->stater = edp->stater;
    ep->countyl = edp->countyl, ep->countyr = edp->countyr;
    ep->ctbnal = edp->ctbnal, ep->ctbnar = edp->ctbnar;
    ep->blkl = edp->blkl, ep->blkr = edp->blkr;
    ep->blksl = edp->blksl, ep->blksr = edp->blksr;
    if (
        !(v0p = createvertex (edp->xy0)) || !(v1p = createvertex (edp->xy1)) ||
        linkedgenvertices (ep, v0p, v1p) == -1
    )
        goto abortcreateedge;
    ep->p0p = ep->p1p = NULL;
    ep->p0i = ep->p1i = -1;
    ep->xys = NULL;
    ep->xyn = 0;
    ep->mark = 0;
    return ep;

abortcreateedge:
    SUwarning (1, "createedge", "create failed for edge %d", edp->tlid);
    if (ep) {
        if (ep == ememp)
            dtdelete (edgedict, ep);
        if (ep->sp)
            destroystring (ep->sp);
        if (ep->v0p || ep->v1p)
            unlinkedgenvertices (ep);
        if (ep->v0p)
            destroyvertex (ep->v0p);
        if (ep->v1p)
            destroyvertex (ep->v1p);
    }
    if (ememp)
        vmfree (evm, ememp);
    return NULL;
}