RoundRectangle.vb
- ''
- '' This code is part of Document Solutions for Imaging demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports System.Numerics
- Imports GrapeCity.Documents.Drawing
- Imports GrapeCity.Documents.Text
- Imports GrapeCity.Documents.Imaging
- Imports GCTEXT = GrapeCity.Documents.Text
- Imports GCDRAW = GrapeCity.Documents.Drawing
-
- '' This sample demonstrates how to draw round rectangles
- '' using dedicated DrawRoundRect/FillRoundRect methods.
- '' It also shows how the same result may be achieved with
- '' graphics paths.
- Public Class RoundRectangle
- Function GenerateImage(
- ByVal pixelSize As Size,
- ByVal dpi As Single,
- ByVal opaque As Boolean,
- Optional ByVal sampleParams As String() = Nothing) As GcBitmap
-
- Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, True, dpi, dpi)
- Dim Inch = dpi
- Using g = bmp.CreateGraphics(Color.RoyalBlue)
- Dim rc = Util.AddNote(
- "GcGraphics has dedicated methods to easily draw and fill rectangles with rounded corners. " +
- "This sample also shows how the same result may be achieved using graphics paths. " +
- "While they are not really needed for drawing round rectangles, graphics paths allow " +
- "to draw and fill arbitrary figures with complex geometries.",
- g)
-
- '' Rounded rectangle's radii:
- Dim rx = 36, ry = 24
-
- '' Using dedicated methods to draw And fill round rectangles:
- Dim rEasy = New RectangleF(rc.Left, rc.Bottom + Inch / 2, Inch * 2, Inch)
- g.FillRoundRect(rEasy, rx, ry, Color.PaleGreen)
- g.DrawRoundRect(rEasy, rx, ry, Color.Blue, 4)
- '' Add a label:
- Dim tf = New TextFormat() With
- {
- .Font = GCTEXT.Font.FromFile(IO.Path.Combine("Resources", "Fonts", "times.ttf")),
- .FontSize = Inch / 6
- }
- g.DrawString("The easy way.", tf, rEasy, TextAlignment.Center, ParagraphAlignment.Center, False)
-
- '' Using graphics path to achieve the same result:
- Dim rHard = rEasy
- rHard.Offset(0, rEasy.Height + Inch / 2)
- Dim path = MakeRoundRect(g, rHard, rx, ry)
- g.FillPath(path, Color.PaleVioletRed)
- g.DrawPath(path, Color.Purple, 4)
- '' Add a label:
- g.DrawString("The hard way.", tf, rHard, TextAlignment.Center, ParagraphAlignment.Center, False)
- End Using
- '' Done
- Return bmp
- End Function
-
- '' This method shows how to create a graphics path that may be used
- '' to fill Or draw arbitrary shapes on a GcGraphics.
- Private Function MakeRoundRect(ByVal g As GcGraphics, ByVal rc As RectangleF, ByVal rx As Single, ByVal ry As Single) As IPath
- Dim path = g.CreatePath()
- Dim sz = New SizeF(rx, ry)
- '' start from horizontal top left
- path.BeginFigure(New PointF(rc.Left + rx, rc.Top))
- path.AddLine(New PointF(rc.Right - rx, rc.Top))
- path.AddArc(New ArcSegment() With {.Point = New PointF(rc.Right, rc.Top + ry), .SweepDirection = SweepDirection.Clockwise, .Size = sz})
- path.AddLine(New PointF(rc.Right, rc.Bottom - ry))
- path.AddArc(New ArcSegment() With {.Point = New PointF(rc.Right - rx, rc.Bottom), .SweepDirection = SweepDirection.Clockwise, .Size = sz})
- path.AddLine(New PointF(rc.Left + rx, rc.Bottom))
- path.AddArc(New ArcSegment() With {.Point = New PointF(rc.Left, rc.Bottom - ry), .SweepDirection = SweepDirection.Clockwise, .Size = sz})
- path.AddLine(New PointF(rc.Left, rc.Top + ry))
- path.AddArc(New ArcSegment() With {.Point = New PointF(rc.Left + rx, rc.Top), .SweepDirection = SweepDirection.Clockwise, .Size = sz})
- path.EndFigure(FigureEnd.Closed)
- Return path
- End Function
- End Class
-