Beispiel #1
0
 public static void TransformInverse(this PRIMITIVE2D dc, Span <POINT2> points)
 {
     if (dc is ITransformer2D xformer)
     {
         xformer.TransformInverse(points);
     }
 }
Beispiel #2
0
        public static BRECT GetBackendViewportBoundsOrDefault(this PRIMITIVE2D dc)
        {
            if (TryGetBackendViewportBounds(dc, out var viewport))
            {
                return(viewport);
            }

            throw new ArgumentException($"Backend must implement interface {nameof(IRenderTargetInfo)}", nameof(dc));
        }
Beispiel #3
0
        /// <summary>
        /// Tries to get the quadrant used by the render target.
        /// </summary>
        /// <param name="dc">The rendering target.</param>
        /// <param name="quadrant">The quadrant used by the render target</param>
        /// <returns>true if it succeeded to retrieve the quadrant.</returns>
        public static bool TryGetQuadrant(this PRIMITIVE2D dc, out Quadrant quadrant)
        {
            if (dc is ITransformer2D xform)
            {
                Span <POINT2> points = stackalloc POINT2[1];
                points[0] = VECTOR2.One;
                xform.TransformNormalsForward(points);

                var dir = points[0].XY;

                dir *= new VECTOR2(1, -1); // We reverse the vertical axis so it makes sense from screen POV.

                quadrant = _GetQuadrant(dir);

                return(true);
            }
            else
            {
                quadrant = default;
                return(false);
            }
        }
Beispiel #4
0
        public static bool TryGetBackendViewportBounds(this PRIMITIVE2D dc, out BRECT bounds)
        {
            bounds = BRECT.Empty;

            if (!(dc is IServiceProvider srv))
            {
                return(false);
            }
            if (!(srv.GetService(typeof(IRenderTargetInfo)) is IRenderTargetInfo vinfo))
            {
                return(false);
            }
            if (!(dc is ITransformer2D xform))
            {
                return(false);
            }

            var w = vinfo.PixelsWidth;
            var h = vinfo.PixelsHeight;

            Span <POINT2> points = stackalloc POINT2[4];

            points[0] = (0, 0);
            points[1] = (w, 0);
            points[2] = (0, h);
            points[3] = (w, h);
            xform.TransformInverse(points); // from screen space to dc space.

            bool first = true;

            foreach (var p in points)
            {
                var other = new BRECT(p.X, p.Y, 0, 0);
                bounds = first ? other : BRECT.Union(bounds, other);
                first  = false;
            }

            return(true);
        }
Beispiel #5
0
 public static Transforms.Canvas2DTransform CreateTransformed(PRIMITIVE2D target, POINT2 physicalSize, POINT2 virtualSize, XFORM2 xform)
 {
     return(Transforms.Canvas2DTransform.Create(target, physicalSize, virtualSize, xform));
 }
Beispiel #6
0
 public static POINT2 TransformInverse(this PRIMITIVE2D dc, POINT2 point)
 {
     return(dc is ITransformer2D xformer
         ? xformer._TransformInverse(point)
         : point);
 }
Beispiel #7
0
 public static CANVAS2DEX CreateTransformed(PRIMITIVE2D t, POINT2 physicalSize, BRECT virtualBounds)
 {
     return(Transforms.Canvas2DTransform.Create(t, physicalSize, virtualBounds));
 }