/* See {TriangulatedCube.h} */ #include /* Last edited on 2007-02-04 18:34:42 by stolfi */ #define TriangulatedCube_C_COPYRIGHT \ "Copyright © 2000,2007 Universidade Estadual de Campinas (UNICAMP)" #include #include #include #include #include #include #include #include #include Place_t MakeCubeTriang(uint order) { /* [!!! Unify with {MakeCubeT} !!!] */ EightPlaces_t a = MakeTetraTopo(order,order); EightPlaces_t b = MakeTetraTopo(order,order); EightPlaces_t c = MakeTetraTopo(order,order); EightPlaces_t d = MakeTetraTopo(order,order); EightPlaces_t e = MakeTetraTopo(order,order); EightPlaces_t f = MakeTetraTopo(order,order); Glue(Spin(b.p[1]),a.p[0],order,TRUE); Glue(Spin(c.p[1]),b.p[0],order,TRUE); Glue(Spin(d.p[1]),c.p[0],order,TRUE); Glue(Spin(e.p[1]),d.p[0],order,TRUE); Glue(Spin(f.p[1]),e.p[0],order,TRUE); Glue(Spin(a.p[1]),f.p[0],order,TRUE); return a.p[1]; } SixPlaces_t MakeCubeT(uint order) { /* [!!! Unify with {MakeCubeTriang} !!!] */ SixPlaces_t co; EightPlaces_t ca = MakeTetraTopo(order,order); EightPlaces_t cb = MakeTetraTopo(order,order); EightPlaces_t cc = MakeTetraTopo(order,order); EightPlaces_t cd = MakeTetraTopo(order,order); EightPlaces_t ce = MakeTetraTopo(order,order); EightPlaces_t cf = MakeTetraTopo(order,order); Glue(Spin(cb.p[1]),ca.p[0],order,TRUE); Glue(Spin(cc.p[1]),cb.p[0],order,TRUE); Glue(Spin(cd.p[1]),cc.p[0],order,TRUE); Glue(Spin(ce.p[1]),cd.p[0],order,TRUE); Glue(Spin(cf.p[1]),ce.p[0],order,TRUE); Glue(Spin(ca.p[1]),cf.p[0],order,TRUE); co.p[0] = cb.p[3]; co.p[1] = cc.p[3]; co.p[2] = cd.p[3]; co.p[3] = ce.p[3]; co.p[4] = cf.p[3]; co.p[5] = ca.p[3]; return co; } Place_t GlueCubeT(Place_t a, Place_t b) { Place_t ta[2]; Place_t tb[2]; ta[0] = a; ta[1] = Clock(PrevE(PrevF(NextE(a)))); tb[0] = b; tb[1] = Clock(PrevE(NextF(NextE(b)))); assert(ta[1] != a); assert(tb[1] != b); Meld(tb[0], ta[0]); /* Update the edge slots for {i == 0} */ SetRingEdgeInfo(ta[0], PEdge(ta[0])); SetRingEdgeInfo(NextE(ta[0]), PEdge(NextE(ta[0]))); SetRingEdgeInfo(PrevE(ta[0]), PEdge(PrevE(ta[0]))); /* Update the cell slots for {i == 0} */ SetPneg(ta[0], PnegP(tb[0])); SetPneg(NextE(ta[0]), PnegP(NextE(tb[0]))); SetPneg(NextE(NextE(ta[0])), PnegP(NextE(NextE(tb[0])))); Meld(tb[1],ta[1]); /* Update the edge slots */ SetRingEdgeInfo(ta[1], PEdge(ta[1])); SetRingEdgeInfo(NextE(ta[1]), PEdge(NextE(ta[1]))); SetRingEdgeInfo(PrevE(ta[1]), PEdge(PrevE(ta[1]))); /* Update the cell slots */ SetPneg(ta[1], PnegP(tb[1])); SetPneg(NextE(ta[1]), PnegP(NextE(tb[1]))); SetPneg(NextE(NextE(ta[1])), PnegP(NextE(NextE(tb[1])))); return a; } #define TriangulatedCube_C_author \ "Created by L. A. P. Lozada, 2000.\n" \ "Modification history:\n" \ " 01-02-2007 : Got {MakeCubeTriang} from {MakeComplexWf.c}.\n" \ " 01-02-2007 : Got {MakeCubeT}, {GlueCubeT} from {MakeObjectTriang.c}."