VintaSoft Imaging .NET SDK 12.4: Documentation for .NET developer
Vintasoft.Imaging.Annotation.UI Namespace / PolygonAnnotationView Class
Members Object Syntax Example Hierarchy Requirements SeeAlso
In This Topic
    PolygonAnnotationView Class
    In This Topic
    Determines how to display the annotation that displays a polygon and how user can interact with annotation.
    Object Model
    AnnotationPointCollection PointBasedAnnotationPointTransformer PointBasedAnnotationRectangularTransformer AnnotationData IInteractionController IInteractionController IInteractionController AnnotationPen AnnotationBrushBase AnnotationRenderer PolygonAnnotationView
    Syntax
    'Declaration
    
    Public Class PolygonAnnotationView
       Inherits LinesAnnotationView
    
    
    public class PolygonAnnotationView : LinesAnnotationView
    
    
    public __gc class PolygonAnnotationView : public LinesAnnotationView*
    
    
    public ref class PolygonAnnotationView : public LinesAnnotationView^
    
    
    Example

    Here is an example that shows how to create custom polygon annotation that draws additional text on annotation:

    
    #Region "TextPolygonAnnotationData"
    
    ''' <summary>
    ''' Contains information about the annotation that displays polygon with text.
    ''' </summary>
    ''' <remarks>
    ''' This class shows how to create annotation data and annotation view with custom property.
    ''' </remarks>
    Public Class TextPolygonAnnotationData
        Inherits Vintasoft.Imaging.Annotation.PolygonAnnotationData
    
        #Region "Constructors"
    
        ''' <summary>
        ''' Initializes a new instance of the <see cref="TextPolygonAnnotationData"/> class.
        ''' </summary>
        Public Sub New()
            MyBase.New()
            Text = ""
            Font = New Vintasoft.Imaging.Annotation.AnnotationFont("Arial", 20F)
            FontBrush = New Vintasoft.Imaging.Annotation.AnnotationSolidBrush(System.Drawing.Color.Black)
        End Sub
    
        ''' <summary>
        ''' Initializes a new instance of the <see cref="TextPolygonAnnotationData"/> class.
        ''' </summary>
        ''' <param name="info">The SerializationInfo to populate with data.</param>
        ''' <param name="context">The destination for this serialization.</param>
        Public Sub New(info As System.Runtime.Serialization.SerializationInfo, context As System.Runtime.Serialization.StreamingContext)
            MyBase.New(info, context)
            Text = DirectCast(info.GetValue("Text", GetType(String)), String)
            Font = DirectCast(info.GetValue("Font", GetType(Vintasoft.Imaging.Annotation.AnnotationFont)), Vintasoft.Imaging.Annotation.AnnotationFont)
            FontBrush = DirectCast(info.GetValue("FontBrush", GetType(Vintasoft.Imaging.Annotation.AnnotationBrushBase)), Vintasoft.Imaging.Annotation.AnnotationBrushBase)
        End Sub
    
        ''' <summary>
        ''' Initializes the <see cref="TextPolygonAnnotationData"/> class.
        ''' </summary>
        Shared Sub New()
            ' register AnnotationView for AnnotationData
            Vintasoft.Imaging.Annotation.UI.AnnotationViewFactory.RegisterViewForAnnotationData(GetType(TextPolygonAnnotationData), GetType(TextPolygonAnnotationView))
            Vintasoft.Imaging.Annotation.Rendering.AnnotationRendererFactory.RegisterRendererForAnnotationData(GetType(TextPolygonAnnotationData), GetType(TextPolygonAnnotationRenderer))
        End Sub
    
        #End Region
    
    
    
        #Region "Properties"
    
        Private _text As String
        ''' <summary>
        ''' Gets or sets the text of annotation.
        ''' </summary>
        <System.ComponentModel.Description("Text of annotation.")> _
        Public Property Text() As String
            Get
                Return _text
            End Get
            Set
                If _text <> value Then
                    Dim changingArgs As New Vintasoft.Imaging.ObjectPropertyChangingEventArgs("Text", Text, value)
                    ' if action is not canceled
                    If OnPropertyChanging(changingArgs) Then
                        _text = DirectCast(changingArgs.NewValue, String)
                        OnPropertyChanged(changingArgs.ToChangedEventArgs())
                    End If
                End If
            End Set
        End Property
    
        Private _font As Vintasoft.Imaging.Annotation.AnnotationFont
        ''' <summary>
        ''' Gets or sets the font of annotation.
        ''' </summary>
        <System.ComponentModel.Description("Text font of annotation.")> _
        Public Property Font() As Vintasoft.Imaging.Annotation.AnnotationFont
            Get
                Return _font
            End Get
            Set
                If value Is Nothing Then
                    Throw New System.ArgumentNullException()
                End If
    
                If _font Is Nothing OrElse Not _font.Equals(value) Then
                    Dim changingArgs As New Vintasoft.Imaging.ObjectPropertyChangingEventArgs("Font", Font, value)
                    ' if action is not canceled
                    If OnPropertyChanging(changingArgs) Then
                        _font = DirectCast(changingArgs.NewValue, Vintasoft.Imaging.Annotation.AnnotationFont)
                        OnPropertyChanged(changingArgs.ToChangedEventArgs())
                    End If
                End If
            End Set
        End Property
    
        Private _fontBrush As Vintasoft.Imaging.Annotation.AnnotationBrushBase
        ''' <summary>
        ''' Gets or sets the font brush of annotation.
        ''' </summary>
        <System.ComponentModel.Description("Font brush of annotation.")> _
        Public Property FontBrush() As Vintasoft.Imaging.Annotation.AnnotationBrushBase
            Get
                Return _fontBrush
            End Get
            Set
                If _fontBrush IsNot value Then
                    Dim changingArgs As New Vintasoft.Imaging.ObjectPropertyChangingEventArgs("FontBrush", FontBrush, value)
                    ' if action is not canceled
                    If OnPropertyChanging(changingArgs) Then
                        _fontBrush = DirectCast(changingArgs.NewValue, Vintasoft.Imaging.Annotation.AnnotationBrushBase)
                        OnPropertyChanged(changingArgs.ToChangedEventArgs())
                    End If
                End If
            End Set
        End Property
    
        #End Region
    
    
    
        #Region "Methods"
    
        ''' <summary>
        ''' Populates a SerializationInfo with the data needed to serialize the target object.
        ''' </summary>
        ''' <param name="info">The SerializationInfo to populate with data.</param>
        ''' <param name="context">The destination for this serialization.</param>
        Public Overrides Sub GetObjectData(info As System.Runtime.Serialization.SerializationInfo, context As System.Runtime.Serialization.StreamingContext)
            MyBase.GetObjectData(info, context)
    
            info.AddValue("Text", Text)
            info.AddValue("Font", Font)
            info.AddValue("FontBrush", FontBrush)
        End Sub
    
        ''' <summary>
        ''' Copies the state of the current object to the target object.
        ''' </summary>
        ''' <param name="target">Object to copy the state of the current object to.</param>
        Public Overrides Sub CopyTo(target As Vintasoft.Imaging.Annotation.AnnotationData)
            Dim typedTarget As TextPolygonAnnotationData = DirectCast(target, TextPolygonAnnotationData)
    
            MyBase.CopyTo(typedTarget)
    
            typedTarget.Text = Text
            typedTarget.Font = DirectCast(Font.Clone(), Vintasoft.Imaging.Annotation.AnnotationFont)
            typedTarget.FontBrush = DirectCast(FontBrush.Clone(), Vintasoft.Imaging.Annotation.AnnotationBrushBase)
        End Sub
    
        ''' <summary>
        ''' Creates a new object that is a copy of the current
        ''' <see cref="TextPolygonAnnotationData" /> instance.
        ''' </summary>
        ''' <returns>
        ''' A new object that is a copy of this
        ''' <see cref="TextPolygonAnnotationData" /> instance.
        ''' </returns>
        Public Overrides Function Clone() As Object
            Dim result As New TextPolygonAnnotationData()
            Me.CopyTo(result)
            Return result
        End Function
    
        #End Region
    
    End Class
    
    #End Region
    
    
    #Region "TextPolygonAnnotationRenderer"
    
    ''' <summary>
    ''' Determines how to render the <see cref="TextPolygonAnnotationData"/>.
    ''' </summary>
    Public Class TextPolygonAnnotationRenderer
        Inherits Vintasoft.Imaging.Annotation.Rendering.PolygonAnnotationRenderer
    
        #Region "Constructors"
    
        ''' <summary>
        ''' Initializes a new instance of the <see cref="TextPolygonAnnotationRenderer"/>.
        ''' </summary>
        ''' <param name="annotationData">Object that stores the annotation data.</param>
        Public Sub New(annotationData As TextPolygonAnnotationData)
            MyBase.New(annotationData)
        End Sub
    
        #End Region
    
    
        #Region "Methods"
    
        ''' <summary>
        ''' Renders the annotation on the <see cref="Vintasoft.Imaging.Drawing.DrawingEngine"/> in the
        ''' coordinate space of annotation.
        ''' </summary>
        ''' <param name="drawingEngine">The <see cref="Vintasoft.Imaging.Drawing.DrawingEngine"/> to render on.</param>
        ''' <param name="drawingSurface">The object that provides information about drawing surface.</param>
        Protected Overrides Sub RenderInContentSpace(drawingEngine As Vintasoft.Imaging.Drawing.DrawingEngine, drawingSurface As Vintasoft.Imaging.DrawingSurface)
            MyBase.RenderInContentSpace(drawingEngine, drawingSurface)
    
            Dim data__1 As TextPolygonAnnotationData = DirectCast(Data, TextPolygonAnnotationData)
    
            If data__1.Font Is Nothing OrElse data__1.FontBrush Is Nothing OrElse data__1.Text Is Nothing OrElse data__1.Text = "" Then
                Return
            End If
    
            ' create font brush
            Using fontBrush As Vintasoft.Imaging.Drawing.IDrawingBrush = Vintasoft.Imaging.Drawing.DrawingFactoryAnnotationsExtensions.CreateBrush(drawingEngine.DrawingFactory, data__1.FontBrush)
                If fontBrush Is Nothing Then
                    Return
                End If
    
                ' annotation size
                Dim width As Single = data__1.Size.Width
                Dim height As Single = data__1.Size.Height
    
                ' calculate text rectangle
                Dim textRectangle As System.Drawing.RectangleF = GetBoundingBox(data__1.Points)
    
                Using drawingEngine.CreateClipHolder()
                    Using drawingEngine.CreateTransformHolder()
                        ' set clip
                        drawingEngine.CombineClip(textRectangle, Vintasoft.Imaging.Drawing.RegionCombineMode.Intersect)
    
                        ' if annotation is mirrored horizontally
                        If data__1.HorizontalMirrored Then
                            ' change the world transformation of drawing engine
                            drawingEngine.MultiplyTransformPrepend(Vintasoft.Imaging.AffineMatrix.CreateScaling(-1, 1))
                        End If
                        ' if annotation is mirrored vertically
                        If data__1.VerticalMirrored Then
                            ' change the world transformation of drawing engine
                            drawingEngine.MultiplyTransformPrepend(Vintasoft.Imaging.AffineMatrix.CreateScaling(1, -1))
                        End If
    
                        ' create string format for text
                        Dim layoutProperties As New Vintasoft.Imaging.Drawing.TextLayoutProperties(Vintasoft.Imaging.AnchorType.Center)
    
                        ' create font for drawing text
                        Using drawingFont As Vintasoft.Imaging.Drawing.IDrawingFont = Vintasoft.Imaging.Drawing.DrawingFactoryAnnotationsExtensions.CreateFont(drawingEngine.DrawingFactory, data__1.Font, layoutProperties)
                            ' draw text
                            drawingEngine.DrawText(data__1.Text, drawingFont, fontBrush, textRectangle, layoutProperties)
                        End Using
                    End Using
                End Using
            End Using
        End Sub
    
    
        ''' <summary>
        ''' Returns the bounding box of specified polygon.
        ''' </summary>
        ''' <param name="points">The polygon points.</param>
        ''' <returns>Bounding box of polygon.</returns>
        Private Shared Function GetBoundingBox(points As System.Collections.Generic.IList(Of System.Drawing.PointF)) As System.Drawing.RectangleF
            If points.Count = 0 Then
                Return System.Drawing.RectangleF.Empty
            End If
            Dim x1 As Single, x2 As Single, y1 As Single, y2 As Single
            x1 = InlineAssignHelper(x2, points(0).X)
            y1 = InlineAssignHelper(y2, points(0).Y)
            For i As Integer = 1 To points.Count - 1
                Dim x As Single = points(i).X
                Dim y As Single = points(i).Y
                If x1 > x Then
                    x1 = x
                End If
                If x2 < x Then
                    x2 = x
                End If
                If y1 > y Then
                    y1 = y
                End If
                If y2 < y Then
                    y2 = y
                End If
            Next
            Return New System.Drawing.RectangleF(x1, y1, x2 - x1, y2 - y1)
        End Function
        Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
            target = value
            Return value
        End Function
    
        #End Region
    
    End Class
    
    #End Region
    
    
    #Region "TextPolygonAnnotationView"
    
    ''' <summary>
    ''' Determines how to display the annotation that displays polygon with text.
    ''' </summary>
    Public Class TextPolygonAnnotationView
        Inherits Vintasoft.Imaging.Annotation.UI.PolygonAnnotationView
    
        #Region "Constructors"
    
        ''' <summary>
        ''' Initializes a new instance of the <see cref="TextPolygonAnnotationView"/> class.
        ''' </summary>
        ''' <param name="annotationData">Object that stores the annotation data.</param>
        Public Sub New(annotationData As TextPolygonAnnotationData)
            MyBase.New(annotationData)
        End Sub
    
        #End Region
    
    
    
        #Region "Properties"
    
        ''' <summary>
        ''' Gets or sets the text of the annotation.
        ''' </summary>
        <System.ComponentModel.Description("Text of the annotation.")> _
        Public Property Text() As String
            Get
                Return TextAnnoData.Text
            End Get
            Set
                TextAnnoData.Text = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets or sets the <see cref="Font"/> of the annotation.
        ''' </summary>
        <System.ComponentModel.Description("Text font of the annotation.")> _
        Public Property Font() As Vintasoft.Imaging.Annotation.AnnotationFont
            Get
                Return TextAnnoData.Font
            End Get
            Set
                TextAnnoData.Font = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets or sets the font brush of the annotation.
        ''' </summary>
        <System.ComponentModel.Description("Font brush of the annotation.")> _
        Public Property FontBrush() As Vintasoft.Imaging.Annotation.AnnotationBrushBase
            Get
                Return TextAnnoData.FontBrush
            End Get
            Set
                TextAnnoData.FontBrush = value
            End Set
        End Property
    
        ''' <summary>
        ''' Gets typed annotation data value.
        ''' </summary>
        Private ReadOnly Property TextAnnoData() As TextPolygonAnnotationData
            Get
                Return DirectCast(Data, TextPolygonAnnotationData)
            End Get
        End Property
    
        #End Region
    
    
    
        #Region "Methods"
    
        ''' <summary>
        ''' Creates a new object that is a copy of the current
        ''' <see cref="Vintasoft.Imaging.Annotation.UI.TextAnnotationView"/> instance.
        ''' </summary>
        ''' <returns>A new object that is a copy of this
        ''' <see cref="Vintasoft.Imaging.Annotation.UI.TextAnnotationView"/> instance.</returns>
        Public Overrides Function Clone() As Object
            Return New TextPolygonAnnotationView(DirectCast(Data.Clone(), TextPolygonAnnotationData))
        End Function
    
        #End Region
    
    End Class
    
    #End Region
    
    
    
    
    
    #region TextPolygonAnnotationData
    
    /// <summary>
    /// Contains information about the annotation that displays polygon with text.
    /// </summary>
    /// <remarks>
    /// This class shows how to create annotation data and annotation view with custom property.
    /// </remarks>
    public class TextPolygonAnnotationData : Vintasoft.Imaging.Annotation.PolygonAnnotationData
    {
    
        #region Constructors
    
        /// <summary>
        /// Initializes a new instance of the <see cref="TextPolygonAnnotationData"/> class.
        /// </summary>
        public TextPolygonAnnotationData()
            : base()
        {
            Text = "";
            Font = new Vintasoft.Imaging.Annotation.AnnotationFont("Arial", 20f);
            FontBrush = new Vintasoft.Imaging.Annotation.AnnotationSolidBrush(
                System.Drawing.Color.Black);
        }
    
        /// <summary>
        /// Initializes a new instance of the <see cref="TextPolygonAnnotationData"/> class.
        /// </summary>
        /// <param name="info">The SerializationInfo to populate with data.</param>
        /// <param name="context">The destination for this serialization.</param>
        public TextPolygonAnnotationData(System.Runtime.Serialization.SerializationInfo info,
            System.Runtime.Serialization.StreamingContext context)
            : base(info, context)
        {
            Text = (string)info.GetValue("Text", typeof(string));
            Font = (Vintasoft.Imaging.Annotation.AnnotationFont)info.GetValue("Font",
                typeof(Vintasoft.Imaging.Annotation.AnnotationFont));
            FontBrush = (Vintasoft.Imaging.Annotation.AnnotationBrushBase)info.GetValue("FontBrush",
                typeof(Vintasoft.Imaging.Annotation.AnnotationBrushBase));
        }
    
        /// <summary>
        /// Initializes the <see cref="TextPolygonAnnotationData"/> class.
        /// </summary>
        static TextPolygonAnnotationData()
        {
            // register AnnotationView for AnnotationData
            Vintasoft.Imaging.Annotation.UI.AnnotationViewFactory.RegisterViewForAnnotationData(
                typeof(TextPolygonAnnotationData), typeof(TextPolygonAnnotationView));
            Vintasoft.Imaging.Annotation.Rendering.AnnotationRendererFactory.RegisterRendererForAnnotationData(
                typeof(TextPolygonAnnotationData), typeof(TextPolygonAnnotationRenderer));
        }
    
        #endregion
    
    
    
        #region Properties
    
        string _text;
        /// <summary>
        /// Gets or sets the text of annotation.
        /// </summary>
        [System.ComponentModel.Description("Text of annotation.")]
        public string Text
        {
            get
            {
                return _text;
            }
            set
            {
                if (_text != value)
                {
                    Vintasoft.Imaging.ObjectPropertyChangingEventArgs changingArgs =
                             new Vintasoft.Imaging.ObjectPropertyChangingEventArgs("Text", Text, value);
                    // if action is not canceled
                    if (OnPropertyChanging(changingArgs))
                    {
                        _text = (string)changingArgs.NewValue;
                        OnPropertyChanged(changingArgs.ToChangedEventArgs());
                    }
                }
            }
        }
    
        Vintasoft.Imaging.Annotation.AnnotationFont _font;
        /// <summary>
        /// Gets or sets the font of annotation.
        /// </summary>
        [System.ComponentModel.Description("Text font of annotation.")]
        public Vintasoft.Imaging.Annotation.AnnotationFont Font
        {
            get
            {
                return _font;
            }
            set
            {
                if (value == null)
                    throw new System.ArgumentNullException();
    
                if (_font == null || !_font.Equals(value))
                {
                    Vintasoft.Imaging.ObjectPropertyChangingEventArgs changingArgs =
                             new Vintasoft.Imaging.ObjectPropertyChangingEventArgs("Font", Font, value);
                    // if action is not canceled
                    if (OnPropertyChanging(changingArgs))
                    {
                        _font = (Vintasoft.Imaging.Annotation.AnnotationFont)changingArgs.NewValue;
                        OnPropertyChanged(changingArgs.ToChangedEventArgs());
                    }
                }
            }
        }
    
        Vintasoft.Imaging.Annotation.AnnotationBrushBase _fontBrush;
        /// <summary>
        /// Gets or sets the font brush of annotation.
        /// </summary>
        [System.ComponentModel.Description("Font brush of annotation.")]
        public Vintasoft.Imaging.Annotation.AnnotationBrushBase FontBrush
        {
            get
            {
                return _fontBrush;
            }
            set
            {
                if (_fontBrush != value)
                {
                    Vintasoft.Imaging.ObjectPropertyChangingEventArgs changingArgs =
                             new Vintasoft.Imaging.ObjectPropertyChangingEventArgs("FontBrush", FontBrush, value);
                    // if action is not canceled
                    if (OnPropertyChanging(changingArgs))
                    {
                        _fontBrush = (Vintasoft.Imaging.Annotation.AnnotationBrushBase)changingArgs.NewValue;
                        OnPropertyChanged(changingArgs.ToChangedEventArgs());
                    }
                }
            }
        }
    
        #endregion
    
    
    
        #region Methods
    
        /// <summary>
        /// Populates a SerializationInfo with the data needed to serialize the target object.
        /// </summary>
        /// <param name="info">The SerializationInfo to populate with data.</param>
        /// <param name="context">The destination for this serialization.</param>
        public override void GetObjectData(System.Runtime.Serialization.SerializationInfo info,
            System.Runtime.Serialization.StreamingContext context)
        {
            base.GetObjectData(info, context);
    
            info.AddValue("Text", Text);
            info.AddValue("Font", Font);
            info.AddValue("FontBrush", FontBrush);
        }
    
        /// <summary>
        /// Copies the state of the current object to the target object.
        /// </summary>
        /// <param name="target">Object to copy the state of the current object to.</param>
        public override void CopyTo(Vintasoft.Imaging.Annotation.AnnotationData target)
        {
            TextPolygonAnnotationData typedTarget = (TextPolygonAnnotationData)target;
    
            base.CopyTo(typedTarget);
    
            typedTarget.Text = Text;
            typedTarget.Font = (Vintasoft.Imaging.Annotation.AnnotationFont)Font.Clone();
            typedTarget.FontBrush = (Vintasoft.Imaging.Annotation.AnnotationBrushBase)FontBrush.Clone();
        }
    
        /// <summary>
        /// Creates a new object that is a copy of the current
        /// <see cref="TextPolygonAnnotationData" /> instance.
        /// </summary>
        /// <returns>
        /// A new object that is a copy of this
        /// <see cref="TextPolygonAnnotationData" /> instance.
        /// </returns>
        public override object Clone()
        {
            TextPolygonAnnotationData result = new TextPolygonAnnotationData();
            this.CopyTo(result);
            return result;
        }
    
        #endregion
    
    }
    
    #endregion
    
    
    #region TextPolygonAnnotationRenderer
    
    /// <summary>
    /// Determines how to render the <see cref="TextPolygonAnnotationData"/>.
    /// </summary>
    public class TextPolygonAnnotationRenderer : Vintasoft.Imaging.Annotation.Rendering.PolygonAnnotationRenderer
    {
    
        #region Constructors
    
        /// <summary>
        /// Initializes a new instance of the <see cref="TextPolygonAnnotationRenderer"/>.
        /// </summary>
        /// <param name="annotationData">Object that stores the annotation data.</param>
        public TextPolygonAnnotationRenderer(TextPolygonAnnotationData annotationData)
            : base(annotationData)
        {
        }
    
        #endregion
    
    
        #region Methods
    
        /// <summary>
        /// Renders the annotation on the <see cref="Vintasoft.Imaging.Drawing.DrawingEngine"/> in the
        /// coordinate space of annotation.
        /// </summary>
        /// <param name="drawingEngine">The <see cref="Vintasoft.Imaging.Drawing.DrawingEngine"/> to render on.</param>
        /// <param name="drawingSurface">The object that provides information about drawing surface.</param>
        protected override void RenderInContentSpace(Vintasoft.Imaging.Drawing.DrawingEngine drawingEngine, Vintasoft.Imaging.DrawingSurface drawingSurface)
        {
            base.RenderInContentSpace(drawingEngine, drawingSurface);
    
            TextPolygonAnnotationData data = (TextPolygonAnnotationData)Data;
    
            if (data.Font == null || data.FontBrush == null || data.Text == null || data.Text == "")
                return;
    
            // create font brush
            using (Vintasoft.Imaging.Drawing.IDrawingBrush fontBrush =
                Vintasoft.Imaging.Drawing.DrawingFactoryAnnotationsExtensions.CreateBrush(drawingEngine.DrawingFactory, data.FontBrush))
            {
                if (fontBrush == null)
                    return;
    
                // annotation size
                float width = data.Size.Width;
                float height = data.Size.Height;
    
                // calculate text rectangle
                System.Drawing.RectangleF textRectangle = GetBoundingBox(data.Points);
    
                using (drawingEngine.CreateClipHolder())
                {
                    using (drawingEngine.CreateTransformHolder())
                    {
                        // set clip
                        drawingEngine.CombineClip(textRectangle, Vintasoft.Imaging.Drawing.RegionCombineMode.Intersect);
    
                        // if annotation is mirrored horizontally
                        if (data.HorizontalMirrored)
                            // change the world transformation of drawing engine
                            drawingEngine.MultiplyTransformPrepend(Vintasoft.Imaging.AffineMatrix.CreateScaling(-1, 1));
                        // if annotation is mirrored vertically
                        if (data.VerticalMirrored)
                            // change the world transformation of drawing engine
                            drawingEngine.MultiplyTransformPrepend(Vintasoft.Imaging.AffineMatrix.CreateScaling(1, -1));
    
                        // create string format for text
                        Vintasoft.Imaging.Drawing.TextLayoutProperties layoutProperties =
                            new Vintasoft.Imaging.Drawing.TextLayoutProperties(Vintasoft.Imaging.AnchorType.Center);
    
                        // create font for drawing text
                        using (Vintasoft.Imaging.Drawing.IDrawingFont drawingFont =
                            Vintasoft.Imaging.Drawing.DrawingFactoryAnnotationsExtensions.CreateFont(drawingEngine.DrawingFactory, data.Font, layoutProperties))
                        {
                            // draw text
                            drawingEngine.DrawText(data.Text, drawingFont, fontBrush, textRectangle, layoutProperties);
                        }
                    }
                }
            }
        }
    
    
        /// <summary>
        /// Returns the bounding box of specified polygon.
        /// </summary>
        /// <param name="points">The polygon points.</param>
        /// <returns>Bounding box of polygon.</returns>
        private static System.Drawing.RectangleF GetBoundingBox(
            System.Collections.Generic.IList<System.Drawing.PointF> points)
        {
            if (points.Count == 0)
                return System.Drawing.RectangleF.Empty;
            float x1, x2, y1, y2;
            x1 = x2 = points[0].X;
            y1 = y2 = points[0].Y;
            for (int i = 1; i < points.Count; i++)
            {
                float x = points[i].X;
                float y = points[i].Y;
                if (x1 > x)
                    x1 = x;
                if (x2 < x)
                    x2 = x;
                if (y1 > y)
                    y1 = y;
                if (y2 < y)
                    y2 = y;
            }
            return new System.Drawing.RectangleF(x1, y1, x2 - x1, y2 - y1);
        }
    
        #endregion
    
    }
    
    #endregion
    
    
    #region TextPolygonAnnotationView
    
    /// <summary>
    /// Determines how to display the annotation that displays polygon with text.
    /// </summary>
    public class TextPolygonAnnotationView : Vintasoft.Imaging.Annotation.UI.PolygonAnnotationView
    {
    
        #region Constructors
    
        /// <summary>
        /// Initializes a new instance of the <see cref="TextPolygonAnnotationView"/> class.
        /// </summary>
        /// <param name="annotationData">Object that stores the annotation data.</param>
        public TextPolygonAnnotationView(TextPolygonAnnotationData annotationData)
            : base(annotationData)
        {
        }
    
        #endregion
    
    
    
        #region Properties
    
        /// <summary>
        /// Gets or sets the text of the annotation.
        /// </summary>
        [System.ComponentModel.Description("Text of the annotation.")]
        public string Text
        {
            get
            {
                return TextAnnoData.Text;
            }
            set
            {
                TextAnnoData.Text = value;
            }
        }
    
        /// <summary>
        /// Gets or sets the <see cref="Font"/> of the annotation.
        /// </summary>
        [System.ComponentModel.Description("Text font of the annotation.")]
        public Vintasoft.Imaging.Annotation.AnnotationFont Font
        {
            get
            {
                return TextAnnoData.Font;
            }
            set
            {
                TextAnnoData.Font = value;
            }
        }
    
        /// <summary>
        /// Gets or sets the font brush of the annotation.
        /// </summary>
        [System.ComponentModel.Description("Font brush of the annotation.")]
        public Vintasoft.Imaging.Annotation.AnnotationBrushBase FontBrush
        {
            get
            {
                return TextAnnoData.FontBrush;
            }
            set
            {
                TextAnnoData.FontBrush = value;
            }
        }
    
        /// <summary>
        /// Gets typed annotation data value.
        /// </summary>
        TextPolygonAnnotationData TextAnnoData
        {
            get
            {
                return (TextPolygonAnnotationData)Data;
            }
        }
    
        #endregion
    
    
    
        #region Methods
    
        /// <summary>
        /// Creates a new object that is a copy of the current
        /// <see cref="Vintasoft.Imaging.Annotation.UI.TextAnnotationView"/> instance.
        /// </summary>
        /// <returns>A new object that is a copy of this
        /// <see cref="Vintasoft.Imaging.Annotation.UI.TextAnnotationView"/> instance.</returns>
        public override object Clone()
        {
            return new TextPolygonAnnotationView((TextPolygonAnnotationData)(Data.Clone()));
        }
    
        #endregion
    
    }
    
    #endregion
    
    
    
    

    Inheritance Hierarchy

    System.Object
       Vintasoft.Imaging.Annotation.UI.AnnotationView
          Vintasoft.Imaging.Annotation.UI.LineAnnotationViewBase
             Vintasoft.Imaging.Annotation.UI.LinesAnnotationView
                Vintasoft.Imaging.Annotation.UI.PolygonAnnotationView

    Requirements

    Target Platforms: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

    See Also