/// <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); }
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); }