/// <summary>
        /// Create a verlet link.
        /// </summary>
        /// <param name="a">First verlet point</param>
        /// <param name="b">First verlet point</param>
        /// <param name="restingDistance">Resting distance</param>
        /// <param name="minimalDistance">Minimal link distance. Use `-1` to disable.</param>
        /// <param name="maximalDistance">Maximal link distance. Use `-1` to disable.</param>
        /// <param name="tearSensitivity">Distance required to break the link. Use `-1` to create an unbreakable link.</param>
        /// <param name="tearSensitivityFactor">Distance factor required to break the link. Use `-1` to create an unbreakable link.</param>
        /// <param name="stiffness">Stiffness of the link</param>
        /// <param name="width">Width of the link</param>
        /// <param name="color">Link color</param>
        /// <param name="visible">Show link</param>
        /// <returns>Verlet link</returns>
        public VerletLink CreateLink(
            VerletPoint a,
            VerletPoint b,
            float?restingDistance       = null,
            float?minimalDistance       = null,
            float?maximalDistance       = null,
            float?tearSensitivity       = null,
            float?tearSensitivityFactor = null,
            float?stiffness             = null,
            float?width  = null,
            Color?color  = null,
            bool?visible = null)
        {
            var link = new VerletLink(this, a, b);

            a.AddLink(link);
            AddChild(link);

            link.Visible         = visible ?? link.Visible;
            link.RestingDistance = restingDistance ?? link.RestingDistance;
            link.MinimalDistance = minimalDistance ?? link.MinimalDistance;
            link.MaximalDistance = maximalDistance ?? link.MaximalDistance;
            link.TearSensitivity = tearSensitivity ?? link.TearSensitivity;
            link.Stiffness       = stiffness ?? link.Stiffness;
            link.Modulate        = color ?? link.Modulate;
            link.Width           = width ?? link.Width;

            if (tearSensitivityFactor.HasValue)
            {
                link.TearSensitivity = link.RestingDistance * tearSensitivityFactor.Value;
            }

            return(link);
        }
 /// <summary>
 /// Mark a link to be removed next frame.
 /// </summary>
 /// <param name="link">Verlet link</param>
 public void QueueLinkRemoval(VerletLink link)
 {
     if (!linksToRemove.Contains(link))
     {
         linksToRemove.Add(link);
     }
 }
        private void RemoveLink(VerletLink link)
        {
            foreach (VerletPoint p in points)
            {
                p.RemoveLink(link);
            }

            RemoveChild(link);
        }