/// <summary> /// In use marquee-tool. /// </summary> /// <param name="startingPoint"> The starting point. </param> /// <param name="point"> The point. </param> /// <param name="toolType"> The tool type.</param> /// <param name="isCenter"> Scaling around the center. </param> /// <param name="isSquare"> Equal in width and height. </param> public void Delta(Vector2 startingPoint, Vector2 point, MarqueeToolType toolType, bool isCenter, bool isSquare) { switch (toolType) { case MarqueeToolType.Rectangular: this.TransformerRect = new TransformerRect(startingPoint, point, isCenter, isSquare); break; case MarqueeToolType.Elliptical: this.TransformerRect = new TransformerRect(startingPoint, point, isCenter, isSquare); break; case MarqueeToolType.Polygonal: if (this.Points.Count == 1) { this.Points.Add(point); } else { this.Points[this.Points.Count - 1] = point; } break; case MarqueeToolType.FreeHand: this.Points.Add(point); break; } }
/// <summary> /// Started using marquee-tool. /// </summary> /// <param name="point"> The point. </param> /// <param name="toolType"> The tool type.</param> /// <param name="isCenter"> Scaling around the center. </param> /// <param name="isSquare"> Equal in width and height. </param> public void Start(Vector2 point, MarqueeToolType toolType, bool isCenter, bool isSquare) { switch (toolType) { case MarqueeToolType.Rectangular: this.IsStarted = true; this.TransformerRect = new TransformerRect(point, point, isCenter, isSquare); break; case MarqueeToolType.Elliptical: this.IsStarted = true; this.TransformerRect = new TransformerRect(point, point, isCenter, isSquare); break; case MarqueeToolType.Polygonal: if (this.IsStarted == false) { this.IsStarted = true; this.Points.Clear(); } this.Points.Add(point); break; case MarqueeToolType.FreeHand: this.IsStarted = true; this.Points.Clear(); this.Points.Add(point); break; } }
/// <summary> /// End up using the marquee-tool. /// </summary> /// <param name="startingPoint"></param> /// <param name="point"></param> /// <param name="toolType"></param> /// <param name="matrix"></param> /// <param name="isCenter"></param> /// <param name="isSquare"></param> /// <returns> Return **true** if the marquee mask need to redraw, otherwise **false**. </returns> public bool Complete(Vector2 startingPoint, Vector2 point, MarqueeToolType toolType, Matrix3x2 matrix, bool isCenter = false, bool isSquare = false) { switch (toolType) { case MarqueeToolType.Rectangular: this.IsStarted = false; this.TransformerRect = new TransformerRect(startingPoint, point, isCenter, isSquare); return(true); case MarqueeToolType.Elliptical: this.IsStarted = false; this.TransformerRect = new TransformerRect(startingPoint, point, isCenter, isSquare); return(true); case MarqueeToolType.Polygonal: Vector2 firstPoint = Vector2.Transform(this.Points.First(), matrix); if (this.Points.Count > 2 && Math.InNodeRadius(firstPoint, point)) { this.IsStarted = false; this.Points.Add(point); return(true); } else { this.Points[this.Points.Count - 1] = point; return(false); } case MarqueeToolType.FreeHand: this.IsStarted = false; this.Points.Add(point); return(true); } return(false); }
/// <summary> /// Draw a marquee-tool. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="resourceCreator"> The resource-creator. </param> /// <param name="toolType"> The marquee-tool type. </param> /// <param name="marqueeTool"> The marquee-tool. </param> public static void DrawMarqueeTool(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, MarqueeToolType toolType, MarqueeTool marqueeTool) { if (marqueeTool.IsStarted) { switch (toolType) { case MarqueeToolType.Rectangular: { Rect rect = marqueeTool.TransformerRect.ToRect(); drawingSession.DrawThickRectangle(rect); } break; case MarqueeToolType.Elliptical: { Vector2 centerPoint = marqueeTool.TransformerRect.Center; float width = marqueeTool.TransformerRect.Width / 2; float height = marqueeTool.TransformerRect.Height / 2; drawingSession.DrawThickEllipse(centerPoint, width, height); } break; case MarqueeToolType.Polygonal: { Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, points); drawingSession.DrawThickGeometry(canvasGeometry); Vector2 firstPoint = marqueeTool.Points.First(); Vector2 lastPoint = marqueeTool.Points.Last(); drawingSession.DrawNode5(firstPoint); drawingSession.DrawNode5(lastPoint); } break; case MarqueeToolType.FreeHand: { Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, points); drawingSession.DrawThickGeometry(canvasGeometry); } break; } } }
/// <summary> /// Fill a marquee mask with a marquee-tool. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="resourceCreator"> The resource-creator. </param> /// <param name="toolType"> The marquee-tool type. </param> /// <param name="marqueeTool"> The marquee-tool. </param> /// <param name="sourceRectangle"> The source rectangle. </param> /// <param name="compositeMode"> The composite mode. </param> public static void FillMarqueeMaskl(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, MarqueeToolType toolType, MarqueeTool marqueeTool, Rect sourceRectangle, MarqueeCompositeMode compositeMode) { switch (toolType) { case MarqueeToolType.Rectangular: drawingSession.DrawMarqueeToolRectangular(resourceCreator, marqueeTool.TransformerRect, sourceRectangle, compositeMode); break; case MarqueeToolType.Elliptical: drawingSession.DrawMarqueeToolEllipse(resourceCreator, marqueeTool.TransformerRect, sourceRectangle, compositeMode); break; case MarqueeToolType.Polygonal: case MarqueeToolType.FreeHand: Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, marqueeTool.Points.ToArray()); drawingSession.DrawMarqueeToolGeometry(resourceCreator, canvasGeometry, sourceRectangle, compositeMode); break; } }
/// <summary> /// Draw a marquee-tool. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="resourceCreator"> The resource-creator. </param> /// <param name="toolType"> The marquee-tool type. </param> /// <param name="marqueeTool"> The marquee-tool. </param> /// <param name="matrix"> The matrix. </param> public static void DrawMarqueeTool(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, MarqueeToolType toolType, MarqueeTool marqueeTool, Matrix3x2 matrix) { if (marqueeTool.IsStarted) { switch (toolType) { case MarqueeToolType.Rectangular: { TransformerRect transformerRect = marqueeTool.TransformerRect; CanvasGeometry canvasGeometry = transformerRect.ToRectangle(resourceCreator, matrix); drawingSession.DrawThickGeometry(canvasGeometry); } break; case MarqueeToolType.Elliptical: { TransformerRect transformerRect = marqueeTool.TransformerRect; CanvasGeometry canvasGeometry = transformerRect.ToEllipse(resourceCreator, matrix); drawingSession.DrawThickGeometry(canvasGeometry); } break; case MarqueeToolType.Polygonal: { Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, points); CanvasGeometry canvasGeometryTransform = canvasGeometry.Transform(matrix); drawingSession.DrawThickGeometry(canvasGeometryTransform); Vector2 firstPoint = Vector2.Transform(marqueeTool.Points.First(), matrix); Vector2 lastPoint = Vector2.Transform(marqueeTool.Points.Last(), matrix); drawingSession.DrawNode5(firstPoint); drawingSession.DrawNode5(lastPoint); } break; case MarqueeToolType.FreeHand: { Vector2[] points = marqueeTool.Points.ToArray(); CanvasGeometry canvasGeometry = CanvasGeometry.CreatePolygon(resourceCreator, points); CanvasGeometry canvasGeometryTransform = canvasGeometry.Transform(matrix); drawingSession.DrawThickGeometry(canvasGeometryTransform); } break; } } }