namespace TriangleNet.Meshing
{
    using System.Collections.Generic;
    using TriangleNet.Topology;
    using TriangleNet.Geometry;
    /// 
    /// Mesh interface.
    /// 
    public interface IMesh
    {
        /// 
        /// Gets the vertices of the mesh.
        /// 
        ICollection Vertices { get; }
        /// 
        /// Gets the edges of the mesh.
        /// 
        IEnumerable Edges { get; }
        /// 
        /// Gets the segments (constraint edges) of the mesh.
        /// 
        ICollection Segments { get; }
        /// 
        /// Gets the triangles of the mesh.
        /// 
        ICollection Triangles { get; }
        /// 
        /// Gets the holes of the mesh.
        /// 
        IList Holes { get; }
        /// 
        /// Gets the bounds of the mesh.
        /// 
        Rectangle Bounds { get; }
        /// 
        /// Renumber mesh vertices and triangles.
        /// 
        void Renumber();
        /// 
        /// Refine the mesh.
        /// 
        /// The quality constraints.
        /// 
        /// A value indicating, if the refined mesh should be Conforming Delaunay.
        /// 
        void Refine(QualityOptions quality, bool delaunay);
    }
}