public static ConwayPoly GyroelongatedBirotunda() { int sides = 10; float bodyHeight = _CalcAntiprismHeight(sides); ConwayPoly poly = Rotunda(); ConwayPoly baseDome = poly.Duplicate(); var boundaryEdges1 = poly.Faces.Remove(poly.Faces.Last()); baseDome.Mirror(Vector3.up, -bodyHeight); baseDome.Halfedges.Flip(); baseDome = baseDome.Rotate(Vector3.up, 36f / 2f); poly.Append(baseDome); var boundaryEdges2 = poly.Faces.Remove(poly.Faces.Last()); boundaryEdges2.Reverse(); for (var i = 0; i < boundaryEdges1.Count; i++) { var edge1 = boundaryEdges1[i]; var edge2 = boundaryEdges2[i]; var side1 = new List <Vertex> { edge1.Vertex, edge1.Prev.Vertex, edge2.Prev.Vertex }; poly.Faces.Add(side1); poly.FaceRoles.Add(ConwayPoly.Roles.New); poly.FaceTags.Add(new HashSet <Tuple <string, ConwayPoly.TagType> >()); var side2 = new List <Vertex> { edge2.Vertex, edge2.Prev.Vertex, edge1.Prev.Vertex, }; poly.Faces.Add(side2); poly.FaceRoles.Add(ConwayPoly.Roles.NewAlt); poly.FaceTags.Add(new HashSet <Tuple <string, ConwayPoly.TagType> >()); } poly.Halfedges.MatchPairs(); return(poly); }