Exemple #1
0
        /// <summary>
        /// 添加一个转换关系
        /// </summary>
        /// <param name="SourceRect">原始区域矩形边框</param>
        /// <param name="DescRect">目标区域矩形边框</param>
        /// <remarks>新增的转换关系</remarks>
        public SimpleRectangleTransform Add(
            System.Drawing.Rectangle SourceRect,
            System.Drawing.Rectangle DescRect)
        {
            intItemsVersion = intGlobalItemsVersion++;
            SimpleRectangleTransform NewItem = new SimpleRectangleTransform(SourceRect, DescRect);

            myItems.Add(NewItem);
            return(NewItem);
        }
Exemple #2
0
        /// <summary>
        /// 添加一个转换关系
        /// </summary>
        /// <param name="SourceLeft">原始区域边框左端位置</param>
        /// <param name="SourceTop">原始区域边框顶端位置</param>
        /// <param name="SourceWidth">原始区域边框宽度</param>
        /// <param name="SourceHeight">原始区域边框高度</param>
        /// <param name="DescLeft">目标区域边框左端位置</param>
        /// <param name="DescTop">目标区域边框顶端位置</param>
        /// <param name="DescWidth">目标区域边框宽度</param>
        /// <param name="DescHeight">目标区域边框高度</param>
        public SimpleRectangleTransform Add(
            int SourceLeft,
            int SourceTop,
            int SourceWidth,
            int SourceHeight,
            int DescLeft,
            int DescTop,
            int DescWidth,
            int DescHeight)
        {
            intItemsVersion = intGlobalItemsVersion++;
            SimpleRectangleTransform NewItem = new SimpleRectangleTransform(
                new System.Drawing.Rectangle(SourceLeft, SourceTop, SourceWidth, SourceHeight),
                new System.Drawing.Rectangle(DescLeft, DescTop, DescWidth, DescHeight));

            myItems.Add(NewItem);
            return(NewItem);
        }
Exemple #3
0
 public int Add(SimpleRectangleTransform item)
 {
     intItemsVersion = intGlobalItemsVersion++;
     myItems.Add(item);
     return(myItems.Count - 1);
 }
Exemple #4
0
        /// <summary>
        /// 根据转换后的坐标位置查找转换信息对象
        /// </summary>
        /// <param name="x">点X坐标</param>
        /// <param name="y">点Y坐标</param>
        /// <param name="compatibility">是否启用兼容模式。若启用兼容模式,
        /// 如果没有找到和指定点精确匹配的坐标转换信息对象,
        /// 则尽量查找距离点最近的坐标转换信息对象</param>
        /// <param name="onlyIncludeEnabledItem">只对可用的对象进行处理</param>
        /// <param name="useSourceRect">模式,True:匹配源矩形;False:匹配目标矩形。</param>
        /// <returns>找到的坐标转换信息对象</returns>
        public SimpleRectangleTransform GetItemByPoint(
            float x,
            float y,
            bool useSourceRect,
            bool compatibility,
            bool onlyIncludeEnabledItem)
        {
            if (this.Count == 0)
            {
                // 列表为空,没法获得值
                return(null);
            }
            foreach (SimpleRectangleTransform item in this.myItems)
            {
                if (onlyIncludeEnabledItem && item.Enable == false)
                {
                    continue;
                }

                if (useSourceRect)
                {
                    if (item.SourceRectF.Contains(x, y))
                    {
                        return(item);
                    }
                }
                else
                {
                    if (item.DescRectF.Contains(x, y))
                    {
                        return(item);
                    }
                }
            }//foreach
            if (compatibility)
            {
                // 寻找距离最近的目标矩形区域
                float minLen = 0;
                int   index  = 0;
                for (int iCount = 0; iCount < this.myItems.Count; iCount++)
                {
                    SimpleRectangleTransform item = myItems[iCount];
                    if (onlyIncludeEnabledItem && item.Enable == false)
                    {
                        continue;
                    }

                    RectangleF rect = useSourceRect ? item.SourceRectF : item.DescRectF;
                    if (rect.Contains(x, y))
                    {
                        return(myItems[iCount]);
                    }
                    float len = RectangleCommon.GetDistance(x, y, rect);
                    if (iCount == 0 || len < minLen)
                    {
                        minLen = len;
                        index  = iCount;
                    }
                }//for
                return(myItems[index]);
            }
            else
            {
                return(null);
            }
        }