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);
            }
        }
コード例 #2
0
        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);
コード例 #11
0
 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);
コード例 #14
0
 /// <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);
コード例 #18
0
 /// <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);