/// <summary>
        ///   Receives click events. Called at mouse down and at mouse up.
        /// </summary>
        /// <param name = "mouseData"></param>
        protected override void OnMouseDownAction(Mouse3DPosition mouseData)
        {
            var pos = HandleEditingPoints(mouseData);

            if (pos != -1)
            {
                if (mouseData.ShiftDown && pos % 3 == 0 && pos != Points.Count - 1)
                {
                    switch (pos)
                    {
                    case 0:
                        Points.RemoveAt(0);
                        SplineControlPoints.RemoveRange(0, 3);
                        break;

                    default:
                        Points.RemoveAt(pos / 3);
                        SplineControlPoints.RemoveRange(pos - 1, 3);
                        break;
                    }
                    PreviewSpinePath();
                }
                EditedPointIndex = pos;
                ShowHint("Move mouse to set the coordinate");
                return;
            }
            if (Points.Count <= 2)
            {
                UpdateBasePoint(Points.Count - 1);
            }
            SetLastPointAsMouse(mouseData);
            PreviewSpinePath();
            Points.Add(new Point3D());
        }
 /// <summary>
 /// Constructor
 /// </summary>
 public ControlledSpline( )
 {
     m_ControlPoints = new SplineControlPoints( this );
 }