예제 #1
0
        private Extents3d findTile(double x, double y, EnumCorner corner, bool isX)
        {
            Point ptNext;

            if (isX)
            {
                x += getOffsetX(corner, 100);
            }
            else
            {
                y += getOffsetY(corner, 100);
            }
            ptNext = new Point(x, y, 0);
            var resTiles = TreeTiles.Nearest(ptNext, distTileMinInPanel);

            if (resTiles.Count == 0)
            {
                return(findTile(x, y, corner, isX));
            }
            else
            {
                var resVal = resTiles.First();
                return(resVal.Item2);
            }
        }
예제 #2
0
        private double getOffsetY(EnumCorner corner, double offset)
        {
            switch (corner)
            {
            case EnumCorner.LeftTop:
            case EnumCorner.RightTop:
                return(-offset);

            case EnumCorner.LeftLower:
            case EnumCorner.RightLower:
                return(offset);

            default:
                return(0);
            }
        }
예제 #3
0
        private double getCoordY(Extents3d extentsByTile, EnumCorner corner)
        {
            switch (corner)
            {
            case EnumCorner.LeftLower:
            case EnumCorner.RightLower:
                return(extentsByTile.MinPoint.Y);

            case EnumCorner.LeftTop:
            case EnumCorner.RightTop:
                return(extentsByTile.MaxPoint.Y);

            default:
                return(0);
            }
        }
예제 #4
0
        private Point3d getCoordTileNoEnd(Point3d pt, EnumCorner corner)
        {
            double x        = 0;
            Point  pt1X     = new Point(pt.X + getOffsetX(corner, endOffset), pt.Y, 0);
            var    resTiles = TreeTiles.Nearest(pt1X, distTileMinInPanel);

            if (resTiles.Count == 0)
            {
                // Нет плитки - торец!
                // Найти первую не торцевую плитку
                var extTileX = findTile(pt.X + getOffsetX(corner, endOffset), pt.Y, corner, true);
                x = getCoordX(extTileX, corner);
            }
            else
            {
                // Есть плитки - не торец
                x = pt.X;
            }

            double y    = 0;
            Point  pt1Y = new Point(pt.X, pt.Y + getOffsetY(corner, endOffset), 0);

            resTiles = TreeTiles.Nearest(pt1Y, distTileMinInPanel);
            if (resTiles.Count == 0)
            {
                // Нет плитки - торец!
                // Найти первую не торцевую плитку
                var extTileY = findTile(pt.X, pt.Y + getOffsetY(corner, endOffset), corner, false);
                y = getCoordY(extTileY, corner);
            }
            else
            {
                // Есть плитки - не торец
                y = pt.Y;
            }
            return(new Point3d(x, y, 0));
        }
예제 #5
0
        private double getOffsetY(EnumCorner corner, double offset)
        {
            switch (corner)
            {
                case EnumCorner.LeftTop:
                case EnumCorner.RightTop:
                    return -offset;

                case EnumCorner.LeftLower:
                case EnumCorner.RightLower:
                    return offset;

                default:
                    return 0;
            }
        }
예제 #6
0
        private double getCoordY(Extents3d extentsByTile, EnumCorner corner)
        {
            switch (corner)
            {
                case EnumCorner.LeftLower:
                case EnumCorner.RightLower:
                    return extentsByTile.MinPoint.Y;

                case EnumCorner.LeftTop:
                case EnumCorner.RightTop:
                    return extentsByTile.MaxPoint.Y;

                default:
                    return 0;
            }
        }
예제 #7
0
        private Point3d getCoordTileNoEnd(Point3d pt, EnumCorner corner)
        {
            double x = 0;
            Point pt1X = new Point(pt.X + getOffsetX(corner, endOffset), pt.Y, 0);
            var resTiles = TreeTiles.Nearest(pt1X, distTileMinInPanel);
            if (resTiles.Count == 0)
            {
                // Нет плитки - торец!
                // Найти первую не торцевую плитку
                var extTileX = findTile(pt.X + getOffsetX(corner, endOffset), pt.Y, corner, true);
                x = getCoordX(extTileX, corner);
            }
            else
            {
                // Есть плитки - не торец
                x = pt.X;
            }

            double y = 0;
            Point pt1Y = new Point(pt.X, pt.Y + getOffsetY(corner, endOffset), 0);
            resTiles = TreeTiles.Nearest(pt1Y, distTileMinInPanel);
            if (resTiles.Count == 0)
            {
                // Нет плитки - торец!
                // Найти первую не торцевую плитку
                var extTileY = findTile(pt.X, pt.Y + getOffsetY(corner, endOffset), corner, false);
                y = getCoordY(extTileY, corner);
            }
            else
            {
                // Есть плитки - не торец
                y = pt.Y;
            }
            return new Point3d(x, y, 0);
        }
예제 #8
0
 private Extents3d findTile(double x, double y, EnumCorner corner, bool isX)
 {
     Point ptNext;
     if (isX)
     {
         x += getOffsetX(corner, 100);
     }
     else
     {
         y += getOffsetY(corner, 100);
     }
     ptNext = new Point(x, y, 0);
     var resTiles = TreeTiles.Nearest(ptNext, distTileMinInPanel);
     if (resTiles.Count == 0)
     {
         return findTile(x, y, corner, isX);
     }
     else
     {
         var resVal = resTiles.First();
         return resVal.Item2;
     }
 }