Esempio n. 1
0
        /// <summary>
        /// 得到以某视图坐标为中心的视图矩形;
        /// </summary>
        /// <param name="nativeCenterRectPoint">以视图为准的中心坐标</param>
        /// <param name="width">宽度</param>
        /// <param name="height">高度</param>
        /// <returns></returns>
        public static Rectangle2D2 GetNativeSuroundingScreenRect(Vector2D nativeCenterRectPoint, double width, double height)
        {
            if (nativeCenterRectPoint == null)
            {
                throw new ArgumentNullException(nameof(nativeCenterRectPoint));
            }

            var surroundingRect = Rectangle2D2.CreateEmpty();

            GetNativeSuroundingScreenRect(nativeCenterRectPoint, width, height, surroundingRect);
            return(surroundingRect);
        }
Esempio n. 2
0
        public ISnapShape MatchSnapShape(DrawObject[] drawObjects, Vector2D position, ICanvasContext canvasContext)
        {
            if (drawObjects == null)
            {
                return(null);
            }

#if DEBUG
            //position = new Vector2D(0, 0);
#endif

            var screenPosition = canvasContext.CanvasProxy.ToScreen(position);
            var rect           = Rectangle2D2.CreateEmpty();

            //双游标两两遍历;
            for (int i = 0; i < drawObjects.Length - 1; i++)
            {
                for (int j = i + 1; j < drawObjects.Length; j++)
                {
                    var intersectPositions = DrawObjectIntersectRule.GetIntersectPositions(drawObjects[i], drawObjects[j]);
                    if (intersectPositions == null)
                    {
                        continue;
                    }

                    foreach (var intersectPosition in intersectPositions)
                    {
                        NativeGeometryExtensions.GetNativeSuroundingScreenRect(
                            canvasContext.CanvasProxy.ToScreen(intersectPosition),
                            TolerantedScreenLength,
                            TolerantedScreenLength,
                            rect
                            );


                        if (rect.Contains(screenPosition))
                        {
                            return(new IntersectSnapPoint(intersectPosition));
                        }
                    }
                }
            }

            return(null);
        }