ShapeRenderer

ShapeRenderer class

Tillhandahåller metoder för att rendera en individShape ellerGroupShape till en raster- eller vektorbild eller till ett grafikobjekt.

För att lära dig mer, besökArbeta med former dokumentationsartikel.

public class ShapeRenderer : NodeRendererBase

Konstruktörer

namnBeskrivning
ShapeRenderer(ShapeBase)Initierar en ny instans av den här klassen.

Egenskaper

namnBeskrivning
BoundsInPoints { get; }Hämtar formens faktiska gränser i punkter.
OpaqueBoundsInPoints { get; }Hämtar formens ogenomskinliga gränser i punkter.
SizeInPoints { get; }Hämtar formens faktiska storlek i punkter.

Metoder

namnBeskrivning
GetBoundsInPixels(float, float)Beräknar formens gränser i pixlar för en angiven zoomfaktor och upplösning.
GetBoundsInPixels(float, float, float)Beräknar formens gränser i pixlar för en angiven zoomfaktor och upplösning.
GetOpaqueBoundsInPixels(float, float)Beräknar formens ogenomskinliga gränser i pixlar för en angiven zoomfaktor och upplösning.
GetOpaqueBoundsInPixels(float, float, float)Beräknar formens ogenomskinliga gränser i pixlar för en angiven zoomfaktor och upplösning.
GetSizeInPixels(float, float)Beräknar formens storlek i pixlar för en angiven zoomfaktor och upplösning.
GetSizeInPixels(float, float, float)Beräknar formens storlek i pixlar för en angiven zoomfaktor och upplösning.
RenderToScale(Graphics, float, float, float)Återger formen till enGraphics objekt till en specificerad skala.
RenderToSize(Graphics, float, float, float, float)Återger formen till enGraphics objekt till en angiven storlek.
Save(Stream, ImageSaveOptions)Renderar formen till en bild och sparar i en ström.
Save(Stream, SvgSaveOptions)Renderar formen till en SVG-bild och sparar i en dataström.
Save(string, ImageSaveOptions)Renderar formen till en bild och sparar den i en fil.
Save(string, SvgSaveOptions)Återger formen till en SVG-bild och sparar den i en fil.

Exempel

Visar hur man renderar en form med ett grafikobjekt och visar den med hjälp av ett Windows-formulär.

public void RenderShapesOnForm()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    ShapeForm shapeForm = new ShapeForm(new Size(1017, 840));

    // Nedan följer två sätt att använda klassen "ShapeRenderer" för att rendera en form till ett Graphics-objekt.
    // 1 - Skapa en form med ett diagram och rendera den till en specifik skala.
    Chart chart = builder.InsertChart(ChartType.Pie, 500, 400).Chart;
    chart.Series.Clear();
    chart.Series.Add("Desktop Browser Market Share (Oct. 2020)",
        new[] { "Google Chrome", "Apple Safari", "Mozilla Firefox", "Microsoft Edge", "Other" },
        new[] { 70.33, 8.87, 7.69, 5.83, 7.28 });

    Shape chartShape = (Shape)doc.GetChild(NodeType.Shape, 0, true);

    shapeForm.AddShapeToRenderToScale(chartShape, 0, 0, 1.5f);

    // 2 - Skapa en formgrupp och rendera den till en specifik storlek.
    GroupShape group = new GroupShape(doc);
    group.Bounds = new RectangleF(0, 0, 100, 100);
    group.CoordSize = new Size(500, 500);

    Shape subShape = new Shape(doc, ShapeType.Rectangle);
    subShape.Width = 500;
    subShape.Height = 500;
    subShape.Left = 0;
    subShape.Top = 0;
    subShape.FillColor = Color.RoyalBlue;
    group.AppendChild(subShape);

    subShape = new Shape(doc, ShapeType.Image);
    subShape.Width = 450;
    subShape.Height = 450;
    subShape.Left = 25;
    subShape.Top = 25;
    subShape.ImageData.SetImage(ImageDir + "Logo.jpg");
    group.AppendChild(subShape);

    builder.InsertNode(group);

    GroupShape groupShape = (GroupShape)doc.GetChild(NodeType.GroupShape, 0, true);
    shapeForm.AddShapeToRenderToSize(groupShape, 880, 680, 100, 100);

    shapeForm.ShowDialog();
}

/// <summary>
/// Renderar och visar en lista med former.
/// </summary>
private class ShapeForm : Form
{
    public ShapeForm(Size size)
    {
        Size = size;
        mShapesToRender = new List<KeyValuePair<ShapeBase, float[]>>();
    }

    public void AddShapeToRenderToScale(ShapeBase shape, float x, float y, float scale)
    {
        mShapesToRender.Add(new KeyValuePair<ShapeBase, float[]>(shape, new[] {x, y, scale}));
    }

    public void AddShapeToRenderToSize(ShapeBase shape, float x, float y, float width, float height)
    {
        mShapesToRender.Add(new KeyValuePair<ShapeBase, float[]>(shape, new[] {x, y, width, height}));
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        foreach (KeyValuePair<ShapeBase, float[]> renderingArgs in mShapesToRender)
            if (renderingArgs.Value.Length == 3)
                RenderShapeToScale(renderingArgs.Key, renderingArgs.Value[0], renderingArgs.Value[1],
                    renderingArgs.Value[2]);
            else if (renderingArgs.Value.Length == 4)
                RenderShapeToSize(renderingArgs.Key, renderingArgs.Value[0], renderingArgs.Value[1],
                    renderingArgs.Value[2], renderingArgs.Value[3]);
    }

    private void RenderShapeToScale(ShapeBase shape, float x, float y, float scale)
    {
        ShapeRenderer renderer = new ShapeRenderer(shape);
        using (Graphics formGraphics = CreateGraphics())
        {
            renderer.RenderToScale(formGraphics, x, y, scale);
        }
    }

    private void RenderShapeToSize(ShapeBase shape, float x, float y, float width, float height)
    {
        ShapeRenderer renderer = new ShapeRenderer(shape);
        using (Graphics formGraphics = CreateGraphics())
        {
            renderer.RenderToSize(formGraphics, x, y, width, height);
        }
    }

    private readonly List<KeyValuePair<ShapeBase, float[]>> mShapesToRender;
}

Se även