windowsforms-3438-controls-and-libraries-printing-exporting-examples-using-bricks-how-to-create-a-custom-brick-implementing-the-ibrick-interface.md
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.
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.
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);
}
}
}
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
When a class is implemented, you can use it in your code. The code below demonstrates the EllipseBrick drawn within a specified rectangle.
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();
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: