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