コード例 #1
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);
            }
        }