示例#1
0
        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);
        }