January 27, 2021
Hot Topics:

Visualizing LINQ Sequences with GDI+

  • By Paul Kimmel
  • Send Email »
  • More Articles »

Listing 4: The DrawSequenceState class that contains the sequence and the call using the RectangleManager to represent that sequence.

Imports System.Drawing

Public Class DrawSequenceState
   Inherits MyStatePattern

   ''' <summary>
   ''' Initializes a new instance of the DrawSequenceState class.
   ''' </summary>
   Public Sub New(ByVal pen As Pen)
   End Sub

   Public Overrides Sub Draw(ByVal Graphics As _
      System.Drawing.Graphics, _
      ByVal Font As System.Drawing.Font)
      Dim i = New Integer() {1, 2, 3, 4, 5, 6, 7, 8, 9}
      Graphics.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias

      Dim r As Rectangle = New Rectangle(10, 50, 200, 50)
      Graphics.DrawRectangle(MyPen, r)
      Dim result = From o In i Where o Mod 2 = 0 Select o

      Dim instance As RectangleManager = _
         New RectangleManager(r, result.Count, 1)

      For x = 0 To result.Count - 1

         Dim f As Rectangle = instance.GetSubRect(x, 0)
         Graphics.FillEllipse(Brushes.Lavender, f.X, f.Y, _
            f.Width, f.Height)
         Graphics.DrawEllipse(Pens.Black, f.X, f.Y, _
            f.Width, f.Height)
         Dim t As Rectangle = instance.GetSubRect(x, 0)

         Dim s As SizeF = Graphics.MeasureString( _
            result.ElementAt(x).ToString(), Font)
         Dim textRect As Rectangle = Rectangles.CenterRect(s, t)
         Graphics.DrawString(result.ElementAt(x).ToString(), _
            Font, _
            Brushes.Blue, textRect.X, textRect.Y)

   End Sub
End Class

The LINQ query is shown in Listing 4 on the line Dim result = From o In i Where o Mod 2 = 0 Select 0. This query selects the even numbered integers as shown in Figure 1.

Figure 1: The results of the LINQ query returning even numbers in a set of integers 0 through 8.

The base class for the state pattern MyStatePattern is shown in Listing 5.

Listing 5: The abstract base class for the state pattern.

Public MustInherit Class MyStatePattern

   Private FMyPen As Pen
   Public Property MyPen() As Pen
         Return FMyPen
      End Get
      Set(ByVal Value As Pen)
         FMyPen = Value
      End Set
   End Property

   Public Sub New(ByVal pen As Pen)
      FMyPen = pen
   End Sub

   Public MustOverride Sub Draw(ByVal Graphics As Graphics, _
      ByVal Font As Font)

End Class


Everything is Rectangles in a 2D rectilinear world. In this article, I demonstrated how you can draw specific rectangular sub-regions as rectangles or ellipses (or really as anything that is constrained by a rectangular region). That was followed by an application of this technique that visualizes LINQ queries. I hope you find the code useful.

About the Author

Paul Kimmel is the VB Today columnist for www.codeguru.com and has written several books on object-oriented programming and .NET. Check out his upcoming book LINQ Unleashed for C# due in Spring 2008. You may contact him for technology questions at pkimmel@softconcepts.com.

If you are interested in joining or sponsoring a .NET Users Group, check out www.glugnet.org. Glugnet opened a users group branch in Flint, Michigan in August 2007. If you are interested in attending, check out the www.glugnet.org web site for updates.

Copyright © 2008 by Paul T. Kimmel. All Rights Reserved.

Page 3 of 3

This article was originally published on February 4, 2008

Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

Thanks for your registration, follow us on our social networks to keep up-to-date