public static void TransformInverse(this PRIMITIVE2D dc, Span <POINT2> points) { if (dc is ITransformer2D xformer) { xformer.TransformInverse(points); } }
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)); }
/// <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); } }
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); }
public static Transforms.Canvas2DTransform CreateTransformed(PRIMITIVE2D target, POINT2 physicalSize, POINT2 virtualSize, XFORM2 xform) { return(Transforms.Canvas2DTransform.Create(target, physicalSize, virtualSize, xform)); }
public static POINT2 TransformInverse(this PRIMITIVE2D dc, POINT2 point) { return(dc is ITransformer2D xformer ? xformer._TransformInverse(point) : point); }
public static CANVAS2DEX CreateTransformed(PRIMITIVE2D t, POINT2 physicalSize, BRECT virtualBounds) { return(Transforms.Canvas2DTransform.Create(t, physicalSize, virtualBounds)); }