public PointGetter(CurvesTopology crvTopology, int fromIndex, SearchMode mode)
        {
            _crvTopology = crvTopology;
            _fromIndex   = fromIndex;

            if (!Enum.IsDefined(typeof(SearchMode), mode))
            {
                throw new ArgumentException("Enum is undefined.", "mode");
            }
            _sm = mode;

            if (fromIndex != -1)
            {
                switch (mode)
                {
                case SearchMode.CurveLength:
                    _distances = crvTopology.MeasureAllEdgeLengths();
                    break;

                case SearchMode.LinearDistance:
                    _distances = crvTopology.MeasureAllEdgeLinearDistances();
                    break;

                case SearchMode.Links:
                    _distances = null;
                    break;

                default:
                    throw new ApplicationException("Behaviour for this enum value is undefined.");
                }
            }

            _pathSearchMethod = PathMethod.FromMode(_sm, _crvTopology, _distances);
        }
        public TrackingPointGetter(string prompt, CurvesTopology crvTopology, int fromIndex, SearchMode mode)
        {
            _crvTopology = crvTopology;
            _fromIndex = fromIndex;

            if(!Enum.IsDefined(typeof(SearchMode), mode))
                throw new ArgumentException("Enum is undefined.", "mode");
            _sm = mode;

            if (!string.IsNullOrEmpty(prompt))
                _getPoint.SetCommandPrompt(prompt);

            if (fromIndex != -1)
            {
                switch(mode)
                {
                    case SearchMode.CurveLength:
                        _distances = crvTopology.MeasureAllEdgeLengths();
                        break;
                    case SearchMode.LinearDistance:
                        _distances = crvTopology.MeasureAllEdgeLinearDistances();
                        break;
                    case SearchMode.Links:
                        _distances = null;
                        break;
                    default:
                        throw new ApplicationException("Behaviour for this enum value is undefined.");
                }
            }
            _getPoint.DynamicDraw += DynamicDraw;

            _pathSearchMethod = PathMethod.FromMode(_sm, _crvTopology, _distances);
        }
        public TrackingPointGetter(string prompt, CurvesTopology crvTopology, int fromIndex, SearchMode mode)
        {
            _crvTopology = crvTopology;
            _fromIndex   = fromIndex;

            if (!Enum.IsDefined(typeof(SearchMode), mode))
            {
                throw new ArgumentException("Enum is undefined.", "mode");
            }
            _sm = mode;


            if (!string.IsNullOrEmpty(prompt))
            {
                _getPoint.SetCommandPrompt(prompt);
            }

            if (fromIndex != -1)
            {
                switch (mode)
                {
                case SearchMode.CurveLength:
                    _distances = crvTopology.MeasureAllEdgeLengths();
                    break;

                case SearchMode.LinearDistance:
                    _distances = crvTopology.MeasureAllEdgeLinearDistances();
                    break;

                case SearchMode.Links:
                    _distances = null;
                    break;

                default:
                    throw new ApplicationException("Behaviour for this enum value is undefined.");
                }
            }
            _getPoint.DynamicDraw += DynamicDraw;

            _pathSearchMethod = PathMethod.FromMode(_sm, _crvTopology, _distances);
        }