private static void DrawCropCore(CanvasDrawingSession drawingSession, Vector2 leftTop, Vector2 rightTop, Vector2 rightBottom, Vector2 leftBottom, Windows.UI.Color accentColor) { // Line CanvasDrawingSessionExtensions.DrawBoundCore(drawingSession, leftTop, rightTop, rightBottom, leftBottom, accentColor); // Center Vector2 centerLeft = (leftTop + leftBottom) / 2; Vector2 centerTop = (leftTop + rightTop) / 2; Vector2 centerRight = (rightTop + rightBottom) / 2; Vector2 centerBottom = (leftBottom + rightBottom) / 2; // Vertical Horizontal Vector2 vertical = centerBottom - centerTop; Vector2 horizontal = centerRight - centerLeft; Vector2 verticalUnit = vertical / vertical.Length(); Vector2 horizontalUnit = horizontal / horizontal.Length(); const float length = 10; Vector2 verticalLength = verticalUnit * length; Vector2 horizontalLength = horizontalUnit * length; const float space = 2; Vector2 verticalSpace = verticalUnit * space; Vector2 horizontalSpace = horizontalUnit * space; // Scale2 { drawingSession.FillCircle(leftTop, 10, accentColor); drawingSession.FillCircle(leftTop, 9, Windows.UI.Colors.White); drawingSession.FillCircle(rightTop, 10, accentColor); drawingSession.FillCircle(rightTop, 9, Windows.UI.Colors.White); drawingSession.FillCircle(rightBottom, 10, accentColor); drawingSession.FillCircle(rightBottom, 9, Windows.UI.Colors.White); drawingSession.FillCircle(leftBottom, 10, accentColor); drawingSession.FillCircle(leftBottom, 9, Windows.UI.Colors.White); } // Scale1 if (FanKit.Math.OutNodeDistance(centerLeft, centerRight)) { drawingSession.FillCircle(centerTop, 10, accentColor); drawingSession.FillCircle(centerTop, 9, Windows.UI.Colors.White); drawingSession.FillCircle(centerBottom, 10, accentColor); drawingSession.FillCircle(centerBottom, 9, Windows.UI.Colors.White); } if (FanKit.Math.OutNodeDistance(centerTop, centerBottom)) { drawingSession.FillCircle(centerLeft, 10, accentColor); drawingSession.FillCircle(centerLeft, 9, Windows.UI.Colors.White); drawingSession.FillCircle(centerRight, 10, accentColor); drawingSession.FillCircle(centerRight, 9, Windows.UI.Colors.White); } }
private static void DrawCradCore(CanvasDrawingSession drawingSession, ICanvasImage previousImage, CanvasTransformer canvasTransformer, Windows.UI.Color shadowColor, float shadowBlurAmount, float shadowOffset) { float width = canvasTransformer.Width * canvasTransformer.Scale; float height = canvasTransformer.Height * canvasTransformer.Scale; Rect rect = new Rect(-width / 2, -height / 2, width, height); Matrix3x2 matrix = canvasTransformer.GetMatrix(MatrixTransformerMode.VirtualToControl); CanvasDrawingSessionExtensions.DrawCradCore(drawingSession, previousImage, rect, matrix, shadowColor, shadowBlurAmount, shadowOffset); }
private static void DrawMarqueeToolEllipse(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, TransformerRect transformerRect, Rect sourceRectangle, MarqueeCompositeMode compositeMode = MarqueeCompositeMode.New) { switch (compositeMode) { case MarqueeCompositeMode.New: { drawingSession.Clear(Windows.UI.Colors.Transparent); Vector2 centerPoint = transformerRect.Center; float width = transformerRect.Width / 2; float height = transformerRect.Height / 2; drawingSession.FillEllipse(centerPoint, width, height, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Add: { Vector2 centerPoint = transformerRect.Center; float width = transformerRect.Width / 2; float height = transformerRect.Height / 2; drawingSession.FillEllipse(centerPoint, width, height, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Subtract: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationOut; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Intersect: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationIn; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Xor: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolEllipse(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.Xor; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; } }
private static void DrawBoundNodesCore(CanvasDrawingSession drawingSession, Vector2 leftTop, Vector2 rightTop, Vector2 rightBottom, Vector2 leftBottom, Windows.UI.Color accentColor, bool disabledRadian) { // Line CanvasDrawingSessionExtensions.DrawBoundCore(drawingSession, leftTop, rightTop, rightBottom, leftBottom, accentColor); // Center Vector2 centerLeft = (leftTop + leftBottom) / 2; Vector2 centerTop = (leftTop + rightTop) / 2; Vector2 centerRight = (rightTop + rightBottom) / 2; Vector2 centerBottom = (leftBottom + rightBottom) / 2; // Scale2 drawingSession.DrawNode2(leftTop, accentColor); drawingSession.DrawNode2(rightTop, accentColor); drawingSession.DrawNode2(rightBottom, accentColor); drawingSession.DrawNode2(leftBottom, accentColor); if (disabledRadian == false) { // Outside Vector2 outsideLeft = Math.GetOutsidePointInTransformer(centerLeft, centerRight); Vector2 outsideTop = Math.GetOutsidePointInTransformer(centerTop, centerBottom); Vector2 outsideRight = Math.GetOutsidePointInTransformer(centerRight, centerLeft); Vector2 outsideBottom = Math.GetOutsidePointInTransformer(centerBottom, centerTop); // Radian drawingSession.DrawThickLine(outsideTop, centerTop); drawingSession.DrawNode(outsideTop, accentColor); // Skew // drawingSession.DrawNode2(outsideTop, accentColor); // drawingSession.DrawNode2(outsideLeft, accentColor); drawingSession.DrawNode2(outsideRight, accentColor); drawingSession.DrawNode2(outsideBottom, accentColor); } // Scale1 if (Math.OutNodeDistance(centerLeft, centerRight)) { drawingSession.DrawNode2(centerTop, accentColor); drawingSession.DrawNode2(centerBottom, accentColor); } if (Math.OutNodeDistance(centerTop, centerBottom)) { drawingSession.DrawNode2(centerLeft, accentColor); drawingSession.DrawNode2(centerRight, accentColor); } }
private static void DrawMarqueeToolRectangular(this CanvasDrawingSession drawingSession, ICanvasResourceCreator resourceCreator, TransformerRect transformerRect, Rect sourceRectangle, MarqueeCompositeMode compositeMode = MarqueeCompositeMode.New) { switch (compositeMode) { case MarqueeCompositeMode.New: { drawingSession.Clear(Windows.UI.Colors.Transparent); Rect rect = transformerRect.ToRect(); drawingSession.FillRectangle(rect, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Add: { Rect rect = transformerRect.ToRect(); drawingSession.FillRectangle(rect, Windows.UI.Colors.DodgerBlue); } break; case MarqueeCompositeMode.Subtract: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationOut; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Intersect: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.DestinationIn; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; case MarqueeCompositeMode.Xor: { CanvasCommandList canvasCommandList = CanvasDrawingSessionExtensions.GetMarqueeToolRectangular(drawingSession, resourceCreator, transformerRect); CanvasComposite canvasComposite = CanvasComposite.Xor; drawingSession.DrawImage(canvasCommandList, 0, 0, sourceRectangle, 1, CanvasImageInterpolation.Linear, canvasComposite); } break; } }
/// <summary> /// Draw a Axis-XY. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="canvasTransformer"> The canvas-transformer. </param> /// <param name="axisLine"> The distance between two lines. </param> /// <param name="axisThickLine"> The distance between two thick lines. </param> /// <param name="axisColor"> The color of the axis. </param> /// <param name="axisLineColor"> The color of the axis line. </param> /// <param name="axisThickLineColor"> The color of the axis thick line. </param> /// <param name="textColor"> The color of the text. </param> /// <param name="textFormat"> The format of the text. </param> public static void DrawAxis(this CanvasDrawingSession drawingSession, CanvasTransformer canvasTransformer, float axisLine, float axisThickLine, Windows.UI.Color axisColor, Windows.UI.Color axisLineColor, Windows.UI.Color axisThickLineColor, Windows.UI.Color textColor, CanvasTextFormat textFormat) => CanvasDrawingSessionExtensions.DrawAxisCore(drawingSession, canvasTransformer, axisLine, axisThickLine, axisColor, axisLineColor, axisThickLineColor, textColor, textFormat);
/// <summary> /// Draw a Axis-XY. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="canvasTransformer"> The canvas-transformer. </param> public static void DrawAxis(this CanvasDrawingSession drawingSession, CanvasTransformer canvasTransformer) => CanvasDrawingSessionExtensions.DrawAxisCore(drawingSession, canvasTransformer, CanvasDrawingSessionExtensions.AxisLine, CanvasDrawingSessionExtensions.AxisThickLine, CanvasDrawingSessionExtensions.AxisColor, CanvasDrawingSessionExtensions.AxisLineColor, CanvasDrawingSessionExtensions.AxisThickLineColor, CanvasDrawingSessionExtensions.TextColor, CanvasDrawingSessionExtensions.TextFormat);
/// <summary> /// Draw nodes and lines on bound,just like【由】. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> The transformer. </param> /// <param name="matrix"> The matrix. </param> /// <param name="accentColor"> The accent color. </param> /// <param name="disabledRadian"> Disable the rotation angle. </param> public static void DrawBoundNodes(this CanvasDrawingSession drawingSession, Transformer transformer, Matrix3x2 matrix, Windows.UI.Color accentColor, bool disabledRadian = false) => CanvasDrawingSessionExtensions.DrawBoundNodesCore(drawingSession, Vector2.Transform(transformer.LeftTop, matrix), Vector2.Transform(transformer.RightTop, matrix), Vector2.Transform(transformer.RightBottom, matrix), Vector2.Transform(transformer.LeftBottom, matrix), accentColor, disabledRadian);
/// <summary> /// Draw nodes and lines on bound,just like【由】. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> The transformer. </param> /// <param name="disabledRadian"> Disable the rotation angle. </param> public static void DrawBoundNodes(this CanvasDrawingSession drawingSession, Transformer transformer, bool disabledRadian = false) => CanvasDrawingSessionExtensions.DrawBoundNodesCore(drawingSession, transformer.LeftTop, transformer.RightTop, transformer.RightBottom, transformer.LeftBottom, Windows.UI.Colors.DodgerBlue, disabledRadian);
/// <summary> /// Draw lines on bound. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> The transformer. </param> /// <param name="matrix"> The matrix. </param> /// <param name="accentColor"> The accent color. </param> public static void DrawBound(this CanvasDrawingSession drawingSession, Transformer transformer, Matrix3x2 matrix, Windows.UI.Color accentColor) => CanvasDrawingSessionExtensions.DrawBoundCore(drawingSession, Vector2.Transform(transformer.LeftTop, matrix), Vector2.Transform(transformer.RightTop, matrix), Vector2.Transform(transformer.RightBottom, matrix), Vector2.Transform(transformer.LeftBottom, matrix), accentColor);
private static void DrawCradCore(CanvasDrawingSession drawingSession, ICanvasImage previousImage, Rect cropRect, Matrix3x2 matrix, Windows.UI.Color shadowColor, float shadowBlurAmount, float shadowOffset) => CanvasDrawingSessionExtensions.DrawShadowCore(drawingSession, new Transform2DEffect { TransformMatrix = matrix, Source = new CropEffect { Source = previousImage, SourceRectangle = cropRect } }, shadowColor, shadowBlurAmount, shadowOffset);
/// <summary> /// Draw box and lines on bound,just like 🔳. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> The transformer. </param> /// <param name="matrix"> The matrix. </param> public static void DrawCrop(this CanvasDrawingSession drawingSession, Transformer transformer, Matrix3x2 matrix) => CanvasDrawingSessionExtensions.DrawCropCore(drawingSession, Vector2.Transform(transformer.LeftTop, matrix), Vector2.Transform(transformer.RightTop, matrix), Vector2.Transform(transformer.RightBottom, matrix), Vector2.Transform(transformer.LeftBottom, matrix), Windows.UI.Colors.DodgerBlue);
/// <summary> /// Draw box and lines on bound,just like 🔳. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> The transformer. </param> public static void DrawCrop(this CanvasDrawingSession drawingSession, Transformer transformer) => CanvasDrawingSessionExtensions.DrawCropCore(drawingSession, transformer.LeftTop, transformer.RightTop, transformer.RightBottom, transformer.LeftBottom, Windows.UI.Colors.DodgerBlue);
/// <summary> /// Draw a card. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="previousImage"> The previous image. </param> /// <param name="cropRect"> The image crop rectangle. </param> /// <param name="matrix"> The matrix. </param> /// <param name="shadowColor"> The shadow color. </param> /// <param name="shadowBlurAmount"> The shaodw blur amount. </param> /// <param name="shadowOffset"> The shadow offset. </param> public static void DrawCrad(this CanvasDrawingSession drawingSession, ICanvasImage previousImage, Rect cropRect, Matrix3x2 matrix, Windows.UI.Color shadowColor, float shadowBlurAmount = 4.0f, float shadowOffset = 5.0f) => CanvasDrawingSessionExtensions.DrawCradCore(drawingSession, previousImage, cropRect, matrix, shadowColor, shadowBlurAmount, shadowOffset);
/// <summary> /// Draw a Ruler. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="canvasTransformer"> The canvas-transformer. </param> public static void DrawRuler(this CanvasDrawingSession drawingSession, CanvasTransformer canvasTransformer) => CanvasDrawingSessionExtensions.DrawRulerCore(drawingSession, canvasTransformer, CanvasDrawingSessionExtensions.RulerWidth, CanvasDrawingSessionExtensions.RulerLine, CanvasDrawingSessionExtensions.RulerThickLine, CanvasDrawingSessionExtensions.RulerBackgroundColor, CanvasDrawingSessionExtensions.RulerColor, CanvasDrawingSessionExtensions.RulerLineColor, CanvasDrawingSessionExtensions.RulerThickLineColor, CanvasDrawingSessionExtensions.TextColor, CanvasDrawingSessionExtensions.TextFormat);
/// <summary> /// Draw lines on bound. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="transformer"> transformer </param> /// <param name="accentColor"> The accent color. </param> public static void DrawBound(this CanvasDrawingSession drawingSession, Transformer transformer, Windows.UI.Color accentColor) => CanvasDrawingSessionExtensions.DrawBoundCore(drawingSession, transformer.LeftTop, transformer.RightTop, transformer.RightBottom, transformer.LeftBottom, accentColor);
/// <summary> /// Draw a Ruler. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="canvasTransformer"> The canvas-transformer. </param> /// <param name="rulerWidth"> The width of the ruler. </param> /// <param name="rulerLine"> The distance between two lines. </param> /// <param name="rulerThickLine"> The distance between two thick lines. </param> /// <param name="rulerBackgroundColor"> The color of the ruler background color. </param> /// <param name="rulerColor"> The color of the ruler. </param> /// <param name="rulerLineColor"> The color of the ruler line. </param> /// <param name="rulerThickLineColor"> The color of the ruler thick line. </param> /// <param name="textColor"> The color of the text. </param> /// <param name="textFormat"> The format of the text. </param> public static void DrawRuler(this CanvasDrawingSession drawingSession, CanvasTransformer canvasTransformer, float rulerWidth, float rulerLine, float rulerThickLine, Windows.UI.Color rulerBackgroundColor, Windows.UI.Color rulerColor, Windows.UI.Color rulerLineColor, Windows.UI.Color rulerThickLineColor, Windows.UI.Color textColor, CanvasTextFormat textFormat) => CanvasDrawingSessionExtensions.DrawRulerCore(drawingSession, canvasTransformer, rulerWidth, rulerLine, rulerThickLine, rulerBackgroundColor, rulerColor, rulerLineColor, rulerThickLineColor, textColor, textFormat);
/// <summary> /// Draw a card. /// </summary> /// <param name="drawingSession"> The drawing-session. </param> /// <param name="previousImage"> previous image. </param> /// <param name="canvasTransformer"> The canvas-transformer. </param> /// <param name="shadowColor"> shadow color. </param> /// <param name="shadowBlurAmount"> shaodw blur amount. </param> /// <param name="shadowOffset"> shadow offset. </param> public static void DrawCard(this CanvasDrawingSession drawingSession, ICanvasImage previousImage, CanvasTransformer canvasTransformer, Windows.UI.Color shadowColor, float shadowBlurAmount = 4.0f, float shadowOffset = 5.0f) => CanvasDrawingSessionExtensions.DrawCradCore(drawingSession, previousImage, canvasTransformer, shadowColor, shadowBlurAmount, shadowOffset);