Back to Devexpress

How to: Create a Custom Brick Inherited From the Brick Class

windowsforms-3438-controls-and-libraries-printing-exporting-examples-using-bricks-how-to-create-a-custom-brick-implementing-the-ibrick-interface.md

latest5.4 KB
Original Source

How to: Create a Custom Brick Inherited From the Brick Class

  • Oct 26, 2021
  • 3 minutes to read

The XtraPrinting Library allows you to create custom bricks and use them in your document. This example demonstrates how to create a Brick class descendant.

Create the Brick Class Descendant

This example demonstrates how to create a custom Brick class descendant. The custom EllipseBrick class draws an elliptical figure filled with a linear color gradient.

View Example

csharp
using System.Collections;
using System.Drawing;
using System.Drawing.Drawing2D;
using DevExpress.Drawing;
using DevExpress.XtraPrinting;
using DevExpress.XtraPrinting.BrickExporters;
// ...
    [BrickExporter(typeof(EllipseBrickExporter))]
    public class EllipseBrick : Brick {

        // Set gradient colors for inner and outer ellipse regions.
        public Color InnerColor = Color.Transparent;
        public Color OuterColor = Color.Peru;

        public EllipseBrick() {
        }

        public EllipseBrick(Color InnerColor, Color OuterColor) {
            this.InnerColor = InnerColor;
            this.OuterColor = OuterColor;
        }
    }

    public class EllipseBrickExporter : BrickExporter {
        EllipseBrick EllipseBrick { get { return (EllipseBrick)Brick; } }
        // Fills an ellipse with a linear color gradient.
        public override void Draw(IGraphics gr, RectangleF rect) {
            using(DXLinearGradientBrush brush = new DXLinearGradientBrush(rect, EllipseBrick.OuterColor, EllipseBrick.InnerColor)) {
                DXColorBlend colorBlend = new DXColorBlend();
                colorBlend.Positions = new float[] { 0.0f, 0.5f, 1.0f };
                colorBlend.Colors = new Color[] { EllipseBrick.OuterColor, EllipseBrick.InnerColor, EllipseBrick.OuterColor };
                brush.InterpolationColors = colorBlend;
                gr.FillEllipse(brush, rect);
            }
        }
    }
vb
Imports System.Collections
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports DevExpress.Drawing
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraPrinting.BrickExporters
' ...
    <BrickExporter(GetType(EllipseBrickExporter))> _
    Public Class EllipseBrick
        Inherits Brick

        ' Set gradient colors for inner and outer ellipse regions.
        Public InnerColor As Color = Color.Transparent
        Public OuterColor As Color = Color.Peru

        Public Sub New()
        End Sub

        Public Sub New(ByVal InnerColor As Color, ByVal OuterColor As Color)
            Me.InnerColor = InnerColor
            Me.OuterColor = OuterColor
        End Sub
    End Class

    Public Class EllipseBrickExporter
        Inherits BrickExporter
        Private ReadOnly Property EllipseBrick() As EllipseBrick
            Get
                Return TryCast(Brick, EllipseBrick)
            End Get
        End Property
        ' Fills an ellipse with a linear color gradient.
        Public Overloads Overrides Sub Draw(ByVal gr As IGraphics, ByVal rect As RectangleF)
            Using brush As New DXLinearGradientBrush(rect, EllipseBrick.OuterColor, EllipseBrick.InnerColor)
                Dim colorBlend As New DXColorBlend()
                colorBlend.Positions = New Single() {0.0F, 0.5F, 1.0F}
                colorBlend.Colors = New Color() {EllipseBrick.OuterColor, EllipseBrick.InnerColor,
                    EllipseBrick.OuterColor}
                brush.InterpolationColors = colorBlend
                gr.FillEllipse(brush, rect)
            End Using
        End Sub
    End Class

Use the EllipseBrick

When a class is implemented, you can use it in your code. The code below demonstrates the EllipseBrick drawn within a specified rectangle.

View Example

csharp
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using DevExpress.XtraPrinting;
// ...
Brick brick = new EllipseBrick(Color.LightGreen, Color.Blue);
printingSystem1.Begin();
IBrickGraphics graph = printingSystem1.Graph;
// Specify the page area to draw a brick.
printingSystem1.Graph.Modifier = BrickModifier.Detail;
// Add the brick with specified dimensions to the document.
graph.DrawBrick(brick, new RectangleF(0, 0, 150, 100));
printingSystem1.End();
printingSystem1.PreviewFormEx.Show();
vb
Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports DevExpress.XtraPrinting
' ...
Dim brick As Brick = New EllipseBrick(Color.LightGreen, Color.Blue)
printingSystem1.Begin()
Dim graph As IBrickGraphics = printingSystem1.Graph
' Specify the page area to draw a brick.
printingSystem1.Graph.Modifier = BrickModifier.Detail
' Add the brick with specified dimensions to the document.
graph.DrawBrick(brick, New RectangleF(0, 0, 150, 100))
printingSystem1.End()
printingSystem1.PreviewFormEx.Show()

The EllipseBrick is displayed in the image below: