private Dictionary <Point3d, Point3dCollection> InitializeEndLpMesh()
        {
            var scanlines   = new Dictionary <Point3d, Point3dCollection>();
            var ld          = _properties.Parts.SelectedLd;
            var lp          = _properties.Parts.SelectedLp;
            var startLp     = _properties.Algorythim.SelectedStartLp;
            var useStartLp  = startLp != null;
            var cast        = _properties.Parts.SelectedCast;
            var spacing     = _properties.Algorythim.Options.DistanceBetweenLpAndLd;
            var startVector = new Vector3d(startLp?.StartOffset ?? _properties.Parts.SelectedLp.StartOffset, 0, 0);
            var startPoint  = _properties.StartPoint.Add(startVector);
            var incrVect    = new Vector2d(lp.Width + _properties.Algorythim.Options.DistanceBetweenLp, ld.Width + lp.Height + spacing * 2.0);

            if (useStartLp)
            {
                startPoint = startPoint.Add(new Vector3d(startLp.Width + _properties.Algorythim.Options.DistanceBetweenLp, 0, 0));
            }

            for (double y = startPoint.Y; y < _properties.MaxPoint.Y; y += incrVect.Y)
            {
                scanlines.Add(new Point3d(startPoint.X, y, 0), ScanLine.GetOutlineSurroudingPointsX(new Point3d(startPoint.X, y, 0), _properties.MaxPoint, lp.Width + _properties.Algorythim.Options.DistanceBetweenLp, _outline));
            }

            return(scanlines);
        }