TSplineFace
using Autodesk.DesignScript.Interfaces;
using Autodesk.DesignScript.Runtime;
using System.Collections.Generic;
using System.Linq;
namespace Autodesk.DesignScript.Geometry.TSpline
{
    public class TSplineFace : Face
    {
        internal ITSplineFaceEntity TSplineFaceEntity => HostImpl as ITSplineFaceEntity;
        [IsVisibleInDynamoLibrary(false)]
        public new TSplineEdge[] Edges {
            get {
                return TSplineEdge.Wrap(TSplineFaceEntity.get_Edges(), true);
            }
        }
        [IsVisibleInDynamoLibrary(false)]
        public new TSplineVertex[] Vertices {
            get {
                return TSplineVertex.Wrap(TSplineFaceEntity.get_Vertices(), true);
            }
        }
        public TSplineUVNFrame UVNFrame => TSplineUVNFrame.Wrap(TSplineFaceEntity.get_UVNFrame(), true);
        public int Index => TSplineFaceEntity.get_Index();
        public int Valence => TSplineFaceEntity.get_Valence();
        public int Sides => TSplineFaceEntity.get_Sides();
        internal TSplineFace(ITSplineFaceEntity host, bool persist)
            : base(host, persist)
        {
        }
        public override string ToString()
        {
            return "TSplineFace(Index = " + Index + ", Valence = " + Valence + ", Sides = " + Sides + ")";
        }
        internal static TSplineFace Wrap(ITSplineFaceEntity host, bool persist = true)
        {
            if (host == null)
                return null;
            return new TSplineFace(host, persist);
        }
        internal static TSplineFace[] Wrap(ITSplineFaceEntity[] hosts, bool persist = true)
        {
            return (from x in hosts
            select Wrap(x, persist)).ToArray();
        }
        internal static TSplineFace[][] Wrap(ITSplineFaceEntity[][] hosts, bool persist = true)
        {
            return (from x in hosts
            select Wrap(x, persist)).ToArray();
        }
        internal static ITSplineFaceEntity[][] Unwrap(TSplineFace[][] o)
        {
            return (from x in o
            select Unwrap(x)).ToArray();
        }
        internal static ITSplineFaceEntity[] Unwrap(TSplineFace[] o)
        {
            return (from x in o
            select Unwrap(x)).ToArray();
        }
        internal static ITSplineFaceEntity[] Unwrap(IEnumerable<TSplineFace> o)
        {
            return (from x in o
            select Unwrap(x)).ToArray();
        }
        internal static ITSplineFaceEntity Unwrap(TSplineFace o)
        {
            return o.TSplineFaceEntity;
        }
        [MultiReturn(new string[] {
            "uvnFrame",
            "index",
            "valence",
            "sides"
        })]
        public Dictionary<string, object> Info()
        {
            Dictionary<string, object> dictionary = new Dictionary<string, object>();
            foreach (KeyValuePair<string, object> item in TSplineFaceEntity.Info()) {
                string key = item.Key;
                if (key == "uvnFrame")
                    dictionary[item.Key] = TSplineUVNFrame.Wrap(item.Value as ITSplineUVNFrameEntity, true);
                else
                    dictionary[item.Key] = item.Value;
            }
            return dictionary;
        }
    }
}
            